董偉濤,伊小素,曾華菘,熊 瑞,王家興,劉 輝
(北京航空航天大學儀器科學與光電工程學院,北京 100191)
隨著星載通信系統(tǒng)內部各個設備間的數(shù)據(jù)交換量越來越大,傳統(tǒng)的數(shù)據(jù)總線已經很難滿足需求,這就對星載總線提出了更高的要求。SpaceFibre總線技術是高速空間總線,是一種面向吉比特每秒級高速數(shù)據(jù)傳輸需求而提出的基于SpaceWire協(xié)議體系結構的新標準[1]。目前SpaceFibre傳輸速率可達2 Gbps(有效傳輸速率0~1.6 Gbps),是超高速光纖傳輸總線。隨著SpaceFibre總線的不斷發(fā)展和完善,數(shù)據(jù)處理和性能測試都需要采用通用計算機設備來獲取SpaceFibre高速網絡中的大容量數(shù)據(jù)。由于計算機不具有SpaceFibre接口,因此需要設計一種接口卡為計算機提供獲取SpaceFibre總線數(shù)據(jù)的能力。
USB總線具有速度快、通用性好、擴展性強、功耗低、穩(wěn)定、易開發(fā)等優(yōu)點,在工業(yè)領域獲得了廣泛的應用[2]。目前,USB3.0的理論傳輸速率為5 Gbps,能夠滿足SpaceFibre采集速率要求?;谘芯颗c應用的需要,本文設計了基于FPGA的SpaceFibre-USB3.0接口卡,實現(xiàn)了SpaceFibre與USB3.0的橋接設計。經測試,PC機可以通過接口卡實時采集、顯示SpaceFibre總線傳輸?shù)膱D像數(shù)據(jù),達到設計目的,為通用計算機采集SpaceFibre總線數(shù)據(jù)提供了一種參考方案。
本文在研究SpaceFibre總線協(xié)議和USB3.0總線協(xié)議的基礎上,采用FPGA作為硬件控制器,設計了相應的硬件電路和軟件程序,實現(xiàn)SpaceFibre總線與USB總線的橋接設計。FPGA將采集到的SpaceFibre總線數(shù)據(jù)通過USB3.0傳輸給PC實現(xiàn)SpaceFibre總線的采集。
SpaceFibre總線采集系統(tǒng)由SpaceFibre-USB3.0接口卡和上位機組成,接口卡主要負責采集SpaceFibre高速總線數(shù)據(jù),對數(shù)據(jù)進行緩存,然后通過USB3.0發(fā)送給上位機進行處理分析。接口卡整體方案設計如圖1所示。
圖1 SpaceFibre-USB3.0接口卡整體結構圖
接口卡采用FPGA作為硬件控制器,F(xiàn)PGA選型為Cyclone Ⅲ系列的EP3C16F484C7芯片,F(xiàn)PGA負責SerDes芯片和USB3.0芯片的控制以及數(shù)據(jù)的緩存與處理。SpaceFibre物理層芯片選型為TLK2711a-RCP的SerDes芯片,這款芯片主要負責SpaceFibre總線8b/10b編碼的實現(xiàn),光模塊采用FTLF8519P2BNL芯片,主要負責實現(xiàn)光電信號的轉換,實現(xiàn)了SpaceFibre總線的物理層和鏈路層,搭配嵌入在FPGA中的SpaceFibre IP核實現(xiàn)SpaceFibre數(shù)據(jù)的采集。USB3.0芯片選用CYUSB3014芯片,該芯片內嵌ARM內核、512 KB嵌入式SRAM、32位數(shù)據(jù)總線,而且提供C++,C#的函數(shù)庫[3],滿足本設計要求,實現(xiàn)與上位機的通信。
SpaceFibre總線接口設計如圖2所示。
圖2 SpaceFibre總線接口連接圖
SpaceFibre總線編碼方式采用8b/10b編碼,8b/10b編碼具有很好的直流平衡特性以及抗干擾能力和一定的檢錯能力[4]。SpaceFibre接口設計利用Serdes芯片實現(xiàn)8b/10b編解碼功能。光模塊用于實現(xiàn)光電轉換,在采集SpaceFibre總線數(shù)據(jù)時,將光信號轉換為電信號,電信號通過SerDes芯片,經過串并轉換將高速的串行信號轉換為低速的20位并行信號,再通過8b/10b解碼功能將數(shù)據(jù)轉換為16位有效信號,輸入到FPGA中,F(xiàn)PGA中嵌入了SpaceFibre總線協(xié)議IP核,將采集到的數(shù)據(jù)緩存在SpaceFibre接收FIFO中實現(xiàn)SpaceFibre總線數(shù)據(jù)的采集過程。
USB3.0芯片選用CYUSB3014芯片,通過編寫固件程序實現(xiàn)USB3.0總線傳輸[5]。本系統(tǒng)USB3.0接口設計如圖3所示。
圖3 USB3.0接口連接圖
GPIF接口是CYUSB3014芯片與FPGA進行連接的高性能通用可編程接口,支持8位、16位和32位并行數(shù)據(jù)總線,接口頻率可達100 MHz。為了滿足本系統(tǒng)高帶寬、低延時的傳輸要求,F(xiàn)PGA上行到PC數(shù)據(jù)量較大,因此緩沖區(qū)Buffer設置為10個,每個Buffer大小為16 Kbytes,PC到FPGA數(shù)據(jù)量較小,緩沖區(qū)Buffer設置為2個,每個Buffer大小為16 Kbytes。本系統(tǒng)將固件程序配置為Slave FIFO模式[6],時序邏輯由外部控制器FPGA控制[7]。
FPGA作為接口卡的控制核心,實現(xiàn)SpaceFibre接口與USB接口的橋接通信。FPGA程序運行狀態(tài)轉移如圖4所示。
圖4 FPGA程序運行狀態(tài)轉移圖
板卡上電首先進入初始化狀態(tài),F(xiàn)PGA分別檢測SpaceFibre接收FIFO和USB輸出Buffer中是否有數(shù)據(jù),如果SpaceFibre接收FIFO中有數(shù)據(jù)待讀,則表明SpaceFibre端采集到了數(shù)據(jù),此時狀態(tài)跳轉進入將SpaceFibre接收FIFO中的數(shù)據(jù)向USB3.0寫入的狀態(tài),在該狀態(tài)內檢測到數(shù)據(jù)包尾后將一包數(shù)據(jù)進行打包,實現(xiàn)數(shù)據(jù)流由SpaceFibre到USB的流動,寫狀態(tài)完成,狀態(tài)自動跳回初始狀態(tài)。如果USB輸出Buffer中有數(shù)據(jù)待讀,則表明USB3.0端發(fā)送來了數(shù)據(jù),因為從PC端發(fā)出的數(shù)據(jù)一般為控制指令,因此數(shù)據(jù)由USB到SpaceFibre傳輸過程中加入防誤傳措施,即從PC端發(fā)送的數(shù)據(jù)需要遵循既定的格式,此時進入判斷狀態(tài),讀取3個數(shù)即一包的包頭進行判斷,如果符合預定格式,則狀態(tài)跳入將USB3.0 Buffer中數(shù)據(jù)向SpaceFibre發(fā)送FIFO中寫入的狀態(tài),在該狀態(tài)中讀入相應長度的數(shù)據(jù)進行打包,實現(xiàn)數(shù)據(jù)流由USB到SpaceFibre的流動,寫狀態(tài)完成,狀態(tài)自動跳回初始狀態(tài);如果不符合預定格式,說明PC端發(fā)送來的數(shù)據(jù)為誤操作無效數(shù)據(jù),此時狀態(tài)跳入丟棄無效數(shù)據(jù)狀態(tài),將USB Buffer中數(shù)據(jù)丟掉,完成后狀態(tài)自動跳回初始狀態(tài)。設置控制指令優(yōu)先級最高,即如果檢測SpaceFibre接收FIFO和USB輸出Buffer中同時有數(shù)據(jù)待讀,則優(yōu)先進行USB輸出Buffer中數(shù)據(jù)的讀取操作。
數(shù)據(jù)從SpaceFibre接收FIFO中讀出向CYUSB3014芯片內部Buffer緩沖區(qū)寫入時刻記為t1,數(shù)據(jù)傳輸?shù)絇C上位機時刻記為t2,系統(tǒng)時延為t2-t1。由于t1與t2時間基準無法統(tǒng)一,無法直接得到時延,故將時延分為兩部分進行分析。即把采集到的1包數(shù)據(jù)填寫進CYUSB3014芯片內部Buffer緩沖區(qū)所需的時間和PC端讀取Buffer緩沖區(qū)1包數(shù)據(jù)所需的時間,兩項之和即為系統(tǒng)的主要時延來源。
數(shù)據(jù)填寫進CYUSB3014芯片內部Buffer緩沖區(qū)時所用時鐘頻率為100 MHz,時鐘周期為0.01 μs,每個時鐘填寫16位(2 Bytes),填寫單個數(shù)據(jù)包所需時間與數(shù)據(jù)包大小緊密相關,表1為通過計算所得的填寫1包數(shù)據(jù)所用時間與數(shù)據(jù)包大小的關系。
表1 填寫1包數(shù)據(jù)所用時間與數(shù)據(jù)包大小的關系表
PC端讀取數(shù)據(jù)包所需時間也與數(shù)據(jù)包大小緊密相關,調用API庫中的相關類和函數(shù)對USB3.0芯片進行數(shù)據(jù)讀取完成PC端對CYUSB3014芯片內部Buffer緩沖區(qū)數(shù)據(jù)采集,這個過程PC機操作系統(tǒng)會根據(jù)請求分配時間片用于數(shù)據(jù)的采集,時延也就因此而產生。為保證PC讀取數(shù)據(jù)時Buffer緩沖區(qū)數(shù)據(jù)已經準備就緒,CYUSB3014固件程序配置為芯片內部自動生成Buffer數(shù)據(jù)。測試每秒讀取數(shù)據(jù)包個數(shù)計算得到讀取單個數(shù)據(jù)包的平均時延。表2為PC平均讀取1包數(shù)據(jù)所需時間與數(shù)據(jù)包大小之間的關系。
表2 PC平均讀取1包數(shù)據(jù)所用時間與數(shù)據(jù)包大小的關系表
兩項時間之和即為采集系統(tǒng)主要時延,相加計算所得時延如表3所示。
表3 采集時延與數(shù)據(jù)包大小的關系表
結果顯示,打包單個數(shù)據(jù)包越大,單包傳輸時延越長。
PC機通過USB3.0讀取速率與每次讀取的數(shù)據(jù)包大小緊密相關,將數(shù)據(jù)包打包成不同的大小通過PC讀取測試得到USB3.0平均傳輸速率與PC單次讀取數(shù)據(jù)量的關系,如圖5所示。
圖5 接口卡傳輸速率圖
隨著單次讀取數(shù)據(jù)包大小的增加,平均速率會不斷提高,在單次讀取1 KB數(shù)據(jù)時速率為39 MB/s,在單次讀取16 KB數(shù)據(jù)時平均采集速率能夠達到225 MB/s,能夠滿足SpaceFibre總線的采集速率要求。
通過2.1和2.2關于數(shù)據(jù)包傳輸時延和傳輸速率的分析和測試,可以看出平均傳輸速率和單包傳輸時延都會隨著單個數(shù)據(jù)包增大而增加。針對不同應用情景下采集SpaceFibre數(shù)據(jù)時可根據(jù)如下原則進行數(shù)據(jù)包打包大小的選取:SpaceFibre總線有效傳輸速率為0~200 MBytes/s,當SpaceFibre總線全速即以200 MBytes/s傳輸時,USB3.0接口傳輸速率在打包大小為11 K以上時完全滿足SpaceFibre采集速率要求;當SpaceFibre總線傳輸速率低于200 MBytes/s時,可將采集數(shù)據(jù)打包成滿足SpaceFibre總線傳輸速率要求的最小包大小,這樣可以既滿足采集速率要求,又可以使單包采集時延最小。
為了能夠直觀演示接口卡的功能,SpaceFibre數(shù)據(jù)源選擇圖像數(shù)據(jù)源,采用OV7725攝像頭作為圖像數(shù)據(jù)輸出,該圖像傳感器分辨率為640×480,輸出格式為RGB565,RGB565即每個像素點由16比特組成,其中紅、綠、藍三色占比為{R[4:0],G[5:0],B[4:0]},幀率為每秒25幀,每秒輸出數(shù)據(jù)量為14.648 MBytes。通過采集速率圖可以看出USB3.0傳輸速率完全滿足CMOS的輸出速率要求,根據(jù)打包原則,為了達到傳輸?shù)淖顑?yōu)化,以最小時延進行采集傳輸,OV7725攝像頭每行的數(shù)據(jù)為1 280 Bytes(640×2),F(xiàn)PGA每次將1行圖像數(shù)據(jù)進行打包,為了防止行錯亂,在打包時需要加入包頭和行信息,這樣每包數(shù)據(jù)量為1 280 Bytes圖像數(shù)據(jù)+4Bytes包頭信息。PC端上位機設置為每次讀1 284 Bytes數(shù)據(jù)。這樣設置可以在滿足傳輸速率要求的前提下以最小時延進行采集傳輸以達到最佳采集效果。采集系統(tǒng)實物連接如圖6所示。
圖6 采集系統(tǒng)實物連接圖
本系統(tǒng)上位機圖像顯示界面采用WPF構建圖形化界面,使用C#語言,調用API庫中的相關類和函數(shù)對USB3.0芯片進行數(shù)據(jù)讀取,完成PC端對數(shù)據(jù)的高速采集與顯示。
接口卡采集SpaceFibre圖像數(shù)據(jù)通過USB3.0發(fā)送到PC上,最后通過WPF設計的上位機界面對視頻圖像進行顯示。上位機運行流程圖如圖7所示。
圖7 上位機運行流程圖
PC端通過上位機界面發(fā)送控制指令,指令通過USB3.0接口發(fā)送到接口卡。接口卡解析指令數(shù)據(jù),開始采集SpaceFibre總線端數(shù)據(jù),F(xiàn)PGA將采集的數(shù)據(jù)打包后通過USB3.0接口發(fā)送到上位機。為了提高數(shù)據(jù)采集速率,上位機設置2個線程,線程1用于采集數(shù)據(jù)和緩存,線程2用于數(shù)據(jù)的處理和顯示[8]。
PC讀取數(shù)據(jù)對應代碼如下:
int singalpacketlen = 1284;
MyDevice.BulkInEndPt.XferData(ref buf1,ref singalpacketlen);
將圖像數(shù)據(jù)處理顯示對應代碼如下:
WriteableBitmap wb = new WriteableBitmap (640,480,96,96,PixelFormats.Bgr565,null);
Int32Rect rect = new Int32Rect(0,0,640,480);
wb.WritePixels(rect,imagebuf2,wb.BackBufferStride,0);
image1.Source = wb;
上位機視頻圖像顯示結果如圖8所示。
圖8 上位機顯示采集到的視頻圖像界面
PC通過USB發(fā)送控制命令后,可以實時接收SpaceFibre端的圖像數(shù)據(jù)并清晰地顯示采集到的SpaceFibre視頻圖像,無幀錯亂、丟幀等情況。
本文設計了SpaceFibre-USB3.0接口卡,實現(xiàn)了SpaceFibre與USB3.0總線之間的橋接設計,使得通用計算機能夠實時采集高速SpaceFibre總線中數(shù)據(jù)。包括硬件電路的設計,主控芯片F(xiàn)PGA程序的編寫實現(xiàn)以及上位機軟件的設計,并分析了系統(tǒng)時延和采集速率,給出了數(shù)據(jù)包打包原則的選取方案。經測試,上位機可以實時采集顯示SpaceFibre總線傳輸?shù)膱D像數(shù)據(jù),系統(tǒng)采集速率最高可達1.8 Gbps,滿足SpaceFibre總線最高傳輸速率(1.6 Gbps),符合設計要求。本文為通用設備采集高速SpaceFibre總線數(shù)據(jù)提供了一種可行的方案,對于SpaceFibre總線的研究與測試具有參考意義。