肖明國,董明利,2,劉 鋒,2,婁小平,2,祝連慶,2
(1.北京信息科技大學 光電測試技術(shù)北京市重點實驗室, 北京 100192;2.生物醫(yī)學檢測技術(shù)及儀器 北京實驗室, 北京 100192)
?
基于PCIe總線的數(shù)據(jù)采集卡設計與實現(xiàn)
肖明國1,董明利1,2,劉 鋒1,2,婁小平1,2,祝連慶1,2
(1.北京信息科技大學 光電測試技術(shù)北京市重點實驗室, 北京 100192;2.生物醫(yī)學檢測技術(shù)及儀器 北京實驗室, 北京 100192)
為了實現(xiàn)對多路高速光信號采集,利用FPGA設計基于PCIe總線的數(shù)據(jù)采集系統(tǒng);對PCIe總線低速Slave通道與高速DMA通道的關(guān)鍵算法進行了研究;首先,介紹了數(shù)據(jù)采集卡的硬件構(gòu)成及基本工作原理,提出了PCIe總線算法需要解決的數(shù)據(jù)傳輸問題;然后,分析數(shù)據(jù)采集卡PCIe總線低速Slave通道和高速DMA通道原理以及實現(xiàn)的關(guān)鍵算法;通過Modelsim和SignalTap工具分別對數(shù)據(jù)傳輸算法進行功能驗證和在線仿真;最后,將設計數(shù)據(jù)采集卡互聯(lián)PCIe上位機進行實際測試;實驗結(jié)果表明,本設計PCIe總線采用X4接口模式,數(shù)據(jù)傳輸系統(tǒng)的數(shù)據(jù)上傳峰值速率為615.38MB/s,可以滿足穩(wěn)定可靠、高帶寬、模塊化等要求。
PCIe總線;數(shù)據(jù)采集卡;FPGA;高速數(shù)據(jù)傳輸
現(xiàn)在的計算機、嵌入式設備中大量使用的總線有PCI、CPCI、VME及它們的擴展。隨著系統(tǒng)對帶寬要求的逐步提高,高速串行總線越來越多的被采用。傳統(tǒng)并行總線標準維護組織如PICMG、VITA,已將高速串行互連技術(shù)引入PCI、CPCI和VME總線中,使高速串行總線得到更廣泛的應用。PCIe總線就是高速串行總線,第三代IO總線標準,串行總線的特點讓PCB信號線減少,布線難度減小、布線性能提高、PCB空間利用效率更高、連接器尺寸更小,而且系統(tǒng)帶寬也更高,這提高了設計靈活性,節(jié)約了系統(tǒng)成本。PCIe總線使用點到點互連技術(shù),每一個PCIe終端都擁有獨立數(shù)據(jù)連接,各個設備之間并發(fā)的數(shù)據(jù)傳輸相互獨立,避免了其他設備干擾,在穩(wěn)定性、帶寬、可擴展性方面優(yōu)勢明顯。
本設計采用PCIe總線互聯(lián),利用Altera公司的Cyclone IV GX系列EP4CGX50 FPGA芯片實現(xiàn),該型FPGA內(nèi)集成有PCIe硬核,支持PCIe 1.0協(xié)議及X4模式,單條通路數(shù)據(jù)傳輸率為2.5 Gbps,理論帶寬1 GB/s。
實驗證明PCIe總線應用于本設計在滿足多路高速光信號數(shù)據(jù)采集要求的同時,基于FPGA的設計可增大系統(tǒng)靈活性,穩(wěn)定性,板卡的速度快,可擴展性強,系統(tǒng)集成度高。
1.1 數(shù)據(jù)采集卡硬件構(gòu)成
本設計數(shù)據(jù)采集系統(tǒng)采用多板卡可插拔結(jié)構(gòu),PCB物理結(jié)構(gòu)相同,如圖1所示,在上位機通過設備號區(qū)分。板卡采用雙FPGA結(jié)構(gòu),外圍模塊由信號調(diào)理模塊、多路高精度AD模塊、信號校準模塊,電源管理模塊構(gòu)成。FPGA1采用Altera公司的Cyclone IV GX系列芯片(內(nèi)部集成PCIe硬核),完成PCIe總線應用層設計工作。
圖1 數(shù)據(jù)采集卡結(jié)構(gòu)框圖
1.2 數(shù)據(jù)采集卡工作原理
數(shù)據(jù)采集卡需要采集信號為高速光信號[1-2],設計了基于PMT傳感器的多增益多通道信號調(diào)理電路,外接PMT模塊通過SPI總線和FPGA2交互,PMT輸出模擬信號通過屏蔽線接入信號調(diào)理模塊。信號校準模塊由兩塊DA芯片產(chǎn)生,一塊產(chǎn)生高精度電壓信號,另一個塊控制DA的電壓輸出,信號轉(zhuǎn)成差分信號后作為信號調(diào)理模塊的校準信號。電源管理模塊實時檢測采集卡上關(guān)鍵電壓信號。FPGA1(帶PCIe硬核)完成多路AD數(shù)據(jù)參數(shù)提取、數(shù)據(jù)封裝、PCIe總線數(shù)據(jù)傳輸功能[3-4]。
上位機根據(jù)數(shù)據(jù)采集卡工作狀態(tài)做出響應、采樣頻率為80 M的多路高精度AD采集數(shù)據(jù),在FPGA中進行數(shù)據(jù)預處理,然后通過PCIe總線實時上傳。
為了實現(xiàn)基于PCIe的數(shù)據(jù)傳輸算法,設計了PCIe數(shù)據(jù)傳輸結(jié)構(gòu)框圖,如圖2所示。PCIe硬核是FPGA固有模塊,LM配置模塊采樣PCIe配置空間信號,包括最大讀請求、最大負載、總線號及設備號等信息,供TLP數(shù)據(jù)包裝配使用。交互層是一座數(shù)據(jù)轉(zhuǎn)換的橋梁,將PCIe硬核多個信號進行組裝,在應用層有接收、發(fā)送模塊、DMA讀寫模塊以及Slave從模塊[5]。
圖2 PCIe數(shù)據(jù)傳輸結(jié)構(gòu)框圖
設計使用的PCIe硬核完成PCIe總線的物理層、數(shù)據(jù)鏈路層設計,這樣應用層數(shù)據(jù)傳輸算法實現(xiàn)就尤為關(guān)鍵,這里主要包括Slave從模塊和DMA寫模塊的設計,這些設計直接關(guān)系到PCIe總線的實際帶寬,系統(tǒng)的穩(wěn)定性,可移植性[6-7]。
針對設計數(shù)據(jù)采集卡控制命令復雜、帶寬要求高的特點,在PCIe總線的應用層設計了Slave讀寫模塊和DMA寫模塊。Slave模塊傳輸數(shù)據(jù)采集卡的各種控制命令、狀態(tài)信息。這些命令數(shù)據(jù)量不大,要求快速響應。
多路并行AD產(chǎn)生的大量數(shù)據(jù)預處理后采用固定格式進行封裝,用DMA通道上傳,DMA結(jié)束后發(fā)送MSI(內(nèi)存信號中斷)數(shù)據(jù)包給上位機,完成本次DMA操作。
2.1 Slave實現(xiàn)算法
Slave模塊接收上位機的內(nèi)存讀、內(nèi)存寫數(shù)據(jù)包,根據(jù)接收到的數(shù)據(jù)包完成相應數(shù)據(jù)操作,如果接收到的TLP數(shù)據(jù)包是控制命令,直接將這些命令下發(fā)到底層模塊,由各自底層模塊解析處理。如果接收到的TLP數(shù)據(jù)包為DMA命令,將相應的命令寫入DMA控制寄存器,DMA模塊根據(jù)控制寄存器的狀態(tài)完成DMA操作。為實現(xiàn)Slave模塊功能,設計了圖3所示狀態(tài)機。
在RX_IDLE狀態(tài)時,根據(jù)接收請求信號(rx_req)狀態(tài),讀取數(shù)據(jù)包類型,進入RX_DESC_ACK狀態(tài)。在RX_DESC_ACK狀態(tài)讀取數(shù)據(jù)包的長度、地址、Tag,同時判斷數(shù)據(jù)包類型,如果是存儲器讀請求(MRd)TLP,程序?qū)⑦M入RX_START_CPL狀態(tài),將數(shù)據(jù)包地址、數(shù)據(jù)請求長度字段從內(nèi)存中讀出,組織帶數(shù)據(jù)的完成(CPLD)TLP數(shù)據(jù)包的發(fā)送。如果接收數(shù)據(jù)包為存儲器寫請求(MWr)TLP,進入RX_DV_PAYLD狀態(tài),然后讀出TLP數(shù)據(jù)包中數(shù)據(jù)。
圖3 Slave模塊主狀態(tài)機
2.2 DMA寫模塊實現(xiàn)算法
DMA寫模塊讀取DMA控制寄存器狀態(tài),通過發(fā)送存儲器寫請求TLP數(shù)據(jù)完成DMA功能。PCIe總線的DMA操作需考慮數(shù)據(jù)地址對齊[8]、4K邊界、數(shù)據(jù)包拆分等問題。
有一種方法是約定DMA命令是雙字對齊且不跨越4 KB邊界,這是DMA數(shù)據(jù)傳輸效率很高的一種處理方法。但是這樣會限制驅(qū)動端程序的靈活性、可移植性。
本設計參考PCIe規(guī)范,有效地解決了地址對齊、4K邊界對齊及數(shù)據(jù)拆分問題。在PCIe規(guī)范中用4位的First BE和Last BE字段分別表示向前對齊向后對齊[8],相應位為1,則對應的字節(jié)有效。
向前X字節(jié)對齊使用Headx(Y)函數(shù):
Headx(Y)=Y-(YmodX)
(1)
向后X字節(jié)對齊使用Tailx(Y)函數(shù):
Tailx(Y)=Headx(Y)+X-1
(2)
其中:Y是實際地址;X是字節(jié)對齊單位。
DMA寫模塊從DMA控制寄存器中獲得PC端地址(Address),長度(Length),單位為雙字(DW),結(jié)束地址為End_Address。
End_Address=Address+Length-1
(3)
在數(shù)據(jù)讀TLP中,長度(length)字段以DW(雙字)為基本單位,通過First DW BE 和Last DW BE字段屏蔽首尾沒有對齊的數(shù)據(jù)。因此L中存放的長度并不是TLP使用的實際長度。
用M表示數(shù)據(jù)TLP中發(fā)送的數(shù)據(jù)長度
M=(Taillx(B)-Headx(A)+1)?2
(4)
其中:M的單位為雙字,X在應用中為4,通過以上公式可以方便的算出DMA寫TLP中Length的長度。
本設計中最大負載(Max_payload)為0x20DW(雙字),即DMA寫時每個TLP數(shù)據(jù)包不能超過128個字節(jié),然后根據(jù)M的實際大小判斷數(shù)據(jù)的拆分方式。
在算法中利用公式(2)計算TLP數(shù)據(jù)包的Length(長度),X為4,即雙字對齊,當M在1到20之間時,確定相應First BE和Last BE參數(shù)。當M大于20時,根據(jù)TLP的起始地址A,計算距離此地址最近的128字節(jié)對齊的地址,其他TLP以0x80字節(jié)對齊,每個內(nèi)存寫請求TLP數(shù)據(jù)包的長度為128個字節(jié),最后一個數(shù)據(jù)包的起始地址0x20個DW對齊,結(jié)束地址為B。
采用以上方法數(shù)據(jù)包的發(fā)送效率很高,因為0x20是0x1000的公約數(shù),不會超越4 KB。因此設計了DMA寫模塊狀態(tài)機框圖,如圖4所示。
在Idle狀態(tài),如果接收FIFO中有數(shù)據(jù),進入到RD_DW0狀態(tài)讀出DMA控制寄存器狀態(tài),包括源地址、發(fā)送長度。在RD_QW1狀態(tài)更新下一個DMA描述表地址,計算DMA發(fā)送完成后的最大地址并進入到TX_LENGTH狀態(tài),如果此時程序沒有在發(fā)送消息信號中斷(MSI),按照上文拆包原理計算發(fā)送長度,如果此時程序正在發(fā)送MSI數(shù)據(jù)包,則程序返回Idle狀態(tài)。在TX_LENGTH狀態(tài),判斷數(shù)據(jù)發(fā)送長度,在START_TX狀態(tài),激活發(fā)送READY信號進入MWR_REQ狀態(tài)。在MWR_REQ狀態(tài)發(fā)送幀和數(shù)據(jù)有效信號,然后進入MWR_DV狀態(tài)發(fā)送數(shù)據(jù)。在MWR_DV狀態(tài)計算DMA的實際發(fā)送長度,如果數(shù)據(jù)發(fā)送完畢則進入DONE狀態(tài)機,發(fā)送MSI中斷,完成完整的DMA寫模塊。
圖4 DMA寫模塊狀態(tài)機
為了驗證上文Slave模塊和DMA模塊程序的邏輯功能的正確性以及FPGA綜合布線后時序收斂,設計了Modelsim功能仿真和SinalTap在線仿真[9]。
3.1 Modelsim仿真實驗
本設計數(shù)據(jù)采集卡為EP(Endpoint)端,Modelsim仿真要求模擬RC端(Root Complex),通過給EP端發(fā)送各種測試數(shù)據(jù)包來進行仿真。
考慮到仿真波形的復雜性,論文提取了幾個特征信號來表示相應功能,如圖5所示,仿真圖描述了RC端給EP端發(fā)送數(shù)據(jù)包時EP端接收到的信號波形圖。從仿真圖中可以看出Slave模塊滿足數(shù)據(jù)接收邏輯功能。
圖5 Slave模塊仿真波形
圖6是DMA寫模塊數(shù)據(jù)包仿真圖,描述了DMA寫模塊發(fā)送內(nèi)存寫數(shù)據(jù)包的關(guān)鍵信號波形圖,由波形圖可知,DMA寫模塊的邏輯功能正確。
圖6 DMA寫模塊仿真波形
3.2 SignalTap仿真實驗
功能仿真完成后,進行綜合布線,加載Altera公司提供的邏輯分析儀IP核,用SignalTap工具進行在線仿真,實驗時要求硬件連接PC上位機,通過PC端驅(qū)動程序運行DMA命令,在PC機上通過SignalTap界面觀察信號的波形,圖7為DMA寫模塊的在線仿真波形圖。發(fā)送請求為高時置位幀有效信號,然后數(shù)據(jù)有效信號置位,然后開始數(shù)據(jù)發(fā)送。從發(fā)送數(shù)據(jù)(tx_desc)狀態(tài)可以看出TLP包頭為3DW,為帶數(shù)據(jù)的存儲器寫請求,發(fā)送長度為0x20個雙字。第一個數(shù)據(jù)包的發(fā)送地址0x9EFD1068,第二個包的發(fā)送地址為0x9EFD10E8,發(fā)送數(shù)據(jù)為0,此可知系統(tǒng)DMA寫操作滿足設計時序。
圖7 DMA寫模塊在線仿真波形
3.3 測試實驗
為了實際測試PCIe數(shù)據(jù)采集卡的數(shù)據(jù)傳輸性能,在PC端編寫相應驅(qū)動程序測試硬件,通過在驅(qū)動中進行多次DMA讀請求,通過開始結(jié)束時間戳來計算DMA數(shù)據(jù)上傳帶寬。
實驗結(jié)果證明:在PC端驅(qū)動程序驅(qū)動下系統(tǒng)運行正常,工作穩(wěn)定,測試結(jié)果顯示數(shù)據(jù)傳輸系統(tǒng)PCIe接口數(shù)據(jù)上傳峰值帶寬為615.38 MB/s,滿足設計需要。
本文根據(jù)多通道高速光信號采集系統(tǒng)的復雜性,高寬寬特點,以及設計的靈活性、穩(wěn)定性、低成本性要求,利用帶PCIe硬核的FPGA設計了基于PCIe總線的數(shù)據(jù)采集板卡,首先分析了采集卡的硬件架構(gòu)、工作原理,然后根據(jù)要求設計了基于PCIe總線的Slave從模塊、DMA模塊,詳細分析了本設計TLP數(shù)據(jù)包拆分原則以及4 K邊界對齊問題。實驗結(jié)果證明:基于PCIe接口數(shù)據(jù)采集卡設計滿足實際應用要求。
[1] Liu X,Huo Z ,Yun H , et al . Application of flow cytometry to rapid detection of bacteria [J]. Microbiology China , 2014,41(1): 161-168.
[2] 裴智果,王 策,陳忠祥,等.用于流式細胞儀的數(shù)據(jù)采集系統(tǒng)設計與實現(xiàn)[J].電子測量技術(shù),2015(7):84-88.[3] 馬曉榮,吳銀川.一種多通道數(shù)據(jù)采集系統(tǒng)設計研究[J].電子設計工程,2012,20(19):14-1.
[4] 馬 航,季振宇,史學濤,等. 一種基于FPGA控制的多路并行數(shù)據(jù)采集設計方法[J]. 醫(yī)療衛(wèi)生裝備,2014(2):1-3.
[5] Altera Corporation.IP Compiler for PCI Express UserGuide[Z/OL].http://www.altera.com/literature/ug/ug_pci_express.pdf, 2010.[6] A High Speed DMA Transaction Method for PCI Express Devices[J]. Journal of Electronic Science and Technology of China,2009,04:380-384.
[7] 薛巨峰,黃愛娟.基于PCIe總線的多路復用DMA高速傳輸系統(tǒng)的設計[J].電子技術(shù),2015(5):87-91.
[8] 郭政慧,王 巖.內(nèi)存對齊對網(wǎng)絡通信程序的影響[J].實驗室研究與探索,2010,29(5):68-70.
[9] 郝曉鵬.基于SignalTap Ⅱ和Modelsim的聯(lián)合仿真技術(shù)[J].計算機與網(wǎng)絡,2014,(13):46-48.
PCIe Bus Data Acquisition Card Design and Implementation
Xiao Mingguo1, Dong Mingli1,2, Liu feng1,2, Lou Xiaoping1,2, Zhu Lianqing1,2
(1.Beijing Key Laboratory for Optoelectronic Test Technology, Beijing Information Science & Technology University,Beijing 100192, China; 2.Beijing Laboratory for Biomedical Detection Technology and Instrument, Beijing 100192,China)
In order to achieve multi-channel high-speed optical signal acquisition, a data acquisition system based on PCIe bus is established and its applied algorithms such as low-speed Slave channel and high-speed DMA channel are investigated. First, based on hardware structure and basic operating principle of data acquisition card, the algorithms of data transmission problems for PCIe bus are presented.Then,the principles and algorithms of low-speed Slave channel and high-speed DMA channel are analyzed. Function simulation and online simulation of the data transmission algorithm is successfully fulfilled with Modelsim and SignalTap.Finally,plug the data acquisition card into PC for the actual test.Experimental results indicate that the data acquisition system’s peak bandwidth based on PCIe bus with X4 mode is 615.38 MB/s. It can satisfy the system requirements of strong stabilization, high bandwidth, as well as modularization.
PCIe bus; data acquisition card; FGPA; high-speed data transmission
2015-10-12;
2015-11-06。
北京市屬高等學校創(chuàng)新團隊建設與教師職業(yè)發(fā)展計劃項目(IDHT20130518);教育部長江學者和創(chuàng)新團隊發(fā)展計劃(IRT1212);北京市教委科研計劃項目(KM201511232006)。
肖明國(1989-),男,湖北襄陽人,碩士研究生,主要從事生物醫(yī)學檢測儀器方向的研究。
1671-4598(2016)03-0252-03DOI:10.16526/j.cnki.11-4762/tp
TP
A