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

2數據采集接口邏輯的設計
2.1PCI9054本地總線研究
對本地總線操作過程及控制信號時序關系的分析是應用PCI9054芯片和設計本地總線控制器的基礎性工作。PCI9054本地總線的信號包括:LHOLD(輸出)申請占用本地總線信號;LHOLDA(輸入)本地總線應答信號;ADS#(輸出)地址選通信號;BLAST#(輸出)傳輸結束指示信號;LW/R(輸出)讀寫狀態信號(高電平表示寫,低電平表示讀);READY#(輸入)外部等待信號;LCLK(輸出)本地時鐘;LRESET#(輸出)本地復位信號;LA[31:2](輸出)本地地址總線;LD[31:0](輸入/輸出)本地數據總線。上述信號名后帶有“#”的表示低電平有效,另外輸入輸出是針對PCI9054芯片而言的。

當讀數據時,本地總線上的各信號時序關系如圖2所示,控制信號有效邊沿的含義已標注于圖中。圖2所示的PCI從方式讀操作中,每次傳輸的數據有多個字,ADS#信號變低表示數據傳輸周期的開始,之后每個時鐘周期的上升沿將本地數據總線上的數據讀入9054內部,在緊接著的時鐘下降沿自動增加本地地址總線上的地址;數據傳輸狀態將一直持續到BLAST#信號變低,表示當前數據期已經是傳輸的最后一個數據期,數據傳輸即將結束。這種傳輸方式稱為突發傳輸。相對應的PCI9054也支持單周期傳輸。在單周期傳輸時,每次只傳輸一個字,BLAST#信號在ADS#信號有效后的下一個時鐘周期就會出現。顯然單周期方式的數據傳輸率較之突發傳輸方式會慢很多,由于FPGA內的FIFO數據傳輸率能夠與PCI9054的數據傳輸率相適應,本文采用突發傳輸方式以提高PCI總線的傳輸效率。
2.2本地總線控制
根據前文可以明確出本地總線控制器的設計目標:根據輸入的控制信號LHOLD、ADS#、BLAST#生成符合本地總線時序要求的控制信號LHOLDA、READY#和FIFO的讀請求信號RDREQ。 對于LHOLD信號的應答問題,采用Verilog語言中的always和assign語句就能簡便高效的實現。對READY#信號的處理可以采用同步狀態機,其狀態圖如圖3所示:

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