基于Virtex-6的PCI Express高速采集卡設(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所示。本文引用地址:http://2s4d.com/article/192810.htm
VirtaulAddress()函數(shù)返回的內(nèi)核模式地址是提供給驅(qū)動(dòng)程序讀寫公用緩沖區(qū)用的,而進(jìn)行DMA傳輸時(shí)需要用到緩沖區(qū)的物理地址,也即需要寫入DMA參數(shù)寄存器的是緩沖區(qū)的物理地址。
3.3 總線中斷處理
采集卡一共需要處理三種中斷請求,分別是DMA寫完成,DMA讀完成和錯(cuò)誤中斷請求。在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ù)例程連接起來。
這樣就完成了對外部硬件中斷的處理,當(dāng)每次驅(qū)動(dòng)程序檢測到硬件產(chǎn)生中斷脈沖時(shí),中斷服務(wù)函數(shù)隨即被調(diào)用,從而轉(zhuǎn)入相應(yīng)中斷處理程序中執(zhí)行。
4 采集卡性能測試
為測試采集系統(tǒng)性能,自行設(shè)計(jì)了應(yīng)用軟件對采集卡數(shù)據(jù)傳輸速率進(jìn)行統(tǒng)計(jì),在Windows環(huán)境下,采用多種數(shù)據(jù)量進(jìn)行DMA方式讀寫。應(yīng)用端軟件根據(jù)數(shù)設(shè)定的數(shù)據(jù)包大小,申請不同的內(nèi)存空間,并將虛擬地址映射到FPGA的DMA寄存器。實(shí)際測試采集速率結(jié)果如圖4所示。
根據(jù)圖4的測試結(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īng)用Xilinx公司的VirteX-6芯片設(shè)計(jì)了PCIExpress高速采集卡,通過調(diào)用FPGA內(nèi)部的PCIE集成協(xié)議硬核,配合總線DMA控制器,能夠快速可靠地采集外部差分?jǐn)?shù)據(jù),具有解碼、整形,高速采集存儲(chǔ)的功能,是大數(shù)據(jù)量交互的有效解決方案。
評論