摘要:目前部分基于X86體系結(jié)構(gòu)平臺(tái)的測(cè)試儀器已經(jīng)采用了PCI板卡設(shè)備來(lái)控制整個(gè)測(cè)試電路的運(yùn)行、采集測(cè)試數(shù)據(jù),因此在PCI板卡上的本地總線與數(shù)據(jù)傳輸電路之間需要設(shè)計(jì)接口電路。在分析PCI9054接口控制器的基礎(chǔ)上,研究和設(shè)計(jì)了一種實(shí)用的數(shù)據(jù)傳輸接口電路并在現(xiàn)場(chǎng)可編程門陣列器件內(nèi)部得以實(shí)現(xiàn)。
關(guān)鍵詞:PCI總線;數(shù)據(jù)傳輸;FPGA
中圖分類號(hào):TP399文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):16723198(2007)11026301
1引言
近年來(lái)PCI總線已經(jīng)在高檔測(cè)試儀器中得到越來(lái)越廣泛的應(yīng)用。由于PCI總線協(xié)議非常復(fù)雜,不便于與測(cè)量控制邏輯直接連接,需要經(jīng)過(guò)一個(gè)PCI接口控制器作為橋梁。另外考慮到軟件的處理速度和工作效率,測(cè)量電路高速采集的數(shù)據(jù)也不能立即傳送給主機(jī),因此在FPGA內(nèi)部設(shè)計(jì)了FIFO緩沖器。設(shè)計(jì)方案如圖1所示。當(dāng)送入FIFO的測(cè)量數(shù)據(jù)達(dá)到預(yù)定的數(shù)量時(shí),本地中斷邏輯通過(guò)PCI總線接口控制器向主機(jī)提出中斷請(qǐng)求,主機(jī)響應(yīng)中斷后,通過(guò)PCI總線控制器從FIFO中取走測(cè)量數(shù)據(jù)。
PCI接口控制器的設(shè)計(jì)相對(duì)來(lái)說(shuō)比較復(fù)雜。目前比較常用的方案有兩種:第一種是用可編程邏輯器件設(shè)計(jì)實(shí)現(xiàn),第二種方案是采用專用接口芯片。由于前者方案需要投入大量的人力、物力進(jìn)行邏輯驗(yàn)證和時(shí)序分析工作,延長(zhǎng)了開(kāi)發(fā)周期,因此本文選擇了專用接口芯片方案。具體型號(hào)是PLX公司的PCI9054芯片。使用這種專用芯片橋接PCI總線和本地總線,開(kāi)發(fā)者可以省去考慮很多復(fù)雜的PCI總線規(guī)范,而集中精力開(kāi)發(fā)硬件和驅(qū)動(dòng)程序。
以下主要論述圖1虛線框內(nèi)的FPGA設(shè)計(jì)與實(shí)現(xiàn)。重點(diǎn)是與PCI9054接口的本地總線控制邏輯和中斷邏輯。

2數(shù)據(jù)采集接口邏輯的設(shè)計(jì)
2.1PCI9054本地總線研究
對(duì)本地總線操作過(guò)程及控制信號(hào)時(shí)序關(guān)系的分析是應(yīng)用PCI9054芯片和設(shè)計(jì)本地總線控制器的基礎(chǔ)性工作。PCI9054本地總線的信號(hào)包括:LHOLD(輸出)申請(qǐng)占用本地總線信號(hào);LHOLDA(輸入)本地總線應(yīng)答信號(hào);ADS#(輸出)地址選通信號(hào);BLAST#(輸出)傳輸結(jié)束指示信號(hào);LW/R(輸出)讀寫(xiě)狀態(tài)信號(hào)(高電平表示寫(xiě),低電平表示讀);READY#(輸入)外部等待信號(hào);LCLK(輸出)本地時(shí)鐘;LRESET#(輸出)本地復(fù)位信號(hào);LA[31:2](輸出)本地地址總線;LD[31:0](輸入/輸出)本地?cái)?shù)據(jù)總線。上述信號(hào)名后帶有“#”的表示低電平有效,另外輸入輸出是針對(duì)PCI9054芯片而言的。

當(dāng)讀數(shù)據(jù)時(shí),本地總線上的各信號(hào)時(shí)序關(guān)系如圖2所示,控制信號(hào)有效邊沿的含義已標(biāo)注于圖中。圖2所示的PCI從方式讀操作中,每次傳輸?shù)臄?shù)據(jù)有多個(gè)字,ADS#信號(hào)變低表示數(shù)據(jù)傳輸周期的開(kāi)始,之后每個(gè)時(shí)鐘周期的上升沿將本地?cái)?shù)據(jù)總線上的數(shù)據(jù)讀入9054內(nèi)部,在緊接著的時(shí)鐘下降沿自動(dòng)增加本地地址總線上的地址;數(shù)據(jù)傳輸狀態(tài)將一直持續(xù)到BLAST#信號(hào)變低,表示當(dāng)前數(shù)據(jù)期已經(jīng)是傳輸?shù)淖詈笠粋€(gè)數(shù)據(jù)期,數(shù)據(jù)傳輸即將結(jié)束。這種傳輸方式稱為突發(fā)傳輸。相對(duì)應(yīng)的PCI9054也支持單周期傳輸。在單周期傳輸時(shí),每次只傳輸一個(gè)字,BLAST#信號(hào)在ADS#信號(hào)有效后的下一個(gè)時(shí)鐘周期就會(huì)出現(xiàn)。顯然單周期方式的數(shù)據(jù)傳輸率較之突發(fā)傳輸方式會(huì)慢很多,由于FPGA內(nèi)的FIFO數(shù)據(jù)傳輸率能夠與PCI9054的數(shù)據(jù)傳輸率相適應(yīng),本文采用突發(fā)傳輸方式以提高PCI總線的傳輸效率。
2.2本地總線控制
根據(jù)前文可以明確出本地總線控制器的設(shè)計(jì)目標(biāo):根據(jù)輸入的控制信號(hào)LHOLD、ADS#、BLAST#生成符合本地總線時(shí)序要求的控制信號(hào)LHOLDA、READY#和FIFO的讀請(qǐng)求信號(hào)RDREQ。 對(duì)于LHOLD信號(hào)的應(yīng)答問(wèn)題,采用Verilog語(yǔ)言中的always和assign語(yǔ)句就能簡(jiǎn)便高效的實(shí)現(xiàn)。對(duì)READY#信號(hào)的處理可以采用同步狀態(tài)機(jī),其狀態(tài)圖如圖3所示:

