基于PXI總線(xiàn)的數據傳輸接口設計與實(shí)現方案
圖 4 中,S0 為空閑狀態(tài);S1 若在PCI9054 對Local Bus 進(jìn)行寫(xiě)的操作中為數據接收狀態(tài),若在PCI9054 讀Local Bus 的操作中為數據準備狀態(tài);S2 為PCI 9054 讀Local Bus 的操作中的數據發(fā)送狀態(tài);S3 為讀寫(xiě)操作的終止狀態(tài)。圖中各狀態(tài)轉移觸發(fā)信號均為PCI 9054Local Bus 端的控制信號。

圖 5 PCI 9054 內部寄存器讀寫(xiě)操作的狀態(tài)轉移圖
圖 5 中,S0為空閑狀態(tài),在讀寫(xiě)啟動(dòng)信號en_rwreg=1的情況下進(jìn)入工作狀態(tài);S1為讀寫(xiě)周期開(kāi)始狀態(tài),有效Local Bus 端的讀寫(xiě)周期開(kāi)始信號;S2 為讀寫(xiě)周期等待狀態(tài),等待PCI9054 的LREADY#有效;S3 為突發(fā)讀寫(xiě)方式下的響應狀態(tài),突發(fā)讀寫(xiě)方式下,PCI9054的LREADY#有效后,使能內部邏輯進(jìn)行相應的響應;S4 為讀寫(xiě)周期響應狀態(tài),在非突發(fā)讀寫(xiě)方式下或者突發(fā)讀寫(xiě)的終止周期中的響應狀態(tài)。
在實(shí)現了上述兩個(gè)狀態(tài)機模塊后,FPGA的程序還需要包括對FFT處理器的輸出數據進(jìn)行數據幀封裝,即給每一次FFT 處理器根據相應的配置參數進(jìn)行處理輸出的數據加上幀頭,幀頭中包含了此次傳輸的FFT 數據所覆蓋的頻段以及數據的長(cháng)度信息。這樣做的好處是上位機不需要額外的同步信息,只需要根據幀頭中的頻段信息以及長(cháng)度信息就可以判斷當前數據幀所表示的頻譜信息。利用PCI9054 內部寄存器中的MailBox 寄存器組來(lái)實(shí)現數字頻譜儀與上位機之間的參數傳遞。由于數字頻譜儀需要的參數信息比較少,只需要頻段選擇信息,以及開(kāi)始和結束數字頻譜儀的控制信號,選擇MailBox 寄存器組中的第七個(gè)位寬為32 位的寄存器來(lái)傳遞控制信息。
整個(gè) FPGA 程序的流程示意圖如圖6 所示。

圖6 FPGA程序流程示意圖
接口驅動(dòng)程序的設計可以通過(guò)兩種方式實(shí)現,一種是通過(guò)專(zhuān)用的驅動(dòng)程序開(kāi)發(fā)工具進(jìn)行驅動(dòng)程序的設計,如DDK、DriverStudio 和WinDriver 等,另外一種方式是通過(guò)PLX 公司提供的PCI軟件工具包SDK(Software Development Kit)實(shí)現接口的驅動(dòng)設計,它提供了能夠實(shí)現各種傳輸方式所需要的基本API 函數。
為了縮短開(kāi)發(fā)周期,本文采用由PLX 公司提供的SDK 工具包進(jìn)行驅動(dòng)程序的開(kāi)發(fā)。運用其SDK 提供的工作API 函數實(shí)現Block DMA 模式下的Burst Forever(無(wú)限突發(fā))方式的數據傳輸。主要用到的函數如表1 所示。
由于本系統的特殊應用,還需要增加一些上層的應用程序,才能實(shí)現整個(gè)數字頻譜儀數據的正常工作,主要包括數字頻譜儀的參數控制字的生成和寫(xiě)PCI9054 內部寄存器MailBoxReg7,以及對接收的數據幀進(jìn)行解封裝的相關(guān)程序開(kāi)發(fā)。
表1 Block DMA 模式下的SDK API 函數應用列表

本文使用了 PCI9054 的DMA傳輸方式,并且在Local端發(fā)起DMA傳輸,在上位機上采用中斷的形式進(jìn)行響應,可以減少占用上位機CPU 處理時(shí)間,使得上位機在進(jìn)行數據傳輸的同時(shí)可以進(jìn)行其他的操作。PXI 接口加上PCI9054 的開(kāi)發(fā)模式,使得開(kāi)發(fā)周期縮短了很多,避免了復雜的PXI 總線(xiàn)協(xié)議的邏輯設計和驗證工作。本系統采用的PXI 總線(xiàn)的傳輸位寬32 位,采用無(wú)限突發(fā)的傳輸方式,在數據傳輸周期中的數據傳輸速率為132MB/s,但是由于增加了額外的控制周期以及其他的一些控制邏輯,使得數據的平均傳輸速率并沒(méi)有達到這個(gè)值,但是完全可以匹配目前FFT 處理器的處理速率,可以保證數據傳輸的實(shí)時(shí)性。
評論