《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > 基于NI PCI Express數(shù)字I/O卡的高速數(shù)據(jù)傳輸實(shí)現(xiàn)
基于NI PCI Express數(shù)字I/O卡的高速數(shù)據(jù)傳輸實(shí)現(xiàn)
來(lái)源:微型機(jī)與應(yīng)用2013年第3期
王 婧,王 榮,周 雪,易 鳴
(中國(guó)人民解放軍信息工程大學(xué),河南 鄭州 450001)
摘要: 針對(duì)軟件無(wú)線電系統(tǒng)中數(shù)據(jù)實(shí)時(shí)處理和高速傳輸?shù)囊?,設(shè)計(jì)了一種基于NI PCI Express接口的高速數(shù)據(jù)傳輸方案。利用NI公司的數(shù)字I/O卡以及配套驅(qū)動(dòng)開發(fā)軟件搭建開發(fā)平臺(tái)。信號(hào)調(diào)理設(shè)備和微機(jī)間的數(shù)據(jù)通過(guò)PCI Express接口以DMA方式進(jìn)行傳輸。數(shù)字I/O卡的32通道雙向并行數(shù)據(jù)傳輸速率高達(dá)50 Mb/s。該方案實(shí)現(xiàn)了靈活的數(shù)據(jù)傳輸控制、精確的時(shí)鐘同步以及可靠的數(shù)據(jù)容錯(cuò)功能。工程實(shí)踐驗(yàn)證了該方案的有效性和可靠性。
Abstract:
Key words :

摘  要: 針對(duì)軟件無(wú)線電系統(tǒng)中數(shù)據(jù)實(shí)時(shí)處理和高速傳輸?shù)囊螅O(shè)計(jì)了一種基于NI PCI Express接口的高速數(shù)據(jù)傳輸方案。利用NI公司的數(shù)字I/O卡以及配套驅(qū)動(dòng)開發(fā)軟件搭建開發(fā)平臺(tái)。信號(hào)調(diào)理設(shè)備和微機(jī)間的數(shù)據(jù)通過(guò)PCI Express接口以DMA方式進(jìn)行傳輸。數(shù)字I/O卡的32通道雙向并行數(shù)據(jù)傳輸速率高達(dá)50 Mb/s。該方案實(shí)現(xiàn)了靈活的數(shù)據(jù)傳輸控制、精確的時(shí)鐘同步以及可靠的數(shù)據(jù)容錯(cuò)功能。工程實(shí)踐驗(yàn)證了該方案的有效性和可靠性。
關(guān)鍵詞: 數(shù)據(jù)采集;NI PCI Express;高速數(shù)據(jù)傳輸;DMA;實(shí)時(shí)處理

 軟件無(wú)線電系統(tǒng)只在天線到A/D轉(zhuǎn)換和D/A轉(zhuǎn)換環(huán)節(jié)的射頻段存在模擬信號(hào),其中頻和基帶的處理全部采用數(shù)字邏輯運(yùn)算實(shí)現(xiàn),數(shù)據(jù)處理量大,實(shí)時(shí)性要求較高。某些情況下高速傳輸又是實(shí)時(shí)處理的前提,因此,軟件無(wú)線電實(shí)現(xiàn)的關(guān)鍵是需要有高速的數(shù)據(jù)處理與傳輸設(shè)備。為了將數(shù)據(jù)處理結(jié)果通過(guò)數(shù)據(jù)采集設(shè)備實(shí)時(shí)傳送給微機(jī),信號(hào)調(diào)理設(shè)備和微機(jī)之間必須具有高速的互聯(lián)總線。作為第三代高性能I/O總線,PCI Express接口具有雙通道、高帶寬、傳輸快、低功耗以及傳輸可靠等優(yōu)點(diǎn),正逐漸取代原有PCI接口。PCI Express2.0標(biāo)準(zhǔn)實(shí)現(xiàn)了x1的單向速率5 Gb/s,因此PCI Express總線接口特別適合于高速的數(shù)據(jù)傳送。同時(shí),現(xiàn)在絕大多數(shù)電腦可以使用直接內(nèi)存訪問(wèn)DMA(Direct Memory Access)傳送方式,它使用專門的硬件把數(shù)據(jù)直接傳送到計(jì)算機(jī)內(nèi)存,從而提高了系統(tǒng)的數(shù)據(jù)吞吐量。采用這種方式后,處理器不需要控制數(shù)據(jù)的傳送,因此它就可以用來(lái)處理更復(fù)雜的工作。因此,基于PCI Express總線并采用DMA方式進(jìn)行數(shù)據(jù)傳輸可以充分發(fā)揮PCI Express總線高速的優(yōu)勢(shì)[1-2]。
 美國(guó)國(guó)家儀器NI(National Instruments)公司在信號(hào)調(diào)理和數(shù)據(jù)采集領(lǐng)域有著豐富的產(chǎn)品生產(chǎn)和設(shè)計(jì)經(jīng)驗(yàn),已經(jīng)成功為各行業(yè)的用戶提供了優(yōu)秀的解決方案。其中基于PCI Express接口系列的數(shù)字I/O卡可以滿足高速數(shù)據(jù)傳輸?shù)囊?。作為某軟件無(wú)線電系統(tǒng)的子課題,本文基于該系列硬件和配套的軟件進(jìn)行開發(fā),實(shí)現(xiàn)了信號(hào)調(diào)理設(shè)備和微機(jī)之間進(jìn)行實(shí)時(shí)高速數(shù)據(jù)傳輸?shù)墓δ?。?shí)踐表明,該方案無(wú)論在數(shù)據(jù)傳輸還是實(shí)時(shí)控制方面都有較好的性能,對(duì)于搭建應(yīng)用越來(lái)越廣泛的高速數(shù)據(jù)傳輸平臺(tái)具有一定的借鑒意義[3]。
