在Xilinx EDK的Microblaze軟核中有用到多種總線接口,其中OPB(On-chip Peripheral Bus)是一種將各種外部設備連接到Microblaze處理系統(tǒng)中的一種總線接口,比如Timer/Counter、Gpio、Uart等,就是通過OPB總線連接到Microblaze處理器內核。
本文引用地址:
http://m.butianyuan.cn/article/201612/329942.htm OPB總線能夠在不影響OPB仲裁器(Arbiter)和總線上已連接的外圍設備基礎上添加新的外圍設備,同步于系統(tǒng)時鐘,共享32位地址總線,以及32位數(shù)據(jù)總線,支持主從設備之間單一周期數(shù)據(jù)傳送。
(這里要說明下PLB總線,它是PowerPC硬核的高速總線,64位數(shù)據(jù)總線寬度,地址和讀寫數(shù)據(jù)總線分離,具備分別傳輸?shù)哪芰Α,F(xiàn)在最新的ISE11已經(jīng)將Microblaze的OPB總線也搞成PLB總線,目前還不確定是不是僅僅改了名稱而已。問題:地址和讀寫數(shù)據(jù)總線分離怎么理解?是讀和寫操作可以同時進行?)
OPB總線包含4個組成部分:(1)主設備 Master Device 最大16個(可能是受限于仲裁器)
(2)從設備 Slave Device 無限制,受限于FPGA的硬件資源
(3)仲裁器 Arbiter根據(jù)設定的優(yōu)先級,判決主設備的總線占用順序
(4)互聯(lián)器 Interconnect 用OR邏輯將各個主設備的地址,數(shù)據(jù)連接起來
總線的結構:
總線,是指提供的一個數(shù)據(jù)通道,使得多個設備之間可以進行數(shù)據(jù)傳遞。能夠主動向總線發(fā)出請求的是主設備(Master),只能被動接收請求的是從設備(Slave)。所以總線的系統(tǒng)結構一般分為三個部分:(1)Master
(2)Slave,
(3)總線邏輯,總線邏輯由互連器(Interconnect)和仲裁器(Arbiter)兩部分組成。
總線操作的一般流程是:Master向總線發(fā)出讀寫請求,總線邏輯接受請求并負責把這些請求傳送給從設備;從設備收到后執(zhí)行讀寫操作,完成后給出確認信號,總線邏輯再負責把確認信號傳送給主設備,主設備收到確認后,數(shù)據(jù)傳輸過程完成。
有的總線結構只允許有一個Master,而有的可以有幾個Master。OPB總線屬于后者。當可以有好幾個Master時,如果多個Master都向總線發(fā)出請求,這時就需要進行仲裁,以確定哪個Master可以占有總線。因此,如果總線上掛有多個Master,就需要仲裁器(Arbiter);反之,如果只有一個Master(包括可以有幾個Master但實際上只使用一個Master的情況),就一定不需要仲裁器。
總線上往往有多個Slave,因為如果只有一個Master和一個Slave的話,似乎也就沒有必要采用總線,直接傳輸數(shù)據(jù)就可以了。那么既然有多個Slave,Master向總線發(fā)出請求時,如何區(qū)分是對哪個Slave進行操作呢?這是通過地址來分辨的。Master向總線發(fā)出請求時,總是會將要操作的地址送出來,這個地址可能是通過單獨的地址線,也可能是復用數(shù)據(jù)線。(片上總線往往采用單獨的地址線,與外部連接的總線則往往復用以節(jié)省引腳數(shù)。)每個Slave都被分配有互不重疊的地址空間,根據(jù)這個地址和自己的地址空間比較,就可以知道Master是不是對自己進行操作,從而可以判斷是否應該做出響應。
OPB總線信號命名規(guī)則:
OPB總線中的信號命有三種:
(1)Mn_打頭的,是Master的輸出;
(2)Sln_打頭的,是Slave的輸出;
(3)OPB_打頭的,是總線邏輯的輸出。
OPB總線的連經(jīng)邏輯采用OR邏輯,因此,當一個Master或者Slave不對總線輸出時,應該將其輸出置為0,就可以不影響總線的正常工作。
總線邏輯一般都是接受Master的輸出后,進行一定的或運算,變成OPB_打頭的輸出,送給Slave;或者接受Slave的輸出后,進行一定的或運算,變成OPB_打頭的輸出,送給Master。所以,對于Master而言,它需要處理的信號有兩種,Mn_打頭的是它的輸出,OPB_打頭的是它的輸入。對于Slave而言,它需要處理的信號也是兩種,Sln_打頭的是它的輸出,OPB_打頭的是它的輸入。
OPB總線的復位:
OPB總線可以被多種復位信號復位,不過上電復位優(yōu)先級最高。當FPGA裝載成功后,系統(tǒng)會自動花費16個時鐘周期來復位OPB總線,在這期間,OPB不響應任何其他復位信號的復位動作。其他復位信號有:
(1)SYS_Rst 系統(tǒng)復位 (2)WDT_Rst 看門狗定時器溢出復位 (3)Debug_SYS_Rst 通過JTAG接口,在調試軟件上控制復位OPB總線(如何操作還需要另外研究研究)
OPB總線事物處理流程:
(1)Master首先發(fā)出Mn_Request信號,要求占用總線;
(2)仲裁器根據(jù)該周期的總線情況和其他Master的請求及優(yōu)先權,可能回復OPB_Grant信號告知Master可能使用總線。
(3)Master收到Grant后,發(fā)出Mn_Select占用總線,同時發(fā)出地址Mn_ABus和讀寫信號Mn_RNW,如果是寫還會給出數(shù)據(jù)Mn_DBus??偩€邏輯將這些轉化為OPB_Select,OPB_ABus,OPB_RNW,OPB_DBus并送給Slave。
(4)Slave根據(jù)OPB_Select和OPB_ABus來判斷是否應該做出響應。如果是屬于自己的地址空間,則升高Sln_En占據(jù)總線,同時完成相應的操作,并返回數(shù)據(jù)Sln_DBus和數(shù)據(jù)有效信號Sln_XferAck。
(5)總線邏輯將Sln_DBus和Sln_XferAck轉化為OPB_DBus和OPB_XferAck,并送給Master。Master收到后降低Mn_Select,結束總線事務。
評論