文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.180529
中文引用格式: 柳萌,安軍社,史毅龍,等. SpaceWire高速總線節(jié)點控制器的設計與實現(xiàn)[J].電子技術應用,2018,44(11):1-4.
英文引用格式: Liu Meng,An Junshe,Shi Yilong,et al. The design and implementation of SpaceWire high speed bus interface controller[J]. Application of Electronic Technique,2018,44(11):1-4.
0 引言
隨著空間探測領域的逐漸擴大,航天器上的載荷設備對系統(tǒng)的數(shù)據通信需求也相應的越來越高。同時星載電子設備產生和待處理的數(shù)據總量迅猛增長,對數(shù)據總線處理能力提出更高的要求。數(shù)據總線的速度、可靠性和靈活性直接影響航天器的整體性能。歐洲航天局(European Space Agency,ESA)為滿足航空航天應用提出了一種專門用于空間高速數(shù)據傳輸的點對點串行總線標準SpaceWire[1]。它具有數(shù)據率高,便于擴展,方便重復利用的特點,有利于航天器、衛(wèi)星快速整合總裝,這為航天器和衛(wèi)星載荷的設計帶來極大方便,應用前景廣闊。
本文研究該標準下節(jié)點控制器IP[2]的實現(xiàn)方法,通過FPGA進行原型驗證,最后在專用集成芯片龍芯1E300中實現(xiàn)了該節(jié)點控制器,實際測試信號傳輸率可達200 Mb/s~260 Mb/s。
1 系統(tǒng)總體設計
1.1 系統(tǒng)結構框圖
SpaceWire是一種點對點全雙工串行數(shù)據傳輸協(xié)議,節(jié)點控制器在協(xié)議中主要負責解決數(shù)據包點對點傳輸問題。本文設計的SpaceWire IP核使用FIFO作為用戶數(shù)據接口,并將數(shù)據發(fā)送和接收緩存包括在內。系統(tǒng)主要功能包括節(jié)點配置、鏈路狀態(tài)控制和數(shù)據收發(fā)功能,總體設計如圖1所示。
1.2 系統(tǒng)時鐘域劃分
本設計必須使用到不同的時鐘,系統(tǒng)時鐘域的劃分[3]是設計的重點之一。如圖2所示,clk_sys是本設計中的頻率最高的時鐘域,同步系統(tǒng)控制器,并為系統(tǒng)提供定時功能。clk_main是來自上位機的時鐘,同步發(fā)送緩存的寫入和接收緩存的讀取操作。clk_tx指的是發(fā)送時鐘域,是同步發(fā)送端對發(fā)送數(shù)據的相關操作。clk_rx指的是恢復時鐘域,是由鏈路數(shù)據進行時鐘數(shù)據恢復所得到的時鐘,用來同步接收端對恢復數(shù)據的相關操作。根據SpaceWire協(xié)議,接收端在接收到首位數(shù)據以前還沒有產生恢復時鐘,而鏈路斷開檢測在首位數(shù)據接收時就已經開始,這里采用系統(tǒng)時鐘進行鏈路斷開檢測。
2 系統(tǒng)原理實現(xiàn)
2.1 系統(tǒng)狀態(tài)機
SpaceWire進行數(shù)據通信前要求兩端的節(jié)點先通過NULL字符和FCT字符交換完成鏈路建立過程,鏈路在運行過程中可能由于鏈路主動或被動斷開、數(shù)據傳輸錯誤等原因導致鏈路狀態(tài)變化。鏈路運行的狀態(tài)機如圖3所示,圖中實線表示鏈路初始化的過程,鏈路正確初始化后處于Run狀態(tài)。在應用中,鏈路兩端節(jié)點都可以被配置為主動或者被動模式[4],有如下條件:
Link_Enabled=(Not[Link_Disabled])And
([LinkStart] Or ([AutoStart] And gotNull))
2.2 發(fā)送端
鏈路在初始化過程中,可能發(fā)送NULL字符和FCT字符,鏈路從初始化到運行的各個狀態(tài)轉換中,需要不間斷發(fā)送字符。SpaceWire協(xié)議規(guī)定的鏈路初始化速率為10 Mb/s,而運行速率可以是2 Mb/s~400 Mb/s,故要求發(fā)送時鐘速率可切換,發(fā)送端發(fā)送的比特流在數(shù)據發(fā)送頻率變化的時候保持不間斷,一種可用的時鐘切換[5]電路圖如圖4所示。
DFF_2和DFF_4保證clk_a和clk_b時鐘選擇輸出的變化都只發(fā)生在下降沿處,同時可以使得輸出變化為某一時鐘時,另一時鐘的輸出已經關閉,該方法可避免時鐘切換時候產生毛刺。DFF_1和DFF_3分別加到and_1和and_3后面,防止sel、DFF_2輸出和DFF_4輸出的信號同時變化可能造成的DFF_2和DFF_4輸出的亞穩(wěn)態(tài)。
2.3 接收端
SpaceWire鏈路層采用DS編碼方案,選通信號伴隨著串行數(shù)據信號發(fā)送,接收端簡單地通過異或數(shù)據和選通信號可以提取出時鐘信號。該方法將接收偏差(skew)裕量從傳統(tǒng)的時鐘、數(shù)據方式的0.5比特時間提高到接近1比特時間,具有更好的抖動(jitter)容差。但由于接收數(shù)據的時鐘是由接收的DS編碼信號異或得到的,造成接收器的數(shù)據時鐘信號不同步,恢復困難。
為實現(xiàn)數(shù)據時鐘恢復,一種方法是基于Xilinx FPGA,選擇采用可編程絕對延遲單元iodelay實現(xiàn)對DS異或后的信號執(zhí)行指定的延遲,可以正確地恢復出時鐘,根據圖5分析DS信號的特點[6]后,得到一種更通用的方法:
DS編碼如式(1)和式(2)定義:
發(fā)送端的邏輯公式為:
式中D為數(shù)據信號,S為選通信號,CLK為數(shù)據時鐘。根據DS信號變化的特點可以發(fā)現(xiàn)DS信號的每次轉換有且只變換其中的1位信號,通過2次變換后則DS數(shù)據都將發(fā)生翻轉,右圖能夠更清楚說明這一現(xiàn)象。
從圖5可知,當且僅當時鐘信號為上升沿時,data和strobe信號發(fā)生從同相至反相的跳變,如圖5右半部分中右象限;同理,當且僅當時鐘信號為下降沿時,data和strobe信號發(fā)生從反相至同相的跳變,如圖5右半部分中左象限。根據上述分析結論設計的DS數(shù)據時鐘恢復電路[7]如圖6所示。
圖6中電路由異或門、鎖存器、觸發(fā)器構成,當時鐘信號為上升沿時,同相狀態(tài)的data數(shù)據將保持不變,當時鐘信號為下降沿時,反相狀態(tài)的data數(shù)據將保持不變,從而保證了后級觸發(fā)器時鐘跳變時,觸發(fā)器數(shù)據信號的建立時間。觸發(fā)器輸出的2位數(shù)據即是同步接收的數(shù)據信號,輸出至后級接收模塊進行處理。
2.4 數(shù)據緩存
根據SpaceWire字符層定義,協(xié)議鏈路可能傳送5種字符和2種控制碼,其格式如圖7所示。
由于最長的時間控制碼字符包含14比特位,本設計中發(fā)送方采用2組7比特位數(shù)據緩存完成數(shù)據格式的轉換,采用DDR數(shù)據傳輸方式在時鐘的上升沿和下降沿分別發(fā)送其中的一組緩存數(shù)據,如圖8所示。在上次數(shù)據發(fā)送完成前的第二個時鐘周期計算校驗位,前一個時鐘周期向該發(fā)送緩存填充待發(fā)送字符后進行數(shù)據發(fā)送。接收方采用5對移位寄存器組,首先判定接收字符的起始位置,在進行奇偶校驗的同時,判別接收的字符類型,并保存至接收FIFO中。
圖7和圖8中標識為“p”或下標為“p”的比特位表示該位為字符的校驗位,標識為“c”或下標為“c”的比特位表示該位為字符的控制位,箭頭表示字符中比特位在鏈路上傳輸?shù)南群箜樞颉?/p>
2.5 流量控制機制
為避免因主機接收緩存溢出而導致的數(shù)據丟失,鏈路的一端(B端)向另一端(A端)發(fā)送FCT表示B端已經準備好,可以再接收一定量的數(shù)據。
2.5.1 信譽量計數(shù)值
發(fā)送端要維護一個授權它可發(fā)送的N-Char數(shù)量的信譽計數(shù)值(Credit Count),具體如下。
ErrorReset狀態(tài)下,信譽計數(shù)值為零,鏈路接口每接收到一個FCT,信譽量計數(shù)值就加8[8],每發(fā)送一個N-Char,信譽計數(shù)值就減1。信譽計數(shù)值為零時將停止發(fā)送N-Char,但可繼續(xù)發(fā)送L-Char,直到它再次接收到FCT使信譽計數(shù)增長到8。
信譽量計數(shù)最大值根據接收緩存的大小設置(1個FCT對應接收緩存中8個N-Char的存儲空間),不超過56(即7個FCT)。當信譽計數(shù)值達到或已經接近其最大值(即距最大值小于8)時又接收到一個FCT,那么信譽計數(shù)值不會再增長,同時會通過標志報信譽額度錯誤。
2.5.2 未償付計數(shù)值
鏈路接口要維護一個它預期接收但未償付的N-Char數(shù)量的計數(shù)值(Outstanding Count),即它通過發(fā)送FCT請求要發(fā)送的數(shù)量,具體如下。
復位時,初始未償付計數(shù)值為0,鏈路出錯時,未償付計數(shù)值被保存并在下次重啟時加載為初始值,每發(fā)送完一個FCT,未償付計數(shù)值就加8,每接收到一個N-Char,未償付計數(shù)值就減1。未償付計數(shù)值最大為56(即7個FCT)。除非未償付計數(shù)器有余量多計8個未償付N-Char,同時接收緩存有容納這8個N-Char的空間,否則發(fā)送器不能發(fā)送FCT。
3 測試與驗證
本系統(tǒng)FPGA選用Xilinx公司的Virtex 4系列 xc4vsx55作為主控芯片,使用Verilog語言編程[9]進行邏輯設計和驗證,在FPGA上同時例化兩個節(jié)點控制器,通過讀寫配置寄存器控制SpaceWire節(jié)點收發(fā)數(shù)據。從仿真結果可見,節(jié)點控制器實現(xiàn)了協(xié)議規(guī)定的鏈路初始化和數(shù)據傳輸功能,控制字符和數(shù)據在鏈路上的傳輸正確。
在專用集成芯片龍芯1E300中實現(xiàn)了該控制器,搭建測試環(huán)境,采用StarDundee公司的標準測試設備SpaceWire鏈路分析儀,與節(jié)點控制器芯片相互傳輸數(shù)據,驗證了數(shù)據傳輸過程中的同步性和準確性。鏈路分析儀測試結果如圖9所示,表明ASIC設計的節(jié)點控制器信號傳輸速率可達200 Mb/s,數(shù)據傳輸正常,滿足協(xié)議規(guī)定的功能。
4 結束語
SpaceWire作為航天領域新興的高速總線標準之一,具有數(shù)據率高、接口簡單、擴展方便等諸多優(yōu)點。本文提出的一種SpaceWire節(jié)點控制器實現(xiàn)方法解決了設計中多時鐘域劃分、數(shù)據時鐘恢復、時鐘切換和流量控制方面的難點。該設計方法經FPGA仿真驗證正確,在專用集成芯片中成功實現(xiàn),該節(jié)點控制器的研發(fā)設計具有較強的工程實用性。
參考文獻
[1] ECSS,ECSS-E-ST-50-12C.SpaceWire-links,nodes,routers and networks[S].Noordwijk,The Netherlands:ESA-ESTEC Requirements & Standards Division,2003.
[2] JULIUSSON D.The swift codec development[C].Space-Wire-2013 Proceedings of the 5th International SpaceWire Conference.Gothenburg,Sweden:Space Technology Centre,University of Dundee,2013:316-318.
[3] 唐萍,李慧軍.SpaceWire Codec接收端FPGA時序設計[J/OL].微計算機信息,2009,25(2):178-179,198.
[4] CHRIS MCCLEMENTS,STEVE PARKES. SpaceWire standard:low speed signalling rates[C].SpaceWire-2008 Proceedings of the 2nd International SpaceWire Conference.Nara,Japan:Space Technology Centre,University of Dundee,2008:41-44.
[5] 魏家明.Verilog編程藝術[M].北京:電子工業(yè)出版社,2014.
[6] NOMACHI M,ISHII S,KURODA Y,et al. Race condition free SpaceWire decoder for FPGA[C].SpaceWire-2010 Proceedings of the 3rd International SpaceWire Conference.St.Petersburg,Russia:Space Technology Centre,University of Dundee,2010:173-175.
[7] 閆夢婷,安軍社,龔泉銘.基于RMAP機制的SpaceWire星載高速總線設計與實現(xiàn)[J].電子技術應用,2016,42(1):108-110,114.
[8] 趙云富,吳一帆,孫強,等.SpaceWire總線的流量控制機制研究[J/OL].微電子學與計算機,2016,33(1):1-5.
[9] 夏宇聞.Verilog數(shù)字系統(tǒng)設計(第4版)[M].北京:北京航空航天大學出版社,2017.
作者信息:
柳 萌1,2,安軍社2,史毅龍1,2,江源源2,姜文奇3
(1.中國科學院大學,北京100190;2.國家空間科學中心 復雜航天系統(tǒng)綜合電子與信息技術實驗室,北京100190;
3.龍芯中科技術有限公司,北京100095)