??? 摘 要:依據(jù)PXI總線規(guī)范,應用PCI9054總線控制器" title="總線控制器">總線控制器實現(xiàn)PXI總線接口,通過FPGA控制PCI9054總線控制器局部總線" title="局部總線">局部總線和FIFO的讀寫端口來實現(xiàn)高速數(shù)字" title="高速數(shù)字">高速數(shù)字輸入輸出。測試結(jié)果表明,該板卡能夠穩(wěn)定地傳輸不低16MHz的高速數(shù)字信號。
??? 關鍵詞: PXI; 數(shù)字輸入輸出; PCI9054; FPGA
?
??? PXI是PCI在儀器領域的擴展(PCI Extension for Instrumentation),其技術規(guī)范是NI公司于 1997年9月1日推出的,現(xiàn)已有60多家聯(lián)盟[1]。PCI局部總線可以在33MHz和 32位數(shù)據(jù)通路的條件下達到峰值132Mb/s的帶寬,在66MHz和 64位數(shù)據(jù)通路的條件下達到峰值528Mb/s的帶寬[2]。PXI吸收了VXI的優(yōu)點,同時受益于Compact PCI(CPCI),因而速度更快、結(jié)構堅固緊湊、系統(tǒng)可靠穩(wěn)定,在射頻和微波頻帶以下的低、中高頻段可以替代VXI而且價格優(yōu)勢明顯,深受廣大用戶歡迎,目前正朝氣蓬勃地向商用與軍用領域拓展。
??? PXI高速數(shù)字I/O卡是實現(xiàn)各種功能復雜的高速傳輸模塊的最基本單元。對它的深入研究設計有助于更好地理解PXI總線及其接口設計" title="接口設計">接口設計。
1 系統(tǒng)結(jié)構與設計原理
??? 一個完整的數(shù)字I/O系統(tǒng)由PCI總線控制器、FPGA、FIFO等模塊組成。PCI總線控制器實現(xiàn)PXI總線接口,F(xiàn)IFO作為數(shù)據(jù)輸入輸出的緩存器件,經(jīng)FPGA控制后實現(xiàn)局部總線數(shù)據(jù)的讀寫操作。具體的結(jié)構如圖1。
?
??? 數(shù)據(jù)傳輸流程為:輸入時,外部數(shù)據(jù)通過寫入FIFO后讀出傳入PCI9054局部總線,經(jīng)PCI9054傳入到PXI總線;輸出時,數(shù)據(jù)經(jīng)PXI總線送人PCI9054后經(jīng)局部總線傳到輸出FIFO后,通過讀取FIFO實現(xiàn)數(shù)據(jù)的輸出。整個傳輸過程的時序由FPGA嚴格控制。
2 硬件設計
??? 硬件設計包括接口設計和局部總線設計。
2.1接口設計
??? 當前國際上實現(xiàn)PXI接口主要有兩種途徑:一種是直接通過FPGA進行接口設計,主要是調(diào)用FPGA中的PCI宏單元。另一種是直接通過專用的PCI接口芯片來實現(xiàn)接口設計。前一種方法要求對PCI總線規(guī)范十分了解,調(diào)試困難較大,開發(fā)周期較長,而直接購買PCI的IP核又太貴,所以這里采用第二種方案。目前提供PCI 通訊芯片的廠家很多,比較成熟的接口芯片有PLX公司的PCI90XX系列、AMCC公司的S59XX系列以及CYPRESS公司的CY7C094XX系列。
??? PCI9054是由美國PLX公司生產(chǎn)的先進的PCI I/O Accelerator;符合PCI2.2協(xié)議,采用了先進的數(shù)據(jù)流水線結(jié)構技術;局部總線提供了M、C、J 三種工作模式以適應不同的局部處理器;具有可選的串行EEPROM接口,本地總線時鐘可和PCI時鐘異步。PCI9054內(nèi)部有6種可編程的FIFO,以實現(xiàn)零等待突發(fā)傳輸及本地總線與PCI總線之間的異步操作;本地時鐘可以達到 50MHz,且與 PCI 時鐘異步。它支持突發(fā)以及DMA傳輸,能在主模式和從模式、DMA模式下工作,是應用非常廣泛的一款PCI接口芯片[3]。PXI接口框圖如圖2。
?
??? 數(shù)據(jù)總線和地址總線是復用的,分別為AD0-AD31;控制總線主要包括C/BE[0:3]#、FRAME#、IRDY#、DEVSEL#、TRDY#、STOP#、IDSEL#、LOCK#、PAR#、PEER#、SERR#、REQ#、GNT#等,在硬件連接時只要將PXI接口和PCI9054對應的這些端口相連即可。與串行EEPROM對應的端口為CS、SK、DI、DO,在電路中DI和DO是物理連接的,EEPROM的EEDI/EEDO引腳的配置要注意:當不安裝EEPROM時,該引腳一定要下拉,用1kΩ的下拉電阻即可,此時啟動后9054會按默認值進行配置;當安裝空白的EEPROM時,該引腳需要上拉;當安裝燒錄好的EEPROM時,該引腳需要上拉。
2.2局部總線設計
??? 由圖2可知,PCI9054的局部總線分別與FPGA和功能模塊相連。由于在功能模塊中用到的是FIFO緩存器,所以不需要局部地址總線,只需將數(shù)據(jù)總線分別連接到兩塊FIFO中,局部總線的控制信號和FIFO的控制信號連接到FPGA中,通過FPGA來控制FIFO的讀寫。為了靈活地改變數(shù)據(jù)的傳輸速率,在FPGA中調(diào)用鎖相環(huán)來給FIFO分配讀寫時鐘。局部總線的電路連線如圖3。
?
??? 為了配合外部電路的速度和匹配要求,在這里應用了Altera的庫生成了PLL(Phase Locked Loop)。PLL具有低的時鐘偏移,應用靈活,通過調(diào)整比例關系就可以得到所需要的時鐘頻率。其symbol如圖4,時序仿真如圖5。
?
?
??? 通過設置寄存器DMAMODE的第7位可以使能或禁止外部等待輸入控制信號READY#,以使PCI9054工作于外部等待或內(nèi)部等待狀態(tài)。當READY#被禁止時,則在每次傳輸?shù)牡刂泛蛿?shù)據(jù)間插入等待狀態(tài),其數(shù)目由內(nèi)部的等待狀態(tài)計數(shù)器決定;若READY#使能,則READY#信號的持續(xù)時鐘周期決定了附加的等待狀態(tài)。本設計采用C模式READY#使能方式。根據(jù)PCI9054的時序圖(見PCI9054 Data Book5.6節(jié)),每次數(shù)據(jù)傳輸時,首先發(fā)出地址選通信號ADS#,當總線準備好則使READY#信號有效,開始數(shù)據(jù)傳輸;否則總線處于等待狀態(tài)。數(shù)據(jù)一旦開始傳輸,局部總線控制器將判斷傳輸結(jié)束標志信號BLAST#,若BLAST#為高電平,則發(fā)出有效的READY#信號,數(shù)據(jù)持續(xù)傳輸,否則,在發(fā)出最后一個READY#信號后結(jié)束數(shù)據(jù)傳輸。狀態(tài)機轉(zhuǎn)換的具體過程如表1。
?
??? 本設計采用的是ALTERA公司的FPGA器件EP1C6,在Quartus Ⅱ軟件下編寫了整個的程序,軟件仿真結(jié)果如圖6。
?
3 驅(qū)動程序設計
??? 在Windows操作系統(tǒng)中,為了保證系統(tǒng)的安全性和可移植性,限制了應用程序?qū)τ布牟僮鳎绕鋀indows 2000和Windows XP均不支持直接對系統(tǒng)的硬件資源的操作。因而在設計開發(fā)PCI設備時,需要開發(fā)相應的驅(qū)動程序來實現(xiàn)對PCI設備的操作,用戶應用程序通過驅(qū)動程序來訪問PCI設備。
??? 開發(fā)WDM驅(qū)動程序的主要工具是微軟為各操作系統(tǒng)提供的開發(fā)軟件包DDK(Device Driver Kits) ,該軟件包為驅(qū)動程序開發(fā)者提供了用于驅(qū)動程序開發(fā)的資源文件、編譯連接程序、開發(fā)技術文檔等。還有第三方提供的開發(fā)工具:NuMega公司的DriverStudio和Jungo公司的WinDriver,這些工具是在DDK的基礎上為方便開發(fā)用戶而開發(fā)的工具[4]。在使用中,雖然利用DDK開發(fā)驅(qū)動程序難度較大,但是代碼非常簡潔,結(jié)構清晰,效率也高。利用第三方開發(fā)工具使用簡單,開發(fā)速度較快,但對于驅(qū)動程序的理解和深入開發(fā)不如DDK。因此選擇DDK開發(fā)PCI設備驅(qū)動程序" title="設備驅(qū)動程序">設備驅(qū)動程序,雖然開始會覺得非常復雜,但從執(zhí)行效率和功能上會更有利。
??? 在WDM中,采用了分層的驅(qū)動程序體系結(jié)構,總線驅(qū)動程序或類驅(qū)動程序在最底層直接與設備打交道,設備功能驅(qū)動程序在上層通過與低層驅(qū)動程序打交道,實現(xiàn)設備的功能,中間還可以有類過濾驅(qū)動程序或設備過濾驅(qū)動程序用于數(shù)據(jù)的過濾或轉(zhuǎn)換。在PCI總線的驅(qū)動程序?qū)又?,其層次圖如圖7。
?
??? 在實際開發(fā)中,一般無需分很多層次,只需要開發(fā)一個設備驅(qū)動程序即可。設備驅(qū)動程序直接與PCI總線驅(qū)動程序打交道,進行硬件操作,以實現(xiàn)PCI設備的功能。
4 PCB設計要點和硬件測試結(jié)果
??? 為了提高設備工作穩(wěn)定性和抗干擾性,在布局布線時采取了如下措施:采用四層板,模擬地與數(shù)字地用磁珠隔離;為了避免信號線間串擾,兩條信號線應采取垂直交叉方式,要拉開兩線的距離,并在兩條平行的信號線之間增設一條線;采用鐵氧體磁心加電容濾波的方法對每組電源分別去耦,以取得最好的濾波效果。
??? 最后對設計出來的板卡進行了硬件測試,在應用程序中編寫如下簡單程序:
??? void CPDC4000DemoDlg::OnBlockDmaPciToLocalDemo() //DMA模式輸出數(shù)據(jù)
??? {
???????? unsigned char pData[0x100];//待輸出的數(shù)組
?????? for (int i = 0; i < 0x100; i ++)
?????? {
???????????????????? pData[i] = i + 0x0;
???? }
???? m_iStatus = STATUS_BLOCK_WRITE;
???? BlockDmaPciToLocal(pData, 0x100);
??? }
??? 通過邏輯分析儀測量板卡的輸出波形,得到輸出低8位結(jié)果,見圖8。波形符合寫入的數(shù)據(jù),數(shù)據(jù)輸出的速率為16MHz。
?
??? 本模塊已達到預定的設計指標,運行穩(wěn)定可靠。該模塊的優(yōu)點是設計簡單,開發(fā)周期短,開發(fā)成本低。缺點是功能比較單一。如有需要,可以將該模塊擴展為功能更為復雜的應用單元。隨著PXI總線的不斷發(fā)展,基于PXI總線的產(chǎn)品設計具有十分廣闊的前景。
參考文獻
[1]? National Instrumen.The PXI System Architecture[S],1997.
[2]? 尹勇,李寧.PCI總線設備開發(fā)寶典.北京:北京航空航天大學出版社, 2005.
[3]? Plx Technology. PCI9054 Data Book, Version 2.1. Plx Technology, 2000.
[4]? CANT C.Windows WDM設備驅(qū)動程序開發(fā)指南.孫義,譯. 北京:機械工業(yè)出版社,2000.