基于Virtex-6的PCI Express高速采集卡設(shè)計(jì)
摘要:為了提高數(shù)據(jù)采集速率,適應(yīng)大數(shù)據(jù)量交互處理要求,介紹了一種應(yīng)用Virtex-6芯片的PCI Express高速采集卡設(shè)計(jì)。Virtex-6內(nèi)嵌PCIE協(xié)議硬核能完成完整的PCIE分層協(xié)議,實(shí)現(xiàn)與上位機(jī)通信。設(shè)計(jì)了DMA控制器,作為采集卡數(shù)據(jù)傳輸主控,實(shí)現(xiàn)基于PCI Express總線的DMA高速數(shù)據(jù)傳輸方案。主機(jī)軟件系統(tǒng)包括驅(qū)動(dòng)程序和應(yīng)用軟件2部分。經(jīng)實(shí)驗(yàn)測(cè)試,該采集卡能完成時(shí)外部高速數(shù)據(jù)的實(shí)時(shí)采集,性能穩(wěn)定可靠。
關(guān)鍵詞:數(shù)據(jù)采集;PCI Express;FPGA;DMA
隨著計(jì)算機(jī)技術(shù)的發(fā)展,以及大數(shù)據(jù)量交互的需要,硬件系統(tǒng)對(duì)PC總線傳輸速率、數(shù)據(jù)完整性提出了越來(lái)越高的應(yīng)用要求。傳統(tǒng)的PCI總線技術(shù)雖然經(jīng)過(guò)不斷的改進(jìn),開發(fā)出64 b,66 MHz的并行協(xié)議PCI-X標(biāo)準(zhǔn),但由于并行總線整體設(shè)計(jì)難度以及造價(jià)高昂,主流的PCI技術(shù)已經(jīng)成為限制數(shù)據(jù)傳輸系統(tǒng)性能發(fā)揮的瓶頸。因此,第3代I/O技術(shù)PCI Express總線標(biāo)準(zhǔn)一經(jīng)推出即成為取代PCI總線的下一代標(biāo)準(zhǔn),并得到迅速的發(fā)展。
PCI Express總線利用串行的連接特點(diǎn)能輕松的將數(shù)據(jù)整體傳輸速度提到一個(gè)更高的頻率,達(dá)到遠(yuǎn)遠(yuǎn)超出以往PC總線的傳輸速度,同時(shí)保證了數(shù)據(jù)的完整性。PCI Express連接采用點(diǎn)對(duì)點(diǎn)差分傳輸,可以被配置成最高x32的數(shù)據(jù)帶寬,其中:PCI Express Gen2.0標(biāo)準(zhǔn)的x1通道傳輸能力達(dá)到單向5 Gb/s。PCI Express總線設(shè)備可以通過(guò)主機(jī)橋接器芯片進(jìn)行基于主機(jī)的傳輸,也可以通過(guò)交換器進(jìn)行多點(diǎn)傳輸,這極大的拓展了PC總線的開發(fā)靈活性。Xilinx公司的Virtex-6系列FPGA芯片內(nèi)嵌了PCI Express協(xié)議硬核,支持x1,x2,x4和x8通道傳輸,為實(shí)現(xiàn)PCI Express總線解決方案單片集成提供了可能。
本文在研究PCI Express協(xié)議標(biāo)準(zhǔn)及其接口技術(shù)的基礎(chǔ)上,設(shè)計(jì)了基于Virtex-6 FPGA芯片的PCI Express高速數(shù)據(jù)采集卡,實(shí)現(xiàn)了外部系統(tǒng)與PC的數(shù)據(jù)交互。
1 系統(tǒng)總體設(shè)計(jì)
PCI Express采集系統(tǒng)組成框圖如圖1所示。
采集系統(tǒng)以FPGA作為采集卡的控制核心,外部數(shù)據(jù)經(jīng)數(shù)據(jù)接口傳入FPGA,F(xiàn)PGA通過(guò)內(nèi)部邏輯對(duì)高速數(shù)據(jù)進(jìn)行必要的時(shí)序控制和相關(guān)處理后將數(shù)據(jù)存儲(chǔ)到片外的SDRAM進(jìn)行緩存,然后采集卡在總線主控DMA控制器的控制下,通過(guò)PCIE x8通道將緩存的數(shù)據(jù)寫入計(jì)算機(jī)內(nèi)存。上位機(jī)由驅(qū)動(dòng)軟件識(shí)別PCIExpress采集卡,并設(shè)置DMA控制寄存器,通過(guò)上層應(yīng)用軟件接收硬件電路發(fā)送到內(nèi)存的數(shù)據(jù),并在每次傳輸結(jié)束是處理中斷。采用DMA模式傳輸實(shí)現(xiàn)了在實(shí)時(shí)數(shù)據(jù)高速采集的同時(shí),不影響上位機(jī)對(duì)數(shù)據(jù)的處理工作,不僅提高了采集系統(tǒng)整體的采集速度,也保證了數(shù)據(jù)質(zhì)量,以及測(cè)試分析完整性。
數(shù)據(jù)接口模塊完成外部數(shù)據(jù)的差分接收,這有利于保證高速數(shù)據(jù)的傳輸質(zhì)量。Virtex-6 FPGA實(shí)時(shí)接收差分信號(hào),并在Data Processor模塊中進(jìn)行解碼然后根據(jù)一定時(shí)序通過(guò)高速FIFO緩存送入外部SDRAM存儲(chǔ)模塊。PCI Express IP Core為Virtex-6 FPGA內(nèi)部集成協(xié)議硬核,完成數(shù)據(jù)的分層打包,DMA控制器作為PCI Express總線傳輸?shù)闹骺兀瑢?shí)現(xiàn)了DMA方式傳輸。
2 采集卡硬件設(shè)計(jì)
2.1 基于IP Core的PCI Express接口設(shè)計(jì)
本采集卡采用Xilinx公司的Virtex-6系列FPGA芯片作為核心控制器。該款FPGA中內(nèi)置了PCI Express集成模塊和RocketIO GTP收發(fā)器,提供了符合《PCI Express基本規(guī)范v2.0》的PCI-E解決方案,單通道最高設(shè)計(jì)速度達(dá)到5 Gb/s。根據(jù)PCI-E總線的分層模型,Virtex-6集成端點(diǎn)模塊提供事務(wù)層(TL)、數(shù)據(jù)鏈路層(DLL)、物理層(PHYMAC)以及配置空間所具有的全部功能。通過(guò)使用Xilinx公司提供的PCI Express LogiCORE IP Endpoint Block Plus核,可實(shí)現(xiàn)符合PCI-E總線協(xié)議的數(shù)據(jù)傳輸。Endpoint Block Plus核在內(nèi)部例化了Virtex-6集成端點(diǎn)模塊,實(shí)現(xiàn)了集成端點(diǎn)模塊和GTP收發(fā)器之間的數(shù)據(jù)傳輸。集成硬核頂層模塊接口組成如圖2所示。
Xilinx公司所提供的PCI Express解決方案,遵守了PCIE分層協(xié)議標(biāo)準(zhǔn),從完成對(duì)接收的數(shù)據(jù)進(jìn)行分層打包,通過(guò)PCIE接口與計(jì)算機(jī)通信。分層傳輸過(guò)程如圖3所示。
其中處理層主要是接受從軟件層送來(lái)的讀寫請(qǐng)求,并且建立一個(gè)請(qǐng)求包傳輸?shù)綌?shù)據(jù)鏈路層。作為事務(wù)層和物理層之間的接口,數(shù)據(jù)鏈路層通過(guò)維護(hù)鏈路活躍狀態(tài)信息、流控制初始化和流控制來(lái)確保數(shù)據(jù)的完整性、數(shù)據(jù)包的有序性和數(shù)據(jù)傳輸?shù)目煽啃?。物理層位于PCIE結(jié)構(gòu)的最底層,主要實(shí)現(xiàn)鏈路的建立、通路的分配、時(shí)鐘的編碼和并行數(shù)據(jù)與串行數(shù)據(jù)的之間的轉(zhuǎn)換。在初始化階段,在無(wú)需固件或操作系統(tǒng)軟件的介入下,物理層建立狀況狀態(tài)機(jī)通過(guò)檢測(cè)、配置和輪詢來(lái)協(xié)商可用的通道數(shù)目和雙方的工作頻率。
2.2 高速傳輸實(shí)現(xiàn)
作為采集卡數(shù)據(jù)傳輸主控,F(xiàn)PGA內(nèi)部實(shí)現(xiàn)了高速數(shù)據(jù)傳輸DMA控制操作。為了接收上位機(jī)發(fā)出的DMA控制命令,系統(tǒng)首先必須分配一定大小的FPGA內(nèi)部Block RAM用作DMA控制寄存器,在驅(qū)動(dòng)程序的映射下,該Block RAM在采集卡插入系統(tǒng)是會(huì)被映射到主機(jī)內(nèi)存空間,于是主機(jī)只需訪問映射好的內(nèi)存空間即可實(shí)現(xiàn)對(duì)FPGA內(nèi)部控制寄存器的訪問。
當(dāng)系統(tǒng)啟動(dòng)傳輸時(shí),上位機(jī)首先將DMA傳輸?shù)哪康牡刂穼懭胂鄳?yīng)的DMA控制寄存器。在接收到采集命令后,采集卡開始接收外部數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行解碼、整形,按順序?qū)?shù)據(jù)依次通過(guò)高速FIFO送入外部SDRAM進(jìn)行緩存。當(dāng)SDRAM數(shù)據(jù)有效后,通過(guò)觸發(fā)信號(hào)啟動(dòng)DMA傳輸,DMA控制器將申請(qǐng)從SDRAM中將數(shù)據(jù)寫入到數(shù)據(jù)發(fā)送FIFO,由發(fā)送模塊將發(fā)送數(shù)據(jù)FIFO中的數(shù)據(jù)按照Endpoint Block Plus核的事務(wù)(TRN)接口的格式提交給IP核,由IP核按照PCI Express總線規(guī)范將數(shù)據(jù)傳至FPGA的GTP收發(fā)器,GTP收發(fā)器直接連接了PCI-E的差分?jǐn)?shù)據(jù)傳輸對(duì),于是通過(guò)PCI-E x8通道將數(shù)據(jù)以DMA方式直接存入主機(jī)物理內(nèi)存中。當(dāng)存完一個(gè)數(shù)據(jù)包后發(fā)出中斷消息通知主機(jī)上層應(yīng)用程序處理數(shù)據(jù)以及將物理內(nèi)存中的數(shù)據(jù)轉(zhuǎn)存至硬盤,之后即進(jìn)入下一個(gè)數(shù)據(jù)包的傳輸,如此反復(fù),直到收到主機(jī)的停止DMA傳輸命令,即完成當(dāng)前幀的采集和傳輸并停止下一幀的采集和傳輸。
3 PCI Express采集卡驅(qū)動(dòng)設(shè)計(jì)
本系統(tǒng)驅(qū)動(dòng)程序在Windows XP操作系統(tǒng)下,應(yīng)用微軟公司的Driver Studio平臺(tái)進(jìn)行開發(fā)。Driver Studio平臺(tái)提供了驅(qū)動(dòng)程序開發(fā)所需的WDM(Windows Driver Mode,Windows驅(qū)動(dòng)程序模型),包括VtoolsD、DriverWorks、DriverNetWorks和SoftICE等開發(fā)工具,應(yīng)用該平臺(tái)開發(fā)降低了驅(qū)動(dòng)程序開發(fā)的難度,同時(shí)了提高了代碼的可靠性。
3.1 硬件驅(qū)動(dòng)
驅(qū)動(dòng)程序?qū)ν獠坑布脑L問是通過(guò)DriverWorks提供的2個(gè)類來(lái)實(shí)現(xiàn)的,其中,KioRang類實(shí)現(xiàn)對(duì)I/O映射芯片的訪問,KMemoryRang類實(shí)現(xiàn)對(duì)內(nèi)存映射芯片的訪問。本系統(tǒng)選擇了KMemoryRang完成PCIExpress硬件的訪問,主要調(diào)用函數(shù)如表1所示。
初始化KMemoryRang類的操作是在驅(qū)動(dòng)程序啟動(dòng)例程中執(zhí)行的,主要執(zhí)行程序如下:
當(dāng)驅(qū)動(dòng)程序完成初始化時(shí),應(yīng)用端軟件將通過(guò)inb()和outb()等函數(shù)對(duì)外部硬件電路進(jìn)行訪問,讀寫數(shù)據(jù)。
3.2 DMA傳輸實(shí)現(xiàn)
采用DMA傳輸能極大的減輕主機(jī)處理負(fù)擔(dān),特別適用于大數(shù)據(jù)量處理系統(tǒng)。采用DriverWorks提供的KDmaAdapter類可輕松建立一個(gè)DMA傳輸鏈路,實(shí)現(xiàn)DMA讀寫操作。用于FPGA總線協(xié)議模塊軟件層完成了相關(guān)DMA傳輸?shù)目刂?,所以?qū)動(dòng)程序DMA傳輸只需子在系統(tǒng)啟動(dòng)DMA傳輸時(shí),身心相應(yīng)的內(nèi)存作為公共緩沖區(qū),用于外部DMA控制器存入數(shù)據(jù)文件,這里需要調(diào)用DriverWorks提供的KCommonDmaBuffer類,該類常用函數(shù)如表2所示。
VirtaulAddress()函數(shù)返回的內(nèi)核模式地址是提供給驅(qū)動(dòng)程序讀寫公用緩沖區(qū)用的,而進(jìn)行DMA傳輸時(shí)需要用到緩沖區(qū)的物理地址,也即需要寫入DMA參數(shù)寄存器的是緩沖區(qū)的物理地址。
3.3 總線中斷處理
采集卡一共需要處理三種中斷請(qǐng)求,分別是DMA寫完成,DMA讀完成和錯(cuò)誤中斷請(qǐng)求。在Driver Works平臺(tái)中,KInterrupt類可用于處理硬件中斷,其主要函數(shù)包括中斷寄存器初始化,中斷連接函數(shù),實(shí)現(xiàn)了將一個(gè)中斷服務(wù)例程連接到一個(gè)中斷和解除其連接等。
中斷處理函數(shù)首先在驅(qū)動(dòng)程序構(gòu)造的函數(shù)中調(diào)用MEMBER_ISR(class_name,fuction_name),聲明中斷服務(wù)例程為該類的一個(gè)成員函數(shù),接著在驅(qū)動(dòng)程序驅(qū)動(dòng)例程中調(diào)用InitializeAndConnect(),初始化中斷類實(shí)例,并與中斷服務(wù)例程連接起來(lái)。
這樣就完成了對(duì)外部硬件中斷的處理,當(dāng)每次驅(qū)動(dòng)程序檢測(cè)到硬件產(chǎn)生中斷脈沖時(shí),中斷服務(wù)函數(shù)隨即被調(diào)用,從而轉(zhuǎn)入相應(yīng)中斷處理程序中執(zhí)行。
4 采集卡性能測(cè)試
為測(cè)試采集系統(tǒng)性能,自行設(shè)計(jì)了應(yīng)用軟件對(duì)采集卡數(shù)據(jù)傳輸速率進(jìn)行統(tǒng)計(jì),在Windows環(huán)境下,采用多種數(shù)據(jù)量進(jìn)行DMA方式讀寫。應(yīng)用端軟件根據(jù)數(shù)設(shè)定的數(shù)據(jù)包大小,申請(qǐng)不同的內(nèi)存空間,并將虛擬地址映射到FPGA的DMA寄存器。實(shí)際測(cè)試采集速率結(jié)果如圖4所示。
根據(jù)圖4的測(cè)試結(jié)果,總線DMA傳輸速率與數(shù)據(jù)塊大小相關(guān)。當(dāng)設(shè)定系統(tǒng)數(shù)據(jù)塊(即開辟的主機(jī)內(nèi)存)大于32 Mb時(shí),采集卡的采集速率穩(wěn)定在5.6 Gb/s。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)大幅度地提高了數(shù)據(jù)交互速度,發(fā)揮了PCI Express總線的優(yōu)越性能。
5 結(jié)語(yǔ)
本文應(yīng)用Xilinx公司的VirteX-6芯片設(shè)計(jì)了PCIExpress高速采集卡,通過(guò)調(diào)用FPGA內(nèi)部的PCIE集成協(xié)議硬核,配合總線DMA控制器,能夠快速可靠地采集外部差分?jǐn)?shù)據(jù),具有解碼、整形,高速采集存儲(chǔ)的功能,是大數(shù)據(jù)量交互的有效解決方案。