隨著無線通信業(yè)務(wù)的飛速發(fā)展,頻譜資源顯得越來越缺乏,而實(shí)際中像廣播電視等頻段的頻譜利用率卻并不高,提高頻譜的利用率成為一種共識(shí)。認(rèn)知無線電是一種按伺機(jī)方式充分利用頻譜的共享頻譜技術(shù),因此可以用來提高頻譜利用率??焖贉?zhǔn)確的數(shù)字頻譜分析對(duì)認(rèn)知無線電的頻譜感知有非常重要的影響。在認(rèn)知無線電系統(tǒng)中,數(shù)字頻譜分析儀與下一級(jí)的處理模塊的數(shù)據(jù)傳輸速率是制約認(rèn)知無線電系統(tǒng)處理速度的一個(gè)瓶頸,因此需要選擇一種高速穩(wěn)定的數(shù)據(jù)傳輸接口技術(shù)。
本文利用PXI總線技術(shù)來實(shí)現(xiàn)數(shù)字頻譜分析儀與下一級(jí)處理模塊的數(shù)據(jù)傳輸接口。PXI是CompactPCI extend for Instrumentation的簡稱,即面向儀器系統(tǒng)的PCI擴(kuò)展,由NI(美國國家儀器公司)于1997年10月率先推出。它將CompactPCI規(guī)范定義的PCI總線技術(shù)發(fā)展為適合于工業(yè)控制、測(cè)量、數(shù)據(jù)采集和試驗(yàn)應(yīng)用的電氣、機(jī)械和軟件規(guī)范,從而形成了新的虛擬儀器體系結(jié)構(gòu)。PXI總線是一種高性能的32/64位地址數(shù)據(jù)復(fù)用總線,支持突發(fā)傳輸,是一種堅(jiān)固的基于PC的測(cè)量和自動(dòng)化平臺(tái),它的數(shù)據(jù)傳輸速率的峰值于33MHz、32bit的總線上可達(dá)132MB/s;于66MHz、64bit的總線上則可高達(dá)528MB/s,遠(yuǎn)高于GPIB(General-Purpose Interface Bus,通用接口總線)與VXI(VME bus eXtension for Instrumentation,面向儀器系統(tǒng)的VME總線的擴(kuò)展)接口的傳輸速率?;赑CI總線發(fā)展而來的PXI系統(tǒng)具有較好兼容性、存取延時(shí)小、成本低等優(yōu)點(diǎn)。PXI總線數(shù)據(jù)傳輸接口以其高傳輸速率和穩(wěn)定可靠的傳輸性能得到了越來越廣泛的應(yīng)用。
PXI總線協(xié)議比較復(fù)雜,工程應(yīng)用中一般采用兩種方式,一是采用FPGA(FieldProgrammable Gata Array,現(xiàn)場(chǎng)可編程門陣列)來設(shè)計(jì)控制接口,缺點(diǎn)是控制接口難度較大、開發(fā)周期長、成本大;二是采用接口芯片,將復(fù)雜的PXI總線接口轉(zhuǎn)換為相對(duì)簡單的用戶接口,用戶只要設(shè)計(jì)轉(zhuǎn)換后的總線接口。本文采用PXI總線專用接口芯片PCI9054來實(shí)現(xiàn)PXI總線的數(shù)據(jù)傳輸。
1 PCI9054接口芯片
PCI9054是PLX公司提供的一款PCI專用接口芯片,它兼容PCI V2.2的協(xié)議規(guī)范。其內(nèi)部結(jié)構(gòu)圖如圖1所示。由圖可知,PCI9054實(shí)現(xiàn)的是PCI Bus端和Local Bus端的信號(hào)轉(zhuǎn)換,使得Local Bus端不需要進(jìn)行復(fù)雜的PCI協(xié)議邏輯的設(shè)計(jì),只需要進(jìn)行簡單的數(shù)據(jù)傳輸邏輯的設(shè)計(jì)就能實(shí)現(xiàn)符合PCI協(xié)議規(guī)范的信號(hào)生成。
圖1 PCI9054內(nèi)部結(jié)構(gòu)示意圖
PCI9054內(nèi)部狀態(tài)機(jī)給用戶提供了三種傳輸方式:PCI Initiator傳輸方式、PCI Target傳輸方式以及PCI DMA傳輸方式。PCI Initiator傳輸方式下,PCI9054成為PCI Bus端的主機(jī),同時(shí)是Local Bus端的從機(jī),由Local Bus端主動(dòng)發(fā)起數(shù)據(jù)傳輸,PCI9054被動(dòng)后再主動(dòng)向PCI Bus發(fā)起傳輸。PCI Target傳輸方式下PCI9054的角色剛好與PCI Initiator方式相反,成為PCI Bus端的從機(jī)以及Local Bus端的主機(jī)。而在PCI DMA方式下PCI9054同時(shí)是PCI Bus端和Local Bus端的主機(jī)。在PCI9054內(nèi)部分別提供了這三種傳輸方式下的內(nèi)部寄存器,方便設(shè)計(jì)者來對(duì)每一種傳輸方式進(jìn)行配置。
PCI9054的本地端支持可編程的特點(diǎn),通過兩個(gè)模式選擇管腳MODE[1:0]來設(shè)置LocalBus端分別工作在C模式、J模式、M模式。這樣可以使得PCI9054的Local Bus可以掛載不同類型的其他設(shè)備。
PCI9054提供了兩個(gè)獨(dú)立的可編程DMA(Direct Memory Access,直接存儲(chǔ)器存取)控制器;每個(gè)通道均支持塊和分散/集中的DMA方式;在PCI總線端支持32位的數(shù)據(jù)位寬,時(shí)鐘速率達(dá)到33MHz;本地端可以編程實(shí)現(xiàn)8、16或32位的數(shù)據(jù)寬度;傳輸速率最高可達(dá)132MB/s;本地總線端時(shí)鐘最高可達(dá)50MHz支持復(fù)用/非復(fù)用的32位地址數(shù)據(jù)。
2 接口電路設(shè)計(jì)
PXI總線接口電路的設(shè)計(jì)主要是對(duì)PCI9054芯片的外圍電路進(jìn)行設(shè)計(jì),主要包括四個(gè)部分:電源方案的設(shè)計(jì)、時(shí)鐘方案的設(shè)計(jì)、EEPROM電路的設(shè)計(jì),Local端的連線方案設(shè)計(jì)。
PCI9054芯片的正常工作電壓是3.3V,而在上位機(jī)的PXI接口中,提供了三種電壓,3.3V、5V和12V,因此PCI9054的供電完全可以由上位機(jī)來提供。設(shè)計(jì)中,可以增加一個(gè)外部電壓的接入接口,方便開發(fā)過程中的調(diào)試。
PCI9054芯片需要兩個(gè)工作時(shí)鐘,一個(gè)是PCI Bus端的工作時(shí)鐘,一個(gè)是Local Bus端的工作時(shí)鐘,這兩個(gè)工作時(shí)鐘是獨(dú)立的,均需要外部邏輯輸入。PCI Bus端的工作時(shí)鐘由上位機(jī)的PXI接口提供,主要在PCB(Printed Circuit Board,印刷電路板);布線的時(shí)候需要對(duì)該時(shí)鐘線進(jìn)行蛇形走線處理。Local Bus端的工作時(shí)鐘由晶振提供,本方案中采用50MHz的晶振。
EEPROM電路的設(shè)計(jì)中需要注意EEDI和EEDO兩個(gè)管腳的連接,電路原理圖如圖2所示。注意在沒有掛載Local端的設(shè)備同時(shí)又沒有EEPROM時(shí),EEDI和EEDO需要通過一個(gè)1KΩ的電阻拉低。設(shè)計(jì)中,往往需要加上一個(gè)EEPROM用來存儲(chǔ)對(duì)PCI9054芯片的內(nèi)部寄存器的設(shè)置。這些設(shè)置在每次上電時(shí)自動(dòng)進(jìn)行加載,對(duì)PCI9054芯片的內(nèi)部寄存器進(jìn)行配置,使得每次上電后,PCI9054能按事先所配置的方式工作。因此,在設(shè)計(jì)電路完成之后還需要對(duì)EEPROM的內(nèi)容進(jìn)行設(shè)置,并通過PlxMon工具寫入。
圖2 EEPROM電路設(shè)計(jì)原理圖
在Local端的連線方案設(shè)計(jì)中,需要注意兩點(diǎn):一是本地時(shí)鐘的接入,本地時(shí)鐘作為PCI9054識(shí)別Local端是否有設(shè)備的依據(jù),若在EEPROM的EEDI和EEDO沒有下拉的情況下,一定要接入本地時(shí)鐘,不然連接上位機(jī)后,上位機(jī)進(jìn)入不了系統(tǒng)。二是若需要用到PCI Initiator傳輸方式,則必須將LBE[3:0]#全部拉低,否則就會(huì)造成讀寫出現(xiàn)上位機(jī)死機(jī)現(xiàn)象。
3 接口程序設(shè)計(jì)
由于數(shù)據(jù)傳輸接口涉及到數(shù)字頻譜儀和上位機(jī),其程序設(shè)計(jì)也包括兩個(gè)部分:一部分是數(shù)字頻譜儀端的程序設(shè)計(jì),即PCI9054 Local端的程序設(shè)計(jì),由于本項(xiàng)目中在PCI9054的Local端掛載的是FPGA芯片,需要在FPGA中進(jìn)行Local端的接口邏輯程序設(shè)計(jì);另一部分是上位機(jī)端的程序設(shè)計(jì),主要是基于操作系統(tǒng)的驅(qū)動(dòng)程序以及上層應(yīng)用程序設(shè)計(jì)。
3.1 FPGA程序設(shè)計(jì)
FPGA程序的設(shè)計(jì)主要是對(duì)PCI9054的Local端時(shí)序邏輯進(jìn)行設(shè)計(jì)。由圖2可知,在PCI9054內(nèi)部的Local端存在三種傳輸方式狀態(tài)機(jī):PCI Initiator方式、PCI Target方式、PCIDMA方式。因此,在對(duì)Local端的控制進(jìn)行設(shè)計(jì)時(shí),可以用不同的狀態(tài)機(jī)來匹配PCI9054的內(nèi)部狀態(tài)機(jī),達(dá)到實(shí)現(xiàn)各種方式的數(shù)據(jù)傳輸。
本文根據(jù)系統(tǒng)的特點(diǎn),選擇使用PCI DMA的傳輸方式。在FPGA端的程序采用層次化和模塊化的設(shè)計(jì),分為上下兩層結(jié)構(gòu):下層是鏈路層,實(shí)現(xiàn)PCI DMA方式下,長字(4Bytes)數(shù)據(jù)流的雙向傳輸鏈路的建立;上層是鏈路適配層,實(shí)現(xiàn)數(shù)字頻譜儀的數(shù)據(jù)按照一定的幀格式封轉(zhuǎn)成幀。PCI DMA方式的設(shè)置和啟動(dòng)也在FPGA中完成,程序采用模塊化的設(shè)計(jì)方式,將數(shù)據(jù)傳輸模塊與控制模塊區(qū)分。在控制模塊中,分成三層:第一層是寄存器讀寫層,實(shí)現(xiàn)對(duì)PCI9054內(nèi)部寄存器的讀寫操作;第二層是參數(shù)獲取與PCI DMA方式配置層,實(shí)現(xiàn)從PCI9054內(nèi)部消息寄存器獲取數(shù)字頻譜儀的控制參數(shù)以及對(duì)PCI DMA方式進(jìn)行配置與啟動(dòng)控制;第三層是上層控制層,用來解析控制參數(shù)以及控制生成數(shù)據(jù)幀。整個(gè)程序結(jié)構(gòu)圖如圖3所示。
圖3 FPGA程序結(jié)構(gòu)圖
上述FPGA程序中主要包括了兩個(gè)狀態(tài)機(jī)的設(shè)計(jì),一個(gè)PCI DMA數(shù)據(jù)傳輸方式的狀態(tài)機(jī)設(shè)計(jì),一個(gè)是PCI 9054內(nèi)部寄存器讀寫操作的狀態(tài)機(jī)設(shè)計(jì)。它們的狀態(tài)轉(zhuǎn)移圖分別如圖4和圖5所示。
圖4 PCI DMA數(shù)據(jù)傳輸狀態(tài)轉(zhuǎn)移圖
圖4中,S0為空閑狀態(tài);S1若在PCI9054對(duì)Local Bus進(jìn)行寫的操作中為數(shù)據(jù)接收狀態(tài),若在PCI9054讀Local Bus的操作中為數(shù)據(jù)準(zhǔn)備狀態(tài);S2為PCI 9054讀Local Bus的操作中的數(shù)據(jù)發(fā)送狀態(tài);S3為讀寫操作的終止?fàn)顟B(tài)。圖中各狀態(tài)轉(zhuǎn)移觸發(fā)信號(hào)均為PCI 9054Local Bus端的控制信號(hào)。
圖5 PCI 9054內(nèi)部寄存器讀寫操作的狀態(tài)轉(zhuǎn)移圖
圖5中,S0為空閑狀態(tài),在讀寫啟動(dòng)信號(hào)en_rwreg=1的情況下進(jìn)入工作狀態(tài);S1為讀寫周期開始狀態(tài),有效Local Bus端的讀寫周期開始信號(hào);S2為讀寫周期等待狀態(tài),等待PCI9054的LREADY#有效;S3為突發(fā)讀寫方式下的響應(yīng)狀態(tài),突發(fā)讀寫方式下,PCI9054的LREADY#有效后,使能內(nèi)部邏輯進(jìn)行相應(yīng)的響應(yīng);S4為讀寫周期響應(yīng)狀態(tài),在非突發(fā)讀寫方式下或者突發(fā)讀寫的終止周期中的響應(yīng)狀態(tài)。
在實(shí)現(xiàn)了上述兩個(gè)狀態(tài)機(jī)模塊后,F(xiàn)PGA的程序還需要包括對(duì)FFT處理器的輸出數(shù)據(jù)進(jìn)行數(shù)據(jù)幀封裝,即給每一次FFT處理器根據(jù)相應(yīng)的配置參數(shù)進(jìn)行處理輸出的數(shù)據(jù)加上幀頭,幀頭中包含了此次傳輸?shù)腇FT數(shù)據(jù)所覆蓋的頻段以及數(shù)據(jù)的長度信息。這樣做的好處是上位機(jī)不需要額外的同步信息,只需要根據(jù)幀頭中的頻段信息以及長度信息就可以判斷當(dāng)前數(shù)據(jù)幀所表示的頻譜信息。利用PCI9054內(nèi)部寄存器中的MailBox寄存器組來實(shí)現(xiàn)數(shù)字頻譜儀與上位機(jī)之間的參數(shù)傳遞。由于數(shù)字頻譜儀需要的參數(shù)信息比較少,只需要頻段選擇信息,以及開始和結(jié)束數(shù)字頻譜儀的控制信號(hào),選擇MailBox寄存器組中的第七個(gè)位寬為32位的寄存器來傳遞控制信息。
整個(gè)FPGA程序的流程示意圖如圖6所示。
圖6 FPGA程序流程示意圖
3.2 接口驅(qū)動(dòng)程序的設(shè)計(jì)
接口驅(qū)動(dòng)程序的設(shè)計(jì)可以通過兩種方式實(shí)現(xiàn),一種是通過專用的驅(qū)動(dòng)程序開發(fā)工具進(jìn)行驅(qū)動(dòng)程序的設(shè)計(jì),如DDK、DriverStudio和WinDriver等,另外一種方式是通過PLX公司提供的PCI軟件工具包SDK(Software Development Kit)實(shí)現(xiàn)接口的驅(qū)動(dòng)設(shè)計(jì),它提供了能夠?qū)崿F(xiàn)各種傳輸方式所需要的基本API函數(shù)。
為了縮短開發(fā)周期,本文采用由PLX公司提供的SDK工具包進(jìn)行驅(qū)動(dòng)程序的開發(fā)。運(yùn)用其SDK提供的工作API函數(shù)實(shí)現(xiàn)Block DMA模式下的Burst Forever(無限突發(fā))方式的數(shù)據(jù)傳輸。主要用到的函數(shù)如表1所示。
由于本系統(tǒng)的特殊應(yīng)用,還需要增加一些上層的應(yīng)用程序,才能實(shí)現(xiàn)整個(gè)數(shù)字頻譜儀數(shù)據(jù)的正常工作,主要包括數(shù)字頻譜儀的參數(shù)控制字的生成和寫PCI9054內(nèi)部寄存器MailBoxReg7,以及對(duì)接收的數(shù)據(jù)幀進(jìn)行解封裝的相關(guān)程序開發(fā)。
表1 Block DMA模式下的SDK API函數(shù)應(yīng)用列表
4 結(jié)論
本文使用了PCI9054的DMA傳輸方式,并且在Local端發(fā)起DMA傳輸,在上位機(jī)上采用中斷的形式進(jìn)行響應(yīng),可以減少占用上位機(jī)CPU處理時(shí)間,使得上位機(jī)在進(jìn)行數(shù)據(jù)傳輸?shù)耐瑫r(shí)可以進(jìn)行其他的操作。PXI接口加上PCI9054的開發(fā)模式,使得開發(fā)周期縮短了很多,避免了復(fù)雜的PXI總線協(xié)議的邏輯設(shè)計(jì)和驗(yàn)證工作。本系統(tǒng)采用的PXI總線的傳輸位寬32位,采用無限突發(fā)的傳輸方式,在數(shù)據(jù)傳輸周期中的數(shù)據(jù)傳輸速率為132MB/s,但是由于增加了額外的控制周期以及其他的一些控制邏輯,使得數(shù)據(jù)的平均傳輸速率并沒有達(dá)到這個(gè)值,但是完全可以匹配目前FFT處理器的處理速率,可以保證數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性。