基于Virtex 6的PCI Express高速采集卡設計
在初始化階段,在無需固件或操作系統軟件的介入下,物理層建立狀況狀態機通過檢測、配置和輪詢來協商可用的通道數目和雙方的工作頻率。

圖2集成硬核頂層模塊接口組成框圖

2.2高速傳輸實現
作為采集卡數據傳輸主控,FPGA內部實現了高速數據傳輸DMA控制操作。為了接收上位機發出的DMA控制命令,系統首先必須分配一定大小的FPGA內部BlockRAM用作DMA控制寄存器,在驅動程序的映射下,該BlockRAM在采集卡插入系統是會被映射到主機內存空間,于是主機只需訪問映射好的內存空間即可實現對FPGA內部控制寄存器的訪問。
當系統啟動傳輸時,上位機首先將DMA傳輸的目的地址寫入相應的DMA控制寄存器。在接收到采集命令后,采集卡開始接收外部數據,并對數據進行解碼、整形,按順序將數據依次通過高速FIFO送入外部SDRAM進行緩存。當SDRAM數據有效后,通過觸發信號啟動DMA傳輸,DMA控制器將申請從SDRAM中將數據寫入到數據發送FIFO,由發送模塊將發送數據FIFO中的數據按照EndpointBlockPlus核的事務(TRN)接口的格式提交給IP核,由IP核按照PCIExpress總線規范將數據傳至FPGA的GTP收發器,GTP收發器直接連接了PCI-E的差分數據傳輸對,于是通過PCI-Ex8通道將數據以DMA方式直接存入主機物理內存中[5,7-8]。當存完一個數據包后發出中斷消息通知主機上層應用程序處理數據以及將物理內存中的數據轉存至硬盤,之后即進入下一個數據包的傳輸,如此反復,直到收到主機的停止DMA傳輸命令,即完成當前幀的采集和傳輸并停止下一幀的采集和傳輸。
3PCIExpress采集卡驅動設計
本系統驅動程序在WindowsXP操作系統下,應用微軟公司的DriverStudio平臺進行開發。DriverStudio平臺提供了驅動程序開發所需的WDM(Windows DriverMode,Windows驅動程序模型),包括VtoolsD、DriverWorks、DriverNetWorks和SoftICE等開發工具,應用該平臺開發降低了驅動程序開發的難度,同時了提高了代碼的可靠性[9]。
3.1硬件驅動驅動程序
對外部硬件的訪問是通過DriverWorks提供的2個類來實現的,其中,KioRang類實現對I/O映射芯片的訪問,KMemoryRang類實現對內存映射芯片的訪問。本系統選擇了KMemoryRang完成PCI Express硬件的訪問,主要調用函數如表1所示。
表1

KMemoryRang類主要函數初始化KMemoryRang類的操作是在驅動程序啟動例程中執行的,主要執行程序如下:NTSTATUSPCIeDevice(KIrpI)
{…
PCM_RESOURCE_LIST pResListRaw=I.AllocatedResources();PCM_RESOURCE_LIST pResListTranslated=I.TranslatedResources();m_MemoryRange.Initialize(pResListTranslated,pResListRaw,0);…
}當驅動程序完成初始化時,應用端軟件將通過inb()和outb()等函數對外部硬件電路進行訪問,讀寫數據。
評論