[摘要]::PCI 總線接口控制器的設(shè)計(jì)是基于PCI總線的應(yīng)用設(shè)計(jì)的關(guān)鍵所在。本文在介紹PCI9054接口控制器的基礎(chǔ)上,給出了一種通用的高速數(shù)據(jù)采集接口的設(shè)計(jì),并提出了一種新的包括PCI9054單周期讀、寫和DMA讀操作的VHDL狀態(tài)機(jī)設(shè)計(jì)。經(jīng)測(cè)試證明,該接口的數(shù)據(jù)采集速率能穩(wěn)定的達(dá)到200Mbit/s。
[關(guān)鍵詞]:PCI總線,PCI9054,本地總線,VHDL 狀態(tài)機(jī)。
0. 引言
PCI總線(Peripheral Component Interconnect)是Intel公司推出的一種高性能32/64位局部總線,最大數(shù)據(jù)傳輸速率為132—264Mbyte/s。,是目前使用較為廣泛的一種總線。在高速信號(hào)的實(shí)時(shí)處理中,利用PCI總線將采集數(shù)據(jù)直接傳送到微機(jī)系統(tǒng)內(nèi)存,可有效解決數(shù)據(jù)的實(shí)時(shí)傳輸和存儲(chǔ),為信號(hào)的實(shí)時(shí)處理提供方便。利用PCI總線進(jìn)行高速數(shù)據(jù)采集,可以簡(jiǎn)化電路設(shè)計(jì)。而且這種高速數(shù)據(jù)采集接口模塊可以在多次設(shè)計(jì)中重復(fù)使用,縮短產(chǎn)品的研發(fā)周期。本文通過(guò)對(duì)專用接口芯片PCI9054的性能分析,特別是對(duì)單周期讀、寫和DMA讀操作的時(shí)序進(jìn)行了分析,提出了一種新的包括PCI9054單周期讀、寫和DMA讀操作的VHDL狀態(tài)機(jī)設(shè)計(jì),并討論了通用的PCI總線高速數(shù)據(jù)采集接口模塊的實(shí)現(xiàn)方案。
1.PCI9054性能簡(jiǎn)介
PCI9054是PLX公司推出的一種32位33MHz的PCI 總線主控I/ O 加速器。它采用多種先進(jìn)技術(shù),可以將復(fù)雜的PCI 接口應(yīng)用設(shè)計(jì)變得簡(jiǎn)單。利用PCI 9054 靈活的局部總線可以方便地連接多種存儲(chǔ)器、I/ O 外圍設(shè)備和CPU, 其中包括與Motorola 公司的MPC 860、Intel 公司的960、IBM公司的PPC 401等處理器之間的直接連接。PCI9054 可廣泛應(yīng)用于Motorola 公司的MPC 860 適配器設(shè)計(jì)、Compact PCI熱交換適配器、PCI 總線主控適配器和嵌入式主機(jī)等設(shè)計(jì)系統(tǒng)中。
PCI9054的本地總線時(shí)鐘可與PCI總線時(shí)鐘異步,本地總線有三種工作模式:M模式、C模式和J模式,可方便地與多種微處理器連接。其中在C模式下,本地總線(Local bus)為非復(fù)用的32bit地址與數(shù)據(jù)總線,時(shí)序與控制比較簡(jiǎn)單。PCI9054還有三種數(shù)據(jù)傳送方式,PCI主發(fā)起,PCI從目標(biāo),DMA方式。PCI從目標(biāo)即PCI9054作為PCI總線的從設(shè)備,由總線上的其他主設(shè)備向它傳送數(shù)據(jù)。而在PCI9054的本地總線端,PCI9054 又作為主設(shè)備,向本地的存儲(chǔ)空間和I/O空間傳送數(shù)據(jù)。在DMA方式中,PCI9054提供了兩個(gè)獨(dú)立的DMA通道,都可以進(jìn)行PCI總線到本地總線和本地總線到PCI總線的DMA傳送。
在設(shè)計(jì)本地總線的數(shù)據(jù)傳送接口時(shí),主要有兩項(xiàng)工作,一是需要對(duì)PCI空間到本地空間,或本地空間到PCI空間的地址映射,進(jìn)行相應(yīng)的存儲(chǔ)器配置。二是根據(jù)PCI9054提供的本地總線控制信號(hào)設(shè)計(jì)本地總線的邏輯控制功能,實(shí)現(xiàn)相應(yīng)的數(shù)據(jù)傳送時(shí)序。
2.基于PCI9054的高速數(shù)據(jù)采集接口
由于PCI9054內(nèi)部的讀寫FIFO容量太小,需要外置擴(kuò)展FIFO。作為一個(gè)較為通用的設(shè)計(jì),我們采用的FIFO芯片是IDT公司的IDT72V3690。該芯片的容量為36k*36byte,由于該系列的FIFO芯片在封裝上完全兼容,所以可以根據(jù)需要選用更大容量的FIFO芯片.
在PCI9054本地總線端的主要信號(hào)線的連接如圖1所示,其中,F(xiàn)IFO的讀時(shí)鐘RCLK信號(hào)就是本地總線的時(shí)鐘信號(hào),由本地20MHz的晶振提供。寫時(shí)鐘WCLK信號(hào)由前端數(shù)據(jù)采集模塊和數(shù)據(jù)一起提供。
2.1 CPLD的本地總線可編程邏輯設(shè)計(jì)
當(dāng)進(jìn)行數(shù)據(jù)采集時(shí),由應(yīng)用程序向驅(qū)動(dòng)程序發(fā)出采集命令,再由驅(qū)動(dòng)程序在PCI目標(biāo)單字節(jié)寫方式下向PCI9054寫入一個(gè)數(shù)據(jù),表示數(shù)據(jù)采集的開始。CPLD在接收到LHOLD總線申請(qǐng)信號(hào)后,響應(yīng)LHOLDA信號(hào)。接著PCI9054發(fā)出地址選通信號(hào),LW/R一直為高,PCI9054收到地址信號(hào)LA2后,在下一個(gè)周期使READY信號(hào)為低,判斷LD0位的高低,如果為低,則輸出一個(gè)寫使能信號(hào)WEN到FIFO,使FIFO開始傳送數(shù)據(jù)。
數(shù)據(jù)采集開始后,從數(shù)據(jù)采集模塊送出的數(shù)據(jù)通過(guò)D0-D31接入到IDT72V3690。FIFO在半滿時(shí)送出半滿標(biāo)志信號(hào)(HF),CPLD(XC9536XL)就向PCI9054發(fā)出一個(gè)中斷請(qǐng)求信號(hào),接著再由PCI9054向PCI總線發(fā)出中斷請(qǐng)求信號(hào),CPU響應(yīng)中斷,在中斷響應(yīng)程序內(nèi),發(fā)出讀命令,要讀取的字節(jié)數(shù),地址信號(hào)等。PCI9054先通過(guò)LHOLD申請(qǐng)Local bus控制權(quán),CPLD通過(guò)LHOLDA響應(yīng),使PCI9054得到局部總線的控制權(quán)。PCI9054將PCI地址空間映射到本地地址空間,接著啟動(dòng)本地總線的DMA周期。CPLD收到讀信號(hào)(LW/R)和地址選通信號(hào)(ADS),地址(LA0)后(FIFO只需要一位地址選通),使能FIFO的讀使能端(REN),使FIFO數(shù)據(jù)線上的Q0-Q31有效,同時(shí)也使PCI9054的準(zhǔn)備好信號(hào)(READY)有效,開始數(shù)據(jù)傳送。在最后一個(gè)數(shù)據(jù)傳送之前,BLAST信號(hào)有效,CPLD在一個(gè)時(shí)鐘周期后使FIFO的讀使能(REN)無(wú)效,完成一次數(shù)據(jù)傳送過(guò)程。
圖2為PCI9054單周期讀、寫和DMA讀的VHDL語(yǔ)言時(shí)序控制狀態(tài)機(jī)設(shè)計(jì)。狀態(tài)0為空閑狀態(tài),如本地總線請(qǐng)求信號(hào)LHOLD被置1,則轉(zhuǎn)到狀態(tài)1,否則留在狀態(tài)0。狀態(tài)1為總線保持狀態(tài),在此狀態(tài)下應(yīng)將本地總線響應(yīng)信號(hào)LHOLDA置1。如ADS信號(hào)為0且LWR為0,則轉(zhuǎn)到狀態(tài)2,如ADS信號(hào)為0且LWR為1則轉(zhuǎn)到狀態(tài)3,如ADS信號(hào)為1且LWR和BLAST為0則轉(zhuǎn)到狀態(tài)4,這表明此次讀操作為單周期讀。狀態(tài)2為DMA讀狀態(tài),在此狀態(tài)下應(yīng)將READY信號(hào)和FIFO讀使能信號(hào)REN置0,表示數(shù)據(jù)有效可以讀取。如BLAST為1,則表明此次DMA讀取還未完成,繼續(xù)留在狀態(tài)2,如BLAST為0,則表明此次DMA讀取完成,轉(zhuǎn)到狀態(tài)4。狀態(tài)3為單周期寫狀態(tài),在此狀態(tài)下也要置READY信號(hào)為0,以表示寫數(shù)據(jù)有效,在BLAST為0時(shí)轉(zhuǎn)到狀態(tài)4。狀態(tài)4為讀寫操作完成狀態(tài),當(dāng)LHOLD被置0時(shí),表明PCI9054不在請(qǐng)求本地總線,則轉(zhuǎn)到狀態(tài)0,當(dāng)BLAST為0且LHOLD為1時(shí),表明PCI9054還要進(jìn)行讀寫數(shù)據(jù),則轉(zhuǎn)到狀態(tài)1繼續(xù)。
2.2 串行EEPROM(NM93CS56)的配置
NM93CS56是2kbit的串行EEPROM,PCI9054在系統(tǒng)啟動(dòng)的時(shí)候通過(guò)讀取其存儲(chǔ)的數(shù)據(jù)來(lái)配置一些必要的寄存器,以完成PCI9054的初始化。如果EEPROM內(nèi)配置的數(shù)據(jù)不符合要求,系統(tǒng)將無(wú)法啟動(dòng),PCI9054也將無(wú)法工作。NM93CS56的配置如下所示:
54 90 B5 10 80 06 0B 00 00 00 00 01 00 00 00 00 00 00 00 00 FF FF C8 FF 00 00 81 00 80 00 00 00 30 00 FF 05 00 00 01 00 00 00 00 00 47 81 C3 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 90 B5 10 FF FF FE FF 00 00 4C 00 00 00 43 01 00 00 06 4C
其中,EEPROM配置以字為單位,在寫入時(shí)低字節(jié)在前,高字節(jié)在后,如Device ID 為90 54,寫入EEPROM的順序則是54 90。EEPROM主要完成了對(duì)本地配置寄存器的初始配置以及一些控制寄存器的配置,如本地存儲(chǔ)空間到PCI內(nèi)存空間和I/O空間的映射等。本文將本地存儲(chǔ)空間映射到了PCI內(nèi)存空間,存儲(chǔ)范圍為1M。其他配置寄存器的意義可以參考對(duì)照PCI9054的數(shù)據(jù)手冊(cè)。
2.3 IDT72V3690的配置
IDT72V3690可以在讀寫端口提供x36/x18/x9的可選總線寬度,在讀寫端口可以進(jìn)行非同步/同步設(shè)置,提供兩種控制模式:標(biāo)準(zhǔn)IDT模式和FWFT模式。還可以設(shè)置幾乎滿,幾乎空的預(yù)定字節(jié)數(shù)等。
IDT72V3690需要在寫操作之前進(jìn)行主復(fù)位,以設(shè)置它的一些初始狀態(tài),所以需要上電復(fù)位,我們選用了上電復(fù)位芯片MAX814T,在上電時(shí)對(duì)FIFO進(jìn)行復(fù)位。FIFO的初始設(shè)置主要有:BM,OW,IW全為低,使輸入輸出寬度為36位;FWFT/SI 為低,表示是標(biāo)準(zhǔn)IDT模式,只要REN和WEN使能,就可以讀寫數(shù)據(jù); OE為 低,表示允許輸出端輸出; IP為 低,表示不加校驗(yàn)位,即只用到0-31數(shù)據(jù)線;PFM為高,表示是同步方式,即在時(shí)鐘上升沿讀寫數(shù)據(jù)。
2.4 板卡的PCB設(shè)計(jì)
板卡的PCB設(shè)計(jì)要遵循高速信號(hào)PCB走線的要求,該板卡采用4層板,兩層信號(hào)層,一層電源,一層地。尤其要注意PCI總線端PCI9054與PCI插槽“金手指”的走線:普通信號(hào)線長(zhǎng)度,從插槽“金手指”的中心到PCI9054的長(zhǎng)度不超過(guò)1.5英寸,33MHz的PCI總線時(shí)鐘信號(hào)走線長(zhǎng)度為2.5±0.1英寸。因?yàn)镻CI總線端的信號(hào)采用反射波方式即總線驅(qū)動(dòng)靠反射波疊加使信號(hào)電壓達(dá)到要求的振幅,而電壓上升的過(guò)渡時(shí)間相當(dāng)于總線周期的三分之一。因此PCI總線端的信號(hào)與普通芯片的入射波信號(hào)不同,不能直接互連,所以PCI9054內(nèi)部就完成了信號(hào)波形和信號(hào)格式的轉(zhuǎn)換。所以,為了滿足反射條件,要嚴(yán)格按照上面所說(shuō)的兩個(gè)條件進(jìn)行布線,實(shí)際布線中我們對(duì)時(shí)鐘信號(hào)采用了蛇形走線,走線長(zhǎng)度為2.5英寸。
4.WDM驅(qū)動(dòng)程序設(shè)計(jì)
我們利用NuMega公司提供的DriverStudio完成了驅(qū)動(dòng)程序的開發(fā), DriverWorks是DriverStudio的一個(gè)組成部分,能夠非常方便地實(shí)現(xiàn)針對(duì)WDM驅(qū)動(dòng)程序的開發(fā)。DriverWorks中的類庫(kù)封裝了針對(duì)驅(qū)動(dòng)程序的各種通用操作,可以大大縮短驅(qū)動(dòng)程序的開發(fā)周期。
該雙向接口模塊的驅(qū)動(dòng)程序主要完成三項(xiàng)功能,PCI目標(biāo)單周期寫,PCI目標(biāo)單周期讀,DMA讀。單周期寫和單周期讀比較簡(jiǎn)單,直接用KIoRange的讀寫成員函數(shù)就可以完成。
DMA讀主要是利用DriverWorks提供的KdmaAdapter,KDmaTransfer和KCommonDmaBuffer類實(shí)現(xiàn)DMA傳輸,KdmaAdapter用于建立一個(gè)DMA適配器,它說(shuō)明DMA通道的特性,KDmaTransfer用于DMA傳輸控制,KCommonDmaBuffer用于申請(qǐng)系統(tǒng)提供的公用緩沖區(qū)。
驅(qū)動(dòng)程序首先設(shè)置PCI9054的工作方式和中斷寄存器、DMA配置寄存器,然后等待本地中斷的到來(lái)。如果本地中斷到來(lái),則表明FIFO已到達(dá)半滿狀態(tài),則在設(shè)備成員函數(shù)Isr_Irq()中屏蔽本地中斷,在設(shè)備成員函數(shù)DpcFor_Irq()中調(diào)用KDmaTransfer:: Continue()函數(shù)進(jìn)行DMA傳輸。在設(shè)置DMA配置寄存器時(shí),要注意DMAMODE0寄存器的設(shè)置,它的1:0位應(yīng)設(shè)置為11,表示32位數(shù)據(jù)傳送;第8位應(yīng)設(shè)置為1,表示允許本地總線的突發(fā)傳送;第11位應(yīng)設(shè)置為1,表明在DMA傳輸中保持本地地址為常量(FIFO讀寫端口地址不變)。
5.功能測(cè)試
我們?cè)谧孕虚_發(fā)的多路視頻數(shù)據(jù)采集處理系統(tǒng)中對(duì)該采集接口模塊進(jìn)行了測(cè)試,在本地總線的晶振頻率為20MHz時(shí),能穩(wěn)定的達(dá)到160Mbit/s的采集速率;晶振頻率為40MHz時(shí),能穩(wěn)定的達(dá)到200Mbit/s的采集速率。
6.結(jié)束語(yǔ)
盡管PCI總線規(guī)范十分復(fù)雜,但PCI 9054控制器提供了一個(gè)PCI 總線和本地總線的一種直接的高速數(shù)據(jù)傳輸路徑,這一特性降低了PCI 總線的復(fù)雜性。而本文就PCI總線是怎樣和本地總線外部擴(kuò)展設(shè)備或存儲(chǔ)器之間進(jìn)行高速數(shù)據(jù)傳輸進(jìn)行了詳細(xì)的討論,給出了實(shí)用的高速數(shù)據(jù)采集接口設(shè)計(jì),根據(jù)這一設(shè)計(jì),就可以很好的在PCI總線和本地總線外部設(shè)備或存儲(chǔ)器之間進(jìn)行數(shù)據(jù)傳輸和控制,在數(shù)據(jù)采集、信號(hào)處理等各方面具有較廣泛的應(yīng)用。





