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