1 NI PCIe-6537數(shù)字I/O卡簡(jiǎn)介
 NI PCIe-6537是NI公司生產(chǎn)的一款高速數(shù)字I/O系列數(shù)據(jù)采集卡[4],具有32個(gè)可進(jìn)行雙向并行數(shù)據(jù)傳輸?shù)耐ǖ溃≒ort0~Port3,每個(gè)Port由8個(gè)通道組成)和6個(gè)可編程函數(shù)接口PFI(Programmable Function Interface),即PFI0~PFI6,并行速率可達(dá)50 MHz;支持同步輸出,時(shí)鐘各項(xiàng)指標(biāo)精度高,可以接受外部時(shí)鐘作為工作時(shí)鐘源;所有通道和接口具有獨(dú)立的ADC,保證了良好的動(dòng)態(tài)性能;支持多種同步、異步握手模式,其中包含豐富的定時(shí)和事件觸發(fā)功能;板載2 048個(gè)32 bit基于FIFO的內(nèi)存單元,可以作為信號(hào)調(diào)理設(shè)備和計(jì)算機(jī)之間進(jìn)行DMA傳輸?shù)母咚倬彺妫⑶揖哂绣e(cuò)誤檢測(cè)及自我恢復(fù)機(jī)制。該數(shù)字I/O卡可以實(shí)現(xiàn)高速的雙向數(shù)據(jù)傳輸,具有靈活的控制功能,并可以通過(guò)控制可編程函數(shù)接口保證數(shù)據(jù)傳輸?shù)目煽啃?。板卡結(jié)構(gòu)如圖1所示。

 隨著數(shù)據(jù)采集硬件、計(jì)算機(jī)和軟件復(fù)雜程度的增加,好的驅(qū)動(dòng)軟件就顯得尤為重要。合適的驅(qū)動(dòng)軟件可以最佳地結(jié)合靈活性和高性能,同時(shí)還能極大地降低開發(fā)數(shù)據(jù)采集程序所需的時(shí)間。NI公司為其數(shù)據(jù)采集卡開發(fā)了豐富的應(yīng)用軟件和驅(qū)動(dòng)。本方案采用NI專有的Measurement Studio開發(fā)軟件和DAQ驅(qū)動(dòng)。為了讓用戶能開發(fā)出完整的數(shù)據(jù)采集和控制程序,NI提供了可以支持C、Visual C++、Visual Basic和C#調(diào)用驅(qū)動(dòng)函數(shù)的應(yīng)用軟件Measurement Studio。結(jié)合工程項(xiàng)目需要,本方案采用C#作為調(diào)用驅(qū)動(dòng)函數(shù)的語(yǔ)言,同時(shí)使用HP DL180機(jī)架式服務(wù)器,以保證穩(wěn)定、高效的數(shù)據(jù)傳輸和存取性能。
