任 強,姚遠程,秦明偉
(1.西南科技大學信息工程學院,四川 綿陽 621010;2.特殊環境機器人技術四川省重點實驗室,四川 綿陽 621010)
隨著視覺測量技術的發展,高速工業相機以其高幀率和高分辨率,在工業生產中的應用越來越廣,因此產生了大量的圖像數據?,F場可編程門陣列(field programmable gate array,FPGA)作為一項越來越成熟的技術,以其并行性以及靈活性,被廣泛應用于圖像采集、傳輸以及處理[1-2]。在大型視覺測量和圖像處理系統中,常常需要多個FPGA協同工作,所以FPGA之間的圖像數據傳輸成為視覺測量和圖像處理系統發展的難點和瓶頸[3-4]。Xilinx目前提供了4種不同速率的高速串行收發器[5-7]。
針對在片間傳輸高速圖像數據和幀控制信號的問題,研發了一種高吞吐率、低錯誤率、高抗干擾能力、低I/O資源占用率的片間圖像數據傳輸解決方案。該解決方案可廣泛應用于視覺測量系統和圖像處理系統。
高速吉比特串行(GTH)收發器是吉比特收發器中的一種,是FPGA中高度可配置以及高度集成的可編程邏輯資源。GTH收發器具有很高的可擴展性,可支持PCI-e、10GBASE-R、Aurora等多種協議[8]。GTH收發器支持500 Mbit/s~11.3 Gbit/s的線速率,支持8B/10B、64B/66B、64B/67B等多種線路編碼,支持時鐘矯正以及通道綁定等多種特性。Virtex-7 GTH收發器的TX發送端和RX接收端功能獨立,且均由物理媒介適配層(physical media attachment,PMA)和物理編碼子層(physical coding sublayer,PCS)組成。PMA內部集成了高速串并轉換、預加重、接收均衡、時鐘發生器及時鐘恢復等功能電路。PCS內部集成了8B/10B編解碼、彈性緩沖區、通道綁定和時鐘修正等專用電路模塊[5]。
Aurora協議是由Xilinx公司提出的、開放的、免費的、輕量級的可配置數據鏈路層協議,主要用于在多個高速串行通道之間進行點對點傳輸,具有高速數據傳輸和簡單易用的特點[9]。
Aurora協議可為私有上層協議或標準上層協議提供透明接口的串行互聯協議,允許任何數據分組通過Aurora協議封裝,并在芯片間、電路板間,甚至機箱之間傳輸。采用Aurora協議傳輸數據時,用戶數據在一個Aurora通道上傳輸,跨過通道通信的設備成為通道對。Aurora通道包含一個或多個Aurora鏈路,每個Aurora鏈路是一個全雙工或單工的串行數據連接,稱為“弄”。如果使用的是GTH收發器,這個“弄”可實現500 Mbit/s~11.3 Gbit/s的數據傳輸,最多可連接16個“弄”[5]。
Aurora通道具有如下特性。
①數據以幀的形式在通道中傳輸。
②幀和控制信息共享通道,控制信息包括流控信息、時鐘補償序列和空閑信息。
③高度可自定義的幀長度和幀格式。
④Aurora協議中的幀不必全部連續,可以被流控信息和空閑信息打斷。
⑤支持8B/10B編碼和64B/66B編碼。
CXP圖像傳輸協議在本文中是指128 bit數據位寬的圖像傳輸協議,其中包括了時鐘信號、128 bit的圖像數據信號、傳輸有效指示信號以及8 bit的幀控制信號。CXP協議信號定義如表1所示。

