基于PCI9054的接口卡設計
PCI總線(xiàn)支持突發(fā)傳送,多處理器和并發(fā)工作,廣泛應用于各種平臺設計?;?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/PCI9054">PCI9054的接口板也廣泛地應用于各種高速、大數據量的處理系統。由于PCI9054橋接有PCI總線(xiàn)和本地總線(xiàn),開(kāi)發(fā)者不必過(guò)多考慮復雜的PCI總線(xiàn)規范,從而能有更多精力開(kāi)發(fā)硬件和驅動(dòng)程序設計。
這里以PCI9054為例,給出了接口板的硬件和軟件設計,詳細論述了該系統設計的原理圖和用VHDL語(yǔ)言編寫(xiě)的部分邏輯源程序,以供相關(guān)開(kāi)發(fā)人員參考。
1 PCI9054簡(jiǎn)介
PCI9054是PLX公司推出的一種32位33 MHz的PCI總線(xiàn)主控I/O加速器,它采用PLX在業(yè)界領(lǐng)先的數據流水線(xiàn)框架,包含DMA引擎,可編程的PCI起始器和目標數據傳輸模式以及PCI信息傳輸功能。遵循PCI2.2版規范,可獲得最高可達132 MB/s的突發(fā)傳輸速度。它使復雜的PCI接口應用設計變得相對簡(jiǎn)單,目前已成為主流的PCI接口器件之一。
PCI9054數據傳輸有3種方式:主模式、從模式和DMA方式。其內部具有2個(gè)DMA數據通道,每個(gè)通道均支持塊Scatter/Gather的DMA方式,雙向數據通路上各有6個(gè)FIF0進(jìn)行數據緩沖,可同時(shí)進(jìn)行高速的數據接收和發(fā)送,8個(gè)32位Mailbox寄存器可為雙向數據通路提供消息傳送,PCI9054內部框圖,如圖1所示。
PCI9054的本地總線(xiàn)有M、C、J 3種工作模式,可通過(guò)模式選擇引腳MODE[1:0]進(jìn)行控制,其中C模式能夠滿(mǎn)足絕大多數的應用需求,而且C模式的本地總線(xiàn)操作時(shí)序最為簡(jiǎn)單,邏輯控制相對容易,其開(kāi)發(fā)難度相對較低。C模式下PCI9054通過(guò)片內邏輯控制將PCI的地址線(xiàn)和數據線(xiàn)分開(kāi),很方便地為本地工作時(shí)序提供各種工作方式,一般較廣泛應用于系統設計中。因此,如無(wú)特殊需求,建議采用C模式,這也是本接口卡所采用的模式,同時(shí)PCI9054的本地總線(xiàn)時(shí)鐘可由外部提供,該時(shí)鐘可和PCI時(shí)鐘異步。
2 接口卡硬件設計
接口卡主要功能是:對外設裝置進(jìn)行工作模式和狀態(tài)檢測,控制端對檢測結果進(jìn)行相應的數據接收或發(fā)送操作。其工作流程是:由控制端提出請求,根據進(jìn)入接口卡的信號對外部設備進(jìn)行工作模式和狀態(tài)檢測并決定是否對進(jìn)入外設的信號進(jìn)行接收或發(fā)送。機械特性方面,接口卡遵從Eurocard工業(yè)標準,采用6U(233.35 mmxl60 mm)結構。接口卡的邏輯框圖如圖2所示。
由圖2可知,接口卡分為3個(gè)部分:PCI總線(xiàn)接口、本地總線(xiàn)接口和串行EEPROM接口。
2.1 PCI9054與PCI總線(xiàn)接口
PCI9054與PCI總線(xiàn)接口的連接實(shí)際上是PCI9054與cPCI連接器Jl的連接,即PCI9054的PCI端信號線(xiàn)通過(guò)10Ω的端接電阻與PCI插槽的相應信號線(xiàn)對應連接。PCI總線(xiàn)接口信號包括地址數據復用信號線(xiàn)、接口控制信號線(xiàn)、中斷信號線(xiàn)等。PCB設計時(shí),為了滿(mǎn)足反射條件,需注意PCI總線(xiàn)信號的布線(xiàn)及長(cháng)度,普通信號長(cháng)度,從連接器到PCI橋器件間距應不大于1.5英寸(3.81 cm),PCI_CLK信號布線(xiàn)長(cháng)度為2.5±0.1英寸,否則會(huì )導致信號不穩定甚至總線(xiàn)沖突,無(wú)法開(kāi)機。PCI9054內部有可編程的FIF0,實(shí)現零等待突發(fā)傳輸及本地總線(xiàn)與PCI總線(xiàn)之間的異步操作,本地總線(xiàn)時(shí)鐘由外部提供,該時(shí)鐘可以和PCI時(shí)鐘(33 MHz)異步,本地總線(xiàn)選擇工作在50 MHz,由頻率為50 MHz的晶振OSCl產(chǎn)生,同時(shí)送往PCI9054本地端的時(shí)鐘信號LCLK與送往CPLD的時(shí)鐘信號CCLK要等長(cháng),以保持它們同步。
2.2 PCI9054與本地總線(xiàn)接口
本接口卡中的CPLD采用Xilinx公司生產(chǎn)的XC95288XL,實(shí)現對接口卡的邏輯控制。C模式下PCI9054通過(guò)片內邏輯控制將PCI的地址線(xiàn)和數據線(xiàn)分開(kāi),然后與CPLD相對應的引腳連接,能方便為本地工作時(shí)序提供各種工作方式,一般廣泛應用于系統設計。
本地總線(xiàn)部分中的INPUT_BUFFER部分主要由差分電壓比較器組成,如圖3所示。當從J4進(jìn)入的信號電壓(引腳7)大于基準電壓(引腳6)時(shí),輸出高電平(引腳1)并進(jìn)入CPLD,控制器通過(guò)PCI9054讀入。0UT_BUFFER部分主要是實(shí)現控制器對外設接收或發(fā)送數據的控制。
2.3 PCI9054與EEPROM接口
PCI9054提供4個(gè)引腳EEDI,EED0,EESK,EECS與串行EEPROM-93LC5*個(gè)引腳DI、D0、SK、CS相連,此外93LC56的VCC引腳需要接+3.3 V電源,GND接地。因為需要對串行EEPROM進(jìn)行寫(xiě)操作,串行EEPROM需處于可編程而且非保護狀態(tài),所以PE通過(guò)10 kΩ的電阻上拉后接高電平3.3 V電壓,而PRE通過(guò)10 kΩ的電阻下拉后接地。EEPROM原理圖如圖4所示。
連接好PCI9054與PCI總線(xiàn)接口、本地總線(xiàn)接口和串行EEPROM接口后,還需對寄存器進(jìn)行配置,配置時(shí)需借助于Windriver工具,寄存器的配置包括PCI配置寄存器的配置、本地配置寄存器的配置及對EEPROM初始化。
配置PCI配置寄存器主要是填寫(xiě)生產(chǎn)商ID號、器件ID號、子系統生產(chǎn)商ID號和類(lèi)碼子系統ID號。對于PCI9054,其生廠(chǎng)商ID號,器件ID號,子系統號,子系統ID號等是固定的,可以在PCI9054數據手冊中查到。
本地配置寄存器的配置是對本地地址空間及本地總線(xiàn)屬性的配置,這種配置根據實(shí)際開(kāi)發(fā)需要進(jìn)行,配置完成后,在主機CPU要訪(fǎng)問(wèn)本地地址空間時(shí),可能給出對應的PCI總線(xiàn)地址。
PCI9054在加電啟動(dòng)時(shí),從外部EEPROM讀取初始化數據來(lái)配置PCI9054的內部寄存器,在板卡加電自檢期間,PCI總線(xiàn)的RST#信號復位,PCI9054內部寄存器的默認值作為回應。PCI9054出本地LRESET#信號并檢測串行EEPROM。
如果串行EEPROM中的前33位不全為1,那么PCI9054確定串行EEPROM非空,用戶(hù)可通過(guò)向PCI9054的寄存器CNTRL的29位寫(xiě)1,來(lái)加載EEPROM的內容到PCI9054的內部寄存器,配置的信息可以在P1xSdk的PLXMON下對EEPROM進(jìn)行配置。
3 接口卡軟件設計
3.1 CPLD邏輯設計
PC39054通過(guò)本地總線(xiàn)與本地總線(xiàn)設備進(jìn)行通信,PCI9054提供2種訪(fǎng)問(wèn)方式,即單周期訪(fǎng)問(wèn)和突發(fā)方式訪(fǎng)問(wèn)。
其中單周期訪(fǎng)問(wèn)本地總線(xiàn)采用狀態(tài)機實(shí)現本地總線(xiàn)接口的控制,其狀態(tài)圖如圖5所示。狀態(tài)SO為空閑狀態(tài),當ADS#為0時(shí),如經(jīng)本地總線(xiàn)譯碼邏輯譯碼后表明需要訪(fǎng)問(wèn)本地空間時(shí)則轉到狀態(tài)S1,否則留在狀態(tài)SO;狀態(tài)S1為單周期訪(fǎng)問(wèn)開(kāi)始狀態(tài),當BLAST#為1時(shí),停留在狀態(tài)S1,否則轉到狀態(tài)S2:狀態(tài)S2為訪(fǎng)問(wèn)等待狀態(tài),在此狀態(tài)下數據在本地總線(xiàn)保持,然后直接轉到狀態(tài)S3;狀態(tài)S3數據傳送狀態(tài),在此狀態(tài)下數據從本地總線(xiàn)上取走(如果需要可以加一個(gè)狀態(tài)來(lái)延長(cháng)數據讀取時(shí)間);當ADS#為0時(shí),經(jīng)本地總線(xiàn)譯碼邏輯譯碼后,表明還需要訪(fǎng)問(wèn)本地空間,轉到狀態(tài)S1,否則轉為SO,本周期訪(fǎng)問(wèn)結束完成數據傳送。
將以上狀態(tài)機用VHDL語(yǔ)言在可編程器件中實(shí)現,部分源程序代碼如下:
圖6是借助于Xilinx ISE 9.1i仿真工具對在C模式下的8位本地總線(xiàn)寬度的本地邏輯控制的傳輸時(shí)序仿真結果舉例。由圖6可知:在寫(xiě)周期,是把PCI總線(xiàn)端的地址local_adrr[9:2]為8'h00的數據寫(xiě)到輸出端outport0;在讀周期,是把地址為8'h00的數據從inportO[2;0]讀入到local_data[0]。
3.2 驅動(dòng)程序設計
Windriver是Jungo公司生產(chǎn)的一個(gè)設備驅動(dòng)程序開(kāi)發(fā)組件,開(kāi)發(fā)者不需熟悉操作系統內核即可利用Windriver開(kāi)發(fā)設備驅動(dòng)程序。整個(gè)驅動(dòng)程序中的所有函數都是在用戶(hù)態(tài)下運行的,通過(guò)與Windriver的.Vxd或者.Sys文件交互來(lái)達到驅動(dòng)硬件的目的,大大提高了PCI設備驅動(dòng)程序開(kāi)發(fā)。
用Windriver開(kāi)發(fā)驅動(dòng)程序的過(guò)程大致如下:首先,打開(kāi)Windriver設備,查找所要訪(fǎng)問(wèn)的PCI設備;然后是枚舉該設備的資源(包括內存、I/O、中斷)并鎖定該設備的資源,不能被其他程序訪(fǎng)問(wèn);在訪(fǎng)問(wèn)板上的資源之后是解鎖資源;最后是關(guān)閉Windriver設備。這個(gè)過(guò)程是用C語(yǔ)言在VC++6.0開(kāi)發(fā)環(huán)境下借助于Windriver本身自帶函數(安裝Windriver之后,在其“Help”中可找出相關(guān)函數說(shuō)明)實(shí)現對PCI9054的
初始化。設備打開(kāi),訪(fǎng)問(wèn)硬件資源,調用函數庫,設備關(guān)閉等操作后。再對源代碼進(jìn)行編譯,鏈接和運行成功后,找出產(chǎn)生的5個(gè)文件:wdr-eg.exe,plx9054.inf,windrvr6.sys,plx9054.lib和plx9054.dll,這5個(gè)文件組成了所需的驅動(dòng)文件。在板卡成功插入插槽后點(diǎn)擊wdreg.exe成功安裝驅動(dòng)程序。
4 結束語(yǔ)
本文以性?xún)r(jià)比較高的PCI9054作為PCI橋路器,給出了橋路器的部分功能介紹、電路設計時(shí)需注意的問(wèn)題及本地總線(xiàn)數據傳輸的接口邏輯設計。本設計降低了PCI總線(xiàn)的復雜性,輕松實(shí)現了PCI總線(xiàn)端的控制器對本地總線(xiàn)和本地總線(xiàn)外部設備的工作模式和狀態(tài)的有效檢測,具有極大的應用價(jià)值。
評論