孟妍,李琳,文月
(石家莊科技工程職業學院,河北石家莊,050000)
SpaceWire是一種全雙工、點對點、串行、高速(2Mb/s~400Mb/s)的網絡協議標準。歐空局于2003年將它納入標準。該協議可以用來靈活組建網絡。由于總線在異常響應、故障保護與恢復、確定時間以及錯誤檢測方面做了相應增強,因此相比于其它的總線具有可靠簡單的優點。它使得設計集成星上系統變得簡單,可以進行低誤碼率、高速傳輸載荷數據以及控制信息。隨著SpaceWire應用領域的不斷擴大和深入,各種基于SpaceWire基礎協議的設備不斷出現,這些設備在國外航空領域已經得到廣泛應用。隨著我國航天航空事業的發展,基于SpaceWire總線方面的設備也在不斷研發和提升。在設備聯調過程中,調試總線協議這一塊一直是一件復雜困難的事情。迫切需要一套總線協議測試設備來協助調試定位問題。為了保證測試設備的正常工作,就需要一臺模擬源設備對測試設備輸送各種測試數據,用來分析測試設備是否正常工作。本文旨在設計一套基于Python的模擬源設備來完成對測試設備的測試,從而保證總線互聯設備的正常工作。
本文設計的模擬源設備主要用到圖1中對該測試設備的測試上。
被測設備A和被測設備B為基于SpaceWire總線標準的通信設備,被測設備A和被測設備B在開發聯調階段,總線之間的通信會出現各種bug。為了在出現總線異常時,可以分析原因幫助聯調,需要一套測試設備來實時抓取總線協議進行分析和定位。本系統對測試設備的需求如下:
(1)測試設備可同時監測2路SpaceWire鏈路,鏈路速率最高400Mbps。每路SpaceWire鏈路包含4對LVDS,每2對組合一條數據通道(一對是Data信號一對Strobe信號);
(2)符合SpaceWire信號標準基礎部分(物理層、信號層、字符層);