表1 CXP協議信號定義
片間圖像傳輸模塊名稱為CXP_Transiver,模塊內部集成了Xilinx提供的Aurora core。該模塊的特性如下。
①實現透明全雙工傳輸。
②支持最大吞吐率為32 Gbit/s,平均吞吐率為20 Gbit/s。
③實現鏈路的8B/10B編碼。
④可配置的鏈路線速率,單鏈路速率最高可達6.25 Gbit/s。
⑤用戶接口時鐘最大可支持250 MHz。
⑥可移植性強,適用于多種收發器。
⑦可支持圖像數據位寬為32~128 bit。
CXP_ transceiver模塊結構如圖1所示。

圖1 CXP_ transceiver模塊結構框圖
模塊分為兩層,分別是介質無關層(media independent interface,MII)和物理層(physical layer,PHY)[5]。
介質無關層將CXP協議信號轉換為AXIS協議信號。介質無關層不考慮任何底層數據的傳輸方式問題,底層可以采用任何物理介質進行數據傳輸。
物理層為AXIS協議提供透明數據通路。物理層不考慮任何上層的數據內容問題,僅采用高速串行接口為AXIS協議提供透明數據通路。
兩層組合共同完成了CXP協議的透明數據通路。兩層均采用模塊化設計,使用標準接口。
物理層功能由Aurora協議完成。Aurora協議由Xilinx公司提供的Aurora 8B/10B core實現。Aurora 8B/10B core可以自動地實例化最多16個GTH收發器通道、提供8B/10B的鏈路編碼、支持單工和全雙工的工作方式、支持16 bit和32 bit的循環冗余校驗并且可以在任意時刻暫停數據流傳輸。此外,Aurora 8B/10B core具有較低的資源消耗。
Aurora core主要參數配置如表2所示。

表2 Aurora core主要參數配置
Aurora 8B/10B core的主要功能模塊如下。
①Lane Logic。每個GTP、GTX或者GTH收發器都被Lane Logic模塊的實例化所驅動,每個收發器都會實例化一個Lane Logic模塊。該模塊處理控制字符的編碼和解碼以及錯誤校驗。
②Global Logic。Global Logic模塊完成了通道綁定和相位矯正。工作期間,該模塊將產生Aurora所需的隨機空閑字符,并監控所有Lane Logic模塊的錯誤。
③RX User Interface。AXI4-Stream RX用戶端口將數據從高速收發器通道搬移到用戶接口,并實現流量控制。
④TX User Interface。AXI4-Stream TX用戶接口將數據從用戶接口搬移到高速收發器通道,并實現流量控制。此外,該模塊還控制周期性的時鐘補償序列的傳輸。
介質無關層結構如圖2所示。

圖2 介質無關層結構圖
CXP協議包括了128 bit數據以及8 bit控制。為了便于物理層傳輸,介質無關層需要將CXP協議信號封裝為128 bit的AXIS協議。在理想狀態下,CXP協議能夠滿速率運行,即128 bit數據持續有效。在這個情況下,在同樣頻率的時鐘下操作,無法將控制信號并入128 bit數據流。因此,介質無關層內部運行在比CLK_tx與CLK_rx更高頻率的CLK_trans上。各時鐘域間的信號傳輸以異步先進先出(first in first out,FIFO)進行隔離。
介質無關層內部的CXP協議編碼模塊(CXP_Encoding)及CXP協議譯碼模塊(CXP_Decoding)分別完成將CXP協議編碼為AXIS協議信號和將AXIS協議解碼為CXP協議。當CXP協議中的控制信號為低電平時,輸入的CXP協議數據直接轉換為AXIS協議數據。當CXP協議中有控制信號為高電平時,1個時鐘周期的CXP協議信號轉換為2個時鐘周期的AXIS協議數據。AXIS協議數據信號的第一個時鐘周期為控制信令,包含了CXP當前的控制信號,與用于識別控制信號的標記CMD_TAG,第二個時鐘周期的AXIS協議數據為CXP協議數據。
4.3.1 CXP邊界FIFO
CXP 邊界FIFO用于跨時鐘域傳輸CXP協議信號,在Xilinx IP Native FIFO上進行了簡單的重封裝,以適應CXP協議。CXP-FIFO模塊電路圖如圖3所示。