2 基于NI PCIe-6537數(shù)字I/O卡高速數(shù)據(jù)傳輸設(shè)計(jì)
 NI PCIe-6537數(shù)字I/O卡具有高速的數(shù)據(jù)傳輸能力,Measurement Studio和Visual Studio安裝融合之后的開發(fā)環(huán)境中包含了豐富的驅(qū)動(dòng)函數(shù),可以滿足實(shí)際工程各種應(yīng)用需求。但是由于其內(nèi)部封裝不可見(jiàn),用戶必須使用專門的驅(qū)動(dòng)函數(shù)進(jìn)行設(shè)計(jì)。本方案分為數(shù)據(jù)采集部分和控制信號(hào)輸出部分的設(shè)計(jì),功能實(shí)現(xiàn)程序以C#動(dòng)態(tài)鏈接庫(kù)(DLL)的形式提供給項(xiàng)目主程序使用。圖2給出了數(shù)據(jù)采集和控制信號(hào)輸出流程圖,下面以此為基礎(chǔ)介紹本方案各部分功能的設(shè)計(jì)。

2.1 數(shù)據(jù)采集的主要功能及其設(shè)計(jì)方案
 本方案使用25 Mb/s的傳輸速率同時(shí)進(jìn)行雙向數(shù)據(jù)傳輸,使用Port0、Port1和Port2 3個(gè)端口共計(jì)24條數(shù)據(jù)通道用來(lái)進(jìn)行連續(xù)數(shù)據(jù)采集。為保證數(shù)據(jù)傳輸過(guò)程中的時(shí)鐘和數(shù)據(jù)精確同步,采用可編程函數(shù)接口PFI5接收外部時(shí)鐘作為板卡工作時(shí)鐘。下面首先對(duì)定時(shí)設(shè)置進(jìn)行簡(jiǎn)要說(shuō)明。定時(shí)設(shè)置參數(shù)與工作模式和采樣長(zhǎng)度有關(guān),在初始化設(shè)備資源之前就要設(shè)置完畢。對(duì)于連續(xù)工作模式,采樣長(zhǎng)度一般為計(jì)算機(jī)內(nèi)存中緩沖區(qū)的大小,實(shí)際中取較大的值即可;對(duì)于有限采樣工作模式,采樣長(zhǎng)度與當(dāng)前傳輸數(shù)據(jù)長(zhǎng)度有關(guān),若下一次的采樣長(zhǎng)度與當(dāng)前采樣長(zhǎng)度不同,就要重新設(shè)置定時(shí)參數(shù)。根據(jù)項(xiàng)目要求,設(shè)定調(diào)理設(shè)備每20 ms發(fā)一包數(shù)據(jù),數(shù)據(jù)采集部分的定時(shí)參數(shù)相應(yīng)設(shè)置為連續(xù)工作模式。每包數(shù)據(jù)到達(dá)的同時(shí)還有一個(gè)和包長(zhǎng)度相同的握手信號(hào)(Pause Trigger)到達(dá)板卡,即以握手信號(hào)的有無(wú)和長(zhǎng)短決定是否接收數(shù)據(jù)和接收數(shù)據(jù)的長(zhǎng)度,這里用PFI1接收觸發(fā)信號(hào)。由于設(shè)置為連續(xù)工作模式,因此所有的參數(shù)只需設(shè)置一次,服務(wù)器程序即可對(duì)相應(yīng)設(shè)備資源進(jìn)行初始化,之后通過(guò)C#事件觸發(fā)的方式自動(dòng)進(jìn)入循環(huán)接收數(shù)據(jù)包的狀態(tài),同時(shí)可以通過(guò)委托把數(shù)據(jù)包實(shí)時(shí)傳遞給主調(diào)函數(shù)。
 在對(duì)數(shù)據(jù)進(jìn)行高速采集的同時(shí),應(yīng)考慮實(shí)際工作中不可預(yù)知的軟硬件錯(cuò)誤。錯(cuò)誤一般有兩種類型:一種是由微機(jī)未能及時(shí)從板卡FIFO中讀取數(shù)據(jù)造成FIFO溢出,從而造成數(shù)據(jù)包傳輸出錯(cuò);另一種情況是由于信號(hào)調(diào)理設(shè)備由眾多設(shè)備組成,如果其中某個(gè)環(huán)節(jié)發(fā)生傳輸延誤,導(dǎo)致某一包數(shù)據(jù)未能連續(xù)傳輸,進(jìn)而造成FIFO采集不到完整的數(shù)據(jù)包。實(shí)際中經(jīng)過(guò)反復(fù)測(cè)試發(fā)現(xiàn),雖然錯(cuò)誤的種類可能會(huì)比較多,但是對(duì)于服務(wù)器來(lái)說(shuō),錯(cuò)誤檢測(cè)只能依賴于包頭數(shù)據(jù)檢測(cè)。因此,針對(duì)可能出現(xiàn)的軟硬件錯(cuò)誤,制定解決方案如下:在數(shù)據(jù)包的固定位置插入一個(gè)標(biāo)志數(shù)據(jù),每一包數(shù)據(jù)接收完畢之后對(duì)標(biāo)志數(shù)據(jù)進(jìn)行檢測(cè),如果標(biāo)志數(shù)據(jù)正確,則可以認(rèn)為當(dāng)前數(shù)據(jù)包已正確接收;如果標(biāo)志數(shù)據(jù)出錯(cuò),則立即清空FIFO,直到檢測(cè)結(jié)果正確為止。另外,由于數(shù)據(jù)傳輸速率較高,有效數(shù)據(jù)只占20 ms中的小部分時(shí)間,從而保證板卡FIFO有充足的時(shí)間自我清空。
