SpaceWire Codec接收端FPGA時序設計
發布時間:2010-3-22 16:54
發布者:我芯依舊
引言 SpacewiTe是歐空局2003年提出的一種高速的、點對點、全雙工的串行總線網絡,面向空間應用。它以IEEE 1355—1995和LVDS標準為基礎,提供了一種通用接口標準以簡化和規范不同設備之間的互連,對解決目前星上數據處理系統的總線帶寬不足有重要作用。而且,隨著FPGA容量增大和功耗降低,以及內部軟核的廣泛應用,使用FPGA開發數字電路,可以縮短設計時間、減少PCB面積、提高系統的可靠性,FPGA已成為解決系統級設計的重要選擇方案之一。本文在Actel的集成開發環境Libem下編寫了HDL代碼,利用內部集成仿真工具Mod—elSim對設計進行了時序仿真。 1 SpaceWire Codec接收端概述 SpaceWire標準餌CSS—E一50—12A)包括鏈路,節點和交換機三方面的內容。SpaceWire采用線路交換形式,節點是指傳輸包的流出設備或者流向設備,鏈路是指數據包傳輸的路徑。 SpaceWire是總線數據網絡結構,包括6層協議:物理層,信號層,字符層,交換層,信息包層和網絡層。SpaceWire Codec實現的是信號層,字符層和交換層的相關內容。 SpaceWire物理層電纜采用九針微型D連接器.由四對雙絞線組成,傳輸四對差分信號。 SpaceWire信號層用LVDS差分信號傳輸,抑制了共模噪聲,保證了低電磁干擾。采用DS(data-strobe)編碼實現嵌入式時鐘總線傳輸,Ds編碼用data信號表示實際傳輸的數據,strobe信號隨D信號變化而編碼,原則是在任一時鐘周期Ds信號只有一個發生變化,這樣DS信號異或就可得到接收端的時鐘。如圖1: ![]() SpaceWire字符層定義了兩種類型的字符:四個控制字符和數據字符,采用奇校驗方式。 串行比特流各個字符之間沒有分隔符,每個字符以奇偶檢驗位開始,第二位是ctrl—flag位,即區分數據字符和控制字符的標志,后面是不同的數據字符和控制字符。串行的比特流以包的形式傳輸,包以控制字符EOP標志結尾。 SpaceWire交換層定義了鏈路的初始化和狀態機的運轉,實現鏈路的擁塞控制,檢測鏈路的斷開等。 SpaceWire Codec由發送端,接收端和控制器組成,控制器根據接收端收到的不同數據字符控制狀態機的運行,協調發送端和接收端的工作。 其中接收端實現時鐘恢復,檢測DS信號,判斷并處理Data數據,進行奇偶校驗,把數據字符送到fifo中,實現鏈路的擁塞控制,檢測鏈路的斷開狀況等。這些功能的實現使用到不同的時鐘,設計時需要解決多時鐘域信號傳輸的同步問題。 在本設計中。SpaceWire Codec接收端按照功能不同劃分為以下幾個模塊: ![]() 圖2接收端模塊劃分 上圖中的asyrst_n由epu復位信號和控制器的復位信號做組合邏輯得到。設計時用cpu配置鏈路狀態,控制FPGA運行。數據字符經過6fo送到epu存儲區中。 2 時鐘域劃分 上圖中,虛線表示了不同的時鐘域。 用恢復的時鐘clk0進行Ds信號的檢測和處理.在clk0時鐘域內實現的是同步檢測和設計。由于DS信號不能通過自身恢復得到的時鐘去檢測DS鏈路的斷開.因此需要采用FPGA的pU模塊倍頻得到的高頻時鐘gclk 來檢測鏈路的斷開狀_re況。在本設計中,擁塞控制要和發送端配合工作,發送端使用的是本地時鐘gclk,因此鏈路擁塞控制模塊也要用本地時鐘gclk來控制。用cpu時鐘clk_c讀走fifo中數據,送到cpu存儲區中。 3 復位信號處理 接收端模塊的復位信號由cpu給出,鏈路狀態機運行到復位狀態也要對接收端進行復位。由于復位信號扇出很大,且要在不同的時鐘域起作用.因此對復位信號的處理相當重要。 在接收端中,DS信號到來之前,DS信號檢測和Data數據一處理模塊的寄存器必須有確定的狀態,這兩個模塊復位時clk0還沒有出現,因此采用了不需要時鐘控制的異步復位。 對復位信號而言,復位信號的釋放和時鐘沿之間也存在時間約束關系,如同觸發器的D輸入端必須滿足建立和保持時間一樣,復位信號相對時鐘也必須滿足recovery time/removaltime。如圖3所示,recovery time指復位信號無效電平相對時鐘沿到來前的穩定時間,removal time指復位信號無效電平相對時鐘沿到來后的穩定時間。 ![]() 圖3復位信號的recovery/removal time 4 DS信號的檢測 如圖4示,恢復的clkO時鐘是D信號頻率的1/2,用clk0檢測DS信號,必須用elk0的上沿和下沿實現,如下圖所示: ![]() 圖4 DS信號的檢測 clk0是DS組合邏輯得到的門控時鐘,且clk0的扇出很大,上沿和下沿都要用到,布局布線時將它放在全局時鐘bu雎r上,保證了clkO有最小的抖動和偏移。 5 data數據處理 SpaceWire總線定義的串行數據的最大特點是各個不同的數據之間沒有分割字符。處理數據時不僅要對本次數據格式進行正確判斷和校驗,并且要根據判讀和檢驗結果指出下一個data起始位,否則下一個數據的判斷將會出現錯誤。 設計中采取了串行移位寄存器的方法,設置了5個兩位的寄存器。在同—個cIkO周期內能看到串行數據線上的10位串行數據,根據不同數據位進行判讀和奇偶校驗。正確判讀后,根據不同的data數據長度.分別用不同的ready信號指示下—個data的起始位,進而進行下一個數據格式的處理。 這些信號都是clkO時鐘域的同步信號,且移位寄存器間沒有長路徑延時,這樣可以保證數據處理模塊的穩定運行。 6 多時鐘設計 接收端不同的時鐘域產生的信號是異步信號,信號傳輸時需要同步到不同的時鐘域。數據信號通過fifo傳輸,控制信號在標志位同步模塊中實現同步到gclk時鐘域。 在鏈路被動啟動時,接收端收到NULL信號后,給出異got—NULL標志,使link_enabh信號有效,鏈路由ready狀態進入started狀態,因此gotNULL信號電平有效。gotNULL信號由clkO時鐘域的DS數據處理模塊給出,需要同步到FPGA的本地時鐘域。電平同步通常用兩個D觸發器構成同步器,第一級觸發器在采樣輸入信號時可能進入亞穩態,后面的觸發器獲得前一個觸發器輸出時,前一個觸發器已退出了亞穩態,并且輸出已穩定.極大地減小了亞穩態的發生。 其他的標志位信號,如gotDATA、gotFCT、gotEOP、gotEEP等都是脈沖有效,這些信號的同步是在電平同步的基礎上做組合邏輯實現的,如圖5所示: ![]() 圖5電平信號gotDATA的同步 在信號同步中,第二級寄存器的輸出是穩定可用的,把第二級的輸出再延遲一拍,對gotDATA_2和gotDATA_3寄存器的輸出做組合邏輯,實現了一個gclk周期的有效電平。在時序允許的情況下,打一拍輸出,實現了脈沖有效信號的同步。 鏈路檢測模塊在gclk_re時鐘域實現,根據協議要求,當離上一次DS信號出現850m后沒有Ds數據出現,則認為鏈路斷開。該模塊給出的鏈路斷開標志link_dis相對gclk時鐘,是快時鐘域信號,為了便于信號同步,link_dis標志輸出電平而非脈沖。 結束語 本文介紹了SpaeeWire Codec接收端的時序設計,給出了各個不同模塊的時鐘域劃分,門控時鐘和復位信號的有效處理,以及對串行數據的檢測和判讀,多時鐘域信號的同步等實現方法。 本文作者創新點:對多時鐘域復位信號采用了對應時鐘域的異步復位同步釋放方法;對串行總線數據判讀采用了串行移位寄存器的方法,便于數據的正確識別。對嵌入式時鐘總線傳輸的接收端設計有一定的參考意義。 作者:曹海源 來源:《微計算機信息》2009年第1-2期 |
網友評論