圖3 CXP-FIFO模塊電路圖
CXP協議的圖像數據信號和幀控制信號并行作為數據送入FIFO,讀取時從FIFO中并行取出。CXP-FIFO的Ready與Valid信號與CXP協議中的信號一致,可以直接連接至符合CXP協議的模塊。
4.3.2 CXP協議編碼電路
CXP協議編碼電路主要分為兩個部分,即DataTransform與ControlUnit。
CXP Encoding模塊電路如圖4所示。

圖4 CXP Encoding模塊電路
DataTransform主要完成將輸入數據轉換為輸出數據,在內部形成了以下三種數據。
①CXP協議中的圖像數據。
②低64位與CXP協議中的輸入數據的低64位相同,高64位為CMD_TAG-1。
③低8位為CXP的8 bit控制信號,第9位為是否轉義的指示信號,第10~64位為0,高64位為CMD_TAG。
DataTransform以Trans_meaning信號與cxp_event信號為指示,選擇其中一種數據。
Trans_meaning高電平有效,用于判斷當前CXP輸入數據的高64位是否與預設的CMD_TAG一致。若與CMD_TAG一致,為避免接收端誤將該數據誤譯為控制信號,需要進行轉義,將高64位減1,即CMD_TAG-1,即輸出數據類型(2)。Cxp_evnent高電平有效,指示了當前CXP輸入是否有控制信號為高電平。當有控制信號輸入時,Encoding模塊需要發出控制信號,即輸出數據類型(3)。在其他情況下,將會輸出數據類型(1)。
DataTransform中,Mapping的映射關系見上文提到的模塊數據結構設計。Trans_meaning信號由Trans_Mean_Monitor模塊產生。該模塊是一個64 bit組合邏輯比較器。當輸入的CXP協議信號中數據信號的高64位與CMD_TAG一致時,則輸出高電平,否則輸出低電平。
Control_Unit負責Encoding的時序控制,Control_Unit在CXP輸入控制信號中有高電平時,阻斷數據從CXP到AXIS的傳輸。當CXP輸入控制信號都為低電平時,允許CXP與AXIS直接握手,直接將CXP數據傳輸至AXIS。
Event_Monitor是一個多輸入或門,當sol、sop、eol和eop有信號為高時,輸出高電平,否則輸出低電平。Cmd_operation_done_n復位時為高電平,當有控制信號為高時,Event_Monitor與Cmd_operation_done_n都為高電平,則cxp_event為1。Cxp_event取反后將rx_data_ready置0,阻斷了CXP協議信號的傳輸。當檢測到本次控制幀傳輸完成后,Cmd_operation_done_n被置1,撤銷cxp_event。CXP協議端繼續向AXIS協議端傳輸數據。
4.3.3 CXP協議解碼電路
CXP協議解碼電路主要分為兩個部分,即DataTransform與ControlUnit。
CXP Decording模塊電路如圖5所示。

圖5 CXP Decoding模塊電路圖
CXP Decoding模塊主要分為Data Transform和Control Unit兩個部分。
DataTransform依據cxp_event信號進行工作。當cxp_event信號為高時,BUF讀取AXIS data的低9位信號;當cxp_event為低時,BUF讀取0。BUF是一組受cxp_event控制的觸發器。
BUF的低8位輸出至Tx_control,最高位是轉義指示信號trans_meaning,控制MUX選擇是傳輸原數據還是將被轉義的原數據逆轉義。
Control Unit用于檢測AXIS協議端傳輸來的CMD控制信令。當有控制信令時,cxp_event為高,控制BUF讀取控制信號,將Tx_data_valid拉低阻斷CXP信號輸出,將AXIS_data_ready信號拉高,允許讀取該控制信令。當檢測當前控制信令傳輸完成后,將cxp_event拉低,撤銷此次控制信令處理。
Control Unit中的Event Monitor是一個64位組合邏輯比較器,當AXIS_data的高64位與CMD_TAG相等時,輸出高電平。
在單個FPGA上仿真的片間圖像傳輸系統結構如圖6所示。FPGA1和FPGA2為對稱的架構,在FPGA1和FPGA2之間是模擬的物理鏈路。FPGA1和FPGA2都有數據源CXP source、數據采集模塊CXP Endpoint以及數據對比模塊CXP Verifier。

