基于PCI Express總線(xiàn)的數(shù)據(jù)采集設(shè)備實(shí)現(xiàn)
1 隨著計(jì)算機(jī)技術(shù)的發(fā)展,數(shù)據(jù)傳輸帶寬的日益增長(zhǎng),總線(xiàn)技術(shù)也在迅速的發(fā)展。高速信號(hào)傳輸,海量數(shù)據(jù)采集與記錄,實(shí)時(shí)視頻圖像處理以及其他數(shù)據(jù)處理的數(shù)據(jù)吞吐量現(xiàn)以kMb/s為量級(jí)。
未來(lái)計(jì)算機(jī)系統(tǒng)對(duì)帶寬和擴(kuò)展性的要求已經(jīng)超越了第二代總線(xiàn)技術(shù)。第三代高性能I/O總線(xiàn)技術(shù)——PCI Express(PCIE)總線(xiàn)解決了以往總線(xiàn)的不足,它的發(fā)展將取代第二代總線(xiàn)成為新的數(shù)據(jù)總線(xiàn),其提供了更加完善的性能、更多的功能、更強(qiáng)的可擴(kuò)展性和更低的成本。
本文研究PCI Express總線(xiàn)技術(shù)的發(fā)展與構(gòu)架,介紹采用Xilinx公司的FPGA與NXP公司的PHY器件實(shí)現(xiàn)一種經(jīng)濟(jì)簡(jiǎn)單的數(shù)據(jù)采集設(shè)備。在電路設(shè)計(jì)中,分析了總線(xiàn)信號(hào)高速布線(xiàn)的要求。
最后詳細(xì)介紹數(shù)據(jù)采集設(shè)備的數(shù)據(jù)通道部分在Xilinx Pipe Core中的實(shí)現(xiàn),并通過(guò)WinDriver軟件開(kāi)發(fā)簡(jiǎn)單的驅(qū)動(dòng)程序。
2 PCIE總線(xiàn)發(fā)展和構(gòu)架介紹
2.1 PCIE總線(xiàn)的發(fā)展
PCI Express是用來(lái)互連諸如計(jì)算機(jī)和通信平臺(tái)應(yīng)用中外圍設(shè)備的第三代I/O總線(xiàn)技術(shù),第一代總線(xiàn)包括ISA,EISA,VESA和微通道(Micro Channel)總線(xiàn),而第二代總線(xiàn)則包括了PCI,PCI-X和AGP。PCIExpress是一種能夠應(yīng)用于一點(diǎn)設(shè)備、臺(tái)式電腦、工作站、服務(wù)器、嵌入式計(jì)算機(jī)和通信平臺(tái)等所有周邊I/O設(shè)備互連的總線(xiàn)。
PCIE最初由InteI發(fā)展,并于1992年在市場(chǎng)發(fā)布。PCIE的體系結(jié)構(gòu)繼承了第二代總線(xiàn)體系結(jié)構(gòu)最有用的特點(diǎn),并且采用計(jì)算機(jī)體系結(jié)構(gòu)中新的開(kāi)發(fā)成果。它保留了原先的通訊模型和下載配置機(jī)制,但拋棄了共享總線(xiàn)的方式,采用點(diǎn)到點(diǎn)的總線(xiàn)連接方式。由于它提供了更高的性能特點(diǎn)和越來(lái)越大的帶寬,從而解決了PCI,PCI-X和AGP的許多缺點(diǎn),是以后PC發(fā)展必然采用的接口總線(xiàn),其必將取代PCI,PCI-X以及圖形加速器(AGP)。
2.2 PCIE總線(xiàn)的構(gòu)架
PCI Express保持了與PCI尋址模式(加載-存儲(chǔ)體系結(jié)構(gòu)具有單層地址空間)的兼容性,從而保證了對(duì)現(xiàn)有應(yīng)用程序和驅(qū)動(dòng)的兼容性。同時(shí),PCI Express的配置機(jī)制是與PCI一致的即插即用標(biāo)準(zhǔn)。
軟件層發(fā)出讀寫(xiě)請(qǐng)求,使用基于數(shù)據(jù)包、分段傳輸?shù)膮f(xié)議通過(guò)物理層傳輸至I/O設(shè)備。鏈路層向這些數(shù)據(jù)包添加序列號(hào)和循環(huán)冗余校驗(yàn)(CRC)以建立一個(gè)高度可靠的數(shù)據(jù)傳輸機(jī)制?;镜奈锢韺影▊鬏攲?duì)和接收對(duì)兩個(gè)單工通道,統(tǒng)稱(chēng)為一個(gè)信道。1個(gè)lane的信道可以保證每個(gè)方向約250 MB/s標(biāo)準(zhǔn)帶寬,這其中大約200 MB/s用來(lái)傳輸數(shù)據(jù),其余被文件的協(xié)議部分占用。這一速率為一般PCI設(shè)備的2~4倍,同時(shí)PCIExpress總線(xiàn)點(diǎn)到點(diǎn)的總線(xiàn)連接結(jié)構(gòu)可以讓每個(gè)PCIExpress設(shè)備都具有這個(gè)帶寬。
3 基于FPGA與PHY器件的采集設(shè)備實(shí)現(xiàn)
3.1 采集通道器件和FPGA的選型及設(shè)計(jì)
采集設(shè)備包含2個(gè)采集通道,采用模/數(shù)轉(zhuǎn)換芯片ADS5102設(shè)計(jì)。ADS5102是德州儀器的一款10 b-65MSPS采樣率并帶內(nèi)部電壓參考的模/數(shù)轉(zhuǎn)換器,采用1.8 V模擬供電。與同一類(lèi)型的ADS5103相比,它的采樣率更高,而且采用差分信號(hào)輸入,有效地提高了輸入信號(hào)的共模抑制比。
FPGA選用Xilinx公司Spartan-3系列XC3S1000。其采用90 DSP功能。
Xilinx Spartan-3 PCI Express設(shè)計(jì)包括一個(gè)PCIExpress Pipe Endpoint LogiCore。Xilinx低成本Spartan-3系列提供PCI Express協(xié)議層核。PCIE PipeEndpoint LogiCORE整合了分立的PCIE PHY,提供了全面的、完全符合PCI Express基礎(chǔ)規(guī)范(PCI Express Base Specification)v1.1的PCIE端點(diǎn)解決方案。
3.2 外部PHY器件PX1011A
NXP公司的PX1011A符合PCI Express規(guī)范v1.0a和v1.1,是一款與低成本FPGA一起使用而優(yōu)化的單通道2.5 Gb/s的PCI Express PHY器件。
數(shù)據(jù)由接收器的差分輸入接口進(jìn)入PXl011A,在被傳送到解串化電路之前,這些數(shù)據(jù)將小振幅的差分信號(hào)變?yōu)檐墝?duì)軌的數(shù)字信號(hào)。一個(gè)載波檢測(cè)電路將檢測(cè)線(xiàn)路上是否有數(shù)據(jù)并將這些信息傳送到串行器/解串器SERDES和物理編碼子層PCS。SERDES將這些數(shù)據(jù)串并轉(zhuǎn)化為10位并行數(shù)據(jù)。然后PCS采用8位/10位解碼器來(lái)恢復(fù)成8位數(shù)據(jù)格式。
在發(fā)送過(guò)程中,來(lái)自Pipe接口的8位數(shù)據(jù)通過(guò)一個(gè)8位/10位編碼算法進(jìn)行編碼。8位/10位編碼確保串行數(shù)據(jù)被直流平衡以避免交流耦合系統(tǒng)中的基帶漂移,它同時(shí)確保足夠的數(shù)據(jù)轉(zhuǎn)換以避免接收端的時(shí)鐘恢復(fù)。
PX1011A的MAC接口采用獨(dú)立的時(shí)鐘,由片內(nèi)100 MHz的基準(zhǔn)時(shí)鐘鎖相環(huán)產(chǎn)生。鎖相環(huán)有一個(gè)相對(duì)較高的帶寬來(lái)實(shí)現(xiàn)可選的擴(kuò)頻并較少EMI。8 b數(shù)據(jù)接口在250 MFIz上運(yùn)行并進(jìn)行SSTL2信號(hào)發(fā)送,這種模式與流行的FPGA I/O接口兼容。
3.3 硬件電路設(shè)計(jì)
采集部分硬件電路包含2個(gè)通道的ADC和觸發(fā)電路,每通道ADC轉(zhuǎn)換后的數(shù)據(jù)CH1[9:0]和CH2[9:0]傳輸?shù)紽PGA端口。PCIE接口電路包括3個(gè)部分:第1部分是PX1011A與FPGA的連接信號(hào)線(xiàn),包括8位的收發(fā)信號(hào)TXD[7:0]和RXD[7:0];控制信號(hào)RX_DATAK,RX_VALID,RX_CLK,RX_EIDLE,RX_POLAR,RX_PHY_STAT,TX_DATAK,TX_CLK,TX_EIDLE,TX_COMP,TX_DET_LOOP,TX PWRDN0,TX_PWRDN1,狀態(tài)信號(hào)STAT0,STAT1,STAT2和復(fù)位信號(hào)RESET。第2部分是PX1011A與PCIE接口的連接信號(hào)線(xiàn),包括差分接收信號(hào),差分發(fā)送信號(hào),差分時(shí)鐘。第3部分是PCI Express的配置接口,包括PCIE_TMS,PCIE_TCK,PCIE_TDO,PCIE_TDI和PCIE_TRST。如圖1所示。
PCB布線(xiàn)時(shí)有以下注意點(diǎn):終端阻抗布線(xiàn)盡量降低容性;一組信號(hào),避免在參考層斷續(xù);高速信號(hào)盡量在一層布線(xiàn),且不打孔,否則要在過(guò)孔處打一個(gè)U形的地孔;微波傳輸帶,差分信號(hào)布線(xiàn)線(xiàn)寬5 mil,間距7 mil;帶狀傳輸線(xiàn),差分信號(hào)布線(xiàn)線(xiàn)寬5 mil,間距5 mil。信號(hào)之間的間距在20 mil以上,高壓和邊緣尖銳的信號(hào)盡量遠(yuǎn)離差分線(xiàn),避免干擾。
25歐姆電阻,數(shù)據(jù)接收端上拉50 Ω電阻,提高信號(hào)的阻抗匹配。TD和RX每組為8位250 MB/s信號(hào),為了減少信號(hào)間的延時(shí)誤差,每組信號(hào)布線(xiàn)時(shí)盡量等長(zhǎng)且減少走線(xiàn)長(zhǎng)度。
3.4 Pipe Core實(shí)現(xiàn)PCIE總線(xiàn)協(xié)議
Xilinx PCI Express Pipe Core符合PCI ExpressBase Specification v1.1規(guī)范協(xié)議和電特性兼容,提供完整的端點(diǎn)解決方案包括物理鏈接與處理及配置管理模塊。支持同步點(diǎn)對(duì)點(diǎn)通信,上行和下行流程控制,與PCI Express處理排序規(guī)則完全兼容。
Pipe Core數(shù)據(jù)管理包括傳輸層、數(shù)據(jù)鏈路層、物理層3個(gè)模塊。這些模塊包括產(chǎn)生和進(jìn)行傳輸包、數(shù)據(jù)流的控制管理、物理接口初始化、并串轉(zhuǎn)換以及其他的接口操作。由Pipe Core組成數(shù)據(jù)通道,并可以構(gòu)成多PCI Express設(shè)備的拓?fù)浣Y(jié)構(gòu)。如圖2所示。
4 基于WinDriver的驅(qū)動(dòng)程序開(kāi)發(fā)
4.1 采集設(shè)備的驅(qū)動(dòng)安裝
將數(shù)據(jù)采集設(shè)備安裝到計(jì)算機(jī)PCI express×1插槽,啟動(dòng)計(jì)算機(jī)時(shí)操作系統(tǒng)會(huì)檢測(cè)到此設(shè)備并提示添加硬件向?qū)В雎源颂崾?。然后,從開(kāi)始菜單選擇WinDriver/DriverWizard,新建工程。此時(shí)DriverWizard將會(huì)顯示所有的計(jì)算機(jī)中的即插即用設(shè)備 根據(jù)設(shè)備信息(ID號(hào))選擇所要測(cè)試的設(shè)備,如圖3所示,數(shù)據(jù)采集設(shè)備ID號(hào)為0301,雙擊此設(shè)備,出現(xiàn)設(shè)備測(cè)試對(duì)話(huà)框,向指定的設(shè)備空間寫(xiě)入數(shù)據(jù)測(cè)試設(shè)備是否工作良好。最后由DriverWizard生成簡(jiǎn)單的驅(qū)動(dòng)程序代碼。
4.2 數(shù)據(jù)傳輸模式與配置函數(shù)
驅(qū)動(dòng)程序得到從數(shù)據(jù)采集設(shè)備發(fā)送的數(shù)據(jù),并存儲(chǔ)在指定的內(nèi)存空間,根據(jù)用戶(hù)的選擇可以實(shí)時(shí)顯示或者存儲(chǔ)在磁盤(pán)空間。使用WinDriver編寫(xiě)的驅(qū)動(dòng)程序通過(guò)WinDriver內(nèi)核模塊與硬件進(jìn)行通信,本驅(qū)動(dòng)程序要實(shí)現(xiàn)的主要功能是從設(shè)備讀取指定的數(shù)據(jù)到計(jì)算機(jī),并根據(jù)要求發(fā)送命令到設(shè)備控制寄存器對(duì)設(shè)備的各種狀態(tài)進(jìn)行控制。
設(shè)備與計(jì)算機(jī)進(jìn)行數(shù)據(jù)傳輸有2種模式:PIO模式和DMA(直接內(nèi)存訪(fǎng)問(wèn))模式。PIO模式主要實(shí)現(xiàn)計(jì)算機(jī)和數(shù)據(jù)采集卡之間的命令傳輸;DMA模式主要針對(duì)大塊數(shù)據(jù)傳輸,傳輸過(guò)程中不需要經(jīng)過(guò)CPU,數(shù)據(jù)直接從設(shè)備傳送到內(nèi)存中,數(shù)據(jù)傳輸?shù)乃俾士?,可以充分利用PCIE數(shù)據(jù)帶寬。
為了能從設(shè)備中讀到數(shù)據(jù),首先應(yīng)該獲得設(shè)備的信息,設(shè)備信息主要包括廠(chǎng)家ID號(hào),設(shè)備內(nèi)存映射空間,設(shè)備所在插槽號(hào)以及其他設(shè)備專(zhuān)用配置信息。只有獲得了設(shè)備信息才能實(shí)現(xiàn)對(duì)設(shè)備的訪(fǎng)問(wèn),這些信息通過(guò)下面2個(gè)函數(shù)得到: void WD_PciScanCards函數(shù)用于檢測(cè)安裝于PCIE總線(xiàn)上的設(shè)備。Void WD_PciGetCardInfo函數(shù)獲取PCI設(shè)備的資源信息,例如內(nèi)存資源,I/O資源,中斷資源等。對(duì)設(shè)備信息的登記是通過(guò)結(jié)構(gòu)WD_CARD_REGISTER來(lái)實(shí)現(xiàn),它包含了硬件的各項(xiàng)信息。這些信息可以通過(guò)第一步中的2個(gè)函數(shù)獲得。在確定WD_CARD_REGISTER結(jié)構(gòu)后調(diào)用函數(shù)WDCardRegister向Windriver Kernel登記設(shè)備。在得到了設(shè)備信息并且向WinDriver注冊(cè)了此設(shè)備后就可以在設(shè)備和計(jì)算機(jī)之間傳輸數(shù)據(jù)。
5 結(jié) 語(yǔ)
采用PCI express總線(xiàn)實(shí)現(xiàn)數(shù)據(jù)采集設(shè)備可以有效地提高數(shù)據(jù)的傳輸帶寬,解決總線(xiàn)帶寬不足瓶頸帶來(lái)的種種問(wèn)題。文中的總線(xiàn)設(shè)計(jì)為1個(gè)通道的PCI express,雙向的讀寫(xiě)速度為250 MB/s。后面的設(shè)計(jì)中會(huì)不斷提高Pcie總線(xiàn)的通道數(shù),以滿(mǎn)足更高的總線(xiàn)設(shè)計(jì)需求。
評(píng)論