文獻標識碼: A
文章編號: 0258-7998(2013)10-0136-03
隨著高分辨率、高頻幀的CCD相機在航測中的廣泛使用,如何對產(chǎn)生的高速圖像數(shù)據(jù)進行實時記錄,成為了一個技術(shù)難題。光纖通信具有帶寬高、價格低廉、傳輸距離長等優(yōu)點,單根光纖的傳輸帶寬達到10.2 Tb/s。大量光電轉(zhuǎn)換模塊的出現(xiàn),使光纖在高速圖像采集傳輸系統(tǒng)中大量使用,常規(guī)光模塊帶寬達到2 Gb/s,而傳統(tǒng)通過PCI總線與主機通信的理論帶寬只有133 MB/s,但當實際數(shù)據(jù)采集速度到達100 MB/s左右時就變得相當困難 ,難以滿足對記錄帶寬的要求。PCIE是繼PCI后的第三代高性能I/O總線,與PCI相比,PCIE屬于串行總線,引腳少,采用基于數(shù)據(jù)包的協(xié)議進行事務(wù)編碼,每個傳輸通道獨享帶寬;硬件接口簡單,采用點對點互聯(lián),X1的單向傳輸理論帶寬即可達到2.5 Gb/s,用戶可以根據(jù)實際需要將PCIE鏈路配置為X1、X2、X4、X8、X16等。
PCIE數(shù)據(jù)包在傳輸過程中要經(jīng)過事務(wù)層,數(shù)據(jù)鏈路層及物理層。采用類似網(wǎng)絡(luò)分層的思想,不同之處在于PCIE體系中的各個層都是采用硬件邏輯來實現(xiàn)。事務(wù)層是PCIE架構(gòu)的上層,其主要功能是接收、緩沖和分發(fā)事務(wù)包TLP(Transaction Layer Packet)。TLP通過使用I/O、存儲器 、配置和消息事務(wù)來傳遞信息。數(shù)據(jù)鏈路層是保證可靠正確的數(shù)據(jù)傳輸,主要負責鏈路管理與數(shù)據(jù)完整性相關(guān)的功能,包括錯誤檢測與改正,裝配和拆解數(shù)據(jù)鏈路層包DLLP。物理層是PCIE協(xié)議的最底層,為設(shè)備鏈路提供物理支持,分為邏輯子塊和電氣子塊。邏輯子塊完成對數(shù)據(jù)包的合成分解、加擾和去擾、8 bit/10 bit編碼和10 bit/8 bit解碼、并串轉(zhuǎn)換和串并轉(zhuǎn)換;電氣物理層負責對每路串行數(shù)據(jù)差分驅(qū)動的傳輸與接收及阻抗匹配[1-2]。
1 采集系統(tǒng)簡述
本文采用CCD相機的分辨率為2 352×1 728,灰度級別為8 bit,幀頻為31 F/s,產(chǎn)生的數(shù)據(jù)量為120.2 MB/s,則PCIE接口采用X1通道就可以滿足帶寬需要。采集系統(tǒng)的具體結(jié)構(gòu)如圖1所示。
XC5VFX70T是Xilinx公司VIRTEX系列的一款具有5 328 KB RAM資源、內(nèi)嵌3個PCIE硬核和16個可配置的高速串行收發(fā)器GTX,速率可達6.5 Gb/s,采用CML電平標準,在系統(tǒng)中和SFP模塊無縫連接。該芯片在系統(tǒng)中主要實現(xiàn)高速數(shù)據(jù)的接收和緩存,以及數(shù)據(jù)的實時采集[3-4]。
光纖信號通過光纖接口模塊和位寬轉(zhuǎn)換,數(shù)據(jù)被寫入DDR2中,DDR2分為A、B兩個獨立的存儲區(qū)。當A儲存區(qū)寫滿時,將數(shù)據(jù)寫入PCIE接口模塊的TX_FIFO中,這時DMA控制器發(fā)送中斷給主機,主機會準備好接收緩存區(qū),并將緩存區(qū)首地址告知DMA控制器,開始DMA傳輸,將數(shù)據(jù)寫入到主機內(nèi)存中,同時將采集的數(shù)據(jù)寫入B存儲區(qū)中。同理,當B存儲區(qū)中的數(shù)據(jù)被寫滿時,也通過同樣的方式寫入主機的內(nèi)存中。主機內(nèi)存中的數(shù)據(jù)通過SATA總線被寫到SATA硬盤并記錄下來。DDR2采用交叉緩存工作,以保證高速數(shù)據(jù)流的不間斷采集。
2 功能模塊設(shè)計
2.1光纖接口模塊邏輯設(shè)計
光纖接口模塊分為GTX和包數(shù)據(jù)解析兩個部分。光纖信號經(jīng)GTX核后,輸出16 bit位寬的并行數(shù)據(jù)和相應(yīng)的K字符信號。根據(jù)K字符信號提取數(shù)據(jù)包。包數(shù)據(jù)解析根據(jù)自定義的協(xié)議進行數(shù)據(jù)包解析,得到幀頭標志、幀尾標志、有效圖像數(shù)據(jù)和附加信息等。附加信息是一組固定長度的雙字組合,含有圖像相關(guān)的一些信息,如大小、位數(shù)、編碼方式等[5-6]。圖2所示為自定義協(xié)議包。
包頭和包尾作為數(shù)據(jù)包的起始和結(jié)尾標志,包長用于指示發(fā)送數(shù)據(jù)的有效長度,包累加和用于包內(nèi)有效數(shù)據(jù)字節(jié)的統(tǒng)計,包編號用于統(tǒng)計發(fā)送的數(shù)據(jù)包有無丟失。幀頭標志、幀尾標志、有效圖像數(shù)據(jù)和附加信息等則放在有效數(shù)據(jù)中。
2.2 緩存模塊
本文的DDR2控制器MPMC采用NPI接口,設(shè)計有2個NPI接口分別用于讀寫操作。一個是用于存儲光纖的輸入數(shù)據(jù),另一個用于輸出內(nèi)存數(shù)據(jù)到PCIE接口。這樣可以避免傳輸過程中內(nèi)存的訪問仲裁,提高系統(tǒng)的傳輸效率。
本文光纖接口模塊輸出的數(shù)據(jù)寬度為16 bit,而采用的NPI接口的數(shù)據(jù)寬度為64 bit。所以需要對原始數(shù)據(jù)進行位寬轉(zhuǎn)換后才能進行后續(xù)處理。位寬轉(zhuǎn)換模塊根據(jù)需要將數(shù)據(jù)寬度從16 bit轉(zhuǎn)換為64 bit。
2.3 PCIE接口模塊設(shè)計
PCIE接口模塊主要是實現(xiàn)主機PCIE總線與采集卡之間的通信。為了實現(xiàn)基于PCIE的DMA傳輸,需要設(shè)計以下8個模塊[7-8], 具體PCIE接口模塊設(shè)計如圖3所示。
圖3中各個模塊的作用如下:
(1) PCIE硬核:對外與其他PCIE設(shè)備通信,對內(nèi)與TX和RX模塊進行數(shù)據(jù)傳輸。
(2) TX模塊:將待發(fā)送的數(shù)據(jù)和DMA寄存器中的信息填充到事務(wù)包TLP中,以并行的方式傳輸給PCIE硬核,實現(xiàn)PCIE寫操作狀態(tài)。
(3) RX模塊:將接收的事務(wù)包TLP解析,根據(jù)TLPs的包頭信息,將數(shù)據(jù)寫入DMA寄存器。
(4) 緩存:匹配FIFO兩邊不同傳輸速率的數(shù)據(jù)流,緩存待處理的數(shù)據(jù)和提高數(shù)據(jù)的傳輸效率。
(5) DMA控制模塊:DMA寄存器是由發(fā)送寄存器、中斷寄存器等構(gòu)成。發(fā)送寄存器用于接收和存放主機內(nèi)存寫請求的DMA信息,主要為內(nèi)存寫請求地址寄存器及寫長度寄存器、寫包數(shù)寄存器。中斷寄存器是存放中斷產(chǎn)生的原因,為辨別何種中斷提供依據(jù)。
(6) 用戶邏輯:一方面用戶邏輯通過DMA控制模塊向主機發(fā)起DMA傳輸中斷,設(shè)置DMA傳輸?shù)拈L度;另一方面控制數(shù)據(jù)的輸入,保證TX_FIFO不會溢出,數(shù)據(jù)不會丟失。
(7) 用戶接口模塊:提供簡單的數(shù)據(jù)通道和控制信號通道。
3 DMA傳輸?shù)倪壿嬙O(shè)計與實現(xiàn)
3.1 DMA寫操作的設(shè)計與實現(xiàn)
首先用戶邏輯檢測到TX_FIFO中有需要傳輸?shù)臄?shù)據(jù),這時用戶邏輯通過DMA控制器發(fā)送MSI中斷,請求DMA傳輸。主機響應(yīng)中斷,配置DMA寄存器,TX模塊啟動DMA傳輸,TX模塊向TLP包加載信息,包括了控制字段、地址字段、數(shù)據(jù)長度字段以及數(shù)據(jù)字段等。當一次DMA傳輸結(jié)束后,向主機發(fā)送DMA傳輸結(jié)束的中斷,這樣一次完整的DMA寫操作就完成了。具體流程圖如圖4所示,TX模塊和PCIE硬核之間采用64 bit并行傳輸, 在本文中一個TLP的載荷是128 B,一次DMA操作要進行65 536次包傳輸,則一次DMA寫操作就傳輸了8 MB的數(shù)據(jù)量,PCIE寫操作狀態(tài)機是在TX模塊中實現(xiàn)。
圖6是DMA控制寄存器的設(shè)計圖,初始化寄存器的Byte0用于DMA傳輸復(fù)位。1DW的Byte0用于讀開始,Byte1用于讀完成,Byte2用于寫開始,Byte3用于寫完成;2DW用于存放主機寫入的緩存首地址;3DW用于存放一個TLP包攜帶的有效數(shù)據(jù)量;4DW用于存放一次每次DMA傳輸發(fā)送的TLP包數(shù)量;5DW的Byte0用于指示FPGA請求DMA傳輸,Byte1用于指示DMA傳輸結(jié)束。
4 功能驗證與性能測試
本文PCIE硬核采用X1通道,最大的理論傳輸帶寬為2.5 Gb/s。使用ChipScope對DMA寫操作進行了驗證,具體時序如圖7所示,trn_td是FPGA向主機發(fā)送的數(shù)據(jù),trn_tsof_n為低時,表示TLP包的第一個64 bit數(shù)據(jù);trn_teof_n為低時,表示TLP包的最后64 bit數(shù)據(jù),這時trn_trem_n為0X0F,則說明最后一個64 bit只有高32位有效。傳輸一個TLP包大約需要108個時鐘周期,采用125 MHz的采樣頻率,一個TLP包有效載荷為128 B,則可得出在X1的配置下,DMA的傳輸速度大約為141.3 MB/s。
本文針對高速光纖圖像實時采集的需要,設(shè)計了一種基于PCIE的采集系統(tǒng)。經(jīng)實際測試,系統(tǒng)運行穩(wěn)定可靠。采用X1的PCIE總線接口,DMA寫操作速度大約為138 MB/s,滿足光纖圖像實時記錄的帶寬要求。如果實際需要更高的采集帶寬,可以參考本文設(shè)計,將PCIE接口設(shè)計為X4或X8,以實現(xiàn)更高的采集性能。本設(shè)計具有通用性,可被移植于其他內(nèi)嵌有PCIE硬核及串行收發(fā)器GTX等資源的 FPGA平臺。
參考文獻
[1] BUDRUK R, ANDERSON D,SHANLEY T. PCI Express系統(tǒng)體系結(jié)構(gòu)標準教材[M].田玉敏,等譯.北京:電子工業(yè)出版社,2005.
[2] PCI-SIG. PCI express card electromechanical specification Rev 1.0a[Z].USA: PCI-SIG,2003:5-33.
[3] Virtex-5 FPGA RocketIO GTX transceiver v2.1 user guide[Z].USA:Xilinx,2011.
[4] 使用用于PCI Express設(shè)計的集成端點模塊實現(xiàn)點到點連接[Z].USA:Xilinx ,2007.
[5] 孫科林,周維超,吳欽章.高速實時光纖圖像傳輸系統(tǒng)的實現(xiàn)[J].光學(xué)精密工程,2011,19(9):2228-2235.
[6] 繆露鵬,涂曉東,張新穎.光纖適配卡數(shù)據(jù)總線的研究與實現(xiàn)[J].光通信技術(shù),2011(1):8-10.
[7] 汪精華,胡善清,龍騰. 基于FPGA 實現(xiàn)的高速串行交換模塊實現(xiàn)方法研究[J].電子技術(shù)應(yīng)用,2010,36(5):37-40.
[8] 何瓊,陳鐵,程鑫. 基于FPGA的DMA方式高數(shù)數(shù)據(jù)采集系統(tǒng)設(shè)計[J].電子技術(shù)應(yīng)用,2011,37(12):40-43.