摘 要: 針對軟件無線電系統(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ù)通過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í)處理
軟件無線電系統(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í)處理的前提,,因此,軟件無線電實(shí)現(xiàn)的關(guān)鍵是需要有高速的數(shù)據(jù)處理與傳輸設(shè)備,。為了將數(shù)據(jù)處理結(jié)果通過數(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)存訪問DMA(Direct Memory Access)傳送方式,它使用專門的硬件把數(shù)據(jù)直接傳送到計(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)公司在信號(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ù)囊?。作為某軟件無線電系統(tǒng)的子課題,,本文基于該系列硬件和配套的軟件進(jìn)行開發(fā),實(shí)現(xiàn)了信號(hào)調(diào)理設(shè)備和微機(jī)之間進(jìn)行實(shí)時(shí)高速數(shù)據(jù)傳輸?shù)墓δ?。?shí)踐表明,,該方案無論在數(shù)據(jù)傳輸還是實(shí)時(shí)控制方面都有較好的性能,對于搭建應(yīng)用越來越廣泛的高速數(shù)據(jù)傳輸平臺(tái)具有一定的借鑒意義[3],。
1 NI PCIe-6537數(shù)字I/O卡簡介
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ò)誤檢測及自我恢復(fù)機(jī)制,。該數(shù)字I/O卡可以實(shí)現(xiàn)高速的雙向數(shù)據(jù)傳輸,,具有靈活的控制功能,并可以通過控制可編程函數(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ù)的語言,同時(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)部封裝不可見,,用戶必須使用專門的驅(qū)動(dòng)函數(shù)進(jìn)行設(shè)計(jì),。本方案分為數(shù)據(jù)采集部分和控制信號(hào)輸出部分的設(shè)計(jì),功能實(shí)現(xiàn)程序以C#動(dòng)態(tài)鏈接庫(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ù)通道用來進(jìn)行連續(xù)數(shù)據(jù)采集,。為保證數(shù)據(jù)傳輸過程中的時(shí)鐘和數(shù)據(jù)精確同步,,采用可編程函數(shù)接口PFI5接收外部時(shí)鐘作為板卡工作時(shí)鐘。下面首先對定時(shí)設(shè)置進(jìn)行簡要說明,。定時(shí)設(shè)置參數(shù)與工作模式和采樣長度有關(guān),,在初始化設(shè)備資源之前就要設(shè)置完畢。對于連續(xù)工作模式,采樣長度一般為計(jì)算機(jī)內(nèi)存中緩沖區(qū)的大小,,實(shí)際中取較大的值即可,;對于有限采樣工作模式,采樣長度與當(dāng)前傳輸數(shù)據(jù)長度有關(guān),,若下一次的采樣長度與當(dā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è)和包長度相同的握手信號(hào)(Pause Trigger)到達(dá)板卡,,即以握手信號(hào)的有無和長短決定是否接收數(shù)據(jù)和接收數(shù)據(jù)的長度,,這里用PFI1接收觸發(fā)信號(hào)。由于設(shè)置為連續(xù)工作模式,,因此所有的參數(shù)只需設(shè)置一次,,服務(wù)器程序即可對相應(yīng)設(shè)備資源進(jìn)行初始化,之后通過C#事件觸發(fā)的方式自動(dòng)進(jìn)入循環(huán)接收數(shù)據(jù)包的狀態(tài),,同時(shí)可以通過委托把數(shù)據(jù)包實(shí)時(shí)傳遞給主調(diào)函數(shù),。
在對數(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)過反復(fù)測試發(fā)現(xiàn),,雖然錯(cuò)誤的種類可能會(huì)比較多,但是對于服務(wù)器來說,,錯(cuò)誤檢測只能依賴于包頭數(shù)據(jù)檢測,。因此,針對可能出現(xiàn)的軟硬件錯(cuò)誤,,制定解決方案如下:在數(shù)據(jù)包的固定位置插入一個(gè)標(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ù)出錯(cuò),則立即清空FIFO,,直到檢測結(jié)果正確為止,。另外,,由于數(shù)據(jù)傳輸速率較高,有效數(shù)據(jù)只占20 ms中的小部分時(shí)間,,從而保證板卡FIFO有充足的時(shí)間自我清空,。
2.2 發(fā)送控制信號(hào)方案設(shè)計(jì)
為了控制信號(hào)調(diào)理設(shè)備,服務(wù)器還需要通過PCI Express卡發(fā)送控制信號(hào)給信號(hào)調(diào)理設(shè)備,,本方案使用Port3的8條數(shù)據(jù)通道輸出控制信號(hào),,時(shí)鐘通過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)長度,。但與數(shù)據(jù)采集部分不同的是,,由于控制部分為有限工作模式,每次發(fā)送控制信號(hào)均需要重新初始化設(shè)備資源,,因此會(huì)造成一定的時(shí)延,。實(shí)際測試發(fā)現(xiàn),如果某段時(shí)間內(nèi)發(fā)送控制信號(hào)過多或者過于頻繁,,這種時(shí)延就會(huì)造成控制信號(hào)發(fā)送錯(cuò)誤,。經(jīng)過反復(fù)試驗(yàn)證明,每次控制信號(hào)發(fā)送完畢之后暫不釋放硬件資源,,重新初始化時(shí)只需用一條語句重新設(shè)置定時(shí)參數(shù),,大大降低了時(shí)延并保證了控制信號(hào)輸出的可靠性。
3 高速數(shù)據(jù)傳輸方案實(shí)現(xiàn)和測試
本文設(shè)計(jì)的高速數(shù)據(jù)傳輸方案為某軟件無線電系統(tǒng)的重要組成部分,。因此,,本文以該系統(tǒng)在實(shí)際當(dāng)中的運(yùn)行結(jié)果對設(shè)計(jì)方案進(jìn)行測試,下面分別介紹測試平臺(tái)并說明測試結(jié)果,。
3.1 高速數(shù)據(jù)傳輸方案測試平臺(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,、包長為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ù)包均正確無誤,。控制信號(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è)備長期運(yùn)行結(jié)果表明,,本設(shè)計(jì)可以通過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)的速度和可靠性,。本文以某軟件無線電系統(tǒng)的實(shí)際需求出發(fā),,充分利用PCI Express接口通過DMA傳輸方式實(shí)現(xiàn)了信號(hào)調(diào)理設(shè)備與服務(wù)器之間進(jìn)行高速數(shù)據(jù)傳輸?shù)墓δ堋7桨竿ㄟ^對NI PCIe-6537數(shù)字I/O卡性能的了解和挖掘,,以及對驅(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è)典型案例,,對工程實(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.