朱 琛,崔 鐳,邵春偉,王小龍
(中國(guó)電子科技集團(tuán)公司第五十八研究所,江蘇無(wú)錫 214072)
隨著現(xiàn)代通信技術(shù)的飛速發(fā)展,光纖通訊得到了廣泛應(yīng)用。光纖通訊是一種利用光與光纖傳遞資訊的方式,具有頻帶寬、損耗低、傳輸數(shù)據(jù)量大等優(yōu)點(diǎn),因而應(yīng)用越來(lái)越多,其發(fā)展也日趨成熟。在業(yè)內(nèi)公司中,安捷倫在數(shù)據(jù)采集與測(cè)量方面都處于技術(shù)領(lǐng)先地位,安捷倫公司推出的U1080A系列高速數(shù)據(jù)采集卡,其配備的MR0LI2類(lèi)型的光模塊有12路并行光通路,每條通路的傳輸率可以達(dá)到2.7 Gbit/s,最大傳輸速率可以達(dá)到30 Gbit/s[1]。美國(guó)內(nèi)達(dá)華州的4DSP公司致力于開(kāi)發(fā)堅(jiān)固的高性能數(shù)據(jù)處理板卡用于滿(mǎn)足軍事、航空航天等科學(xué)應(yīng)用的具體要求。4DSP開(kāi)發(fā)的FM482數(shù)據(jù)處理板支持1 Gbit/s的采樣率,8 bit位輸出的數(shù)據(jù)采集卡;在數(shù)據(jù)傳輸方面,板卡可以通過(guò)光纖連接遠(yuǎn)端主機(jī)處理系統(tǒng)或者數(shù)據(jù)存儲(chǔ)系統(tǒng),共有4條光纖傳輸通路,每條光纖通路的最大傳輸速率2.5 Gbit/s[2]。光纖數(shù)據(jù)采集技術(shù)最先在國(guó)外發(fā)展起來(lái),國(guó)內(nèi)近些年也開(kāi)始慢慢發(fā)展起來(lái),但技術(shù)還不夠成熟,尤其在一些軍工領(lǐng)域缺乏運(yùn)用。
本文設(shè)計(jì)實(shí)現(xiàn)了一種基于FPGA的高速光纖傳輸卡,將雷達(dá)數(shù)據(jù)有效快速地通過(guò)光纖傳輸?shù)紽PGA傳輸卡上,再通過(guò)PCI Express接口發(fā)送到PC機(jī)上。
總體設(shè)計(jì)如圖1所示。本系統(tǒng)選用了Xilinx公司的XC7K325T進(jìn)行邏輯設(shè)計(jì)。采集數(shù)據(jù)經(jīng)由光纖模塊傳輸進(jìn)入FPGA中并緩存在大容量DDR3 SDRAM中,通過(guò)總線(xiàn)DMA的控制,將數(shù)據(jù)通過(guò)X4通道的PCI Express協(xié)議以不低于320 MB/s的速度傳輸?shù)街鳈C(jī)的存儲(chǔ)設(shè)備。在主機(jī)端,使用C++語(yǔ)言開(kāi)發(fā)PCIe光纖接口卡應(yīng)用程序界面以提供操作方式,通過(guò)驅(qū)動(dòng)程序間接控制板卡實(shí)現(xiàn)數(shù)據(jù)傳輸控制和工作。最后,在主機(jī)端上設(shè)計(jì)應(yīng)用程序界面以實(shí)現(xiàn)對(duì)前端數(shù)據(jù)量的控制和監(jiān)測(cè)。
本系統(tǒng)能夠以雙工模塊進(jìn)行高速串行數(shù)據(jù)傳輸,保證傳輸?shù)膶?shí)時(shí)性。它主要包括PCI-e金手指、PCI Express模塊、DDR3存儲(chǔ)器控制模塊、光纖傳輸模塊以及外部的電源管理(見(jiàn)圖2)。PCI Express模塊支持PCI Express傳輸協(xié)議,并與其他模塊交互,控制內(nèi)部并行數(shù)據(jù)的轉(zhuǎn)換,實(shí)現(xiàn)串行數(shù)據(jù)傳輸。DDR3存儲(chǔ)模塊用于與其他模塊進(jìn)行交互,緩存數(shù)據(jù)。
圖1 硬件架構(gòu)圖
圖2 實(shí)物圖
整個(gè)高速光纖傳輸系統(tǒng)設(shè)計(jì)的關(guān)鍵在于硬件邏輯設(shè)計(jì)、驅(qū)動(dòng)層與應(yīng)用層設(shè)計(jì),整體架構(gòu)如圖3所示。
圖3 整體系統(tǒng)架構(gòu)圖
為了減少開(kāi)發(fā)時(shí)間,選用Xilinx官方提供的PCIe的IP核(架構(gòu)如2-2),IP核允許使用數(shù)據(jù)包在其子模塊間相互交換。在發(fā)送分層設(shè)備部分通過(guò)裝配信息機(jī)制生成數(shù)據(jù)包。包中附帶了數(shù)據(jù)傳輸通過(guò)的設(shè)備層所必需的信息。數(shù)據(jù)包通過(guò)鏈路傳輸在接收端被接收,接收設(shè)備層會(huì)對(duì)包中的必要信息進(jìn)行拆解和讀取,剝掉相應(yīng)的字段,將待處理的包發(fā)往下一處理層,直到轉(zhuǎn)換成能夠被相應(yīng)的核心設(shè)備和應(yīng)用層讀取和處理的信息。
鏈路選用4 lane(x4),理論速度可達(dá)到5 Gb/s(Gen2)。核例化以后的接口包括系統(tǒng)接口、PCI Express接口、傳輸接口、配置接口。系統(tǒng)接口主要提供系統(tǒng)復(fù)位和系統(tǒng)時(shí)鐘信號(hào)。PCI Express接口主要用于數(shù)據(jù)傳輸,以多個(gè)差分隊(duì)的形式組成。事務(wù)接口用于實(shí)現(xiàn)對(duì)TLP傳輸機(jī)制的控制。配置接口用于配置內(nèi)部寄存器,保證PCI Express協(xié)議正常工作。
PCI Express端點(diǎn)有PIO和DMA兩種數(shù)據(jù)傳輸方式。本設(shè)計(jì)采用DMA傳輸方式直接讀寫(xiě)內(nèi)存。DMA 控制器主要有 TX_Engine、RX_Engine、DMA 控制/狀態(tài)寄存器和中斷控制器等部分。CPU會(huì)初始化DMA控制器(DMA通道、數(shù)據(jù)傳輸源地址、目的地址、傳輸字節(jié)數(shù)、傳輸模式),然后啟動(dòng)DMA傳輸。傳輸完成之后,DMA控制器會(huì)向CPU提出DMA中斷,這時(shí)DMA再回應(yīng)該中斷,將目標(biāo)地址中的數(shù)據(jù)取走。
圖4 PCI Express內(nèi)核結(jié)構(gòu)
PCIe IP核支持MSI中斷和傳統(tǒng)的legacy中斷(以讀中斷為例),當(dāng)DMA中斷處于空閑狀態(tài)INT_IDIE,如果接收到RX_Engine發(fā)出的中斷信號(hào),則進(jìn)行判斷讀寫(xiě)中斷類(lèi)型;如果讀中斷,進(jìn)入讀中斷處理狀態(tài)RDint_TYPE,該狀態(tài)下告知PCIE核中斷事件并根據(jù)中斷模式選擇轉(zhuǎn)移狀態(tài)RD_MSI_PRO或RDint_END,若是RD_MSI_PRO處理狀態(tài)下,等待接收PCIe IP核的中斷確認(rèn)信號(hào);進(jìn)入讀中斷待結(jié)束狀態(tài)RDint_end等待中斷結(jié)束信號(hào)返回空閑狀態(tài)INT_IDIE,再次等待下次中斷的觸發(fā)[4]。
DDR3 SDRAM是易失性存儲(chǔ)器件。在每次上電或復(fù)位后都要進(jìn)行初始化才能實(shí)現(xiàn)存取操作。DDR3上電后等待200 ns,才能發(fā)出命令NOP或Deselect命令保持生效至少200 ns;預(yù)充電所有的命令;依次執(zhí)行擴(kuò)展模式寄存器2(EMR2)和擴(kuò)展模式寄存器3(EMR3)命令;執(zhí)行復(fù)位DLL模式寄存器進(jìn)行命令設(shè)置,持續(xù)至少200個(gè)時(shí)鐘周期才能鎖定DLL;再次預(yù)充電所有的命令;執(zhí)行兩個(gè)自動(dòng)刷新命令;執(zhí)行模式寄存器進(jìn)行命令設(shè)置,用于初始化器件操作[5]。選用4片MT41K128M16-15H,DDR3內(nèi)核工作頻率為200MHz,數(shù)據(jù)傳輸速率為800 MHz。DDR3邏輯控制發(fā)送命令給控制器,實(shí)現(xiàn)對(duì)DDR3 SDRAM進(jìn)行讀寫(xiě)數(shù)據(jù)訪(fǎng)問(wèn)相關(guān)操作(DDR3邏輯結(jié)構(gòu)圖如圖6所示)。根據(jù)系統(tǒng)需求,此通道用于接收緩存大容量高速率的光纖數(shù)據(jù),進(jìn)而傳輸至主機(jī)。
圖5 PCIe-DMA邏輯結(jié)構(gòu)圖
圖6 DDR3邏輯結(jié)構(gòu)圖
Aurora協(xié)議是由Xilinx公司開(kāi)發(fā),定義為串行數(shù)據(jù)傳輸?shù)囊粋€(gè)鏈路層協(xié)議,它具有高寬帶以及可擴(kuò)展性等特點(diǎn)[6]。此外,該協(xié)議的幀結(jié)構(gòu)非常簡(jiǎn)單,打包效率很高。Aurora 64B/66B頂層模塊例化了Aurora 64B/66B通道模塊、TX和RX本地鏈路模塊、全局邏輯模塊以及GTP/GTX收發(fā)器。Aurora邏輯結(jié)構(gòu)如圖7所示。
PCIe光纖接口程序可以劃分為2個(gè)層次:一是用戶(hù)驅(qū)動(dòng)層,在Linux上使用內(nèi)核API函數(shù)開(kāi)發(fā);二是應(yīng)用面層,為用戶(hù)設(shè)計(jì)的應(yīng)用程序。
圖7 Aurora邏輯結(jié)構(gòu)圖
驅(qū)動(dòng)程序是控制PCIe板卡的底層程序,在Linux下使用C開(kāi)發(fā)。驅(qū)動(dòng)程序運(yùn)行在系統(tǒng)內(nèi)存的內(nèi)核空間上,與應(yīng)用程序的交互通過(guò)驅(qū)動(dòng)提供的read、write以及ioctl等函數(shù)接口來(lái)完成[7]。
上位機(jī)應(yīng)用程序?qū)崿F(xiàn)用戶(hù)操控和監(jiān)控PCIe光纖接口卡的功能,程序一般用C或者C++在Linux系統(tǒng)上實(shí)現(xiàn),本系統(tǒng)界面在Linux下采用QT開(kāi)發(fā),使用戶(hù)獲得所見(jiàn)即所得的直觀(guān)感受。
操作系統(tǒng)通過(guò)驅(qū)動(dòng)程序完成對(duì)光纖卡的初始化、讀寫(xiě)、控制等操作。驅(qū)動(dòng)程序首先被加載到內(nèi)核并啟動(dòng),由外部采集而來(lái)的數(shù)據(jù)通過(guò)光纖存放到DDR3內(nèi)存并依序進(jìn)入DMA緩存區(qū),當(dāng)板卡滿(mǎn)足DMA中斷條件時(shí)向CPU提出中斷,此時(shí)等待獲取數(shù)據(jù)的應(yīng)用程序?qū)⑼ㄟ^(guò)驅(qū)動(dòng)程序提供的接口函數(shù)read讀取采集數(shù)據(jù)(圖8)。
圖8 驅(qū)動(dòng)層和應(yīng)用層讀取程序流程圖
上位機(jī)通過(guò)發(fā)送大小為126697 Bytes的文件,經(jīng)過(guò)PCIE接口傳輸?shù)桨蹇ǎ?jīng)由DDR3緩沖后傳輸?shù)焦饫w接口,光纖口作回環(huán)處理,上位讀取光纖口數(shù)據(jù)與原文件進(jìn)行比對(duì),并監(jiān)測(cè)其傳輸速率。測(cè)試結(jié)果顯示:傳輸速率達(dá)到4 Gbit/s,無(wú)丟包現(xiàn)象。上位機(jī)監(jiān)控界面如圖9所示,捕捉光纖口回環(huán)測(cè)試如圖10所示。
圖9 上位機(jī)監(jiān)控界面
圖10 光纖口回環(huán)測(cè)試結(jié)果
本雷達(dá)數(shù)據(jù)傳輸系統(tǒng)采用高性能的FPGA芯片作為核心,利用FPGA內(nèi)嵌的高速串口完成光纖傳輸,采用上位機(jī)實(shí)時(shí)控制和監(jiān)控?cái)?shù)據(jù)傳輸,該系統(tǒng)具有抗干擾性強(qiáng)、傳輸距離遠(yuǎn)、實(shí)時(shí)監(jiān)控等特點(diǎn)。
[1]李攀,田澤,蔡葉芳,等.基于FPGA的雙通道FC數(shù)據(jù)采集卡設(shè)計(jì)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2013,23(7):179-182.
[2]黎小玉,田澤,王泉,等.基于SoC_FC芯片電源管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2010,20(8):247-249.
[3]馬萍,唐衛(wèi)華,等.基于PCI Express總線(xiàn)高速數(shù)采卡的設(shè)計(jì)與現(xiàn)實(shí)[J].微計(jì)算機(jī)信息,2008(09).
[4]成立濤.基于FPGA的高速PCIe光纖接口卡設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué)碩士學(xué)位論文,2015.
[5]王劍宇,蘇穎.高速電路設(shè)計(jì)實(shí)踐[M].北京:電子工業(yè)出版社,2014.
[6]侯春雷,唐碧華,等.基于PCI Express和Aurora協(xié)議高速光纖通信板卡的實(shí)現(xiàn)[J].微計(jì)算機(jī)應(yīng)用,2010(1).
[7]劉仁峰.基于PCI總線(xiàn)的嵌入式設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)與研究[D].武漢:華中科技大學(xué)碩士學(xué)位論文,2004.