0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

隨機仲裁器的算法實現(xiàn)

CHANBAEK ? 來源:奇異白勺書 ? 作者:Kim71 ? 2023-09-19 09:35 ? 次閱讀

01仲裁機制

提出占用資源的模塊需要產(chǎn)生一個訪問請求request,所有的請求輸入仲裁器之后,仲裁器需要根據(jù)仲裁算法,返回一個grant來響應(yīng)某一模塊的請求。

仲裁器只能讓一個模塊得到許可,因為資源(總線)同一時刻只能由一個模塊占用。

常見的仲裁機制有以下三種:

  • 固定優(yōu)先級仲裁器Fixed Priority Arbiter
  • 輪詢仲裁器Round Robin Arbiter
  • 偽隨機仲裁器Pseudo Random Arbiter

固定優(yōu)先級: 即事先確定好各個模塊的訪問優(yōu)先級,當多個請求發(fā)起時,按照優(yōu)先級從高到低來給出許可,某些情況下,部分請求的優(yōu)先級必須高于其它請求(比如車控系統(tǒng)中的剎車請求),這時就要采用固定優(yōu)先級的仲裁算法;

輪詢: 當某次請求被許可之后,則下一個優(yōu)先級的請求會被置成最高,若下一次需要仲裁的請求中沒有最高優(yōu)先級對應(yīng)的請求,則維持優(yōu)先級順序(按照基礎(chǔ)優(yōu)先級順序執(zhí)行本輪仲裁),直到最高優(yōu)先級請求被響應(yīng)。

例如:初始優(yōu)先級從高到低1-2-3,現(xiàn)在來了一波請求序列123-13-23-123-13,那么每輪分別是哪個請求被許可?

答:每輪最高優(yōu)先級 1-2-2-3-1,被響應(yīng)許可的順序 1-1-2-3-1

*也有一種輪詢機制是優(yōu)先級反轉(zhuǎn)的,一個請求被響應(yīng)許可之后,它的優(yōu)先級就降到最低。

偽隨機: 通過偽隨機算法隨機賦予請求優(yōu)先級。

02算法實現(xiàn)

1、Fixed Arbiter

設(shè) req_i [3:0], 由于是固定優(yōu)先級,可以事先約定:低位優(yōu)先級高,高位優(yōu)先級低

(注意仲裁器的輸入端口已經(jīng)確定好優(yōu)先級,因此外部請求信號連接時應(yīng)根據(jù)仲裁器規(guī)定的優(yōu)先級順序按需求連接)

在這個前提下,仲裁的本質(zhì)其實就是從低位到高位尋找第一個“1”

那么有沒有什么邏輯操作可以快速定位一個序列中從低到高的第一個“1”呢?

顯然,減1操作就符合這個需求。在二進制的減1操作中,低位如果是0,就會向前借位,結(jié)果是1,直到借位的那一位是1,結(jié)果才得0,因此只需要根據(jù)結(jié)果從低到高的第一個0在哪一位就能確定哪一位該被許可響應(yīng)。

假設(shè)這次請求req_i = 4'b1010,即第二和第四個設(shè)備發(fā)起了請求,那么req_i-1 = 4’b1001,可以從低到高的第一個0位于第二位,也就是req_i[1]對應(yīng)的請求可以被響應(yīng)。

那么如何將這個算法用簡單的邏輯實現(xiàn)呢,用序列檢測的方法去遍歷req_i-1的結(jié)果顯然過于復(fù)雜且耗時,會大大拖累性能。最好能用一個簡單的組合邏輯就把這個0所在的位找出來。

可以觀察到,對req_i-1的結(jié)果按位取反后,得到~(req_i-1)= 4‘b0110,與req_i只有一位相同,且那一位就是被響應(yīng)許可的位。于是gnt [3:0]的邏輯就呼之欲出了:

gnt_o = req_i & ~(req_i-1);

其實也很好理解,減1操作,相當于對參與運算的低兩位10進行了取反,對于被減數(shù)來說,前兩位10其實并沒有變化,直接落到結(jié)果對應(yīng)的位上,所以對結(jié)果進行取反得到0110,再和被減數(shù)本身按位與,得到的結(jié)果是0010,直接篩選出了被借位的那個“1”

2、Round Robin Arbiter

有了固定優(yōu)先級仲裁器的珠玉在前,輪詢仲裁器的算法自然就躍然紙上。既然核心思想就是通過減1操作來找出需要被響應(yīng)的請求,那么已經(jīng)響應(yīng)過的請求直接讓它不參與減1計算即可。被減數(shù)是外部輸入的req_i,是不能動的,但是減數(shù)是可以操作的,假如req_i[0]的請求剛被響應(yīng)過,那么只需要讓減數(shù)的1左移一位得到0010,就相當于讓最低位不參與計算,那么按照輪詢規(guī)則,下一個被響應(yīng)的請求就是req_i[1]

