??? 摘?要: 從系統(tǒng)的角度介紹高速PCI總線接口卡開(kāi)發(fā)的整個(gè)過(guò)程,其中包括硬件電路的設(shè)計(jì)制作和軟件驅(qū)動(dòng)的開(kāi)發(fā)。介紹一些從實(shí)際設(shè)計(jì)過(guò)程中得出的應(yīng)該注意的細(xì)節(jié)等。
??? 關(guān)鍵詞: PCI總線? PCI9052? TMS320LF2407? 雙端口RAM
?
??? PCI總線技術(shù)已經(jīng)應(yīng)用于形形色色的微機(jī)接口中。現(xiàn)在聲卡、網(wǎng)卡甚至有些顯卡都是基于PCI總線技術(shù)的,一些高速數(shù)據(jù)傳輸系統(tǒng)中也需要用到PCI總線技術(shù)。PCI總線技術(shù)的出現(xiàn)是為了解決由于微機(jī)總線的低速度和微處理器的高速度而造成的數(shù)據(jù)傳輸瓶頸問(wèn)題,PCI局部總線" title="局部總線">局部總線是在ISA總線和CPU總線之間增加的一級(jí)總線。由于獨(dú)立于CPU的結(jié)構(gòu),該總線增加了一種獨(dú)特的中間緩沖器的設(shè)計(jì),從而與CPU及時(shí)鐘頻率無(wú)關(guān),用戶可以將一些高速外設(shè)直接掛到CPU總線上,使之與其相匹配。PCI局部總線使得PC系列微機(jī)結(jié)構(gòu)也隨之升級(jí)為現(xiàn)在的基于PCI總線的三級(jí)總線結(jié)構(gòu)。PC機(jī)的三級(jí)總線結(jié)構(gòu)如圖1所示。
?
1 PCI總線接口卡的開(kāi)發(fā)
??? PCI局部總線最顯著的特征是速度快。ISA總線的傳輸速率" title="傳輸速率">傳輸速率為5MB/s,EISA總線的傳輸速率為33MB/s,PCI1.0標(biāo)準(zhǔn)定義的總線傳輸速率為132MB/s,PCI2.0標(biāo)準(zhǔn)定義的總線傳輸速率為264MB/s,PCI2.1和PCI2.2標(biāo)準(zhǔn)定義的總線傳輸速率為512MB/s。而新一代PCI-X技術(shù)則在原有PCI總線技術(shù)的基礎(chǔ)上增加了許多新的技術(shù)特征,利用PCI-X技術(shù)可以為千兆以太網(wǎng)卡、基于Ultra SCSI320的磁盤陣列控制器等高數(shù)據(jù)吞吐量的設(shè)備提供足夠的帶寬。1999年P(guān)CISIG(PCI特別興趣小組)發(fā)布的PCI-X1.0標(biāo)準(zhǔn)最高可提供1GB/s的傳輸速率,而2003年推出的PCI-X2.0標(biāo)準(zhǔn)則最高可提供4.3GB/s的傳輸速率。
??? 目前,PCI總線接口電路的選擇主要有兩種方案。一種是選用可編程邏輯器件(PLD)。使用PLD,用戶可以靈活地開(kāi)發(fā)出適合自己需要的具有特定功能的芯片,但PCI總線協(xié)議比較復(fù)雜,設(shè)計(jì)PCI控制接口難度較大,對(duì)于一般的工程項(xiàng)目來(lái)說(shuō),成本較大?,F(xiàn)在有許多生產(chǎn)可編程邏輯器件的廠商都提供經(jīng)過(guò)嚴(yán)格測(cè)試的PCI接口功能模塊,用戶只需進(jìn)行組合即可。另一種是選用PCI專用芯片組(又稱橋接電路),通過(guò)專用芯片來(lái)實(shí)現(xiàn)完整的PCI主控模塊和目標(biāo)模塊的功能,將復(fù)雜的PCI總線接口轉(zhuǎn)換為相對(duì)簡(jiǎn)單的用戶接口,用戶只需設(shè)計(jì)轉(zhuǎn)換后的總線接口。本設(shè)計(jì)中選用PCI總線專用接口芯片" title="接口芯片">接口芯片來(lái)開(kāi)發(fā)接口卡。
1.1 接口芯片介紹
??? PCI總線接口電路又分為主控設(shè)備和目標(biāo)設(shè)備。主控設(shè)備可以控制總線,驅(qū)動(dòng)地址、數(shù)據(jù)和控制信號(hào);目標(biāo)設(shè)備不能啟動(dòng)總線操作,只能依賴于主控設(shè)備從其中讀取數(shù)據(jù)或向其傳送數(shù)據(jù)。主控設(shè)備芯片價(jià)格比較高,目標(biāo)設(shè)備芯片價(jià)格則比較便宜,而且目標(biāo)設(shè)備芯片比較簡(jiǎn)單、易于操作。
??? 目前兩大PCI專用接口芯片生產(chǎn)商是AMCC公司和PLX公司。AMCC公司的PCI接口芯片有S5920、S5933、S5935等。S5920是目標(biāo)設(shè)備芯片;S5933既可以設(shè)置為主控設(shè)備芯片,又可以設(shè)置為目標(biāo)設(shè)備芯片;S5935是S5933的改進(jìn)版,同樣既可以設(shè)置為主控設(shè)備芯片,也可以設(shè)置為目標(biāo)設(shè)備芯片。PLX公司在PCI接口芯片的設(shè)計(jì)生產(chǎn)中首屈一指,其目標(biāo)設(shè)備芯片產(chǎn)品主要有PCI9030、PCI9052和PCI9050,PCI9050和PCI9052可以運(yùn)用于ISA卡轉(zhuǎn)接PCI的設(shè)計(jì)中,PCI9030是專門為嵌入式系統(tǒng)設(shè)計(jì)的;主控設(shè)備芯片產(chǎn)品主要有PCI9054、PCI9080和PCI9060,PCI9060是最早的32位主控設(shè)備芯片,PCI9080是PCI9060的后繼產(chǎn)品,而PCI9054則是一種性價(jià)比很高的芯片,其性能比PCI9080、PCI9052更優(yōu)越。
??? 由于主控設(shè)備芯片比較復(fù)雜,而且價(jià)格昂貴,所以對(duì)處理速度和傳輸速度要求不是特別高的場(chǎng)合應(yīng)盡量選用目標(biāo)設(shè)備芯片。本設(shè)計(jì)中選用PLX公司的PCI9052目標(biāo)設(shè)備芯片來(lái)設(shè)計(jì)PCI接口電路。
1.2 PCI9052介紹
??? PCI9052是PLX公司繼PCI9050之后推出的低成本、低功耗、32位PCI總線接口芯片,利用它可以使局部總線快速轉(zhuǎn)換到PCI總線上。
??? PCI9052芯片的設(shè)計(jì)符合PCI2.1規(guī)范。它支持低成本從屬適配器,其局部總線可根據(jù)需要配置成復(fù)用或非復(fù)用模式的8、16或32位的局部總線。PCI總線側(cè)的時(shí)鐘頻率范圍為0~33MHz,局部總線與PCI總線的時(shí)鐘相互獨(dú)立,局部總線的時(shí)鐘頻率范圍為0~40MHz,兩種總線的異步運(yùn)行方便了高低速設(shè)備的相互兼容。PCI9052芯片內(nèi)部有一個(gè)64字節(jié)的寫FIFO和一個(gè)32字節(jié)的讀FIFO,通過(guò)讀寫FIFO,可實(shí)現(xiàn)高性能的突發(fā)式數(shù)據(jù)傳輸,也可以進(jìn)行連續(xù)的單周期操作。
1.3 硬件設(shè)計(jì)
??? 由于PCI9052屬于目標(biāo)設(shè)備芯片,只能依賴于主控設(shè)備從其中讀取數(shù)據(jù)或向其傳送數(shù)據(jù),所以需要一個(gè)微處理器對(duì)通過(guò)PCI9052從PCI總線發(fā)送到局部總線的命令作出處理響應(yīng),或者把用戶想要傳送的數(shù)據(jù)以中斷的方式通知PCI總線來(lái)讀取。本設(shè)計(jì)中微處理器選用TI公司的C2000系列的16位DSP芯片TMS320LF2407。
??? TMS320LF2407是TI公司推出的定點(diǎn)DSP處理器,是一款性價(jià)比較高的芯片。它采用高性能靜態(tài)CMOS技術(shù),供電電壓為3.3 V,指令周期可達(dá)25 ns,片內(nèi)有高達(dá)32K字的FLASH程序存儲(chǔ)器、1.5K字的數(shù)據(jù)/程序RAM、544字雙口RAM(DARAM)和2K字的單口RAM(SARAM),可以分別擴(kuò)展64K字外部程序存儲(chǔ)器、64K字外部數(shù)據(jù)存儲(chǔ)器和64K字I/O尋址空間;片內(nèi)還集成了包括CAN控制器在內(nèi)的多個(gè)外圍模塊及存儲(chǔ)器,可以運(yùn)用于電機(jī)及逆變電路的控制中;10位16通道的A/D轉(zhuǎn)換器最小轉(zhuǎn)換時(shí)間為500ns;內(nèi)部自帶看門狗定時(shí)器模塊(WDT)和16位的串行外設(shè)接口模塊(SPI)。另外,該芯片有高達(dá)40個(gè)可單獨(dú)編程或復(fù)用的通用輸入/輸出引腳、一個(gè)串行通信接口(SCI)、一個(gè)并口和5個(gè)外部中斷。目前投入市場(chǎng)試用的C2000系列的32位DSP芯片TMS320C2812采用的是150MHz的時(shí)鐘速率,其指令周期只為6.7ns,存儲(chǔ)器可以擴(kuò)展到1M,速度更快,功能更強(qiáng)大。
??? PCI接口卡硬件總體設(shè)計(jì)如圖2所示。圖中,DB代表數(shù)據(jù)總線,AB代表地址總線,CB代表控制總線。
?
??? PCI9052的PCI總線直接與金手指連接,局部總線與DSP之間的數(shù)據(jù)傳輸在雙端口RAM中實(shí)現(xiàn)。雙端口RAM采用兩片CYPRESS公司的雙端口RAM芯片CY7C131,組成16位存儲(chǔ)轉(zhuǎn)接電路。PCI9052和CY7C131供電電壓均為5V,而TMS320LF2407供電電壓為3.3V,所以接口電平不匹配,需要加總線電平轉(zhuǎn)換電路,這里選用16位總線傳送接收器74FCT164245來(lái)實(shí)現(xiàn)。PCI9052的控制信號(hào)和TMS320LF2407的控制信號(hào)之間的邏輯轉(zhuǎn)換用一片ALTERA公司的PFGA芯片EPM7032LC44來(lái)實(shí)現(xiàn)。
??? TMS320LF2407的外圍電路可以根據(jù)需要擴(kuò)展。由于TMS320LF2407內(nèi)部自帶32K字的FLASH程序存儲(chǔ)器,程序調(diào)試" title="程序調(diào)試">程序調(diào)試完畢后可以燒寫進(jìn)去,但程序調(diào)試過(guò)程中需要頻繁修改程序,所以可擴(kuò)展一片存儲(chǔ)器,調(diào)試程序時(shí)當(dāng)作程序存儲(chǔ)器用,程序調(diào)試完畢后再作為數(shù)據(jù)存儲(chǔ)器用,這樣既方便又實(shí)用。TMS320LF2407有一個(gè)串行通信接口和一個(gè)16位并行通信接口,串口可以做成RS485、RS232、RS422、SDI總線接口等,并行通信接口可以做成16位并行輸入輸出接口。
1.4 電路板制作
??? (1)在連線上只要將對(duì)應(yīng)的引腳連在總線上就可以了。由于信號(hào)用的是反射波信號(hào),所以驅(qū)動(dòng)的信號(hào)只用了要求電壓的一半,另一半靠反射來(lái)提升,所以對(duì)信號(hào)線的長(zhǎng)度有要求:CLK信號(hào)線的長(zhǎng)度為2500mil±100mil。如果長(zhǎng)度不夠可以畫蛇行線,另外,CLK信號(hào)線要用地線屏蔽。
??? (2)PCI總線規(guī)范要求布四層線,也可以只布兩層線。布兩層線時(shí),走線難度增大,要做好電源退耦。每個(gè)Vcc引腳必須有退耦電容,且容量的平均值至少為0.01μF,從引腳根部到電容器焊盤的走線長(zhǎng)度不大于250mil,線寬至少為20mil,多個(gè)引腳可以并用一個(gè)電容,并且參與共用的引腳數(shù)不受限制,但必須滿足以上條件。
??? (3)PCI總線信號(hào)PRSNT1#和PRSNT2#中必須有一個(gè)接地。如果都不接地,系統(tǒng)找不到開(kāi)發(fā)板。它們接地有兩個(gè)用途,其一,用來(lái)表明槽位上實(shí)際存在一塊板;其二,提供該板對(duì)電源要求的有關(guān)信息。表1給出了PRSNT#引腳的設(shè)置情況。
?
??? (4)對(duì)于不實(shí)現(xiàn)JTAG邊界掃描的板子,必須把引腳TDI和TDO連接起來(lái),以使掃描鏈不至于斷開(kāi)。
?? ?(5)PCI連接器上的3.3V引腳(即使實(shí)際使用中未提供電流)在母板上必須連到一起,最好連到一個(gè)3.3V的電源平面上。而且,對(duì)3.3V引腳應(yīng)提供一個(gè)交流回路,這時(shí)對(duì)地去耦應(yīng)符合高頻信號(hào)技術(shù)的要求。為此,應(yīng)在3.3V平面上均勻排列12個(gè)高速電容,容量為0.01μF。
?? ?(6)為了穩(wěn)定性,局部總線除了少數(shù)有特殊要求外,所有的信號(hào)線都應(yīng)加上拉電阻(5kΩ~10kΩ)或下拉電阻(一般選150Ω)。
?? ?(7)為防止干擾,局部總線時(shí)鐘也應(yīng)對(duì)地屏蔽。
?? ?(8)串行EEPROM提供PCI總線和局部總線的部分重要配置信息,EEPROM一定要選支持串行傳輸方式的,如NM93CS46或者與之兼容的存儲(chǔ)器。NM93C46不支持串行讀寫,所以不能選取。NM93CS46的CS、SK、SDI、SDO和PE端都要接10kΩ的上拉電阻,而PRE端要接150Ω的下拉電阻。EEPROM的配置至關(guān)重要,EEPROM配置不正確可能導(dǎo)致操作系統(tǒng)無(wú)法運(yùn)行。系統(tǒng)啟動(dòng)時(shí)自動(dòng)檢測(cè)EEPROM的開(kāi)始48位是否全為“1”,若全為“1”,則載入PCI9052的默認(rèn)配置;否則則裝載EEPROM中的內(nèi)容,為板卡分配資源。串行EEPROM可以通過(guò)PCI總線直接寫入,也可以用編程器直接燒寫。
1.5 程序調(diào)試
1.5.1 FPGA程序的開(kāi)發(fā)
??? 可編程器件的設(shè)計(jì)軟件" title="設(shè)計(jì)軟件">設(shè)計(jì)軟件種類很多,各大器件廠家及一些軟件公司都開(kāi)發(fā)了一些設(shè)計(jì)軟件。軟件的設(shè)計(jì)根據(jù)邏輯功能的描述方法可分為語(yǔ)言描述設(shè)計(jì)和原理圖描述設(shè)計(jì)兩大類。常見(jiàn)的如DATA I/O公司的ABEL語(yǔ)言、四通公司ASIC事業(yè)部開(kāi)發(fā)的針對(duì)GAL器件的FM(Fast MAP)軟件等屬于語(yǔ)言描述類設(shè)計(jì)軟件;而DATA I/O 公司的Synario軟件、Orcad公司的PLD等軟件屬于電路圖描述或電路圖描述與語(yǔ)言描述相結(jié)合設(shè)計(jì)的軟件。
??? 本設(shè)計(jì)中FPGA的編程只涉及到信號(hào)邏輯轉(zhuǎn)換,所以只需選用語(yǔ)言描述類設(shè)計(jì)軟件,這里選用DATA I/O公司的ABEL語(yǔ)言描述設(shè)計(jì)軟件。程序調(diào)試結(jié)束后用編程器寫入FPGA芯片即可。
1.5.2? DSP程序開(kāi)發(fā)
??? TI公司提供了DSP專用仿真器和仿真開(kāi)發(fā)系統(tǒng),C2000系列的開(kāi)發(fā)系統(tǒng)最新版本為CCS2.2。對(duì)于不同的仿真器,只要安裝驅(qū)動(dòng)程序即可使用該開(kāi)發(fā)系統(tǒng)進(jìn)行仿真。仿真器選用最新款的帶USB接口的ICETEK-51000USBV2.0仿真器。由于該仿真器使用USB接口,所以不需外接供電電源,實(shí)用又方便。
??? 由于硬件設(shè)計(jì)時(shí)擴(kuò)展了可轉(zhuǎn)換的存儲(chǔ)器,進(jìn)行仿真時(shí)把存儲(chǔ)器接成程序存儲(chǔ)器,程序可以直接轉(zhuǎn)載到擴(kuò)展的存儲(chǔ)器中進(jìn)行調(diào)試,免去了往FLASH中燒寫的麻煩,程序調(diào)試完畢后再固化到FLASH中。
2 PCI總線接口卡的軟件驅(qū)動(dòng)開(kāi)發(fā)
??? PCI卡的硬件調(diào)試需要結(jié)合軟件程序的調(diào)試來(lái)完成。PCI卡的驅(qū)動(dòng)程序開(kāi)發(fā)有多種途徑,驅(qū)動(dòng)開(kāi)發(fā)工具也有多種選擇。
2.1 驅(qū)動(dòng)開(kāi)發(fā)工具的選取
?? ?(1)DDK(Driver Device Kit)
??? 許多VMM服務(wù)都使用寄存器的調(diào)用方式,使用起來(lái)不是很方便,沒(méi)有深厚的匯編語(yǔ)言及硬件基礎(chǔ)很難在短時(shí)間內(nèi)開(kāi)發(fā)出設(shè)備驅(qū)動(dòng)程序。Microsoft公司提供了設(shè)備驅(qū)動(dòng)程序工具箱(DDK),它是基于匯編語(yǔ)言的編程方式的,DDK的優(yōu)點(diǎn)是可以開(kāi)發(fā)核心態(tài)的真正意義上的驅(qū)動(dòng)程序,開(kāi)發(fā)出來(lái)的驅(qū)動(dòng)程序效率是最高的。
??? (2)DS(Driver Studio)
??? DS是一個(gè)驅(qū)動(dòng)程序集成開(kāi)發(fā)包,其中包括了DriverAgent、VtoolsD、DriverWorks、SoftICE Driver Edition、BoundsChecker Driver Edition、DriverWorkbenc、FieldAgent for Drivers等。幾種常見(jiàn)的DS驅(qū)動(dòng)開(kāi)發(fā)工具介紹如下:
??? ·DriverAgent為Win32應(yīng)用程序提供了訪問(wèn)硬件的接口。
??? ·VtoolsD支持Windows95和Windows98的驅(qū)動(dòng)程序開(kāi)發(fā)(VxD)。VtoolsD包括代碼生成器、實(shí)時(shí)接口庫(kù)和可以作為開(kāi)發(fā)一類驅(qū)動(dòng)程序的例子程序。
??? ·DriverWorks包括為Window NT和Win32 Driver Model(WDM)開(kāi)發(fā)驅(qū)動(dòng)程序的完整的開(kāi)發(fā)框架,同時(shí)也支持Windows98和Windows2000下驅(qū)動(dòng)程序的開(kāi)發(fā)。DriverWorks包含一個(gè)復(fù)雜的代碼生成工具(Driver Wizard),其中含有支持C++下編程的類庫(kù)和例子程序。
??? (3)WinDriver
??? WinDriver是KRF-Tech公司的一套PCI驅(qū)動(dòng)程序開(kāi)發(fā)包。它改變了傳統(tǒng)驅(qū)動(dòng)程序開(kāi)發(fā)的方法和思路,極大地簡(jiǎn)化了驅(qū)動(dòng)程序的編制;同時(shí)又沒(méi)有犧牲驅(qū)動(dòng)程序的性能,是一套高效、快捷的PCI驅(qū)動(dòng)程序開(kāi)發(fā)軟件包,特別適合專業(yè)硬件人員使用。
??? 利用WinDriver開(kāi)發(fā)驅(qū)動(dòng)程序不需要熟悉操作系統(tǒng)的內(nèi)核,整個(gè)驅(qū)動(dòng)程序中的所有函數(shù)都是工作在用戶態(tài)下的,通過(guò)與WinDriver的.Vxd或者.Sys文件交互可達(dá)到驅(qū)動(dòng)硬件的目的。由于是一個(gè)用戶態(tài)程序,效率的高低也就成了人們選擇WinDriver時(shí)關(guān)心的問(wèn)題。大量實(shí)踐數(shù)據(jù)表明,WinDriver并沒(méi)有通過(guò)犧牲系統(tǒng)性能來(lái)?yè)Q取驅(qū)動(dòng)程序的快速開(kāi)發(fā)。本設(shè)計(jì)中選用WinDriver來(lái)開(kāi)發(fā)驅(qū)動(dòng)程序。
2.2 WinDriver開(kāi)發(fā)驅(qū)動(dòng)程序
??? 在WinDriver的體系結(jié)構(gòu)中,WinDriver Kernel處于中心位置,它提供的用戶態(tài)庫(kù)函數(shù)(API)實(shí)際就是對(duì)WinDriver Kernel中實(shí)現(xiàn)的功能進(jìn)行調(diào)用。幾乎所有用戶同硬件的交互都是通過(guò)WinDriver Kernel來(lái)實(shí)現(xiàn)的,這樣就極大地解放了開(kāi)發(fā)人員。用戶的主要任務(wù)就是利用WinDriver提供的用戶動(dòng)態(tài)函數(shù)庫(kù)(API函數(shù)庫(kù))在用戶態(tài)實(shí)現(xiàn)自己的驅(qū)動(dòng)程序代碼,完成硬件驅(qū)動(dòng)的功能。
??? 基于WinDriver的設(shè)備驅(qū)動(dòng)程序主要分為驅(qū)動(dòng)程序和應(yīng)用程序兩部分。利用DriverWizard生成.inf驅(qū)動(dòng)程序,安裝該驅(qū)動(dòng)程序后,系統(tǒng)就根據(jù)EEPROM中的配置信息給板卡分配資源,接下來(lái)就可以進(jìn)行應(yīng)用程序的開(kāi)發(fā)了。利用DriverWizard生成應(yīng)用程序框架后,用戶把生成的框架整理到自己的程序中,再添加實(shí)際應(yīng)用中需要的功能就完成了軟件的開(kāi)發(fā)。
?? ?PCI總線是計(jì)算機(jī)總線的樞紐,其速度是一般總線望塵莫及的,其應(yīng)用也十分廣泛。利用本文介紹的方法開(kāi)發(fā)出的板卡可以運(yùn)用于各種高速數(shù)據(jù)傳輸場(chǎng)合中,如雷達(dá)系統(tǒng)仿真控制、工業(yè)總線控制、高速數(shù)據(jù)采集、圖像采集等。本設(shè)計(jì)在對(duì)芯片的選型時(shí)本著經(jīng)濟(jì)實(shí)用的原則,開(kāi)發(fā)出的板卡性價(jià)比較高。
參考文獻(xiàn)
1 李貴山,陳金鵬. PCI局部總線及其應(yīng)用[M]. 西安:西安電子科技大學(xué)出版社,2003
2 劉和平,嚴(yán)利平,張學(xué)鋒,卓清鋒.? TMS320LF240x DSP結(jié)構(gòu)、原理及應(yīng)用[M]. 北京:北京航空航天大學(xué)出版社,2002
3 張惠娟,周利華,翟鴻鳴. Windows環(huán)境下的設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)[M]. 西安:西安電子科技大學(xué)出版社,2002
4 PCI 9052 Data Book[Z]. PLX Technology,2000