隨著計算機技術的發展,以及大數據量交互的需要,硬件系統對PC總線傳輸速率、數據完整性提出了越來越高的應用要求。傳統的PCI總線技術雖然經過不斷的改進,開發出64b,66MHz的并行協議PCI-X標準,但由于并行總線整體設計難度以及造價高昂,主流的PCI技術已經成為限制數據傳輸系統性能發揮的瓶頸。因此,第3代I/O技術PCIExpress總線標準一經推出即成為取代PCI總線的下一代標準,并得到迅速的發展。
PCIExpress總線利用串行的連接特點能輕松的將數據整體傳輸速度提到一個更高的頻率,達到遠遠超出以往PC總線的傳輸速度,同時保證了數據的完整性。PCIExpress連接采用點對點差分傳輸,可以被配置成最高x32的數據帶寬,其中PCIExpressGen2.0標準的x1通道傳輸能力達到單向5Gb/s.PCIExpress總線設備可以通過主機橋接器芯片進行基于主機的傳輸,也可以通過交換器進行多點傳輸,這極大的拓展了PC總線的開發靈活性。Xilinx公司的Virtex-6系列FPGA芯片內嵌了PCIExpress協議硬核,支持x1,x2,x4和x8通道傳輸,為實現 PCIExpress總線解決方案單片集成提供了可能。
本文在研究PCIExpress協議標準及其接口技術的基礎上,設計了基于Virtex-6FPGA芯片的PCIExpress高速數據采集卡,實現了外部系統與PC的數據交互。
1系統總體設計
PCIExpress采集系統組成框圖如圖1所示。
圖1系統整體框圖
采集系統以FPGA作為采集卡的控制核心,外部數據經數據接口傳入FPGA,FPGA通過內部邏輯對高速數據進行必要的時序控制和相關處理后將數據存儲到片外的SDRAM進行緩存,然后采集卡在總線主控DMA控制器的控制下,通過PCIEx8通道將緩存的數據寫入計算機內存。上位機由驅動軟件識別 PCI Express采集卡,并設置DMA控制寄存器,通過上層應用軟件接收硬件電路發送到內存的數據,并在每次傳輸結束是處理中斷。采用DMA模式傳輸實現了在實時數據高速采集的同時,不影響上位機對數據的處理工作,不僅提高了采集系統整體的采集速度,也保證了數據質量,以及測試分析完整性。
數據接口模塊完成外部數據的差分接收,這有利于保證高速數據的傳輸質量。Virtex-6FPGA實時接收差分信號,并在DataProcessor模塊中進行解碼然后根據一定時序通過高速FIFO緩存送入外部SDRAM存儲模塊。PCIExpressIPCore為Virtex-6FPGA內部集成協議硬核,完成數據的分層打包,DMA控制器作為PCIExpress總線傳輸的主控,實現了DMA方式傳輸。
2采集卡硬件設計
2.1基于IPCore的PCIExpress接口設計
本采集卡采用Xilinx公司的Virtex-6系列FPGA芯片作為核心控制器。該款FPGA中內置了PCIExpress集成模塊和 RocketIOGTP收發器,提供了符合《PCIExpress基本規范v2.0》的PCI-E解決方案,單通道最高設計速度達到5Gb/s.根據PCI-E總線的分層模型,Virtex-6集成端點模塊提供事務層(TL)、數據鏈路層(DLL)、物理層(PHYMAC)以及配置空間所具有的全部功能。通過使用Xilinx公司提供的PCIExpress LogiCOREIPEndpointBlockPlus核,可實現符合PCI-E總線協議的數據傳輸。EndpointBlock Plus核在內部例化了Virtex-6集成端點模塊,實現了集成端點模塊和GTP收發器之間的數據傳輸。集成硬核頂層模塊接口組成如圖2所示。
Xilinx公司所提供的PCIExpress解決方案,遵守了PCIE分層協議標準,從完成對接收的數據進行分層打包,通過PCIE接口與計算機通信。分層傳輸過程如圖3所示。
其中處理層主要是接受從軟件層送來的讀寫請求,并且建立一個請求包傳輸到數據鏈路層。作為事務層和物理層之間的接口,數據鏈路層通過維護鏈路活躍狀態信息、流控制初始化和流控制來確保數據的完整性、數據包的有序性和數據傳輸的可靠性。物理層位于PCIE結構的最底層,主要實現鏈路的建立、通路的分配、時鐘的編碼和并行數據與串行數據的之間的轉換。
在初始化階段,在無需固件或操作系統軟件的介入下,物理層建立狀況狀態機通過檢測、配置和輪詢來協商可用的通道數目和雙方的工作頻率。
圖2集成硬核頂層模塊接口組成框圖
圖3PCIExpress分層傳輸過程
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方式直接存入主機物理內存中。當存完一個數據包后發出中斷消息通知主機上層應用程序處理數據以及將物理內存中的數據轉存至硬盤,之后即進入下一個數據包的傳輸,如此反復,直到收到主機的停止DMA傳輸命令,即完成當前幀的采集和傳輸并停止下一幀的采集和傳輸。
3 PCIExpress采集卡驅動設計
本系統驅動程序在WindowsXP操作系統下,應用微軟公司的DriverStudio平臺進行開發。DriverStudio平臺提供了驅動程序開發所需的WDM(Windows DriverMode,Windows驅動程序模型),包括VtoolsD、DriverWorks、DriverNetWorks和SoftICE等開發工具,應用該平臺開發降低了驅動程序開發的難度,同時了提高了代碼的可靠性。
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()等函數對外部硬件電路進行訪問,讀寫數據。
3.2DMA傳輸實現
采用DMA傳輸能極大的減輕主機處理負擔,特別適用于大數據量處理系統。采用DriverWorks提供的KDmaAdapter類可輕松建立一個DMA 傳輸鏈路,實現DMA讀寫操作。用于FPGA總線協議模塊軟件層完成了相關DMA傳輸的控制,所以驅動程序DMA傳輸只需子在系統啟動DMA傳輸時,身心相應的內存作為公共緩沖區,用于外部DMA控制器存入數據文件,這里需要調用DriverWorks提供的KCommonDmaBuffer類,該類常用函數如表2所示。
VirtaulAddress()函數返回的內核模式地址是提供給驅動程序讀寫公用緩沖區用的,而進行DMA傳輸時需要用到緩沖區的物理地址,也即需要寫入DMA參數寄存器的是緩沖區的物理地址。
3.3總線中斷處理
采集卡一共需要處理三種中斷請求,分別是DMA寫完成,DMA讀完成和錯誤中斷請求。在Driver-Works平臺中,KInterrupt類可用于處理硬件中斷,其主要函數包括中斷寄存器初始化,中斷連接函數,實現了將一個中斷服務例程連接到一個中斷和解除其連接等。
表2KCommonDmaBuffer類主要函數中斷處理函數首先在驅動程序構造的函數中調用 MEMBER_ISR(class_name,fuction_name),聲明中斷服務例程為該類的一個成員函數,接著在驅動程序驅動例程中調用 InitializeAndConnect(),初始化中斷類實例,并與中斷服務例程連接起來。
這樣就完成了對外部硬件中斷的處理,當每次驅動程序檢測到硬件產生中斷脈沖時,中斷服務函數隨即被調用,從而轉入相應中斷處理程序中執行。
4采集卡性能測試
為測試采集系統性能,自行設計了應用軟件對采集卡數據傳輸速率進行統計,在Windows環境下,采用多種數據量進行DMA方式讀寫。應用端軟件根據數設定的數據包大小,申請不同的內存空間,并將虛擬地址映射到FPGA的DMA寄存器。實際測試采集速率結果如圖4所示。
圖4實際測試數據采集速率
根據圖4的測試結果,總線DMA傳輸速率與數據塊大小相關。當設定系統數據塊(即開辟的主機內存)大于32Mb時,采集卡的采集速率穩定在5.6Gb/s.實驗結果表明,該系統大幅度地提高了數據交互速度,發揮了PCIExpress總線的優越性能。
5結語
本文應用Xilinx公司的Virtex-6芯片設計了PCI Express高速采集卡,通過調用FPGA內部的PCIE集成協議硬核,配合總線DMA控制器,能夠快速可靠地采集外部差分數據,具有解碼、整形,高速采集存儲的功能,是大數據量交互的有效解決方案。
評論
查看更多