2.2 發(fā)送控制信號(hào)方案設(shè)計(jì)
 為了控制信號(hào)調(diào)理設(shè)備,服務(wù)器還需要通過(guò)PCI Express卡發(fā)送控制信號(hào)給信號(hào)調(diào)理設(shè)備,本方案使用Port3的8條數(shù)據(jù)通道輸出控制信號(hào),時(shí)鐘通過(guò)PFI4接口輸出給信號(hào)調(diào)理設(shè)備。由于控制信號(hào)只在必要的情況下發(fā)出,因此相應(yīng)的定時(shí)參數(shù)設(shè)置為有限工作模式。設(shè)定控制信號(hào)精度為16 bit,并且不同控制信號(hào)有著不同功能。本方案使用Port3的高4位標(biāo)識(shí)不同功能的控制信號(hào),低4位傳輸控制信號(hào),每個(gè)控制信號(hào)在4個(gè)時(shí)鐘周期內(nèi)輸出給信號(hào)調(diào)理設(shè)備。與數(shù)據(jù)采集部分類似,板卡輸出控制信號(hào)時(shí)需要一個(gè)握手信號(hào)(Date Active Event),外部信號(hào)調(diào)理設(shè)備根據(jù)該握手信號(hào)決定是否接收控制信號(hào)以及信號(hào)長(zhǎng)度。但與數(shù)據(jù)采集部分不同的是,由于控制部分為有限工作模式,每次發(fā)送控制信號(hào)均需要重新初始化設(shè)備資源,因此會(huì)造成一定的時(shí)延。實(shí)際測(cè)試發(fā)現(xiàn),如果某段時(shí)間內(nèi)發(fā)送控制信號(hào)過(guò)多或者過(guò)于頻繁,這種時(shí)延就會(huì)造成控制信號(hào)發(fā)送錯(cuò)誤。經(jīng)過(guò)反復(fù)試驗(yàn)證明,每次控制信號(hào)發(fā)送完畢之后暫不釋放硬件資源,重新初始化時(shí)只需用一條語(yǔ)句重新設(shè)置定時(shí)參數(shù),大大降低了時(shí)延并保證了控制信號(hào)輸出的可靠性。
3 高速數(shù)據(jù)傳輸方案實(shí)現(xiàn)和測(cè)試
 本文設(shè)計(jì)的高速數(shù)據(jù)傳輸方案為某軟件無(wú)線電系統(tǒng)的重要組成部分。因此,本文以該系統(tǒng)在實(shí)際當(dāng)中的運(yùn)行結(jié)果對(duì)設(shè)計(jì)方案進(jìn)行測(cè)試,下面分別介紹測(cè)試平臺(tái)并說(shuō)明測(cè)試結(jié)果。
3.1 高速數(shù)據(jù)傳輸方案測(cè)試平臺(tái)
 硬件平臺(tái)為HP DL180 機(jī)架式服務(wù)器、NI PCIe-6537數(shù)字I/O卡以及信號(hào)調(diào)理設(shè)備;操作系統(tǒng)為Windows Server 2003 R2(32 bit);軟件平臺(tái)為Visual Studio 2005.NET、Measurement Studio 2009和DAQ 9.1.7。
