摘 要: 針對軟件無線電系統(tǒng)中數(shù)據(jù)實(shí)時處理和高速傳輸?shù)囊螅O(shè)計了一種基于NI PCI Express接口的高速數(shù)據(jù)傳輸方案。利用NI公司的數(shù)字I/O卡以及配套驅(qū)動開發(fā)軟件搭建開發(fā)平臺。信號調(diào)理設(shè)備和微機(jī)間的數(shù)據(jù)通過PCI Express接口以DMA方式進(jìn)行傳輸。數(shù)字I/O卡的32通道雙向并行數(shù)據(jù)傳輸速率高達(dá)50 Mb/s。該方案實(shí)現(xiàn)了靈活的數(shù)據(jù)傳輸控制、精確的時鐘同步以及可靠的數(shù)據(jù)容錯功能。工程實(shí)踐驗(yàn)證了該方案的有效性和可靠性。
關(guān)鍵詞: 數(shù)據(jù)采集;NI PCI Express;高速數(shù)據(jù)傳輸;DMA;實(shí)時處理
軟件無線電系統(tǒng)只在天線到A/D轉(zhuǎn)換和D/A轉(zhuǎn)換環(huán)節(jié)的射頻段存在模擬信號,其中頻和基帶的處理全部采用數(shù)字邏輯運(yùn)算實(shí)現(xiàn),數(shù)據(jù)處理量大,實(shí)時性要求較高。某些情況下高速傳輸又是實(shí)時處理的前提,因此,軟件無線電實(shí)現(xiàn)的關(guān)鍵是需要有高速的數(shù)據(jù)處理與傳輸設(shè)備。為了將數(shù)據(jù)處理結(jié)果通過數(shù)據(jù)采集設(shè)備實(shí)時傳送給微機(jī),信號調(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ù)傳送。同時,現(xiàn)在絕大多數(shù)電腦可以使用直接內(nèi)存訪問DMA(Direct Memory Access)傳送方式,它使用專門的硬件把數(shù)據(jù)直接傳送到計算機(jī)內(nèi)存,從而提高了系統(tǒng)的數(shù)據(jù)吞吐量。采用這種方式后,處理器不需要控制數(shù)據(jù)的傳送,因此它就可以用來處理更復(fù)雜的工作。因此,基于PCI Express總線并采用DMA方式進(jìn)行數(shù)據(jù)傳輸可以充分發(fā)揮PCI Express總線高速的優(yōu)勢[1-2]。
美國國家儀器NI(National Instruments)公司在信號調(diào)理和數(shù)據(jù)采集領(lǐng)域有著豐富的產(chǎn)品生產(chǎn)和設(shè)計經(jīng)驗(yàn),已經(jīng)成功為各行業(yè)的用戶提供了優(yōu)秀的解決方案。其中基于PCI Express接口系列的數(shù)字I/O卡可以滿足高速數(shù)據(jù)傳輸?shù)囊?。作為某軟件無線電系統(tǒng)的子課題,本文基于該系列硬件和配套的軟件進(jìn)行開發(fā),實(shí)現(xiàn)了信號調(diào)理設(shè)備和微機(jī)之間進(jìn)行實(shí)時高速數(shù)據(jù)傳輸?shù)墓δ?。?shí)踐表明,該方案無論在數(shù)據(jù)傳輸還是實(shí)時控制方面都有較好的性能,對于搭建應(yīng)用越來越廣泛的高速數(shù)據(jù)傳輸平臺具有一定的借鑒意義[3]。
1 NI PCIe-6537數(shù)字I/O卡簡介
NI PCIe-6537是NI公司生產(chǎn)的一款高速數(shù)字I/O系列數(shù)據(jù)采集卡[4],具有32個可進(jìn)行雙向并行數(shù)據(jù)傳輸?shù)耐ǖ溃≒ort0~Port3,每個Port由8個通道組成)和6個可編程函數(shù)接口PFI(Programmable Function Interface),即PFI0~PFI6,并行速率可達(dá)50 MHz;支持同步輸出,時鐘各項指標(biāo)精度高,可以接受外部時鐘作為工作時鐘源;所有通道和接口具有獨(dú)立的ADC,保證了良好的動態(tài)性能;支持多種同步、異步握手模式,其中包含豐富的定時和事件觸發(fā)功能;板載2 048個32 bit基于FIFO的內(nèi)存單元,可以作為信號調(diào)理設(shè)備和計算機(jī)之間進(jìn)行DMA傳輸?shù)母咚倬彺?,并且具有錯誤檢測及自我恢復(fù)機(jī)制。該數(shù)字I/O卡可以實(shí)現(xiàn)高速的雙向數(shù)據(jù)傳輸,具有靈活的控制功能,并可以通過控制可編程函數(shù)接口保證數(shù)據(jù)傳輸?shù)目煽啃?。板卡結(jié)構(gòu)如圖1所示。
隨著數(shù)據(jù)采集硬件、計算機(jī)和軟件復(fù)雜程度的增加,好的驅(qū)動軟件就顯得尤為重要。合適的驅(qū)動軟件可以最佳地結(jié)合靈活性和高性能,同時還能極大地降低開發(fā)數(shù)據(jù)采集程序所需的時間。NI公司為其數(shù)據(jù)采集卡開發(fā)了豐富的應(yīng)用軟件和驅(qū)動。本方案采用NI專有的Measurement Studio開發(fā)軟件和DAQ驅(qū)動。為了讓用戶能開發(fā)出完整的數(shù)據(jù)采集和控制程序,NI提供了可以支持C、Visual C++、Visual Basic和C#調(diào)用驅(qū)動函數(shù)的應(yīng)用軟件Measurement Studio。結(jié)合工程項目需要,本方案采用C#作為調(diào)用驅(qū)動函數(shù)的語言,同時使用HP DL180機(jī)架式服務(wù)器,以保證穩(wěn)定、高效的數(shù)據(jù)傳輸和存取性能。
2 基于NI PCIe-6537數(shù)字I/O卡高速數(shù)據(jù)傳輸設(shè)計
NI PCIe-6537數(shù)字I/O卡具有高速的數(shù)據(jù)傳輸能力,Measurement Studio和Visual Studio安裝融合之后的開發(fā)環(huán)境中包含了豐富的驅(qū)動函數(shù),可以滿足實(shí)際工程各種應(yīng)用需求。但是由于其內(nèi)部封裝不可見,用戶必須使用專門的驅(qū)動函數(shù)進(jìn)行設(shè)計。本方案分為數(shù)據(jù)采集部分和控制信號輸出部分的設(shè)計,功能實(shí)現(xiàn)程序以C#動態(tài)鏈接庫(DLL)的形式提供給項目主程序使用。圖2給出了數(shù)據(jù)采集和控制信號輸出流程圖,下面以此為基礎(chǔ)介紹本方案各部分功能的設(shè)計。
2.1 數(shù)據(jù)采集的主要功能及其設(shè)計方案
本方案使用25 Mb/s的傳輸速率同時進(jìn)行雙向數(shù)據(jù)傳輸,使用Port0、Port1和Port2 3個端口共計24條數(shù)據(jù)通道用來進(jìn)行連續(xù)數(shù)據(jù)采集。為保證數(shù)據(jù)傳輸過程中的時鐘和數(shù)據(jù)精確同步,采用可編程函數(shù)接口PFI5接收外部時鐘作為板卡工作時鐘。下面首先對定時設(shè)置進(jìn)行簡要說明。定時設(shè)置參數(shù)與工作模式和采樣長度有關(guān),在初始化設(shè)備資源之前就要設(shè)置完畢。對于連續(xù)工作模式,采樣長度一般為計算機(jī)內(nèi)存中緩沖區(qū)的大小,實(shí)際中取較大的值即可;對于有限采樣工作模式,采樣長度與當(dāng)前傳輸數(shù)據(jù)長度有關(guān),若下一次的采樣長度與當(dāng)前采樣長度不同,就要重新設(shè)置定時參數(shù)。根據(jù)項目要求,設(shè)定調(diào)理設(shè)備每20 ms發(fā)一包數(shù)據(jù),數(shù)據(jù)采集部分的定時參數(shù)相應(yīng)設(shè)置為連續(xù)工作模式。每包數(shù)據(jù)到達(dá)的同時還有一個和包長度相同的握手信號(Pause Trigger)到達(dá)板卡,即以握手信號的有無和長短決定是否接收數(shù)據(jù)和接收數(shù)據(jù)的長度,這里用PFI1接收觸發(fā)信號。由于設(shè)置為連續(xù)工作模式,因此所有的參數(shù)只需設(shè)置一次,服務(wù)器程序即可對相應(yīng)設(shè)備資源進(jìn)行初始化,之后通過C#事件觸發(fā)的方式自動進(jìn)入循環(huán)接收數(shù)據(jù)包的狀態(tài),同時可以通過委托把數(shù)據(jù)包實(shí)時傳遞給主調(diào)函數(shù)。
在對數(shù)據(jù)進(jìn)行高速采集的同時,應(yīng)考慮實(shí)際工作中不可預(yù)知的軟硬件錯誤。錯誤一般有兩種類型:一種是由微機(jī)未能及時從板卡FIFO中讀取數(shù)據(jù)造成FIFO溢出,從而造成數(shù)據(jù)包傳輸出錯;另一種情況是由于信號調(diào)理設(shè)備由眾多設(shè)備組成,如果其中某個環(huán)節(jié)發(fā)生傳輸延誤,導(dǎo)致某一包數(shù)據(jù)未能連續(xù)傳輸,進(jìn)而造成FIFO采集不到完整的數(shù)據(jù)包。實(shí)際中經(jīng)過反復(fù)測試發(fā)現(xiàn),雖然錯誤的種類可能會比較多,但是對于服務(wù)器來說,錯誤檢測只能依賴于包頭數(shù)據(jù)檢測。因此,針對可能出現(xiàn)的軟硬件錯誤,制定解決方案如下:在數(shù)據(jù)包的固定位置插入一個標(biāo)志數(shù)據(jù),每一包數(shù)據(jù)接收完畢之后對標(biāo)志數(shù)據(jù)進(jìn)行檢測,如果標(biāo)志數(shù)據(jù)正確,則可以認(rèn)為當(dāng)前數(shù)據(jù)包已正確接收;如果標(biāo)志數(shù)據(jù)出錯,則立即清空FIFO,直到檢測結(jié)果正確為止。另外,由于數(shù)據(jù)傳輸速率較高,有效數(shù)據(jù)只占20 ms中的小部分時間,從而保證板卡FIFO有充足的時間自我清空。
2.2 發(fā)送控制信號方案設(shè)計
為了控制信號調(diào)理設(shè)備,服務(wù)器還需要通過PCI Express卡發(fā)送控制信號給信號調(diào)理設(shè)備,本方案使用Port3的8條數(shù)據(jù)通道輸出控制信號,時鐘通過PFI4接口輸出給信號調(diào)理設(shè)備。由于控制信號只在必要的情況下發(fā)出,因此相應(yīng)的定時參數(shù)設(shè)置為有限工作模式。設(shè)定控制信號精度為16 bit,并且不同控制信號有著不同功能。本方案使用Port3的高4位標(biāo)識不同功能的控制信號,低4位傳輸控制信號,每個控制信號在4個時鐘周期內(nèi)輸出給信號調(diào)理設(shè)備。與數(shù)據(jù)采集部分類似,板卡輸出控制信號時需要一個握手信號(Date Active Event),外部信號調(diào)理設(shè)備根據(jù)該握手信號決定是否接收控制信號以及信號長度。但與數(shù)據(jù)采集部分不同的是,由于控制部分為有限工作模式,每次發(fā)送控制信號均需要重新初始化設(shè)備資源,因此會造成一定的時延。實(shí)際測試發(fā)現(xiàn),如果某段時間內(nèi)發(fā)送控制信號過多或者過于頻繁,這種時延就會造成控制信號發(fā)送錯誤。經(jīng)過反復(fù)試驗(yàn)證明,每次控制信號發(fā)送完畢之后暫不釋放硬件資源,重新初始化時只需用一條語句重新設(shè)置定時參數(shù),大大降低了時延并保證了控制信號輸出的可靠性。
3 高速數(shù)據(jù)傳輸方案實(shí)現(xiàn)和測試
本文設(shè)計的高速數(shù)據(jù)傳輸方案為某軟件無線電系統(tǒng)的重要組成部分。因此,本文以該系統(tǒng)在實(shí)際當(dāng)中的運(yùn)行結(jié)果對設(shè)計方案進(jìn)行測試,下面分別介紹測試平臺并說明測試結(jié)果。
3.1 高速數(shù)據(jù)傳輸方案測試平臺
硬件平臺為HP DL180 機(jī)架式服務(wù)器、NI PCIe-6537數(shù)字I/O卡以及信號調(diào)理設(shè)備;操作系統(tǒng)為Windows Server 2003 R2(32 bit);軟件平臺為Visual Studio 2005.NET、Measurement Studio 2009和DAQ 9.1.7。
其中,Visual Studio和Measurement Studio版本必須一致,操作系統(tǒng)和DAQ驅(qū)動軟件的版本需要一致。并且由于驅(qū)動軟件的限制,Windows Server 2003操作系統(tǒng)下可用內(nèi)存資源受到限制[5]。
3.2 高速數(shù)據(jù)傳輸方案實(shí)現(xiàn)結(jié)果
系統(tǒng)數(shù)據(jù)采集和控制信號的傳輸速率均為25 Mb/s,數(shù)據(jù)循環(huán)采集的收包間隔時間為20 ms、包長為10 016、數(shù)據(jù)為32 bit整形數(shù)。圖3為軟件界面顯示的某時刻數(shù)據(jù)采集結(jié)果。其中,包循環(huán)號表示信號調(diào)理設(shè)備發(fā)送數(shù)據(jù)包的編號,收包計數(shù)表示數(shù)字I/O卡成功接收并驗(yàn)證正確的數(shù)據(jù)包,計數(shù)差值正常情況下為上述兩個指標(biāo)的差值,丟包計數(shù)為發(fā)生錯誤的數(shù)據(jù)包。數(shù)據(jù)接收結(jié)果顯示,該時刻已接收2 610包數(shù)據(jù)并且所有數(shù)據(jù)包均正確無誤??刂菩盘柖槿缦率M(jìn)制數(shù):0x400D和0x400F,每個十六進(jìn)制數(shù)在4個時鐘周期內(nèi)發(fā)送完畢。在FPGA中,用SignalTap II觀察信號調(diào)理設(shè)備發(fā)送的數(shù)據(jù),如圖4所示。其中,pc_clk、pc_control和pc_data分別為PCIe-6537輸出給FPGA的時鐘、握手信號和輸出信號。設(shè)備長期運(yùn)行結(jié)果表明,本設(shè)計可以通過PCIe-6537實(shí)現(xiàn)FPGA與服務(wù)器之間穩(wěn)定的高速數(shù)據(jù)傳輸。
數(shù)據(jù)采集接口是計算機(jī)系統(tǒng)與外部數(shù)據(jù)聯(lián)系的一個橋梁,設(shè)計的關(guān)鍵是提高數(shù)據(jù)采集系統(tǒng)的速度和可靠性。本文以某軟件無線電系統(tǒng)的實(shí)際需求出發(fā),充分利用PCI Express接口通過DMA傳輸方式實(shí)現(xiàn)了信號調(diào)理設(shè)備與服務(wù)器之間進(jìn)行高速數(shù)據(jù)傳輸?shù)墓δ堋7桨竿ㄟ^對NI PCIe-6537數(shù)字I/O卡性能的了解和挖掘,以及對驅(qū)動函數(shù)的合理調(diào)用,保證了數(shù)據(jù)傳輸?shù)母咝屎涂煽啃?。?shí)際應(yīng)用中還可以根據(jù)工程需要實(shí)現(xiàn)更多的功能。同時,NI公司基于PCI Express接口的高速數(shù)據(jù)I/O卡在高速數(shù)據(jù)通信以及實(shí)時信號處理領(lǐng)域有著良好的應(yīng)用前景,而本方案作為一個典型案例,對工程實(shí)踐人員有較好的參考價值。
參考文獻(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ī)工程與科學(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.