圖片

但凡事皆有例外,固定優(yōu)先級的減1操作可以保證一定能檢索到優(yōu)先級最高的那個請求(只要req_i不是全0),但是輪詢算法因為減數(shù)的移位會把低位排除計算,可能出現(xiàn)沒被排除計算的請求位沒有1,而被排除的請求位有1的情況,如下圖所示,此時根據(jù)我們的算法得到的結(jié)果是0000,低兩位的設(shè)備發(fā)起了請求,但是仲裁器卻沒有輸出,出現(xiàn)了功能錯誤。

圖片

這是由于我們沒有將被排除計算的低位請求加入循環(huán)移位的仲裁機制中,如果高位均沒有發(fā)起請求,仲裁器還是需要按照約定的優(yōu)先級順序給低位的請求發(fā)起響應(yīng)。

根據(jù)這個思路,自然就能想到:當高位沒有發(fā)起請求,而低位有請求時,按照固定優(yōu)先級順序算法再計算一次。但是問題又來了,引入新的邏輯來判斷gnt_o的輸出以及再進行一次仲裁又會拖慢響應(yīng)速度,最好有個一步到位的算法,能同時解決兩種情況下的輪詢仲裁。

回歸到優(yōu)先級算法的本質(zhì),上圖中 gnt_o輸出全0的原因是向上借位溢出,向上借位的本質(zhì)又是高幾位進行減1操作,那么讓req_i變成我們需要借位的那個“高幾位”不就行了嗎?

圖片

如圖,將req_i和gnt_o進行double拓寬,這樣就能兼顧高位有無請求兩種情況了。最后一步,就是將double過的gnt_o再變回原來的位寬。根據(jù)算法,double_gnt_o要么高四位有效,要么低四位有效,而且是獨熱的(One-hot),因此只需要將前四位與后四位進行按位或操作就可以得到正確的gnt_o

assign double_reqs = {2{reqs_i}};
assign double_gnts = ~(double_reqs - priority_flag) & double_reqs;
assign gnts_o = double_gnts[2*REQ_NUM:REQ_NUM] | double_gnts[REQ_NUM-1:0];

3、Pseudo random Arbiter

