張會新,陳嫣然,鄭燕露
(中北大學電子測試技術國家重點實驗室,山西 太原 030051)
現代數據存儲測試系統應用中對于遠程的數據通信的要求越來越高,針對以往計算機與底層硬件之間通信采用USB、以太網、RS-232等通信方式,都有速度、距離和易掉線等缺陷。本文采用了PCI(Peripheral Component Interconnect)總線作為信息通信接口,使下層的測試系統能夠和計算機之間有一個相當大的數據傳輸帶寬。
PCI又稱外圍部件互連總線,是一種具有多路地址線和數據線的高性能的32/64位總線。目前32位數據總線時,最大傳輸速率可達到132 Mbit/s,當擴展到64位數據總線時,數據傳輸率可以達到264 Mbit/s。
基于PCI9054的通信卡以FPGA作為中心控制電路,考慮到占用較多的內部邏輯資源,選用Xilinx公司的FPGA芯片XC3S400,能夠滿足該系統的設計要求,用于對數據包的編碼解碼處理。PCI9054作為PCI接口芯片,實現PCI總線與FPGA的無縫連接。PLX Tech公司提供的PCI9054器件是一種支持32 bit/33 MHz PCI總線橋芯片,符合PCI 2.2規范,支持PCI總線的主/從方式傳輸,在突發狀態下可實現PCI的全速數據傳輸,能廣泛地應用到各種適配卡和嵌入式系統中。
該系統主要由FPGA、PCI接口芯片PCI9054,光纖通信模塊,LVDS接口電路組成。系統硬件總體結構框如圖1所示。

圖1 硬件總體框圖
PCI通信卡的工作流程為:上位機發送32位數據通過PCI接口給PCI9054,FPGA控制PCI9054本地總線來獲得這32位數據并打包成40位的命令字,并以異步串行的方式通過光纖模塊發給測試系統。當測試系統回傳數據時,FPGA也以同樣的方式接收40位的數據包并解碼獲得32位數據存到內部FIFO緩存,再通過控制PCI9054本地總線來讀取內部FIFO將數據上傳至上位機。
E2PROM配置是硬件設計的關鍵,因為PCI9054的需要根據E2PROM配置信息初始化內部寄存器,配置信息如有不對,會造成無法進入系統。根據PLX公司給出的E2PROM芯片推薦表,選用Microchip公司的HT93LC56。經過實踐,本文設計了一種方法可先以空白的E2PROM進入系統并使用PLX公司SDK中的PLXMon工具燒寫其配置信息,實現正常使用PCI通信卡。E2RPOM硬件設計如圖2所示。

圖2 93LC56電路圖
使用空白的93LC56首次進入系統時DI/DO引腳用3.9 kΩ電阻下拉,并且PCI9054芯片的Test引腳要用10 kΩ電阻上拉使PCI9054芯片處于高阻態即可以順利進入系統。進入系統后將Test下拉使PCI9054進入正常工作模式,掃描PCI設備,安裝PLX公司官方驅動即可使用PLXMon燒寫固件信息,提示燒寫成功后將DI/DO引腳上拉。重啟計算機,則PCI通信卡可以正常使用。硬件設計時建議把這兩個引腳設計成上下拉的方式。
PCI9054有5種寄存器,在該設計中主要是對PCI配置寄存器和Run Time寄存器進行配置,PCI配置寄存器里主要是本地總線對內存的映射,Space0映射到Memory,Space1映射到I/O空間,總線寬度為32位,突發模式使能。Run Time寄存器主要是開啟PCI中斷和本地中斷。主要的E2PROM配置信息如圖3所示。

圖3 E2PROM配置信息(截圖)
PCI9054的本地總線有3種工作模式:M,C,J模式,該設計中采用局部總線32位,數據與地址不復用,所以選擇C模式。C模式下有3種數據傳輸方式:直接主模式、直接從模式、DMA方式。該設計采用直接從模式。
PCI9054的Memory支持單周期和突發模式的讀寫操作,I/O只支持單周期讀寫。該通信卡是建立在上位機與底層硬件之間的橋梁,上位機通過PCI下發命令,并且還要獲得數據的回傳。所以對于命令下發采用I/O讀寫方式,回傳數據則采用Memory的突發模式,時序狀態機如圖4所示。上電復位后,當本地總線請求信號lhold來后,回應本地總線響應信號lholda。此時State0判斷ads信號,ads為0則跳轉到State1,表示有地址下發,否則在State0等待。State1狀態時判斷blast信號,當blast為0則跳轉到State2狀態,表示為單周期讀寫。在State2狀態判斷lwr信號,lwr信號為1表示是寫,下發上位機的命令,lwr信號為0表示是讀,回讀數據給上位機。需要注意的是在此狀態下需要將ready信號置0,表示數據有效。狀態直接跳轉到State3,繼續判斷ads是否又地址下發。當blast為1時則跳轉到State4狀態,表示為突發讀寫。State4狀態時也是根據lwr信號來進行讀或寫,并將ready置0,跳轉到State5狀態。State5狀態時再次判斷blast,如果為1表示突發模式還未結束,還要進行讀寫數據,則狀態機回到State4狀態繼續進行讀寫操作,如果為0表示已經是突發讀寫的最后一個周期,跳轉到State6狀態里再次判斷ads。PCI9054時序操作需要注意的是ready信號置低返回給PCI9054的時間以及對ads判斷的時間,如果ready信號置0不及時的話容易造成死機或者錯數。而ads判斷不及時可能會造成32位數高8位或低8位出現誤碼,這都是因為數據未建立穩定就開始讀寫所導致的。

圖4 PCI9054狀態機圖
該設計驅動程序主要是完成本地總線對PCI總線的內存映射和I/O地址數據存取,能正確識別設備及處理來自通信卡的硬件中斷信號。上位機控制相應的函數來實現讀寫操作,中斷的判斷和清除。主要步驟是:
1)檢測是否存在設備,打開設備。
2)判斷是寫還是讀,選擇I/O或Memory,下發偏移地址,進行讀寫操作。
3)開始回讀數據時,判斷中斷信號,如有中斷信號則開始下發偏移地址并清中斷。如果沒有則延時等待后提示沒有數據。
中斷處理部分驅動程序如下:

PCI9054強大的功能使得對PCI總線接口的設計變得簡單,只需通過本地總線的控制電路就可實現與PCI總線的數據傳輸。該系統實現了利用PCI總線對數據的傳輸和實時處理,可廣泛應用于數據采集系統。
[1]饒運濤,鄒繼軍,鄭勇蕓.現場總線CAN原理和應用系統設計[M].北京:北京航空航天大學出版社,2003.
[2]張文棟.存儲測試系統的設計理論及其應用[M].北京:高等教育出版社,2002.
[3]張培仁,孫力.基于C8051F系列微控制器原理與應用[M].北京:清華大學出版社,2007.
[4]王強,文豐,任勇峰.基于FPGA的高速實時數據采集存儲系統[J].儀表技術與傳感器,2009(1):50-52.
[5]周治良,劉俊,張斌珍.基于FPGA及FLASH的數據采集存儲系統設計[J]. 數采與監測,2003(1):91-92.