圖1 設備結構圖
(3)SpW監測卡采用PCIe×8接口,通過對每個獨立字符加一個時間戳來實時監測鏈路通信情況,時戳精度2ns;
(4)可監測鏈路上的各種數據和狀態:DS解碼解析出傳輸時鐘、解析出字符(數據和控制字符等)、無連接錯誤、斷開錯誤、超時錯誤(超過850ns)、奇校驗錯誤、信用(Credit)錯誤、Escape順序錯誤等;并將錯誤狀態附加在對應的字符,方便上位機軟件讀取顯示。
(5)基本操作:啟動接收、停止接收、重啟設備、打開/關閉SpW通道;
(6)通過PCIe上傳所有信息到主機;
(7)實時統計信息(字符個數、包個數、控制字符個數、Null個數、奇偶校驗錯誤、信用錯誤、Escape順序錯誤、超時錯誤等錯誤個數)通過PCIe上傳到上位機;可當前清零;
那么測試設備也需要調試,如何來保證測試設備的可靠性,在用測試設備分析發現問題的時候,可以保證是總線設備A和B之間總線通信發生了問題,而不是測試設備本身存在bug。這就需要一臺模擬源設備,可以人為設計基于SpaceWire協議的各種協議以及正常和錯誤狀態,來充分驗證測試設備的可靠性,從而保證測試設備的正常工作。
模擬源設備需要滿足測試設備的要求,因此,模擬源設備要求如下:
(1)符合SpaceWire信號標準基礎部分(物理層、信號層、字符層),速率最高400Mbps;
(2)SpaceWire握手建立連接、流量控制;
(3)能模擬硬件鏈路錯誤(超過850ns無字符錯誤即斷開錯誤、奇偶校驗錯誤、信用(Credit)錯誤、Escape順序錯誤)等;
(4)基本操作:啟動發送、停止發送、重啟設備、設置每條鏈路的線上速率等;
(5)數據操作:可編輯SpaceWire專用字符格式(FCT、NULL等)、可編輯要發送數據的格式(隨機數、遞增、遞減、選擇文件等);
(6)可滿負荷發送數據;
(7)每個端口的第一路和第二路的關系聯動:能按照FCT對應8個字節發送(也可設置多或少的關系);
(8)支持RMAP包協議;
RMAP全稱為遠程存儲器訪問協議。為了實現使用SpaceWire網絡遠程配置終端設備(路由器、節點等)的寄存器、獲取數據信息和實現傳輸控制,同時還可以監測設備的工作狀態。依照協議規范,RMAP定義了三種數據操作類型,分別為寫操作、讀操作和讀改寫操作。RMAP寫操作指發起寫操作的事物端可以將數據寫到目標存儲區,寫操作還可以細分為無寫前校驗有應答、寫前校驗有應答、寫前校驗無應答和無寫前校驗無應答四種類型。RMAP讀操作指網絡中其他可讀的節點可以被事物發起端讀到,或者可以以郵箱以及寄存器的存儲映射。RMAP讀改寫操作指事物發起端可以先將目標存儲區的數據進行讀出,然后進行修改以后再寫回目標存儲區。
硬件系統采用Xilinx Kintex7開發板和FMC LVDS子板組成。邏輯架構包括組幀部分、緩存部分和接口部分三部分。
組幀部分:基于SpaceWire協議發送各種測試序列以及模擬各種錯誤,支持RMAP包的發送。具體如下:
(1)握手:接口輸出置零,然后發10組FCT+NULL字符。
(2)發送幀序列。發送數據格式為1FCT+8DATA+1FCT+8DATA……。僅發送1次。
(3)產生無字符錯誤:發送幀序列1次,然后不發送任何字符,時間持續860ns,靜默19.2μs,然后重新握手(4組FCT+NULL字符)。
(4)產生奇偶校驗錯誤:發送幀序列,僅1次,然后發送第三幀與第一幀相同,在最后一個字符時改成錯誤的校驗,(沒有EOP結尾),再靜默19.2μs,然后重新握手(5組FCT+NULL字符)。
(5)產生信用(Credit)錯誤:發送幀序列,僅1次,然后發送第三幀與第一幀相同,在最后8個data少發一個FCT,(沒有EOP結尾),再靜默19.2μs,然后重新握手(6組FCT+NULL字符)。
(6)產生Escape錯誤-1:發送幀序列,然后發送timecode(時間為0、1、2……遞增數),當時間碼為11時,產生該錯誤,(時間碼不繼續發送新值),再靜默19.2μs,然后重新握手(7組FCT+NULL字符)。
(7)產生Escape錯誤-2:發送幀序列,然后發送5個NULL,在發送第6個NULL時,產生該錯誤,不繼續再發送正確NULL,靜默19.2μs,然后重新握手(8組FCT+NULL字符)。
(8)產生EEP錯誤:發送幀序列,然后重新握手(9組FCT+NULL字符)。
(9)RMAP數據包。包括寫操作,讀操作和讀改寫三部分數據,可以任意組織數據序列。
(10)跳轉到1重新執行。
緩存部分:作為連接組幀和接口兩部分的緩存。
接口部分:對數據添加校驗以及實現Data-Strobe編碼。
傳統設計方案為全部采用邏輯來實現,為了滿足測試設備的各種測試要求,組幀部分是最復雜的也是需要頻繁修改的,然而修改邏輯是一件費時費力而且復雜的工作,因此,根據系統特點,本文引入Python來對組幀部分數據進行預處理。將要發送的數據、FCT以及EOP等進行解析,將解析完的整體數據序列放到FPGA ROM中。FPGA只需要地址從0累加讀取ROM數據依次進行發送即可,如果需求有改動,只需要用Python將處理好序列重新放到FPGA ROM中,這樣邏輯代碼就不需要修改了,每次只需要用Python修改發送序列即可,系統方案如圖2所示。

圖2 系統方案
Python方案相對于傳統方案優點如下:
(1)降低開發難度。Verilog語言屬于硬件描述語言。編程實現的是硬件電路比普通的軟件編程要復雜的多。而Python是近些年火起來的一門語言。它具有簡單、易學、免費開源等優點。因此選用Python來解析數據可以大大降低難度。
(2)易于維護。Verilog語言語法比較單一,開發的系統易讀性很差,不利于維護。而Python語言簡潔、易懂,而且有大量的開源庫可以使用。所以比較容易維護。
(3)提高開發效率。Verilog語言開發系統相當于電路設計比起軟件編程要復雜的多。使用Python開發可以將復雜的硬件電路設計轉到軟件編程,可以降低難度,提升效率。
我們將要發送的序列通過Python進行預處理,將數據插入FCT,同時進行bit拆分,添加校驗位,輸出數據文件導入FPGA ROM中,進行綜合編譯。為了驗證模擬源設備,我們將模擬源代碼和標準接收代碼搭建了一個仿真平臺,仿真平臺通過modelsim進行仿真,圖3為仿真結果,畫圈部分可以看出模擬源模擬的無字符錯誤、奇偶校驗錯誤、escape錯誤和信用錯誤。
本文首先介紹了SpaceWire總線協議和應用,引出了模擬源系統。然后介紹了模擬源系統的組成結構,分析了相對于傳統設計思路引入Python對發送序列進行預處理所帶來的優勢。最后進行了仿真分析,充分驗證了可行性。

圖3 仿真時序圖
該系統還有不足之處,就是Python處理完的數據全部存到了ROM里面,因此能發多少數據受限于FPGA中memory的容量。如果要發送長的序列可能會導致memory資源不夠用。因此還可以對系統結構進行改進,硬件部分增加PCIe接口,要發送的序列可以通過PCIe發送到FPGA,然后再通過SpaceWire接口發送出去。這樣無論發送多長的序列都可以滿足。