2.3對(duì)于本地中斷的分析和應(yīng)用
當(dāng)采集并存儲(chǔ)在FIFO中的數(shù)據(jù)達(dá)到一定數(shù)量,為了避免FIFO溢出主機(jī)需要將測(cè)試數(shù)據(jù)從FIFO中取走。從提高效率的角度出發(fā),采用中斷方式完成該工作。
在PCI9054 的中斷被使能的情況下,如果本地邏輯向PCI9054芯片輸出本地中斷信號(hào),PCI9054芯片將生成PCI中斷信號(hào)。需要特別注意的是:PCI9054芯片生成的PCI中斷信號(hào)是電平信號(hào),而非脈沖信號(hào),因此當(dāng)該P(yáng)CI中斷被PCI主機(jī)響應(yīng)后需要在中斷服務(wù)程序的入口處手動(dòng)禁止PCI中斷,否則會(huì)導(dǎo)致多次觸發(fā)中斷的異常情況出現(xiàn)。同時(shí)由于在中斷服務(wù)程序出口處重新打開(kāi)了PCI中斷,因此須在中斷服務(wù)程序執(zhí)行期間撤銷本地中斷源以避免中斷服務(wù)程序一旦結(jié)束就將再次觸發(fā)中斷的異常情況出現(xiàn)。
基于以上分析,本地中斷處理邏輯需要實(shí)現(xiàn)兩點(diǎn)功能要求:① 當(dāng)觸發(fā)條件滿足時(shí),生成本地中斷輸入信號(hào)LINT#。② 在中斷服務(wù)程序執(zhí)行期間,撤銷本地中斷輸入信號(hào)LINT#。對(duì)于第一點(diǎn)要求,采用的方法是用減計(jì)數(shù)器的溢出信號(hào)來(lái)作為本地中斷輸入信號(hào),該計(jì)數(shù)器的初值可以由應(yīng)用程序根據(jù)被測(cè)器件和測(cè)量模式來(lái)靈活設(shè)置。對(duì)于第二個(gè)功能要求,在開(kāi)發(fā)實(shí)踐中采用了一種效率更高、移植性更好的本地中斷信號(hào)撤銷機(jī)制。其關(guān)鍵點(diǎn)在于將撤銷本地中斷信號(hào)的控制權(quán)由本地邏輯轉(zhuǎn)移到中斷服務(wù)程序中。具體方法是:在本地端設(shè)計(jì)一個(gè)中斷處理觸發(fā)器。該中斷處理觸發(fā)器的clear端口連接的是數(shù)據(jù)總線的最低位與譯碼器輸出信號(hào)相與后的信號(hào),D端口置1,clk端口連接上述減計(jì)數(shù)器的溢出信號(hào),q端口上輸出信號(hào)經(jīng)過(guò)非門作為L(zhǎng)INT#信號(hào)輸出。當(dāng)FIFO中的數(shù)據(jù)量達(dá)到預(yù)先設(shè)定值時(shí),減計(jì)數(shù)器溢出,觸發(fā)器q端輸出高電平,經(jīng)過(guò)反相器即產(chǎn)生低有效的本地中斷輸入信號(hào)。當(dāng)主機(jī)響應(yīng)中斷,并進(jìn)入中斷服務(wù)程序后,執(zhí)行一次對(duì)該觸發(fā)器置1的操作,這樣連接clear端口的與門的兩個(gè)輸入端都為高電平,進(jìn)而將該觸發(fā)器的q端輸出置0,經(jīng)過(guò)反相后,LINT#信號(hào)變?yōu)楦唠娖剑闯蜂N本地中斷信號(hào)。
3結(jié)論
本文討論分析PCI9054接口控制器的本地總線操作過(guò)程,并在此基礎(chǔ)上研究與設(shè)計(jì)了數(shù)據(jù)采集接口邏輯。該數(shù)據(jù)采集接口邏輯是PCI9054芯片與數(shù)據(jù)FIFO進(jìn)行信息交互的橋梁。該設(shè)計(jì)已用Verilog硬件描述語(yǔ)言進(jìn)行了功能描述,并仿真驗(yàn)證和綜合。設(shè)計(jì)方案已經(jīng)應(yīng)用在某晶體管特征曲線圖示儀產(chǎn)品開(kāi)發(fā)實(shí)踐中,實(shí)踐運(yùn)行證明該數(shù)據(jù)采集接口電路能夠高效、穩(wěn)定的工作。
參考文獻(xiàn)
[1] PLX technology PCI 9054 Data Book Version 2.12000,(1).
[2]王雪梅,施洪昌.基于PCI總線的數(shù)據(jù)采集卡的設(shè)計(jì)[J].微計(jì)算機(jī)信息(測(cè)控自動(dòng)化),2005,(4).