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