基于Wishbone片上總線的PCI Bridge核的研究和應
摘要:討論了PCI主橋的應用和Wishbone片上總線技術,詳細介紹了基于Wishbone總線的PCI Bridge核的功能、內部結構和操作方式。實驗證明,在PCI系統中使用PCI Bridge核進行開發設計,電路簡潔,使用方便靈活。
自PCI協議問世以來,PCI總線應用越來越廣泛,現已成為事實上的計算機總線標準。隨著PCI應用和開發的深入,往往需要在復雜的PCI系統中使用PCI橋來完成設計工作,包括使用主/PCI橋來完成整個系統的初始化配置過程。PCI橋的使用已從傳統的PC機領域拓展到更多的電子應用系統中。
1 PCI主橋簡介
在復雜的PCI系統中,往往擁有不只一條PCI總線。為了提高PCI系統的負載能力,可用PCI-PCI橋把各條PCI總線連接起來,同時在處理器總線與PCI總線之間使用主/PCI橋來完成總線轉換,以形成完整的PCI系統。常用的PCI系統結構如圖1所示。
系統上電時,主CPU(處理器)對PCI目標設備的初始化也稱為配置訪問。由于PCI目標設備所定義的配置空間通常不在CPU的存儲器和I/O空間中,所以需要一種特殊的機制來執行配置訪問。這種機制通常由主/PCI橋來完成。配置軟件在上電后能夠掃描PCI總線,以確定現有哪些PCI設備,并根據它們的配置要求分別進行配置。配置完成后,各個PCI目標設備就可以在PCI總線控制器的協調仲裁下正常工作。
在PC兼容系統中,主/PCI橋也稱為北橋,用于連接主處理器總線和基礎PCI局部總線(第一級PCI總線)。北橋芯片內通常集成有主存儲器控制器,因此處理速度很快。南橋芯片內一般集成有IDE控制器、USB和其它速度較慢的I/O控制器,因此處理速度相對較慢。南北橋構成芯片組。
2 Wishbone片上總線技術
片上系統SOC(System-On-Chip)技術近兩年發展迅速,越來越多的廠商開始開發自己的IP核,然后提供給系統集成者。而各廠商采用自己定義的IP核接口規范來開發產品,使得系統集成成為一個棘手的問題。為了提供IP核的可重用性,實現眾多廠商IP核的有效互連,片上總線OCB(On-Chip-Bus)技術就應運而生了。目前在SOC領域較有影響的三種片上總線標準為:IBM公司的Core-connect、ARM公司的AMBA和SilicoreCorp公司的Wishbone總線。其中Wishbone總線已經被全球最大的開放IP組織(Opencores)列為主要支持的SOC內部互連總線協議。遵循Wishbone總線協議的IP核可以很快有效地集成到SOC中。目前,Opencores上很多開放的IP核接口都采用Wishbone總線設計。而且越來越多的IP核商用廠商也宣布支持Wish-bone總線協議。
Wishbone總線最大的特點是結構簡單靈活,需要邏輯門少;同時完全免費、完全公開。Wishbone規范支持完整的普通數據傳輸協議,包括單個讀寫周期、塊傳輸等。數據總線寬度為8~64位(寬度仍然可以擴展),地址總線可以達到64位;最快時一個時鐘周期就可進行一次數據傳輸;支持握手協議,速率可以調整;支持出錯重試等。在Wishbone總線規范中,可使用Master/Slave結構實現非常靈活的系統設計。Master和Slave有四種互連方式,分別為:點對點、數據流、共享總線和交叉互連。其中點對點方式是連接一個Master和一個Slave最簡單的方式,使用起來非常方便。圖2給出了采用點對點互連方式的Wishbone主/從接口圖。其中SYSCON為產生RST復位和CLK時鐘信號的模塊,TAGN為用戶自定義信號。
Wishbone 在Master和Slave之間使用的握手協議如圖3所示。當準備好傳輸數據時?Master使STB O信號有效,STB O狀態將一直保持到Slave的結束信號ACK O、ERR O 或 RTY O?對Master而言是ACK I?ERR I和RTY I? 之一聲明有效。Master在每一個CLK I的上升沿對結束信號采樣?如果該信號有效?STB O信號變低。此外,Wishbone接口的兩邊都能夠完全控制數據傳送的速率。
3 PCI Bridge核
開放IP組織Opencores提供的PCI Bridge Core提供了Wishbone片上系統總線和PCI邏輯總線的接口。PCI Bridge Core由兩個相對獨立的單元組成:一個單元處理由PCI總線方啟動的數據交易,另一個單元則處理由Wishbone總線方啟動的交易。它是一個PCI總線和Wishbone總線之間真正的橋。
PCI 橋核支持32位PCI總線接口,并完全兼容PCI2.2協議(支持66MHz規范);它含有獨立的主橋、從橋功能模塊和完整的命令/狀態寄存器;支持Wishbone SOC互連協議B版本(包括B1和B3);此外,它可通過Wishbone接口支持32位總線操作;并可配置片上FIFO。
3.1 PCI Bridge內部結構
PCI橋核由兩個相對獨立的單元模塊組成:PCI目標單元和Wishbone從單元。每個單元自身都有一套完整的功能來支持Wishbone和PCI總線之間的交易。Wishbone從單元可作為PCI橋中Wish-bone側的從設備和PCI側的主設備啟動交易;PCI目標單元則可作為PCI橋中PCI側的目標設備和Wishbone側的主設備啟動交易。兩個單元互相獨立。PCI目標單元用于實現PCI總線從設備接口和Wishbone總線的主設備接口;而Wishbone從單元則用于實現Wishbone總線從接口和PCI總線的主設備接口。
圖4是PCI橋核的內部結構。
3.2 PCI Bridge的操作
PCI橋核有兩種應用方式:主、從橋(相對PCI總線而言)。作為從橋時,當PCI橋連到擁有PCI總線的主機系統上電后,主機系統軟件將掃描PCI總線上連接的PCI總線設備(包括PCI橋),然后配置PCI橋空間寄存器,即由配置軟件來完成PCI橋的初始化配置過程。之后,PCI橋進入正常工作狀態。
PCI橋核作為主橋時,PCI橋完全控制PCI總線。PCI橋的Wishbone代理設備完全負責連接到PCI總線上的PCI設備的初始化配置過程。運行在Wishbone代理設備上的固件(設備無關軟件)在上電后掃描PCI總線,以確定有哪些PCI設備,并分別有什么配置要求。然后在Wishbone映象0空間內配置各個PCI設備的配置空間。配置完成即可加載各個PCI設備的驅動程序。此時PCI設備也可以通過PCI橋的PCI目標單元訪問Wishbone總線。
PCI橋的配置空間包括兩個部分:一個部分為Wishbone從單元的配置、狀態和控制寄存器;另一個部分為PCI目標單元的配置、狀態和控制寄存器(包括PCI協議要求實現的256字節標準配置空間)。PCI橋通過相應的地址映像空間(PCI映像0和Wishbone映像0)來實現PCI橋兩側代理設備訪問PCI橋的配置空間。作為從橋時,主機系統的主橋可以使用普通的存儲器讀寫指令來訪問PCI橋的配置空間,也可以通過配置讀寫指令來訪問PCI橋配置空間的低256字節。作為主橋時,PCI橋本身就可以產生配置周期。如同PC機X86系統的主橋配置機制0一樣,PCI橋的Wishbone代理主設備可以通過訪問PCI橋配置空間的CNF_ADDR和CNF_DATA寄存器來產生配置讀寫命令,從而實現對其它PCI設備的上電初始化過程。
由于PCI橋核是一個軟核,在PCI橋核中有一個參數頭文件。可以通過更改PCI橋核頭文件的參數來改變PCI橋的操作方式(如主橋或從橋設置、PCI或Wishbone映像空間的定義等),因而使用非常方便。
4 使用PCI Bridge核來訪問PCI設備
PCI橋作為從橋一般用在PCI擴展卡上(或稱PCI周邊卡),如數據采集,圖像傳輸等。而作為主橋一般用在PCI總線的主控板上(或稱PCI系統卡),但需要初始化PCI總線上的功能設備,并控制PCI總線的操作。
為了調試主/從橋的應用,筆者設計了三塊電路板來協調控制PCI總線的操作。一塊為FPGA板(Xilinx公司的Spartan II芯片,設計有PCI接口),一塊為微控制器板(51單片機),一塊為普通PCI擴展卡。
作為從橋時,只需要FPGA板就可以完成整個實驗過程。即用Verilog語言實現一個Wishbone從接口,并連接到FPGA內部的BlockRAM上(可由ISE的CORE generator產生),然后選擇PCI Bridge核的應用方式為GUEST(從橋方式),并連同自己的程序一起編譯下載到FPGA的配置芯片上。這樣,把FP-GA板插入PC機的PCI插槽,就可在PC機上開發驅動程序來訪問FPGA板上的資源(如RAM等)。如果要進行數據采集,可以把Wishbone從接口連接到數據采集模塊上。從橋實現的功能模塊圖如圖5所示。
作為主橋時(選擇PCI Bridge核的應用方式為HOST),由于FPGA板上沒有微控制器,所以需要把FPGA板上的I/O口與51單片機電路板上的I/O擴展口連接起來一起形成PCI主控板。FPGA板和普通PCI擴展板都插到獨立的PCI底板的PCI插槽上,然后在FPGA板上和單片機板上進行編程以實現對普通PCI擴展板的初始化配置和正常讀寫操作。其電路功能模塊框圖如圖6所示。
由于單片機的接口是8位,讀寫時序也和PCI橋中的Wishbone時序不同,所以需要在PCI橋和單片機擴展I/O口之間用軟件實現一個Wishbone主接口。該Wishbone主接口的工作過程為:單片機發出讀操作時,先傳送4次8位地址數據到FPGA中,再將由Wishbone主接口組成的32位地址存儲在一個32位地址寄存器中,隨后單片機發出讀命令,以啟動Wishbone主接口進行Wishbone總線的讀時序,當Wishbone主接口把從PCI總線上讀來的32位數據存放在一個32位讀數據寄存器中后,單片機將分4次讀出32位數據;單片機進行寫操作如同讀一樣,依次傳送32位地址和32位數據,最后發送寫命令啟動Wishbone主接口以進行Wishbone總線的寫時序。Wishbone的讀寫時序可由Verilog語言描述的同步狀態機實現。
在51單片機上用C語言編程實現主控板固件的完整軟件過程為:上電后,固件先按順序依次掃描PCI總線上存在的PCI設備,掃描的目的之一是為總線和設備編號。當掃描結束后,設備類型、拓撲位置等信息以設備為單位被存放在一個數據結構中,并按實際掃描的順序組成一個鏈表。同時,設備的配置要求也依次存放在這個數據鏈表中。固件得到系統的設備拓撲圖后,分別按照設備的配置要求一一進行配置,也就是分配地址資源給設備的基地址寄存器。配置完成后,各個PCI設備即可進入正常工作狀態。
評論