基于PXI總線的數(shù)據(jù)傳輸接口設計與實現(xiàn)方案
圖 4 中,S0 為空閑狀態(tài);S1 若在PCI9054 對Local Bus 進行寫的操作中為數(shù)據(jù)接收狀態(tài),若在PCI9054 讀Local Bus 的操作中為數(shù)據(jù)準備狀態(tài);S2 為PCI 9054 讀Local Bus 的操作中的數(shù)據(jù)發(fā)送狀態(tài);S3 為讀寫操作的終止狀態(tài)。圖中各狀態(tài)轉移觸發(fā)信號均為PCI 9054Local Bus 端的控制信號。
圖 5 PCI 9054 內部寄存器讀寫操作的狀態(tài)轉移圖
圖 5 中,S0為空閑狀態(tài),在讀寫啟動信號en_rwreg=1的情況下進入工作狀態(tài);S1為讀寫周期開始狀態(tài),有效Local Bus 端的讀寫周期開始信號;S2 為讀寫周期等待狀態(tài),等待PCI9054 的LREADY#有效;S3 為突發(fā)讀寫方式下的響應狀態(tài),突發(fā)讀寫方式下,PCI9054的LREADY#有效后,使能內部邏輯進行相應的響應;S4 為讀寫周期響應狀態(tài),在非突發(fā)讀寫方式下或者突發(fā)讀寫的終止周期中的響應狀態(tài)。
在實現(xiàn)了上述兩個狀態(tài)機模塊后,F(xiàn)PGA的程序還需要包括對FFT處理器的輸出數(shù)據(jù)進行數(shù)據(jù)幀封裝,即給每一次FFT 處理器根據(jù)相應的配置參數(shù)進行處理輸出的數(shù)據(jù)加上幀頭,幀頭中包含了此次傳輸?shù)腇FT 數(shù)據(jù)所覆蓋的頻段以及數(shù)據(jù)的長度信息。這樣做的好處是上位機不需要額外的同步信息,只需要根據(jù)幀頭中的頻段信息以及長度信息就可以判斷當前數(shù)據(jù)幀所表示的頻譜信息。利用PCI9054 內部寄存器中的MailBox 寄存器組來實現(xiàn)數(shù)字頻譜儀與上位機之間的參數(shù)傳遞。由于數(shù)字頻譜儀需要的參數(shù)信息比較少,只需要頻段選擇信息,以及開始和結束數(shù)字頻譜儀的控制信號,選擇MailBox 寄存器組中的第七個位寬為32 位的寄存器來傳遞控制信息。
整個 FPGA 程序的流程示意圖如圖6 所示。
圖6 FPGA程序流程示意圖
接口驅動程序的設計可以通過兩種方式實現(xiàn),一種是通過專用的驅動程序開發(fā)工具進行驅動程序的設計,如DDK、DriverStudio 和WinDriver 等,另外一種方式是通過PLX 公司提供的PCI軟件工具包SDK(Software Development Kit)實現(xiàn)接口的驅動設計,它提供了能夠實現(xiàn)各種傳輸方式所需要的基本API 函數(shù)。
為了縮短開發(fā)周期,本文采用由PLX 公司提供的SDK 工具包進行驅動程序的開發(fā)。運用其SDK 提供的工作API 函數(shù)實現(xiàn)Block DMA 模式下的Burst Forever(無限突發(fā))方式的數(shù)據(jù)傳輸。主要用到的函數(shù)如表1 所示。
由于本系統(tǒng)的特殊應用,還需要增加一些上層的應用程序,才能實現(xiàn)整個數(shù)字頻譜儀數(shù)據(jù)的正常工作,主要包括數(shù)字頻譜儀的參數(shù)控制字的生成和寫PCI9054 內部寄存器MailBoxReg7,以及對接收的數(shù)據(jù)幀進行解封裝的相關程序開發(fā)。
表1 Block DMA 模式下的SDK API 函數(shù)應用列表
本文使用了 PCI9054 的DMA傳輸方式,并且在Local端發(fā)起DMA傳輸,在上位機上采用中斷的形式進行響應,可以減少占用上位機CPU 處理時間,使得上位機在進行數(shù)據(jù)傳輸的同時可以進行其他的操作。PXI 接口加上PCI9054 的開發(fā)模式,使得開發(fā)周期縮短了很多,避免了復雜的PXI 總線協(xié)議的邏輯設計和驗證工作。本系統(tǒng)采用的PXI 總線的傳輸位寬32 位,采用無限突發(fā)的傳輸方式,在數(shù)據(jù)傳輸周期中的數(shù)據(jù)傳輸速率為132MB/s,但是由于增加了額外的控制周期以及其他的一些控制邏輯,使得數(shù)據(jù)的平均傳輸速率并沒有達到這個值,但是完全可以匹配目前FFT 處理器的處理速率,可以保證數(shù)據(jù)傳輸?shù)膶崟r性。
評論