0 引言
目前,PCI總線已成為新一代個人計算機的標準總線,它是一種高性能的32/64位地址數(shù)據(jù)復用總線,總線時鐘頻率0~33MHz,具有獨立于處理器、高數(shù)據(jù)傳速率、即插即用、低功耗、適應性強等特點。隨著PCI總線的廣泛應用,其接口的設計開發(fā)顯得尤為重要。實現(xiàn)PCI總線接口一般采用CPLD或FPGA設計PCI接口,這種方法難度很大;另一種是采用專用的PCI接口電路,使設計開發(fā)者免除繁瑣的時序分析,縮短開發(fā)周期,降低開發(fā)成本。PCI通用接口芯片對于PCI協(xié)議的良好支持,以及提供給設計者的良好接口都大大減少了設計者的工作量?,F(xiàn)有的PCI接口芯片主要有AMCC公司的MACCS59XX系列和PLX公司的PLX系列。本文將對PLX公司的PCI9052總線目標接口芯片的功能及其在PCI板卡設計中的應用進行介紹。
1 PCI9052的功能與操作
1.1 PCI9052的簡要介紹
PCI9052是PLX公司繼PCI9050之后新推出的,可用于低成本適配器的總線目標接口芯片。PCI9Q52與PCI9050一樣,可提供用于適配卡的小型高性能PCI總線目標(從屬)接口,以使ISA適配器可以迅速、低成本地轉換到PCI總線上。采用PCI9052可使適配卡上的I/O數(shù)據(jù)傳送速度從ISA總線的8MHz提高到PCI的33MHz。
PCI9052能被編程去直接連接復用或非復用的8位、16位或32位局部總線。8位和16位模式也能容易地轉換成ISA轉PCI的設計。
PCI9052包含讀和寫FIFO,用來將32位寬33MHz的PCI總線與有可能總線寬度要窄或慢的局部總線的速度進行匹配。最大5個局部地址空間和4個片選被支持。
1.2 PCI9052的主要功能
支持低成本從屬適配器:PCI9052支持符合PCI2.1版本協(xié)議的低成本從屬適配器,此芯片也允許轉換ISA適配器到PCI。
異步操作:PCI9052的局部總線與PCI總線的時鐘相互獨立運行,兩總線的異步運行便于高、低速設備的兼容。局部總線的運行時鐘頻率范圍為0~40MHz,TTL電平,PCI的運行時鐘頻率范圍為0~33MHz。
支持突發(fā)操作:PCI9052支持從PCI總線到局部總線的猝發(fā)存儲器映射空間的傳送和I/O訪問,PCI9052提供一個64字節(jié)的寫FIFO和一個32字節(jié)的讀FIFO,從而支持預取模式即突發(fā)操作。
中斷產生器:可以由局部總線的二個中斷信號LINTi1和LINTi2產生一個PCI中斷信號INTA#。
串行EEPROM接口:PCI9052包含一個SEEPROM接口,用于存放PCI總線和局部總線的配置信息。
5個局域總線地址空間和4個片選:基址和地址范圍可以由串行EEPROM或主機進行編程。
大/小邊界的字節(jié)交換:PCI9052支持大和小邊界字節(jié)順序。在16位或8位局部總線操作時PCI9052也支持大邊界字節(jié)通路方式重定向到當前字/字節(jié)通路。
總線驅動:所有地址、數(shù)據(jù)和控制信號都由PCI9052直接驅動,不用額外的驅動電路。
局部總線等待狀態(tài):插入LRDY#(局部準備好輸入信號)握手信號能產生幾個等待狀態(tài),PCI9052也有一個內部等待狀態(tài)產生器(R/W地址到數(shù)據(jù),R/W數(shù)據(jù)到數(shù)據(jù),和R/W數(shù)據(jù)到地址)。
PCI鎖定機制:主機可以通過鎖定信號占有對PCI9052的唯一訪問權。
ISA總線模式:PCI9052提供一個ISA邏輯接口,用戶可直接使PCI總線和ISA總線相連,可以非常容易地將ISA設計轉換到PCI。
PCI9052的接口示意圖如圖1所示。
1.3 PCI9052的應用操作
1.3.1 初始化
在上電時,PCI總線的RST#信號將PCI9052的內部寄存器設置為缺省值,同時,PCI9052輸出局部復位信號(LRESET#),并且檢查EEPROM是否存在。如果設備上裝有EEPROM,且EEPROM的第一個16字節(jié)非空,那么,PCI9052根據(jù)EEPROM或PCI主機CPU設置內部寄存器,否則設為缺省值。
1.3.2 復位
PCI9052總線接口在RST信號輸入有效時將引起整個PCI9052的復位,并輸出LRESET局部復位信號。PCI總線上的主機可以通過設置控制寄存器中的軟件復位比特來對PCI9052進行復位,并輸出LRESET信號。
1.3.3 訪問串行EEPROM接口
復位后,PCI9052開始讀串行EEPROM,若讀出的第一個字非FFFFH,則PCI9052繼續(xù)讀操作,否則認為EEPROM無效。對PCI9052來講,EEP-ROM的前四個字節(jié)應為52H、90H、B5H和10H,其中9052H為設備號,10B5H為廠商編號。
1.3.4 訪問內部寄存器
PCI9052提供了二種類型的片內寄存器,即PCI配置寄存器和局部配置寄存器,二者都只能由PCI總線和串行EEPROM訪問,也可以通過設置寄存器CNTRL[3:12]禁止對后者的訪問,這樣就極大地增強了接口設計的靈活性。
1.3.5 直接數(shù)據(jù)傳輸模式
PCI9052支持PCI總線上的主處理器對局部總線上的設備進行讀/寫操作。PCI9052配置寄存器能夠訪問映射到局部的地址空間。同時片內的讀寫FIFO使PCI9052能夠支持PCI總線與局部總線間的高性能猝發(fā)傳送。PCI總線主控訪問局部總線的示意圖如圖2所示。
1.3.6 PCI中斷(INTA#)的產生
要產生P C I中斷IN TA#, 首先將寄存器INTCSR[6](PCI中斷使能位)設置為“1”,如果需要以軟件方式產生中斷,則只需將INTCSR[7](軟件中斷位)設置為“1”。如果系統(tǒng)設計方案中選用由局部總線上的設備產生中斷信號INTi1和INTi2,再生成PCI中斷INTA#的方式,只要將寄存器INTCSR的相關位按表1進行設置,復位后INTCSR的值全部為“0”。
1.3.7 局部總線ISA接口模式
PCI9052的新功能是它直接提供給用戶ISA邏輯接口,從而保證了ISA到PCI的平滑轉換。另外,ISA接口還能支持8/16位存儲器或I/O設備。用戶通過對EEPROM的編程可將PCI9052置為ISA接口模式,在ISA接口模式下,LRESET信號將由低有效變?yōu)楦哂行?,并可將局部總線空間2、3配置為無復用方式。
2 PCI9052設計實例
利用PCI總線目標接口芯片PCI9052設計PCI接口卡非常簡便,圖3是PCI主處理機讀取SRAM的接口示意圖,其主要功能是PCI主處理機通過PCI9052實現(xiàn)對RAM的單次或突發(fā)讀、寫操作。
2.1 電路連接
按照圖3中的連接電路,對于SRAM主要有以下幾個引腳:A(17,0)、I/O(7,0)、OE、CE、WE等。地址線A(17,2)與本地地址線LA[17,2]相連,根據(jù)PCI9052的LBE[0,3]#的定義,這里用8位數(shù)據(jù)總線將LBE0#與A0連接,LBE1#與A1連接,OE與PCI9052的CSO#相連。
PCI9052為設計人員提供了4個片選信號CS(3:0)#,可以為4個設備提供片選信號。這樣可以避免設計人員在設計電路時設計片選解碼電路,其地址和范圍可由其對應的內部寄存內部本地寄存器配置。串行EEPROM用于存儲配置寄存器內的配置信息,可以采用NM93C46或與之兼容的存儲器。
2.2 寄存器設定
電路連接好后,要使電路能正常工作,必須對PCI9052內部寄存器進行配置。根據(jù)電路性能及特點,應將寄存器設定為非復用工作方式,采取存儲器映射,8位數(shù)據(jù)總線。局部總線0的基地址寄存器值為240001H,其地址范圍寄存器值為3FFF8H,其描述寄存器值為39H;片選0基址寄存器的初始值為4C0001;命令寄存器的初始值為02H;狀態(tài)寄存器的初始值為800H,其他寄存器采用默認值。確定好各個寄存器的值后,應依據(jù)一定的次序將寄存器的初始值寫入EEPROM。
2.3 驅動程序的開發(fā)
為了從PCI總線配置寄存器中獲得主機動態(tài)分配的映射基址并對映射端口進行讀寫,必須編寫驅動程序。編寫Windows驅動程序時,可以使用DDK,但難度較大。為了簡化驅動程序開發(fā),可使用Jungo公司推出的WinDriver開發(fā)工具。WinDriver可自動生成VxD驅動程序及相應的高級函數(shù)。使用者不需具備Windows驅動程序開發(fā)知識,所生成的高級函數(shù)可直接在VC或CBuilder等高級編程語言中調用。
3 結束語
由于PCI總線數(shù)據(jù)吞吐量大,傳輸速率高,從而大大改善了數(shù)據(jù)傳輸?shù)?ldquo;瓶頸”問題。所以,在未來的微機接口設計中,PCI總線的設計將成為主流。當然PCI總線協(xié)議比較復雜,設計PCI控制接口難度較大。實用證明,用專用PCI接口電路對設計PCI接口卡帶來很大的方便。本文主要介紹PLX公司的PCI9052專用接口電路,設計者可根據(jù)需要選用其他接口電路,不需要ISA接口時,可選用PCI9050;需要DMA數(shù)據(jù)傳送時,可選用PCI9054。專用PCI接口芯片的使用將避免用戶直接面對復雜的PCI總線協(xié)議,因此可以降低設計難度,從而使用戶能夠集中精力解決具體的應用問題以縮短開發(fā)周期,降低開發(fā)成本,而且有利于驅動程序的開發(fā)。