OPB總線仲裁器的RTL設(shè)計與FPGA實現(xiàn)
0 引言
隨著 SOC 設(shè)計技術(shù)的發(fā)展,為了使IP 核集成更快速、更方便,縮短進(jìn)入市場的時間, 迫切需要一種標(biāo)準(zhǔn)的互聯(lián)方案。CoreCONnect 正是在這一背景下為SOC 設(shè)計的總線架構(gòu)。按 照數(shù)據(jù)訪問速度它可分為三層總線,分別是處理器內(nèi)部總線PLB(Processor Local Bus)、片上 外圍總線OPB(On-ChipPeripheral Bus)和設(shè)備控制總線DCR(Device Control RegiSTer)。 OPB 總線是為UART、GPIO 等慢數(shù)據(jù)率設(shè)備提供接口的總線。由于集成到總線中的功能模 塊越來越多,對于共享總線系統(tǒng),片上仲裁是使得各個模塊有效運作的必要手段。目前關(guān)于 OPB 總線仲裁器這方面的研究報道較少,為了探尋在不同的系統(tǒng)負(fù)載和系統(tǒng)應(yīng)用下選擇最 佳的OPB 總線仲裁方案,本文基于固定優(yōu)先級和LRU 兩種算法,利用自頂向下的設(shè)計方法, 設(shè)計了OPB 總線的仲裁器,并對其綜合結(jié)果做了比較。
1 OPB 總線仲裁機制
OPB 總線支持32 位數(shù)據(jù)/地址位寬,讀和寫數(shù)據(jù)總線分開,支持重試模式,支持突發(fā) (burst)傳輸模式,支持DMA,檢測總線超時功能,支持多個主設(shè)備的仲裁。OPB 總線的 系統(tǒng)結(jié)構(gòu)分為三個部分:主設(shè)備(Master),從設(shè)備(Slave)和總線邏輯。信號命名有三種: Mn_打頭的,是master 的輸出;Sln_打頭的,是Slave 的輸出;OPB_打頭的,是總線邏輯 的輸入或輸出。OPB 總線允許有多個master,當(dāng)這幾個master 同時發(fā)出請求要求使用總線時, 就必須對他們的請求進(jìn)行仲裁,并確定他們使用總線的優(yōu)先級,這就是仲裁器的作用。OPB 總線仲裁器的輸入輸出信號如圖1 所示。
SYSCLK 和RESET 為OPB 總線的系統(tǒng)時鐘和復(fù)位信號。Mn_REQUEST 為4 個master 的請求信號,OPB_MnGRANT 為仲裁器發(fā)出的授權(quán)信號,OPB_select 是master 收到授 權(quán)信號后發(fā)出的占用總線信號,OPB_ABUS 為地址總線,OPB_DBUS 為數(shù)據(jù)總線, OPB_XFERACK 為slave 數(shù)據(jù)傳輸完的響應(yīng),OPB_RNW 是讀寫使能信號,OPB_BUSLOCK 是master 鎖定對總線使用權(quán)的信號,ARB_DBUS 和ARB_DBUSEN 是仲裁器的數(shù)據(jù)總線和 使能信號,ARB_XFERACK 是仲裁器傳輸數(shù)據(jù)完成的響應(yīng)信號。OPB_TOUTSUP 是slave 超時禁止的信號,OPB_TIMEOUT 是總線超時信號。
仲裁過程說明如下:
Master 首先發(fā)出Mn_REQUEST 信號申請占用總線,仲裁器根據(jù)總線占用情況和優(yōu)先權(quán) 算法發(fā)出OPB_MnGRANT 信號,得到最高優(yōu)先權(quán)的master 拉高M(jìn)n_SELECT 信號,其他 master 把這個信號置低,這4 個select 信號通過或邏輯形成OPB_SELECT 信號輸入給仲裁 器。
同時發(fā)送地址 Mn_ABUS,也是通過或邏輯轉(zhuǎn)變成OPB_ABUS 輸入給仲裁器。OPB 總 線有多個slave 設(shè)備,每個slave 都有自己的地址空間值,Master 發(fā)送的Mn_ABUS 正是包 含了他所要使用的slave 的地址值,slave 會對值進(jìn)行比較,如果相等,master 就可以對slave 進(jìn)行讀寫操作。
讀操作時,master 拉高OPB_RNW,仲裁器拉高ARB_DBUSEN,并通過ARB_DBUS 輸 出數(shù)據(jù)。寫操作時,master 拉低OPB_RNW,通過OPB_DBUS 輸入數(shù)據(jù)。當(dāng)有效數(shù)據(jù)傳輸完 成后,仲裁器會拉高ARB_XFERACK 信號響應(yīng)。Master 在收到響應(yīng)后,會拉低Mn_SELECT 信號,結(jié)束此次總線事務(wù)。
2 OPB 總線仲裁器的設(shè)計
采用自頂向下的設(shè)計方法,將設(shè)計分成4 個模塊,分別為優(yōu)先級邏輯模塊,仲裁模 塊,看門狗超時模塊和鎖定/??磕K。原理圖如圖2 所示。
圖2 仲裁器設(shè)計原理圖
1) 優(yōu)先級邏輯模塊
這個模塊采用兩種不同的算法進(jìn)行設(shè)計,分別是LRU(Least Recently Used)算法和固定 優(yōu)先級算法[1]。
a) LRU 算法
LRU 算法就是根據(jù)master 的編號循環(huán)得到優(yōu)先級,保證每個設(shè)備都有機會獲得總線。我 們設(shè)計的是最多支持4 個master 的仲裁器,所以采用一個8 位的寄存器,用來存放4 個master 的二進(jìn)制編號。每個周期都要更新這個寄存器值,將得到最高優(yōu)先級的master 編號放到最 低優(yōu)先級,其他3 個master 編號各進(jìn)一級。用這種算法設(shè)計的仲裁器的仿真結(jié)果如圖3。
其中 ARB_DBUS 讀出來的數(shù)據(jù)正是寄存器中保存的master 編號,優(yōu)先級從高位到低位 遞減。00,01,10,11 代表master 的編號0,1,2,3。當(dāng)4 個master 同時發(fā)出請求時,第 一個時鐘周期將優(yōu)先級授權(quán)給master0,第二個時鐘周期時,master0 的優(yōu)先級降為最低,其 他三個優(yōu)先級遞進(jìn),所以此時授權(quán)給master1。后面的周期依次循環(huán),4 個master 將輪流獲 得授權(quán)。
b) 固定優(yōu)先級算法
固定優(yōu)先級算法將 4 個master 的優(yōu)先級按順序固定下來,不會改變[2]。這種算法設(shè)計更 簡單,不需要每周期對master 的優(yōu)先級更新。設(shè)計時優(yōu)先級寄存器中的值只在總線執(zhí)行寫 操作和復(fù)位時才會改變,平時固定不變。仿真結(jié)果見圖4。
ARB_DBUS 是寫入的4 個master 的優(yōu)先級順序,master0 為最高,master3 最低。當(dāng)4 個master 同時發(fā)出請求時,授權(quán)給master0;當(dāng)master0 不發(fā)出請求,其他三個master 發(fā)出 請求時,則根據(jù)優(yōu)先級順序,授權(quán)給master1;依此類推。
2)仲裁邏輯模塊
從優(yōu)先級邏輯模塊得到的優(yōu)先級寄存器信號,將被輸入到仲裁邏輯模塊。用以對4 個 master 的Mn_REQUEST 請求信號排序,然后優(yōu)先級從高到低排序的master 中,第一個拉高 請求信號的master 將被授權(quán)占用總線。仲裁邏輯模塊輸出的授權(quán)信號是最原始的,這個信 號還要經(jīng)過鎖定/??窟壿嬆K處理才能得到最終的授權(quán)信號(OPB_MnGRANT)。
3) 看門狗超時邏輯模塊
看門狗邏輯用來監(jiān)控OPB 的控制信號,當(dāng)master 在16 個時鐘中期內(nèi)沒有能夠收到slave的響應(yīng)信號( OPB_XFERACK ) 和超時禁止信號( OPB_TOUTSUP ), 將會拉高 OPB_TIMEOUT 超時信號[3]。這部分的設(shè)計采用一個4 位計數(shù)器對時鐘進(jìn)行記數(shù)。
4) 鎖定/??窟壿嬆K
優(yōu)先級鎖定是得到最高優(yōu)先級的master 同時拉高OPB_BUSLOCK 信號,這樣在這個信 號被置低之前,這個master 將始終得到總線的占用權(quán),仲裁邏輯將不啟用。此時不管master 是否發(fā)送請求,都不會對仲裁產(chǎn)生影響。優(yōu)先級的鎖定是通過將仲裁邏輯得到的原始優(yōu)先級 信號和OPB_BUSLOCK 信號相與后產(chǎn)生的。優(yōu)先級??渴钱?dāng)沒有新的master 發(fā)出請求信號 時,總線繼續(xù)授權(quán)給當(dāng)前占用總線的master。這里設(shè)計了一個四位寄存器用來追蹤最近占用 總線的master 編號。
最后,通過altera 公司的CycloneII FPGA 對兩種設(shè)計進(jìn)行綜合[4],并對綜合結(jié)果進(jìn)行比 較。并采用cadence 公司的conformal 進(jìn)行RTL 代碼和網(wǎng)表之間的形式驗證。表1 為綜合 和形式驗證結(jié)果。
得出的結(jié)論是:固定優(yōu)先級算法設(shè)計簡單,占用資源少,可以達(dá)到較高的應(yīng)用頻率。但 這種算法使優(yōu)先級高的設(shè)備占著總線不放,當(dāng)總線事務(wù)繁忙時,優(yōu)先級低的設(shè)備將申請不到 總線,所以只適用于總線使用率低,負(fù)載低的應(yīng)用。而LRU 算法雖然更占資源,頻率也低 點,但這種算法授權(quán)更加公平,使所有設(shè)備都有機會申請到總線,適用于總線使用率高,負(fù) 載高的應(yīng)用。
3 結(jié)束語
本文通過對 OPB 總線仲裁器兩種算法的研究,比較了兩種算法的性能優(yōu)劣并得出結(jié)論, 固定優(yōu)先級算法設(shè)計簡單,占用資源少,可以達(dá)到較高的應(yīng)用頻率,能夠保證主要處理器的 運行速度,但缺乏公平性;LRU 算法更占資源,頻率較低,但具有公平性,適用于總線使 用率高,負(fù)載高的應(yīng)用。對不同的總線負(fù)載和使用率情況下選擇最佳的OPB 總線仲裁方案 提供了依據(jù),對高效的系統(tǒng)設(shè)計和嵌入式應(yīng)用有重要的參考價值和指導(dǎo)意義。
評論