摘 要:本文通過一套數據采集卡的設計介紹了PCI總線數據傳輸的基本過程,給出了系統整體設計方案和PCI接口通信方式及驅動程序實現,并著重討論了PCI數據傳輸中影響傳輸速率的各個方面。
關鍵詞:PCI總線,WinDriver,直接存儲器存取
1 引言
計算機總線擴展技術使得基于計算機的數據采集技術迅速得到應用,基于PC機的數據采集系統是目前應用最為廣泛的數據采集系統之一,不但廣泛應用于電力設備監控、遙測遙感等測控領域,在聲納、雷達、通訊、地質、醫療器械等領域中也有著重要的應用。高速數據傳輸始終是計算機相關領域研究的重點,它是計算機感知外部世界并對其進行控制的基礎。PCI總線協議是Intel公司1992年提出,為滿足高速數據輸入/輸出要求而設計的一種低成本,高性能的局部總線協議。32位PCI總線的峰值傳輸速率為132MB/s(33MHz×4Byte)。在PC機的數據傳輸中,PCI總線以其卓越的性能得到了廣泛的應用。高速的數據傳輸要求提高PCI總線的帶寬利用率,使其盡量接近PCI總線的極限速率。本文詳細介紹了PCI總線高速數據傳輸系統設計的關鍵技術,并實現了一套高速數據采集系統。
2 硬件電路設計
該系統硬件電路板的結構框圖如圖1所示。其中PCI9054總線控制器負責局部總線與PCI總線間的接口通信。由于PCI9054 Local總線部分信號時序也比較復雜,用門電路不但難以實現而且所需要芯片數量較多,影響電路板的擴充能力及通用性,故采用CPLD實現PCI9054 Local端的控制。從框圖中可以看到, PCI9054局部數據總線高五位數據線接到CPLD引腳上,這五根數據線可以接受和發送數據,根據接收到的數據對其譯碼產生控制信息,還可以發出數據使PCI9054產生門鈴中斷和MailBox中斷。
PCI接口數據傳輸效率非常高而A/D采集數據效率較低,所以本設計采用FIFO來緩存數據,也可以同時采集多路數據。PCI9054局部總線支持50MHz時鐘,為配合A/D工作,本設計選用40M時鐘。PCI9054的所有地址線和控制信號都只與CPLD連接,產生CPLD的工作狀態和各種控制信息。FIFO采用TI公司生產的SN74V3690芯片,該芯片非常適合于網絡,視頻,信號處理,電話,數據通信和其他需要大量數據和非對等總線匹配的應用。
[align=center]

圖1 硬件電路框圖[/align]
3 DMA傳輸方式設計
3.1改進的狀態機設計
一般情況下狀態機的轉換圖如圖2所示。該狀態機有三種傳輸狀態,空閑狀態、等待狀態和傳輸狀態。該狀態機能成功完成與PCI9054的配合數據傳輸,傳輸性能穩定,效果較好。是現在PCI9054局部總線狀態機設計的一般方法。通過實際測試,在用戶模式下,采用該狀態機查詢方式DM,A傳輸速率可以穩定達到68M Byte/s.
[align=center]

圖2 一般狀態轉換圖[/align]
PCI總線峰值速率為132M Byte/s,而以上狀態機和傳輸狀態下DMA速率只有68MByte/s說明其中存在不少漏洞。對比該狀態機的時序與PCI9054給出的標準DMA傳輸時序可知,一般狀態機在ADS#信號為低后先進入等待狀態用來配置各種信號線,然后才開始傳輸狀態。所以每次啟動傳輸都要浪費一個時鐘周期的時間,這種浪費在高速數據傳輸過程中特別是DMA傳輸中是非常可觀的。
而PCI9054標準DMA傳輸在ADS#信號為低后立刻開始數據傳輸并不需要等待周期,所以等待周期可以省略,狀態機只需要兩個狀態用來產生時序,即空閑狀態和數據傳輸狀態,這樣狀態機轉換過程可以簡化。但是由于PCI9054不只需要DMA傳輸,還需要一些其他操作,比如讀寫某些控制字和狀態標志位等,所以在CPLD中還要區分地址。所以本設計采用了新的狀態機,改進的狀態機狀態轉換圖如圖3所示。
實際測得在同一臺機器上,新狀態機在用戶模式下,查詢方式DMA傳輸速率可以穩定達到88MByte/s。所以在同種情況下,改進的狀態機速率可以比原狀態機速率高出20MByte/s。由傳輸速率的大幅提高可以看出,這種改進方式是非常成功的。
[align=center]

