一種基于PCI總線和DSP技術(shù)的虛擬儀器設(shè)計
傳統(tǒng)的虛擬儀器由一塊基于PCI總線的直接利用A/D和D/A芯片構(gòu)成的數(shù)據(jù)采集板卡和相應(yīng)的軟件組成,但隨著計算機(jī)網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,越來越多的數(shù)據(jù)需要由計算機(jī)處理、存儲和傳輸,由于通用計算機(jī)本身的特點,它們通常不適于進(jìn)行實時性要求很高的數(shù)字信號處理,因此這種虛擬儀器不能滿足現(xiàn)實應(yīng)用對數(shù)據(jù)實時處理能力、數(shù)據(jù)傳輸能力以及數(shù)據(jù)管理能力所提出的越來越高的要求。
與此同時,隨著數(shù)字信號處理器(DSP)性價比的不斷提高,其應(yīng)用領(lǐng)域飛速擴(kuò)展,從而使基于PCI總線和DSP技術(shù)的新型虛擬儀器應(yīng)運(yùn)而生。
系統(tǒng)的基本框架
筆者設(shè)計的基于PCI總線和DSP技術(shù)的虛擬儀器的基本框架如圖1所示。
整個系統(tǒng)是基于模塊化的設(shè)計理念來實現(xiàn)的,該系統(tǒng)的開發(fā)主要有以下幾步:1)設(shè)計一塊基于PCI總線的母板,該板上有自己定義的總線接插件,以及整個系統(tǒng)的邏輯控制單元和數(shù)據(jù)緩沖存儲芯片;2)設(shè)計數(shù)據(jù)采集模塊和數(shù)據(jù)輸出模塊;3)開發(fā)PCI母板的Windows驅(qū)動程序,使PC能正常識別該板卡并分配所需系統(tǒng)資源;4)開發(fā)系統(tǒng)下位機(jī)DSP數(shù)據(jù)采集模塊的程序,實現(xiàn)對模擬信號的采集以及數(shù)據(jù)的FFT算法處理;5)開發(fā)系統(tǒng)上位機(jī)PC的控制軟件,實現(xiàn)數(shù)據(jù)波形顯示、端口配置、內(nèi)存讀寫以及對儀器的控制功能。
圖1 虛擬儀器系統(tǒng)的基本框架
系統(tǒng)的硬件設(shè)計
由圖1可見,本虛擬儀器系統(tǒng)首先要有一塊基于PCI總線的母板,該板上有自定義的總線接插件,可以插接其他基于該總線的數(shù)據(jù)采集DSP子板,此外,該板上還有整個系統(tǒng)的邏輯控制單元以及數(shù)據(jù)緩沖存儲芯片;其他各個功能模塊都基于該擴(kuò)展板來實現(xiàn);各個模塊之間數(shù)據(jù)的存儲和傳輸可以通過雙端口RAM來實現(xiàn),我們選用Cypress公司8K×16b高速雙口RAM芯片CY7C025V,因為它的時序與DSP時序相配,特別適用于DSP與PC之間大量數(shù)據(jù)的高速雙向傳送。
1 PCI接口的實現(xiàn)
在PCI總線適配卡的設(shè)計中,采用專用的PCI接口芯片來實現(xiàn)PCI接口,設(shè)計者不需要將精力投入到復(fù)雜的PCI接口功能設(shè)計和驗證測試上。專用的接口芯片可以實現(xiàn)完整的PCI主控模塊和目標(biāo)接口功能,將復(fù)雜的PCI接口轉(zhuǎn)換為簡單的接口。在本設(shè)計中選用PLX公司通用接口芯片PCI9052,它包含讀和寫FIFO,以便將32bit、33MHz的PCI總線與總線寬度有可能比它窄或總線速度有可能比它慢的局部總線進(jìn)行匹配。PCI9052有最大5個局部地址空間和4個片選支持,圖2為PCI9052的信號接口模塊圖。
圖2 PCI9052信號接口
[!--empirenews.page--]
PCI分配資源的數(shù)據(jù)來源是通過外擴(kuò)的EEPROM來實現(xiàn)的,根據(jù)PCI9052接口芯片的要求,選用Microchip公司支持三線串行接口的EEPROM。在電源上電期間,PCI的RST#信號復(fù)位PCI9052內(nèi)部寄存器。而PCI9052也輸出局部復(fù)位信號(LRESET#)并檢查是否存在外部EEPROM,如果存在并且第一個16位字不是FFFFH,則PCI9052加載EEPROM中的數(shù)據(jù)到PCI9052的內(nèi)部寄存器中;否則默認(rèn)值被使用。PCI9052配置寄存器僅能由EEPROM或PCI主機(jī)處理器寫。在EEPROM初始化期間,PCI9052用RETRY信號來響應(yīng)PCI目標(biāo)訪問。圖3給出了本設(shè)計中EEPROM(93CS46)和PCI9052的連接電路圖。
圖3 EEPROM和PCI9052的連接電路圖
EEPROM中配置的主要信息包括:設(shè)備識別號、供應(yīng)商代號、四個局部總線空間的大小以及空間的基地址等。可以事先通過編程器將配置信息寫入配置EEPROM中,也可在系統(tǒng)啟動后用PLXMon對EEPROM進(jìn)行操作。
2 系統(tǒng)控制邏輯的實現(xiàn)
由于CPLD器件掉電后可保存芯片內(nèi)部程序,無須煩瑣的重復(fù)燒寫,因此本設(shè)計采用Altera公司的CPLD器件,作為PCI接口芯片及存儲芯片的邏輯控制??紤]到需要使用局部地址/數(shù)據(jù)各16根線,控制信號線22根,還要為數(shù)據(jù)采集電路預(yù)留些I/O引腳,最后決定采用144腳TQFP封裝的EPM3128。
在本系統(tǒng)中,EPM3128的主要功能是實現(xiàn)PCI Local端的地址譯碼、DSP Local端對各個DRAM控制的地址譯碼、對板上功能選擇開關(guān)的狀態(tài)進(jìn)行譯碼,從而實現(xiàn)對系統(tǒng)功能的配置以及對各芯片的控制信號進(jìn)行邏輯譯碼。所有的譯碼工作都通過VHDL編程語言來實現(xiàn)。綜合和編譯工作是在Altera公司的QuartusII集成編譯環(huán)境中完成的。源程序代碼請參閱《今日電子》網(wǎng)站本文章的完整版。
3 數(shù)據(jù)采集電路的實現(xiàn)
數(shù)據(jù)采集電路是本系統(tǒng)的關(guān)鍵,數(shù)據(jù)采集電路設(shè)計的好壞將直接影響到本系統(tǒng)的性能。為了實現(xiàn)系統(tǒng)功能的可配置和可擴(kuò)展性,數(shù)據(jù)采集模塊設(shè)計成可配置的模式插接在總線接口母板上,實現(xiàn)對外部信號的數(shù)據(jù)采集。數(shù)據(jù)采集模塊由高速16位adc(LTC1608)和高性能DSP芯片(TMS320C6713)構(gòu)成,LTC1608的并行數(shù)字接口可方便地與包括TMS320C6713在內(nèi)的多種DSP通信,并可連接3V或5V邏輯。
由于對采集精度的高要求,在信號進(jìn)入ADC之前,需要對模擬信號進(jìn)行一系列的處理以保證信號的可靠性:模擬信號首先經(jīng)過電壓跟隨運(yùn)算放大器增加輸入阻抗,再經(jīng)過電壓比例放大和一階RC低通濾波,最后輸入到ADC。
圖4 輸入信號處理電路原理圖
圖5 LTC1608 A/D芯片引腳連接電路圖
[!--empirenews.page--]
具體的信號處理電路如圖4和圖5所示。
系統(tǒng)軟件設(shè)計
正如圖1所示,硬件設(shè)計完成后,要使整個系統(tǒng)工作還需要軟件的支持,這些軟件包括PCI設(shè)備驅(qū)動程序、數(shù)據(jù)處理算法程序和系統(tǒng)控制軟件。
1 設(shè)備驅(qū)動程序設(shè)計
設(shè)備驅(qū)動程序不是單獨存在的,而是相關(guān)操作系統(tǒng)內(nèi)核的一部分,所以需要對操作系統(tǒng)有一定的了解。Windows 2000操作系統(tǒng)是32位的多任務(wù)非實時操作系統(tǒng)。對整個系統(tǒng)底層的操作和用戶與硬件打交道的權(quán)力被屏蔽,必須通過操作系統(tǒng)統(tǒng)一管理設(shè)備驅(qū)動程序和其他內(nèi)核訪問來實現(xiàn)應(yīng)用軟件對硬件的訪問。在設(shè)計和使用PCI設(shè)備時,經(jīng)常要在軟件中對系統(tǒng)資源進(jìn)行訪問,因此只有編制設(shè)備驅(qū)動程序才能實現(xiàn)對PCI總線設(shè)備的完全訪問。
應(yīng)用程序?qū)υO(shè)備I/O進(jìn)行Win32調(diào)用,這個調(diào)用由I/O系統(tǒng)服務(wù)接收。I/O管理器從這個請求構(gòu)造一個合適的I/O請求包(IRP)。在最簡單的情況下,I/O管理器只是把IRP傳遞給一個設(shè)備驅(qū)動程序,這個驅(qū)動程序與硬件打交道,并完成IRP的處理。I/O管理器把數(shù)據(jù)和結(jié)果返回給Win32和用戶應(yīng)用程序。而一個IRP由一個分層的設(shè)備驅(qū)動程序棧處理是很常見的。每個驅(qū)動程序把該請求劃分成更簡單的請求。最高層的驅(qū)動程序(如文件系統(tǒng)驅(qū)動程序)知道文件如何在磁盤上表示,但不知道如何得到數(shù)據(jù)的細(xì)節(jié);中間層次的驅(qū)動程序進(jìn)一步處理請求;最低層的驅(qū)動程序與硬件實際打交道。
本設(shè)計選擇的硬件驅(qū)動程序開發(fā)工具是Compuware公司提供的一個驅(qū)動程序集成開發(fā)包(DriverStudio)。利用其中的DriverWorks工具可以生成一個PCI總線驅(qū)動框架,然后在WDM中實現(xiàn)輸入輸出處理,可以用KIoRange類來實現(xiàn)。
在驅(qū)動程序框架生成的過程中,我們可以通過向?qū)暶黩?qū)動程序中將要使用的資源;通過調(diào)用KIoRange類的Initialize()函數(shù),可以對資源進(jìn)行初始化(映射PCI局部空間);應(yīng)用層通過DeviceIoControl函數(shù)向驅(qū)動程序發(fā)命令來調(diào)用KIoRange的成員函數(shù)實現(xiàn)應(yīng)用層對I/O空間的處理。開發(fā)PCI母板的windows驅(qū)動程序,就是使PC能正常識別該板卡并分配所需的系統(tǒng)資源。
2 FFT算法的實現(xiàn)
系統(tǒng)需要針對DSP數(shù)據(jù)采集模塊,開發(fā)并實現(xiàn)對模擬信號的采集以及對數(shù)據(jù)進(jìn)行FFT(快速傅立葉變換)算法處理的程序。
作為一般的情況,設(shè):x(n)和 X(k)都是復(fù)數(shù),因為從實際計算過程看,實數(shù)和復(fù)數(shù)沒有區(qū)別,唯一不同的是:實數(shù)的虛部為零,表達(dá)式簡單些。而運(yùn)算過程所有的計算都是對實數(shù)進(jìn)行的,如果信號或頻譜是復(fù)數(shù),就把最后計算的結(jié)果再組合成為復(fù)數(shù)分量。FFT運(yùn)算的基本單元是“蝶形單元”,其蝶形運(yùn)算的基本形式如下式所示:
所有蝶形單元的運(yùn)算可統(tǒng)一表示為
(1)
式(1)中,A和B是蝶形單元的輸入,C和D是輸出。同時將表示為
(2)
式(1)可以表示為虛部和實部形式,帶下標(biāo)R的字符表示實部,帶下標(biāo)I的為虛部,即
(3)
根據(jù)算法原理和上面的說明,用C語言編制出一個按時間抽取的FFT算法程序,結(jié)構(gòu)上分為幾個部分:首先是碼位的倒置,然后根據(jù)計算的點數(shù)確定蝶形運(yùn)算的級數(shù),接著是逐級進(jìn)行蝶形運(yùn)算,完成FFT運(yùn)算。
[!--empirenews.page--]
3 應(yīng)用控制軟件的設(shè)計
圖6 控制軟件功能模塊框圖
整個應(yīng)用控制軟件的功能模塊框圖如圖6所示。
基于以上的控制功能模塊圖,選擇使用VC++來實現(xiàn)本系統(tǒng)應(yīng)用軟件的人機(jī)界面以及對系統(tǒng)的控制功能。VC++的開發(fā)環(huán)境集編輯、編譯、連接、調(diào)試、向?qū)У榷囗椆δ苡谝惑w,并且提供了目前成為業(yè)界標(biāo)準(zhǔn)的MFC(Microsoft Application Foundation Classes)類庫。
我們開發(fā)的虛擬儀器系統(tǒng)PC端控制軟件可實現(xiàn)數(shù)據(jù)波形顯示、端口配置、內(nèi)存讀寫以及對儀器的控制功能,其主界面如圖7所示。
圖7 程序主界面
結(jié)語
本設(shè)計實現(xiàn)了基于DSP技術(shù)與PCI總線的數(shù)據(jù)采集處理卡,開發(fā)了虛擬式實時多通道FFT頻譜分析儀的應(yīng)用程序以及主機(jī)監(jiān)控界面。通過在數(shù)據(jù)采集卡上集成DSP,使得該卡不但能實時不掉點地采集外界信號,而且能在卡上實現(xiàn)數(shù)字濾波、FFT頻譜分析。
整個系統(tǒng)經(jīng)過綜合調(diào)試和嚴(yán)格測試后,達(dá)到設(shè)計需求,業(yè)已投入實際使用。