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