隨機仲裁器其實就很好實現(xiàn)了,每次有請求到來時,讓減數(shù)中獨熱的那一位出現(xiàn)在隨機的位置上,就實現(xiàn)了優(yōu)先級的隨機生成。本文不再贅述。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4613

    瀏覽量

    92957
  • 信號
    +關(guān)注

    關(guān)注

    11

    文章

    2791

    瀏覽量

    76808
  • 仲裁器
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    6655
收藏 人收藏

    評論

    相關(guān)推薦

    如何在Virtex-II Pro上實現(xiàn)仲裁

    (同步RAM)。地址為12位,數(shù)據(jù)為8位。我想在Virtex-II pro上實現(xiàn)仲裁,兩個PowerPcs同時獨立運行。我計劃在兩臺電源上同時運行2個不同的程序,并使ppcs想要訪問共享內(nèi)存。我假設(shè)兩個
    發(fā)表于 05-28 12:37

    如何在VHDL中實現(xiàn)簡單優(yōu)先級仲裁

    本文著眼于仲裁的用例和優(yōu)點,以及在VHDL中實現(xiàn)簡單優(yōu)先級仲裁。仲裁是任何現(xiàn)代計算機系統(tǒng)的重
    發(fā)表于 12-23 06:38

    深入探討一下AHBzongxia仲裁仲裁

    1、AHB仲裁仲裁隨著AMBA總線-AHB系列的逐步推進,現(xiàn)在在AHB總線中,基本能用來讓主從機傳輸數(shù)據(jù)的要素都已經(jīng)補齊了,所以最后一個功能部分,我們將深入的探討一下,如果多個主機同時需要獲得
    發(fā)表于 06-09 17:30

    如何配置sequence的仲裁算法和優(yōu)先級及中斷sequence的執(zhí)行

    出來當前transaction產(chǎn)生自哪個sequence,以及是循環(huán)的第幾次。仿真結(jié)果如下,可以看得出來在沒有配置仲裁算法的情況下,即使我們?yōu)閟equence都分配了權(quán)重值,sequencer對三個
    發(fā)表于 09-23 14:35

    PCI總線仲裁的設(shè)計及實現(xiàn)

    本文簡要介紹了PCI 總線的仲裁機制, 完成了PCI 總線仲裁核心的設(shè)計、實現(xiàn)。通過ModelSim 進行了軟件仿真,最后在XILINX 公司的FPGA 上加以了驗證。
    發(fā)表于 09-03 08:18 ?27次下載

    SOC總線仲裁算法的研究

    集成到SOC 中的功能模塊越來越多,對于共享總線的SOC 系統(tǒng),片上仲裁是使得各個模塊有效運作的必要手段。本文論述了SOC 仲裁的基本原理,首先從目前SOC 系統(tǒng)中常用的仲裁算法
    發(fā)表于 09-15 15:35 ?14次下載

    SOC總線仲裁算法的研究

    集成到SOC中的功能模塊越來越多,對于共享總線的SOC系統(tǒng),片上仲裁是使得各個模塊有效運作的必要手段。本文論述了SOC仲裁的基本原理,首先從目前SOC系統(tǒng)中常用的仲裁算法入手
    發(fā)表于 07-17 17:07 ?38次下載

    OPB總線仲裁的RTL設(shè)計與FPGA實現(xiàn)

    本文詳細介紹了OPB總線仲裁的信號和仲裁機理。在QuartusII8.0平臺上,分別用固定優(yōu)先級算法和LRU算法,用硬件描述語言(veri
    發(fā)表于 07-17 18:10 ?25次下載

    基于EPLD的PCI總線仲裁的設(shè)計與實現(xiàn)

    摘 要: 以自行研制開發(fā)的PCI高速總線背板為背景,系統(tǒng)地論述了PCI總線的仲裁機制、總線的缺省占用、仲裁信號協(xié)定及優(yōu)先級仲裁算法,給出了采用EPLD
    發(fā)表于 06-20 13:32 ?1145次閱讀
    基于EPLD的PCI總線<b class='flag-5'>仲裁</b><b class='flag-5'>器</b>的設(shè)計與<b class='flag-5'>實現(xiàn)</b>

    隨機塊模型學(xué)習(xí)算法

    主要挑戰(zhàn).提出一種精細隨機塊模型及其快速學(xué)習(xí)算法,該學(xué)習(xí)方法基于提出的模型與最小消息長度推導(dǎo)出一個新成本函數(shù),利用期望最大化參數(shù)估計方法,實現(xiàn)了邊評價模型邊估計參數(shù)的并行學(xué)習(xí)策略。以此方式顯著降低
    發(fā)表于 01-09 18:20 ?1次下載

    基于分組機制的位仲裁查詢樹防碰撞算法

    提出了一種基于分組機制的位仲裁查詢樹(G BAQT, bit arb itration query tree bas ed on gro uping mechanis m)算法。該算法根據(jù)標簽lD
    發(fā)表于 02-26 11:22 ?0次下載

    如何進行SOC總線仲裁算法的研究資料說明

    集成到SOC 中的功能模塊越來越多,對于共享總線的SOC 系統(tǒng),片上仲裁是使得各個模塊有效運作的必要手段。本文論述了SOC 仲裁的基本原理,首先從目前SOC 系統(tǒng)中常用的仲裁算法入手,
    發(fā)表于 06-26 14:32 ?5次下載
    如何進行SOC總線<b class='flag-5'>仲裁</b><b class='flag-5'>算法</b>的研究資料說明

    如何實現(xiàn)RFID系統(tǒng)上行鏈路的多標簽沖突檢測算法

    提出一種應(yīng)用于RFID 系統(tǒng)上行鏈路的多標簽沖突檢測算法, 并給出了參考實現(xiàn)電路。依算法, 對電子標簽進行隨機分群, 在群間做隨機避讓, 在
    發(fā)表于 01-15 17:04 ?3次下載
    如何<b class='flag-5'>實現(xiàn)</b>RFID系統(tǒng)上行鏈路的多標簽沖突檢測<b class='flag-5'>算法</b>

    基于SaaS的替代性糾紛在線仲裁系統(tǒng)

    互聯(lián)網(wǎng)仲裁近年來成為數(shù)字經(jīng)濟領(lǐng)域法律糾紛的一種重要解決機制,實現(xiàn)了“線上爭議、線上解決”。然而,現(xiàn)有互聯(lián)網(wǎng)仲裁系統(tǒng)并不能滿足高要求的正當程序及充分保障當事人合法權(quán)利,符合仲裁法律程序的
    發(fā)表于 06-15 14:51 ?9次下載

    基于Python實現(xiàn)隨機森林算法

    機器學(xué)習(xí)算法是數(shù)據(jù)挖掘、數(shù)據(jù)能力分析和數(shù)學(xué)建模必不可少的一部分,而隨機森林算法和決策樹算法是其中較為常用的兩種算法,本文將會對
    的頭像 發(fā)表于 09-21 11:17 ?1218次閱讀
    基于Python<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>隨機</b>森林<b class='flag-5'>算法</b>