引言
隨著數(shù)字信號(hào)處理芯片性價(jià)比的不斷提高,數(shù)字信號(hào)處理的應(yīng)用領(lǐng)域飛速發(fā)展,同時(shí)Pentium高速CPU的出現(xiàn),要求有極高的數(shù)據(jù)通量予以支持,而低速的ISA總線在解決這些問題方面逐漸無能為力,取而代之的是高速的PCI總線。PCI總線可將高速外圍設(shè)備直接掛在CPU總線上,33MHz/32位時(shí)數(shù)據(jù)傳輸速率可達(dá)132MB/s,66MHz/64位時(shí)更是性能加倍,打破了數(shù)據(jù)傳輸速率的瓶頸,使得CPU的性能得到充分發(fā)揮。如果采用美國TI公司生產(chǎn)的高速高性能數(shù)字信號(hào)處理器DSP取代原來的單片機(jī)作為板載CPU,可以充分利用PCI總線的優(yōu)點(diǎn)直接將采集的數(shù)據(jù)傳到微機(jī)內(nèi)存,有效地解決了數(shù)據(jù)的實(shí)時(shí)傳輸和存儲(chǔ)問題。
測(cè)控系統(tǒng)的硬件組成
系統(tǒng)基本硬件結(jié)構(gòu)如圖1所示。整個(gè)高速測(cè)控系統(tǒng)主要由信號(hào)調(diào)理電路、DSP模塊、FIFC)存儲(chǔ)器、CPLD控制電路、PC19054接口芯片等組成。系統(tǒng)采用主從結(jié)構(gòu),PC機(jī)作為上位機(jī),用于完成對(duì)系統(tǒng)的控制(如AD轉(zhuǎn)換的開始、DSP復(fù)位、中斷響應(yīng)、數(shù)據(jù)接收與處理等)。DSP作為下位機(jī),用于完成數(shù)據(jù)的采集與處理、PWM波以及其他外圍信號(hào)的控制等。
DSP測(cè)控模塊介紹
系統(tǒng)采用的DSP芯片為TI公司的TMS320LF2407。電路設(shè)計(jì)時(shí),利用的DSP內(nèi)部的16通道A/D轉(zhuǎn)換實(shí)現(xiàn)數(shù)據(jù)采集,DSP與FIFO的電路接口電壓都為3.3V,可實(shí)現(xiàn)無縫連接,DSP的數(shù)據(jù)總線直接與FIFO的數(shù)據(jù)輸入端口相連,DSP與FIFO的時(shí)鐘頻率應(yīng)設(shè)為相同。這樣,無需插入等待周期,控制信號(hào)經(jīng)CPLD直接轉(zhuǎn)換為FIFO的讀寫信號(hào),實(shí)現(xiàn)數(shù)據(jù)的高速存儲(chǔ)。
先進(jìn)先出存儲(chǔ)器
在DMA傳輸方式下,由于PCI9054內(nèi)部的FIFO只有32級(jí)深度,實(shí)時(shí)傳送高速數(shù)據(jù)時(shí),PCI9054內(nèi)部的FIFO會(huì)很快存滿,而DSP內(nèi)的數(shù)據(jù)仍會(huì)源源不斷的傳送過來,易造成數(shù)據(jù)的丟失,因此必須要擴(kuò)展外部FIFO。
本系統(tǒng)采用I D T公司高速CMOS同步FIFO芯片IDT72V3660,它的容量為4096×36bit;有高達(dá)100MHz的讀寫速度;可以兼容3.3V和5V兩種接口電壓。該FIFO具有標(biāo)準(zhǔn)的"滿"(FF#)、"半滿"(HF#)、"空"(EF#)等標(biāo)志。系統(tǒng)可以根據(jù)這些標(biāo)志信號(hào)控制對(duì)FIFO的讀寫操作。在CPLD的邏輯控制下,當(dāng)WEN#有效時(shí),在WCLK的每一個(gè)上升沿,F(xiàn)IFO會(huì)把輸人數(shù)據(jù)線上的數(shù)據(jù)存入內(nèi)部存儲(chǔ)器。當(dāng)REN#有效且輸出允許(OE#有效)時(shí),在RCLK的每一個(gè)上升沿,F(xiàn)IFO會(huì)把內(nèi)部存儲(chǔ)器中的數(shù)據(jù)發(fā)送到輸出數(shù)據(jù)總線上(低電平用"#"表示)。
控制邏輯芯片CPLD
本系統(tǒng)采用Altera公司的EPM7128來實(shí)現(xiàn)系統(tǒng)的邏輯控制,主要包括DSP控制邏輯、FIFO控制邏輯、PCI9054接口控制邏輯三個(gè)部分,其中,對(duì)PC219054的邏輯控制是設(shè)計(jì)的重點(diǎn)。設(shè)計(jì)中利用MaxPlusⅡ軟件進(jìn)行VHDL語言編程、仿真和調(diào)試。
PCI9054及外部接口分析
PCI與板載CPU的橋接有兩種設(shè)計(jì)方案,一種是采用FPGA,通過軟件編程實(shí)現(xiàn)硬件功能。另一種是利用專用PCI橋接芯片,適合快速開發(fā)的場(chǎng)合。
本系統(tǒng)采用PLX公司的PCI總線專用接口控制芯片PC19054。它符合PCIV2.1和PCIV2_2規(guī)范;可同時(shí)支持3.3V和5V兩種信號(hào)環(huán)境;提供了兩個(gè)獨(dú)立的可編程DMA控制器;內(nèi)部有6種可編程FIFO,以實(shí)現(xiàn)零等待突發(fā)傳輸及局部總線和PCI總線之間的異步操作;在PCI總線端支持33MHz/32位,傳輸速率最高可達(dá)132MB/s;在局部端可編程實(shí)現(xiàn)8/16/32位的數(shù)據(jù)寬度,支持復(fù)用/非復(fù)用的32位地址/數(shù)據(jù),時(shí)鐘最高可達(dá)50MHz。
PCI9054局部總線可工作在M、J、C三種模式,M模式是專門為Motorola公司的 MPC850和MPC860提供直接非復(fù)用的接口;J模式地址/數(shù)據(jù)線復(fù)用;C模式與J模式差別不大,但地址/數(shù)據(jù)線非復(fù)用,更符合連接習(xí)慣。本設(shè)計(jì)采用C模式。
PCI9054的數(shù)據(jù)傳輸模式可分為主模式、從模式、DMA模式。模式的選擇主要根據(jù)硬件設(shè)計(jì)者對(duì)硬件的設(shè)計(jì)需要而定。本系統(tǒng)采用DMA模式,在DMA傳輸模式下,PCI9054既是PCI端的主控方,又是局部端的主控方。
PCI9054集成了兩個(gè)互相獨(dú)立的DMA通道,每個(gè)通道都支持Block DMA和Scatter/(3ather DMA,其中通道0還支持請(qǐng)求(Demand)DMA傳輸方式。當(dāng)有通道進(jìn)行DMA傳輸時(shí),DMA控制器將發(fā)起對(duì)局部總線和PCI總線操作,其傳輸過程如圖2所示。 PC219054提供了三個(gè)物理總線接口:PCI總線接口、EEPROM接口、局部總線接口。PCI總線接口依照PCI擴(kuò)展板上定義的引腳分配情況將彼此對(duì)應(yīng)的信號(hào)連接在一起即可。本系統(tǒng)采用的EEPROM為4K、3.3V串行的93LC66B,通過對(duì)PCI時(shí)鐘分頻來產(chǎn)生EEPROM時(shí)鐘,內(nèi)部存放PCI9054的配置信息,系統(tǒng)加電時(shí)PCI9054自動(dòng)加載EEPROM中的配置信息,并由BIOS通過PCI總線對(duì)配置寄存器讀寫,來完成各種控制功能。接口電路如圖3所示。
PCI9054在DMA傳輸方式下,通過設(shè)置其DMA控制器內(nèi)部的寄存器即可實(shí)現(xiàn)兩總線之間的數(shù)據(jù)傳送。傳輸過程由以下幾個(gè)步驟實(shí)現(xiàn):
1.設(shè)置傳輸方式寄存器:通過寄存器DMA MODE0或DMAMODE1的位9來設(shè)置DMA通道的傳輸方式,置0表示Block傳輸,置1表示Scatter/Gather傳輸;
2.設(shè)置命令/狀態(tài)寄存器:?jiǎn)?dòng)/停止DMA操作,并讀此寄存器返回DMA狀態(tài);
3.設(shè)置描述寄存器:設(shè)置DMA的傳輸方向;
4.設(shè)置傳輸計(jì)數(shù)寄存器:以字節(jié)為單位設(shè)置傳輸數(shù)據(jù)量;
5.設(shè)置PCI地址寄存器:設(shè)置PCI總線側(cè)的地址空問;
6.設(shè)置局部地址寄存器:設(shè)置局部總線側(cè)的地址空間。 當(dāng)進(jìn)行數(shù)據(jù)采集時(shí),由應(yīng)用程序或通過DSP的外部引腳(pi
n21)向DSP發(fā)出采集命令,同時(shí)復(fù)位FIFO,在13SP內(nèi)部程序和CPLD的控制下,數(shù)據(jù)經(jīng)DO-31源源不斷地輸入到FIFO中,當(dāng)FIFO半滿時(shí)發(fā)出半滿標(biāo)志信號(hào)(HF#),CPLD接到半滿信號(hào)后,立即向PCI9054發(fā)出中斷請(qǐng)求信號(hào)(LINT),驅(qū)動(dòng)程序響應(yīng)中斷,在中斷響應(yīng)程序內(nèi),發(fā)出讀命令、要讀取的字節(jié)數(shù)、傳輸方向、地址信號(hào)等,PCI9054設(shè)定"DMA傳輸開始位"啟動(dòng)數(shù)據(jù)傳輸,當(dāng)ADS#為低(有效),BLAST為高(無效),LW/R為低(有效)時(shí),表明PCI9054開始一個(gè)有效的讀數(shù)據(jù)周期,CPLD產(chǎn)生一個(gè)低電平信號(hào)REN#給FIFO,同時(shí)作為Ready信號(hào)返回給PCI9054, 表明已準(zhǔn)備就緒。直到ADS#為高(無效)且BLAST#為低(有效)時(shí),表明PCI9054已經(jīng)開 始最后一個(gè)周期,同時(shí)設(shè)定D M A"傳輸結(jié)束位"結(jié)束DMA操作,此時(shí)REN#信號(hào)再次變高電平(無效),完成一次數(shù)據(jù)突發(fā)傳輸。接口電路如圖4所示。
該系統(tǒng)的軟件設(shè)計(jì)主要包括DSP測(cè)控程序、PCI設(shè)備驅(qū)動(dòng)程序和Windows應(yīng)用程序三個(gè)部分。驅(qū)動(dòng)程序是連接硬件系統(tǒng)和應(yīng)用程序的橋梁,是整個(gè)測(cè)控系統(tǒng)開發(fā)中的關(guān)鍵一步。在此簡(jiǎn)單介紹一下PCI設(shè)備驅(qū)動(dòng)程序開發(fā)過程。
在Windows環(huán)境下共有三種類型的驅(qū)動(dòng)程序,分別是VXD、NT、WDM。因?yàn)閃DM可以應(yīng)用在windows98/2000/XP下,支持即插即用、電源管理、WMI等功能,是Windows NT驅(qū)動(dòng)體系基礎(chǔ)上發(fā)展起來的未來主流驅(qū)動(dòng)程序體系,所以為這里選擇設(shè)計(jì)WDM驅(qū)動(dòng)程序。
開發(fā)工具選擇Compuware公司提供的DriverStudio完~成驅(qū)動(dòng)程序的開發(fā),DriverWorks是DriverStudio中的一個(gè)部分,DriverWorks中的類庫封裝了針對(duì)驅(qū)動(dòng)程序的各種通用操作,使用其中的DriverWizard向?qū)Чδ?,能夠非常方便地?shí)現(xiàn)WDM驅(qū)動(dòng)程序的開發(fā)。
其中PCI配置空間的訪問采用KPciConfiguration實(shí)現(xiàn)。I/O訪問采用DriverStudio中的KIoRange類實(shí)現(xiàn)。硬件中斷響應(yīng)的處理可以采用Kinterrupt類實(shí)現(xiàn)。DMA讀主要是利用三個(gè)類來實(shí)現(xiàn)數(shù)據(jù)傳輸,分別為:KDmaTransfer、KdmaAdapter和K C o m m o n D m a B U ff e r。KDmaTransfer用于DMA傳輸控制。KdmaAdapter用于建立一個(gè)DMA適配器來說明DMA通道的特性。KCommonDmaBuffer用于申請(qǐng)系統(tǒng)提供的公用緩沖區(qū)。
執(zhí)行過程中驅(qū)動(dòng)程序首先設(shè)置PCI9054的工作方式和中斷寄存器、DMA配置寄存器,然后等待本地中斷的到來。當(dāng)FIFO半滿時(shí)表明本地中斷到來,在設(shè)備成員函數(shù)Isr_IrqO中屏蔽本地中斷,在設(shè)備成員函數(shù)DpcFor_Irq()中調(diào)用KDmaTransfer:Continue()函數(shù)進(jìn)行DMA傳輸。一次數(shù)據(jù)傳輸完畢后,驅(qū)動(dòng)程序通過操作系統(tǒng)將內(nèi)核中的數(shù)據(jù)拷貝到用戶態(tài)內(nèi)存,交給應(yīng)用軟件處理。
結(jié)語
在實(shí)驗(yàn)室中利用PCI9054作為接口芯片的高速測(cè)控系統(tǒng),可實(shí)現(xiàn)持續(xù)數(shù)據(jù)傳輸速率達(dá)50MB/s,且系統(tǒng)運(yùn)行穩(wěn)定,具有廣泛的應(yīng)用前景。