秦固平,毛瑞娟,楊小勇,常振杰
(1.中國(guó)人民解放軍66138部隊(duì),北京 100043; 2.國(guó)家無(wú)線電頻譜管理研究所有限公司,陜西 西安710061)
隨著現(xiàn)代通信技術(shù)的發(fā)展,在無(wú)線電監(jiān)測(cè)領(lǐng)域,大帶寬、高性能和高效率特性已經(jīng)成為無(wú)線電監(jiān)測(cè)設(shè)備中高速數(shù)據(jù)傳輸總線的基本要求。PCIe作為第三代互連技術(shù)已經(jīng)廣泛應(yīng)用于無(wú)線電通信領(lǐng)域[1-3]。PCIe總線采用差分鏈路作為數(shù)據(jù)傳輸通道,由于差分信號(hào)可以使用更高的總線頻率,使得PCIe總線的數(shù)據(jù)傳輸帶寬較其他總線有很大的提高[4-6]。
本文針對(duì)無(wú)線電監(jiān)測(cè)設(shè)備對(duì)高速數(shù)據(jù)傳輸總線的需求,采用基于FPGA的信號(hào)采集處理板卡作為端點(diǎn)設(shè)備,以工控板作為根復(fù)合體,完成了二者之間PCIe總線的接口設(shè)計(jì)。其中,F(xiàn)PGA采用Xilinx Kintex 7系列xc7k410tffg900芯片,工控板配置為Windows7 64位操作系統(tǒng),i5處理器。按PCIe傳輸?shù)牧鞒谭帜K設(shè)計(jì)了PCIe總線的接口邏輯,并在FPGA中實(shí)現(xiàn)64位數(shù)據(jù)接口的DMA模式寫數(shù)據(jù)傳輸,實(shí)現(xiàn)了數(shù)據(jù)的高速傳輸。這種以模塊式的設(shè)計(jì)方法實(shí)現(xiàn)PCIe接口的DMA傳輸模式可以在無(wú)線電監(jiān)測(cè)設(shè)備等嵌入式設(shè)備中得到應(yīng)用。
Xilinx 7系列FPGA的PCIe IP核是一種大帶寬、可擴(kuò)展和可靠性強(qiáng)的串行結(jié)構(gòu)模塊[7-10]。PCIe IP核遵循PCIe基本規(guī)范,內(nèi)部集成了物理層、數(shù)據(jù)鏈路層和事務(wù)層,并且已經(jīng)完成了物理層和數(shù)據(jù)鏈路層的相關(guān)邏輯功能,預(yù)留出了相應(yīng)的邏輯接口供用戶使用[11-13]。IP核中的事務(wù)層采用數(shù)據(jù)包的形式在設(shè)備之間交換信息,用戶只需要對(duì)事務(wù)層進(jìn)行操作,即可完成PCIe設(shè)備之間的數(shù)據(jù)交互[14]。PCIe IP核的頂層功能塊和數(shù)據(jù)接口如圖1所示。
圖1 PCIe IP核的頂層功能塊和數(shù)據(jù)接口
事務(wù)層作為PCIe總線協(xié)議的頂層,首先要完成的是對(duì)事務(wù)層數(shù)據(jù)包進(jìn)行組裝和拆解,Xilinx FPGA PCIe IP核分為2種事務(wù)層接口:64位事務(wù)層接口和128位事務(wù)層接口[15-17]。設(shè)計(jì)中PCIe總線接口選擇64位事務(wù)層接口類型。
典型的64位事務(wù)層接口32位可尋址存儲(chǔ)器寫請(qǐng)求TLP格式嚴(yán)格遵循PCIe總線協(xié)議規(guī)范,PCIe總線上每個(gè)時(shí)鐘周期傳輸64位數(shù)據(jù)。其中Byte0表示第一個(gè)時(shí)鐘周期的低32位數(shù)據(jù),Byte4表示第一個(gè)時(shí)鐘周期的高32位數(shù)據(jù),Byte8表示第2個(gè)時(shí)鐘周期的低32位數(shù)據(jù),Byte12表示第2個(gè)時(shí)鐘周期的高32位數(shù)據(jù),依次類推。
在PCIe體系結(jié)構(gòu)中,根復(fù)合體和存儲(chǔ)器在同一層架構(gòu)上,所以DMA模式在數(shù)據(jù)傳輸過(guò)程中,無(wú)需經(jīng)過(guò)CPU主機(jī)內(nèi)存與外設(shè)內(nèi)存之間可以直接進(jìn)行數(shù)據(jù)交換,并且可以一次傳輸多包數(shù)據(jù),使得設(shè)備具有大的數(shù)據(jù)吞吐量,適用于大帶寬數(shù)據(jù)傳輸[18-20]。由于數(shù)字接收機(jī)中傳輸?shù)臄?shù)據(jù)量大,傳輸帶寬大,所以必須采用DMA模式的存儲(chǔ)器寫事務(wù)進(jìn)行。而傳統(tǒng)的DMA模式每傳輸一包數(shù)據(jù)都需要進(jìn)行一次DMA啟動(dòng)過(guò)程,這樣會(huì)影響數(shù)據(jù)傳輸帶寬,所以在此采用鏈?zhǔn)紻MA模式,鏈?zhǔn)紻MA模式下每啟動(dòng)一次DMA,可以傳輸多包數(shù)據(jù)。該過(guò)程需要配合MSI(Message Signaled Interrupt)中斷才能有效執(zhí)行,MSI中斷即消息中斷,屬于PCIe總線的消息事務(wù)。對(duì)于每次中斷傳輸?shù)臄?shù)據(jù)包數(shù)以及每一包數(shù)據(jù)的大小需要PCIe驅(qū)動(dòng)端與邏輯端協(xié)商而定。
無(wú)線電接收機(jī)PCIe DMA控制結(jié)構(gòu)分為6個(gè)模塊,分別是PCIe IP核、數(shù)據(jù)接收模塊、寄存器控制模塊、DMA控制模塊、數(shù)據(jù)發(fā)送模塊以及數(shù)據(jù)輸入模塊。各模塊的邏輯關(guān)系如圖2所示。
圖2 PCIe DMA控制結(jié)構(gòu)
數(shù)據(jù)輸入模塊主要用來(lái)存儲(chǔ)前端數(shù)據(jù)。在FPGA板卡中,接收機(jī)接收到無(wú)線信號(hào)首先要進(jìn)行模擬信號(hào)到數(shù)字信號(hào)的轉(zhuǎn)換,也就是A/D轉(zhuǎn)換,然后把轉(zhuǎn)換后的數(shù)據(jù)儲(chǔ)存在數(shù)據(jù)輸入模塊中,當(dāng)上位機(jī)發(fā)送傳輸啟動(dòng)信號(hào)之后,再進(jìn)行DMA傳輸。數(shù)據(jù)輸入模塊在本設(shè)計(jì)中用FIFO來(lái)實(shí)現(xiàn),不再對(duì)此模塊做詳細(xì)論述。
數(shù)據(jù)接收模塊是用來(lái)接收用戶對(duì)數(shù)字接收機(jī)的配置信息及DMA傳輸機(jī)制的相關(guān)參數(shù),并根據(jù)PCIe字節(jié)規(guī)范協(xié)議進(jìn)行解包,提出有用信息傳給寄存器控制模塊進(jìn)行存儲(chǔ)。
寄存器控制模塊主要用來(lái)存儲(chǔ)數(shù)據(jù)接收模塊解析出的基地址信息、傳輸包長(zhǎng)度信息、傳輸包大小信息及無(wú)線電監(jiān)測(cè)設(shè)備的相關(guān)參數(shù)信息等,并對(duì)數(shù)據(jù)接收模塊解析后的信息進(jìn)行重新組包,對(duì)數(shù)據(jù)寫入地址進(jìn)行控制。寄存器地址及存儲(chǔ)的內(nèi)容由FPGA部分和驅(qū)動(dòng)部分協(xié)議決定。
DMA寫控制模塊主要完成DMA寫數(shù)據(jù)傳輸過(guò)程中數(shù)據(jù)包長(zhǎng)度的控制和相應(yīng)的DMA寫偏移地址的控制。寫控制模塊是整個(gè)傳輸過(guò)程的核心,需要在地址匹配和時(shí)序方面特別注意,否則就會(huì)在調(diào)試過(guò)程中出現(xiàn)計(jì)算機(jī)死機(jī)或藍(lán)屏。具體實(shí)現(xiàn)過(guò)程將在各模塊的FPGA具體實(shí)現(xiàn)中做詳細(xì)論述。
數(shù)據(jù)發(fā)送模塊根據(jù)DMA寫控制模塊發(fā)送的包頭信息和地址信息對(duì)每一包數(shù)據(jù)按PCIe協(xié)議規(guī)范進(jìn)行組包,然后將組好的數(shù)據(jù)包發(fā)送至PCIe核,經(jīng)過(guò)PCIe核傳輸至計(jì)算機(jī)進(jìn)行存儲(chǔ)。
數(shù)據(jù)接收模塊用來(lái)接收用戶對(duì)無(wú)線電監(jiān)測(cè)設(shè)備的配置信息及DMA傳輸機(jī)制的相關(guān)參數(shù)。用戶在上位機(jī)上通過(guò)驅(qū)動(dòng)程序設(shè)置無(wú)線電監(jiān)測(cè)設(shè)備的參數(shù),PCIe驅(qū)動(dòng)同時(shí)發(fā)送DMA傳輸機(jī)制的相關(guān)配置參數(shù),從而保證PCIe硬件邏輯與上位機(jī)驅(qū)動(dòng)匹配。數(shù)據(jù)接收模塊信號(hào)框圖如圖3所示。
數(shù)據(jù)接收模塊在接收設(shè)備配置信息數(shù)據(jù)之前,需要與PCIe驅(qū)動(dòng)程序配合,先接收驅(qū)動(dòng)發(fā)送的復(fù)位信號(hào)對(duì)硬件進(jìn)行復(fù)位,然后接收到前端發(fā)送的數(shù)據(jù)信息rx_data,根據(jù)PCIe字節(jié)命令規(guī)范對(duì)接收的數(shù)據(jù)包解包。常用的TLP包類型有存儲(chǔ)器寫請(qǐng)求0x40,存儲(chǔ)器讀請(qǐng)求0x00,帶數(shù)據(jù)的完成報(bào)文0x4A,不帶數(shù)據(jù)的完成報(bào)文0x0A。這里對(duì)數(shù)據(jù)接收模塊接收到的數(shù)據(jù)解包,高8 bits為包頭0x40時(shí),表明接收到存儲(chǔ)器寫請(qǐng)求,就會(huì)生成PCIE存儲(chǔ)器寫信號(hào)pcie_reg_wr。根據(jù)協(xié)議解析包數(shù)據(jù)中的信息有基地址信息、傳輸包長(zhǎng)度信息、傳輸包大小的設(shè)置信息等。信息還可以包括用戶根據(jù)需求在上位機(jī)端輸入的無(wú)線電監(jiān)測(cè)設(shè)備的信號(hào)參數(shù)信息,例如信號(hào)帶寬、頻率和通道選擇等信息。最終數(shù)據(jù)接收模塊把從上位機(jī)接收到的相關(guān)參數(shù)信息rx_data和存儲(chǔ)器寫信號(hào)pcie_reg_wr發(fā)送至存儲(chǔ)器控制模塊中。
寄存器控制模塊主要用來(lái)存儲(chǔ)數(shù)據(jù)接收模塊解析出的基地址信息、傳輸包長(zhǎng)度信息、傳輸包大小信息及無(wú)線電監(jiān)測(cè)設(shè)備的相關(guān)參數(shù)信息等。在DMA模式下的數(shù)據(jù)傳輸過(guò)程中,F(xiàn)PGA板卡通過(guò)PCIe驅(qū)動(dòng)接收來(lái)自PC端發(fā)送的傳輸數(shù)據(jù)包的大小信息以及PC端分配的地址信息。寄存器控制模塊對(duì)數(shù)據(jù)接收模塊解析后的信息進(jìn)行重新組包,并對(duì)數(shù)據(jù)寫入地址進(jìn)行控制。
設(shè)計(jì)中涉及到的數(shù)據(jù)信息類型所對(duì)應(yīng)的偏移地址及數(shù)值如表1所示。其中偏移地址由PCIe的FPGA控制部分與PCIe驅(qū)動(dòng)部分的共同協(xié)商確定。
表1 寄存器控制分配表
偏移地址0x08中存儲(chǔ)的信息類型為Base_Addr,表示系統(tǒng)分配的基地址信息,基地址的值由所使用的計(jì)算機(jī)系統(tǒng)硬件分配,在寄存器存儲(chǔ)模塊中把基地址信息存儲(chǔ)到偏移地址0x08中。該偏移地址發(fā)送至DMA控制模塊用于控制DMA數(shù)據(jù)傳輸?shù)牡刂贰?/p>
偏移地址0x0C中存儲(chǔ)的信息類型為TLP_Size,表示DMA傳輸中每一個(gè)TLP包的數(shù)據(jù)大小,單位為Byte,它的值由所使用的計(jì)算機(jī)系統(tǒng)硬件決定,通常為128 Btyes和256 Bytes。設(shè)計(jì)中使用的計(jì)算機(jī)系統(tǒng)是Windows7 64位操作系統(tǒng),TLP_Size被限定在0xXXXX_0020,低13位是有效位,即128 Bytes。
偏移地址0x10中存儲(chǔ)的信息類型為TLP_Count,表示每一次DMA中斷傳輸?shù)腡LP數(shù)據(jù)包數(shù),該包數(shù)設(shè)置太大則調(diào)試會(huì)出現(xiàn)死機(jī)的情況,若設(shè)置太小,則會(huì)增加傳輸相同數(shù)量的數(shù)據(jù)產(chǎn)生中斷的次數(shù),根據(jù)反復(fù)測(cè)試和驗(yàn)證該參數(shù)最終設(shè)置為0xXXXX_2800,低16位為有效位,即10 240包數(shù)據(jù),這個(gè)值能夠使PCIe接口的傳輸性能達(dá)到較優(yōu)的水平。
偏移地址0x14中存儲(chǔ)的信息類型為TLP_User_Cmd,表示預(yù)留給用戶自定義的信息數(shù)據(jù)。例如可以通過(guò)上位機(jī)設(shè)置用戶所需要的無(wú)線電信號(hào)信息,包括信號(hào)帶寬、頻率和通道選擇信息等。
偏移地址0x04中存儲(chǔ)的信息類型為DMA_Start,表示DMA啟動(dòng)和停止信號(hào),其中最低位是有效位,其值為0x0000_0001時(shí)啟動(dòng)DMA操作,啟動(dòng)DMA寫傳輸后,F(xiàn)PGA板卡根據(jù)以上配置信息通過(guò)PCIe接口向PC傳輸相關(guān)數(shù)據(jù)。
寄存器控制模塊信號(hào)框圖如圖4所示。在寄存器控制模塊中,如果檢測(cè)到存儲(chǔ)器寫信號(hào)pcie_reg_wr有效,并且接收到的數(shù)據(jù)為1,對(duì)應(yīng)的地址偏移地址是0x01,這就意味著DMA寫數(shù)據(jù)啟動(dòng)信號(hào)dma_en有效,并發(fā)送給DMA數(shù)據(jù)傳輸請(qǐng)求模塊DMA_REQ。在DMA_REQ模塊中,如果檢測(cè)到dma_en有效,隨即產(chǎn)生DMA寫使能信號(hào)dma_wr_enable,并發(fā)送至DMA寫數(shù)據(jù)控制模塊DMA_WRITE模塊。DMA_WRTTE模塊中如果檢測(cè)到dma_wr_enable信號(hào)有效,則在本模塊中產(chǎn)生傳輸數(shù)據(jù)請(qǐng)求信號(hào)tpl_send_req,使得狀態(tài)機(jī)跳轉(zhuǎn)到SEND_TPL發(fā)送數(shù)據(jù)狀態(tài),到此狀態(tài)后,生成DMA寫請(qǐng)求信號(hào)dma_write_req,并發(fā)送至TX模塊。在TX模塊中,如果狀態(tài)機(jī)處于初始狀態(tài),并且接收到了DMA寫請(qǐng)求信號(hào),就產(chǎn)生DMA寫請(qǐng)求反饋信號(hào)dma_write_ack,再次發(fā)送給DMA_WRITE模塊。
圖4 寄存器控制模塊信號(hào)框圖
DMA寫控制模塊完成DMA寫數(shù)據(jù)傳輸過(guò)程中數(shù)據(jù)包長(zhǎng)度的控制和相應(yīng)的DMA寫偏移地址的控制。DMA寫控制模塊控制過(guò)程的流程圖如圖5所示。在空閑狀態(tài)等待數(shù)據(jù)傳輸包請(qǐng)求信號(hào),如果傳輸包發(fā)送請(qǐng)求有效信號(hào),發(fā)出數(shù)據(jù)傳輸包發(fā)送請(qǐng)求信號(hào),讀取包信息。在該狀態(tài)中,根據(jù)系統(tǒng)反饋的傳輸包可攜帶的最大數(shù)據(jù)長(zhǎng)度信息TLP_Size,確定每一包數(shù)據(jù)攜帶的數(shù)據(jù)長(zhǎng)度。目前,測(cè)試系統(tǒng)中每一包數(shù)據(jù)可攜帶的最大數(shù)據(jù)長(zhǎng)度為32 DW。在PCIe協(xié)議中數(shù)據(jù)長(zhǎng)度以DW為單位計(jì)數(shù),每個(gè)DW等于4 Bytes。
圖5 DMA寫控制模塊控制流程
讀取包信息完畢后準(zhǔn)備幀頭數(shù)據(jù),在該狀態(tài)中對(duì)每一包數(shù)據(jù)的傳輸個(gè)數(shù)進(jìn)行計(jì)數(shù),一包數(shù)據(jù)為128 Bytes,每個(gè)數(shù)據(jù)為8 Bytes,即一包數(shù)據(jù)有16個(gè)64 bits數(shù)。根據(jù)寄存器控制模塊中存儲(chǔ)的基地址Base_Addr對(duì)傳輸數(shù)據(jù)對(duì)應(yīng)的DMA寫偏移地址進(jìn)行控制。傳輸過(guò)程中每傳輸一包數(shù)據(jù),在基地址基礎(chǔ)上增加一包數(shù)據(jù)對(duì)應(yīng)的偏移地址大小,DMA寫偏移地址的增量等于實(shí)際傳輸?shù)囊话臄?shù)據(jù)的大小。目前的測(cè)試系統(tǒng)中,偏移地址每次遞增0x80(128 Bytes)。
當(dāng)每包數(shù)據(jù)都準(zhǔn)備好后向數(shù)據(jù)發(fā)送模塊發(fā)送DMA寫請(qǐng)求信號(hào)dma_write_req,在數(shù)據(jù)發(fā)送模塊處于初始狀態(tài),并且接收到了DMA寫請(qǐng)求信號(hào)dma_write_req,就產(chǎn)生DMA寫請(qǐng)求反饋信號(hào)dma_write_ack,再次發(fā)送給DMA寫控制模塊,如果在DMA寫控制模塊中接收到了DMA寫請(qǐng)求反饋信號(hào)dma_write_ack,就會(huì)產(chǎn)生釋放數(shù)據(jù)信號(hào)buf_rd_en給數(shù)據(jù)輸入模塊。在數(shù)據(jù)輸入模塊接收到buf_rd_en有效之后,就會(huì)輸出待傳輸?shù)臄?shù)據(jù)buf_rd_data,發(fā)送給DMA寫控制模塊。DMA寫控制模塊把得到的數(shù)據(jù)dma_wr_data發(fā)送給數(shù)據(jù)發(fā)送模塊。如果數(shù)據(jù)發(fā)送模塊中狀態(tài)機(jī)跳轉(zhuǎn)到發(fā)送數(shù)據(jù)狀態(tài),就把dma_wr_data發(fā)送給數(shù)據(jù)發(fā)送接口trn_td,最后經(jīng)過(guò)PCIe核傳輸給PC。每發(fā)送完成一包數(shù)據(jù),則跳轉(zhuǎn)至空閑狀態(tài)等待下一次發(fā)送請(qǐng)求。
數(shù)據(jù)發(fā)送模塊首先根據(jù)DMA寫控制模塊發(fā)送的包頭信息和地址信息對(duì)每一包數(shù)據(jù)進(jìn)行組包,然后將組好的數(shù)據(jù)包發(fā)送至PCIe核,經(jīng)過(guò)PCIe核傳輸至計(jì)算機(jī)進(jìn)行存儲(chǔ)。為了避免數(shù)據(jù)傳輸過(guò)程中出現(xiàn)的丟包現(xiàn)象,在此采用狀態(tài)機(jī)的方式根據(jù)PCIe協(xié)議的數(shù)據(jù)包格式將數(shù)據(jù)分狀態(tài)發(fā)出。此外,為了解決因傳輸數(shù)據(jù)量過(guò)大而出現(xiàn)的計(jì)算機(jī)死機(jī)問(wèn)題,在此采用MSI中斷的方式進(jìn)行處理。MSI中斷機(jī)制是PCIe協(xié)議規(guī)范中的內(nèi)部中斷機(jī)制,當(dāng)數(shù)據(jù)發(fā)送模塊發(fā)起MSI中斷時(shí),停止數(shù)據(jù)傳輸,等待來(lái)自PC端的中斷反饋信號(hào)[5,8]。如果數(shù)據(jù)發(fā)送模塊收到了中斷反饋信號(hào),繼續(xù)進(jìn)行數(shù)據(jù)傳輸。這樣就可以保證在PC機(jī)正常工作的情況下數(shù)據(jù)可以持續(xù)高速傳輸。數(shù)據(jù)發(fā)送模塊工作流程如圖6所示。
圖6 數(shù)據(jù)發(fā)送模塊工作流程
在數(shù)據(jù)傳輸過(guò)程中,需要對(duì)數(shù)據(jù)流量進(jìn)行實(shí)時(shí)控制,主機(jī)系統(tǒng)會(huì)實(shí)時(shí)向FPGA反饋當(dāng)前剩余的內(nèi)存容量,只有內(nèi)存充足時(shí)才能進(jìn)行高速傳輸。在開始狀態(tài)如果檢測(cè)到當(dāng)前的內(nèi)存充足,并且接收到了DMA寫請(qǐng)求信號(hào),則將組好的數(shù)據(jù)幀頭信息發(fā)送出去,第2個(gè)時(shí)鐘周期傳輸?shù)?個(gè)數(shù)據(jù),其中包含數(shù)據(jù)和地址信息,第3個(gè)周期傳輸數(shù)據(jù)。
傳輸包數(shù)據(jù)的大小由TLP_Size決定,TLP_Size存儲(chǔ)在寄存器控制模塊的reg中。目前測(cè)試系統(tǒng)中TLP_Size為0x0000_0020,即128 Bytes,而每個(gè)數(shù)據(jù)大小是8 Bytes,所以每一個(gè)TLP包攜帶了16個(gè)數(shù)據(jù)。發(fā)送16個(gè)數(shù)據(jù)需要16個(gè)時(shí)鐘周期,第16個(gè)數(shù)據(jù)發(fā)送完成時(shí)一包數(shù)據(jù)發(fā)送結(jié)束。在寄存器控制模塊reg中存儲(chǔ)了驅(qū)動(dòng)設(shè)置的每次中斷傳輸?shù)臄?shù)據(jù)包數(shù)TLP_Count,目前測(cè)試系統(tǒng)中TLP_Count為0x0000_2800,即10 240包數(shù)據(jù),一次中斷發(fā)送的包數(shù)未達(dá)到TLP_Count時(shí)狀態(tài)機(jī)跳轉(zhuǎn)至IDLE狀態(tài),繼續(xù)發(fā)送數(shù)據(jù)包,當(dāng)發(fā)送包數(shù)達(dá)到TLP_Count時(shí),標(biāo)志一次DMA發(fā)送完成,狀態(tài)機(jī)跳轉(zhuǎn)至中斷響應(yīng)狀態(tài)MSI_trig。在MSI_trig狀態(tài)FPGA向計(jì)算機(jī)端發(fā)送中斷信號(hào),等待系統(tǒng)的響應(yīng)。如果收到了計(jì)算機(jī)端的中斷反饋信號(hào),則將發(fā)送至PCIe總線上的數(shù)據(jù)傳輸?shù)接?jì)算機(jī)上,完成一次DMA數(shù)據(jù)傳輸。一次DMA數(shù)據(jù)傳輸結(jié)束后繼續(xù)進(jìn)行下一次DMA數(shù)據(jù)傳輸過(guò)程,直到上位機(jī)發(fā)起DMA停止指令結(jié)束DMA傳輸。
根據(jù)以上設(shè)計(jì)分析,在賽靈思FPGA開發(fā)平臺(tái)Vivado2017. 1上實(shí)現(xiàn)了各個(gè)模塊的邏輯程序編寫。采用某型號(hào)數(shù)字接收機(jī)中的FPGA數(shù)字處理板卡和工控板作為硬件平臺(tái),其中FPGA型號(hào)為xc7k410tffg900芯片,工控板配置為Windows7 64位操作系統(tǒng),i5處理器,128 G固態(tài)硬盤。PCIe總線為PCIe1. 0版本,數(shù)據(jù)鏈路×8通道,考慮物理層編碼損耗,×8鏈路的理論傳輸速率16 Gbps。測(cè)試過(guò)程中采用Vivado開發(fā)軟件提供的Debug IP核對(duì)各模塊的主要信號(hào)波形進(jìn)行捕捉。DMA寫控制模塊中的信號(hào)波形如圖7所示。
DMA寫控制模塊波形中adc_buf_data信號(hào)為發(fā)送的數(shù)據(jù)信號(hào),由波形圖可以看出發(fā)送一包有效數(shù)據(jù)所占用的時(shí)間為30個(gè)時(shí)鐘周期,每個(gè)時(shí)鐘周期4 ns,每一包數(shù)據(jù)大小128 Bytes,由此可以估算出傳輸帶寬為8. 5 Gbps。
圖7 DMA寫控制模塊調(diào)試波形
文章采用Xilinx FPGA實(shí)現(xiàn)了PCIe高速總線上的數(shù)據(jù)傳輸,完成了DMA寫控制各個(gè)模塊的邏輯程序及調(diào)試。測(cè)試結(jié)果表明:在i5處理器、Windows7 64位操作系統(tǒng)、PCIe1. 0版本和數(shù)據(jù)鏈路為×8條件下DMA寫數(shù)據(jù)傳輸帶寬達(dá)到8. 5 Gbps。該設(shè)計(jì)已在具體項(xiàng)目中使用,且均能保證穩(wěn)定可靠的傳輸速率。如果采用更高配置的操作系統(tǒng),更高的PCIe協(xié)議版本,數(shù)據(jù)的傳輸存儲(chǔ)速率會(huì)得到進(jìn)一步提高。PCIe總線技術(shù)在未來(lái)的無(wú)線電監(jiān)測(cè)領(lǐng)域中將會(huì)有更加廣泛的應(yīng)用。