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