其中,Visual Studio和Measurement Studio版本必須一致,操作系統(tǒng)和DAQ驅(qū)動(dòng)軟件的版本需要一致。并且由于驅(qū)動(dòng)軟件的限制,Windows Server 2003操作系統(tǒng)下可用內(nèi)存資源受到限制[5]。
3.2 高速數(shù)據(jù)傳輸方案實(shí)現(xiàn)結(jié)果

 


 系統(tǒng)數(shù)據(jù)采集和控制信號(hào)的傳輸速率均為25 Mb/s,數(shù)據(jù)循環(huán)采集的收包間隔時(shí)間為20 ms、包長(zhǎng)為10 016、數(shù)據(jù)為32 bit整形數(shù)。圖3為軟件界面顯示的某時(shí)刻數(shù)據(jù)采集結(jié)果。其中,包循環(huán)號(hào)表示信號(hào)調(diào)理設(shè)備發(fā)送數(shù)據(jù)包的編號(hào),收包計(jì)數(shù)表示數(shù)字I/O卡成功接收并驗(yàn)證正確的數(shù)據(jù)包,計(jì)數(shù)差值正常情況下為上述兩個(gè)指標(biāo)的差值,丟包計(jì)數(shù)為發(fā)生錯(cuò)誤的數(shù)據(jù)包。數(shù)據(jù)接收結(jié)果顯示,該時(shí)刻已接收2 610包數(shù)據(jù)并且所有數(shù)據(jù)包均正確無(wú)誤。控制信號(hào)定為如下十六進(jìn)制數(shù):0x400D和0x400F,每個(gè)十六進(jìn)制數(shù)在4個(gè)時(shí)鐘周期內(nèi)發(fā)送完畢。在FPGA中,用SignalTap II觀察信號(hào)調(diào)理設(shè)備發(fā)送的數(shù)據(jù),如圖4所示。其中,pc_clk、pc_control和pc_data分別為PCIe-6537輸出給FPGA的時(shí)鐘、握手信號(hào)和輸出信號(hào)。設(shè)備長(zhǎng)期運(yùn)行結(jié)果表明,本設(shè)計(jì)可以通過(guò)PCIe-6537實(shí)現(xiàn)FPGA與服務(wù)器之間穩(wěn)定的高速數(shù)據(jù)傳輸。

 數(shù)據(jù)采集接口是計(jì)算機(jī)系統(tǒng)與外部數(shù)據(jù)聯(lián)系的一個(gè)橋梁,設(shè)計(jì)的關(guān)鍵是提高數(shù)據(jù)采集系統(tǒng)的速度和可靠性。本文以某軟件無(wú)線電系統(tǒng)的實(shí)際需求出發(fā),充分利用PCI Express接口通過(guò)DMA傳輸方式實(shí)現(xiàn)了信號(hào)調(diào)理設(shè)備與服務(wù)器之間進(jìn)行高速數(shù)據(jù)傳輸?shù)墓δ?。方案通過(guò)對(duì)NI PCIe-6537數(shù)字I/O卡性能的了解和挖掘,以及對(duì)驅(qū)動(dòng)函數(shù)的合理調(diào)用,保證了數(shù)據(jù)傳輸?shù)母咝屎涂煽啃?。?shí)際應(yīng)用中還可以根據(jù)工程需要實(shí)現(xiàn)更多的功能。同時(shí),NI公司基于PCI Express接口的高速數(shù)據(jù)I/O卡在高速數(shù)據(jù)通信以及實(shí)時(shí)信號(hào)處理領(lǐng)域有著良好的應(yīng)用前景,而本方案作為一個(gè)典型案例,對(duì)工程實(shí)踐人員有較好的參考價(jià)值。
參考文獻(xiàn)
[1] BUDRUK R, ANDERSON D, SHANLEY T. PCI Express系統(tǒng)體系結(jié)構(gòu)標(biāo)準(zhǔn)教材[M].田玉敏,王崧,張波,等,譯.北京:電子工業(yè)出版社,2005.
[2] 許軍,李玉山.PCI Express總線技術(shù)研究[J].計(jì)算機(jī)工程與科學(xué),2006,28(5):20~40.
[3] NI.數(shù)據(jù)采集技術(shù)文摘[EB/OL].http://sine.ni.com,2010-09-01.
[4] NI.PCI Express接口的50M數(shù)字I/O[EB/OL].http://sine.ni.com,2010-09-01.
[5] NI.NI-DAQmx Specifications[EB/OL].http://sine.ni.com,2010-09-01.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。