圖6 片間圖像傳輸系統結構圖
CXP Source用于產生符合CXP協議的信號,模擬了利用CXP Transceiver進行傳輸的Tx系統。為了保證仿真的科學性,CXP Source輸出的數據是由4個32 bit序列發生器生成的偽隨機數。產生的圖像的行場大小均為可配置參數。產生的valid信號有2種模式,由rand_valid信號控制。當rand_valid信號為0時,輸出的valid信號恒為1;當rand_valid信號為1時,輸出的valid信號為服從均勻分布的隨機數。該模塊還有一個trans_mean_valid控制信號。當該信號為1時,CXP Source會周期性地產生需要被轉義的數據。該周期長度可參數化配置。
CXP Endpoint持續不斷地讀取CXP信號,模擬了利用CXP Transiver進行傳輸的Rx系統。CXP Endpoint簡單地將CXP_ready信號拉高,不斷讀取用戶接口端信號,并將其余信號使用“keep true”方式聲明,保證信號不在綜合時被優化掉;此外,其未對輸入信號作任何處理。
CXP Verifier模塊用于監聽兩個CXP信號線上的信號是否完全一致,以驗證CXP Transiver的傳輸正確性。CXP Verifier會將監聽到的信號分別存入FIFO中。當兩側FIFO都不為空時,將會取出數據進行比較。傳輸異常指示信號定義如表3所示。信號反映了CXP Verifier模塊對數據傳輸情況的監視結果。

表3 傳輸異常指示信號定義
本次仿真測試的軟件平臺為Xilinx公司推出的ViVaDo 2016.4,仿真工具為ViVaDo自帶的仿真軟件Isim[9-11]。
FPGA1仿真結果表明,total_num一共發送了6 825個128 bit即873 600 bit數據。err_occur、overflow_occur、underflow_occur一直為低電平并且err_num、overflow_ num、underflow_ num這3個計數器一直為0,說明沒有邊界FIFO溢出和傳輸錯誤的情況出現。
FPGA2上的仿真結果與FPGA1相同,因為FPGA1
與FPGA2是完全對稱的結構,所以關于輸入輸出的圖像數據可參考FPGA1的仿真結果。total_num一共發送了873 600 bit數據,err_occur、overflow_occur、underflow_occur一直為低電平并且err_num、overflow_ num、underflow_ num這三個計數器一直為0,說明沒有邊界FIFO溢出和傳輸錯誤的情況出現。
通過對兩片FPGA傳輸情況的仿真結果可知,該高速圖像傳輸模塊能夠正常工作,實現片間高速圖像數據的正確傳輸。輸入數據同步時鐘可達250 MHz,數據位寬可達128 bit,外加8 bit幀控制信號。
本文所設計的基于FPGA的片間高速圖像傳輸系統,完成了片間的高速圖像數據傳輸。設計了圖像數據和幀控制信號的編解碼、跨時鐘域處理等電路,并對Aurora 8B/10B core進行調用和封裝。系統實現了符合CXP協議的圖像數據傳輸,同步時鐘為250 MHz,圖像數據位寬為128 bit,幀控制信號為8 bit。系統提供了一種新的片間傳輸圖像數據的解決方案。因為底層傳輸由GTH收發器實現,故該設計具有高抗干擾性,占用較少的I/O資源,提高了成本效益和圖像傳輸的吞吐率,具有很高的實用價值。