圖3 改進的狀態轉換圖[/align]
3.2 DMA傳輸模式選擇
PCI9054支持兩種DMA傳輸方式:連續模式和集散模式。連續模式即一般的DMA傳輸方式(塊傳輸),它要求PCI端的物理存儲地址連續,Local端地址連續或不變(如從FIFO中讀取數據,地址始終不變)。集散模式DMA傳輸可以申請一個鏈表式的描述符表用來存儲各個物理地址不連續的和傳輸大小不固定的多塊數據的描述寄存器值,PCI9054可以自動通過控制寄存器指針從PCI端或LOCAL端讀取寄存器的值并配置寄存器,開始一次次的傳輸。通過集散模式DMA傳輸,可以一次傳遞更多的數據。但是集散模式DMA傳輸在傳輸完一塊數據之后要重新配置寄存器的值,所以速度比連續模式稍慢。
本設計對兩種DMA傳輸模式進行了對比,在其他條件相同的情況下,通過邏輯分析儀測得連續模式下DMA傳輸速率為95.3M Byte/s,集散模式下DMA傳輸速率為91.2M Byte/s。 可以看出,連續模式在同種情況下速度要比集散模式高出4M Byte/s。但是連續模式由于只能單次啟動DMA,所以傳輸數據量大小有限,這在大量的數據傳輸是非常不利。而集散模式由于可以在傳輸過程中通過描述符表重新配置寄存器,所以可以一次傳輸較大的數據量,且重新配置寄存器的工作不需要驅動程序干預,PCI9054會自動完成該過程,所以可以在傳輸速度降低不多的情況下得到更大的數據量。集散模式傳輸是PCI9054支持的DMA傳輸的特色模式。實際測得,在賽揚1GHz,256M內存機器上,相同條件下,連續模式最多可以一次傳輸4MByte數據,而集散模式最多可以一次傳輸32MByte。集散模式可以傳輸的數據量遠遠大于連續模式。所以在需要一次傳輸的數據量較大而速度要求相對不太嚴格情況下集散模式是較為理想的選擇。
3.3 終止方式選擇
DMA過程的終止可以通過查詢和中斷兩種方式檢測到。查詢方式DMA傳輸原理為在啟動DMA之后一直讀取寄存器DMACSR0[4]的值,當該位為1時表示DMA傳輸完畢。中斷方式DMA為在啟動DMA時使能DMA完成中斷,系統接收到中斷之后在中斷處理例程中講清空中斷,并讀取DMA傳來的數據。
在相同條件下測得查詢方式下連續DMA傳輸速率為95MByte/s.中斷方式下連續DMA傳輸速率為114.2MByte/s。
由兩種終止方式速度比較可知中斷方式在同樣條件下能比查詢方式速度提高將近20MByte/s 。PCI總線極限速度為132MByte/s,而這種傳輸方式速率已經達到114MByte/s,所以這種方式DMA速度已接近PCI總線的峰值速度。
4 驅動程序設計
4.1驅動程序的引出
從最廣泛的意義講,一個“驅動程序”是操作一個硬件設備的一組函數。在任何操作系統上,設備驅動程序都必須與基本的系統代碼進行和諧的作用。Microsoft為保證系統的安全性、穩定性、可移植性,對應用程序訪問硬件資源進行了限制,不能直接進行物理內存、I/O端口的訪問以及中斷處理等硬件操作。
4.2 使用WinDriver開發設備驅動程序
1)驅動程序開發環境選擇
開發設備驅動程序的軟件平臺有很多種,如DDK、VTOOSD、WinDriver、DriverStudio等.本設計采用WinDriver來開發設備驅動程序.WinDriver對常見的PCI接口芯片(AMCC、PLX系列)提供了很好的支持,有專門的函數供開發人員利用,方便了驅動程序的開發.
2)本設計用戶模態下的驅動程序介紹
WinDriver驅動程序可以分為兩種工作模式,即用戶模式和內核模式。本設計用戶模式下的驅動程序的功能包括:PCI配置寄存器訪問、映射到局部空間的各種寄存器訪問(包括局部控制寄存器、RunTime寄存器、DMA寄存器、和消息隊列寄存器),各種PCI設備選擇,EEPROM訪問,IO操作,LOCAL映射的各個空間的訪問,DMA操作,中斷處理等。
3)本設計中內核驅動程序的設計
數據采集需要傳送大量的數據,需要快速的將采集到的數據傳遞給主機,數據傳送占用時間越短,應用程序能利用的時間也就越多,從而對于數據采集卡和主機之間的相互通信和數據傳輸提出了較高的要求。編寫該設備驅動程序的關鍵性問題在于:快速可靠的DMA傳輸、響應及時的中斷處理等。WinDriver提供了Kernel PlugIn技術,能夠實現理想的中斷響應速度,解決對于高性能的需求。為了提高系統的整體性能,在用戶模式下驅動程序的基礎上采用了Kernel PlugIn技術。將中斷,DMA處理轉移到內核模式下執行。從而大大提高了系統的處理速度。
4)DMA速率探討
系統數據傳輸不僅需要傳遞數據,還要通過中斷來引發數據傳輸和傳輸結束呼叫。
傳輸時間 = 中斷時間 + DMA傳輸時間
通過邏輯分析儀查看硬件波形圖可以計算出內核模式下中斷觸發DMA傳輸速率為105.4MByte/s。所以數據持續傳輸速率可達105MByte/s。可以看到,中斷響應時間也影響數據傳輸的最終速度。
由第四章DMA部分討論可知,用戶模式下測得的DMA傳輸期間最快速度為95MB/s。內核模式下DMA速度最快為114MB/s。而最初的DMA傳輸速度為68MB/s。從最初到現在,DMA傳輸期間傳輸速度提高了46MB/s。
結束語
在現代信號處理技術中,通過PCI總線進行快速數據傳輸是實現主機與外設間通信的主要方式。作者在實驗室利用PCI9054接口芯片設計了一個帶有12通道的高速信號采集器。對影響數據傳輸速率的各個環節逐一考慮,提出了一整套數據傳輸方案。將數據持續傳輸速率提高到100MByte/s以上。接近PCI總線的極限速率。
本文的創新點是:對局部總線狀態機狀態轉換進行了研究。局部總線狀態機采用改進的狀態轉換邏輯,將DMA數據傳輸效率提高了約20MByte/s。
參考文獻:
[1]裴喜龍,童莉.基于PCI總線的高速數據采集卡系統設計與實現[J].微機算計信息,2006,7-1:129-131。
[2]WinDriver v6.23 User’s Guide[DB/OL].http://www.jungo.com.2004。
[3]PCI9054 Data Book[DB/OL].http://www.plxtech.com.2000-01。
[4] 李貴山,陳金鵬主編.PCI局部總線及其應用.西安:西安電子科技大學出版社[M].2003。
[5] 侯伯亨,顧新著.VHDL硬件描述語言與數字邏輯電路設計.西安:西安電子科技大學出版社[M].1997。
[6] 喬林,楊志剛著.Visual C++高級編程技術DirectX篇.北京:中國鐵道出版社[M].1998。
[7] 胡波,原新晶.WinDriver 開發驅動程序的KernelPlugIn技術的研究與應用[J].計算機應用,2003,23(11)。