衡阳派盒市场营销有限公司

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

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

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

隊(duì)列管理電路-上篇

jf_78858299 ? 來(lái)源:芯工阿文 ? 作者:芯工阿文 ? 2023-01-21 16:49 ? 次閱讀

在數(shù)字芯片設(shè)計(jì)中,幾乎所有模塊都會(huì)涉及到隊(duì)列管理。輸入輸出的管理、不同數(shù)據(jù)流的調(diào)度、亂序數(shù)據(jù)的重排序、不同模塊的同步處理、資源管理,等等,均會(huì)涉及到隊(duì)列管理邏輯。如何選擇合適的硬件邏輯,對(duì)模塊的微架構(gòu)有較大的影響,需要基于具體需求做綜合權(quán)衡后再做選擇。本文簡(jiǎn)單羅列幾種隊(duì)列管理邏輯,均是個(gè)人曾經(jīng)實(shí)現(xiàn)過(guò)的。

1 最簡(jiǎn)單的隊(duì)列-FIFO

First In First Out,用于輸入輸出之間的緩沖,吸收輸入側(cè)的突發(fā)流量。實(shí)現(xiàn)也比較簡(jiǎn)單,深度固定的環(huán)形buffer,使用讀寫指針進(jìn)行管理。需要注意的是,讀寫指針的管理,F(xiàn)IFO為空和FIFO為滿,讀寫指針均是相等的,需使用另外的標(biāo)號(hào)進(jìn)行處理。也有其余的實(shí)現(xiàn)方式,比如移位寄存器。

圖片

使用SpinalHDL實(shí)現(xiàn)FIFO的代碼如下。輸入輸出的push/pop,使用了valid/ready握手的Stream接口;使用Mem定義環(huán)形buffer,pushPtr/popPtr分別對(duì)應(yīng)讀寫指針;特別關(guān)注risingOccupancy信號(hào),push和pop沒有同時(shí)發(fā)生時(shí),更新為push,該信號(hào)可用于標(biāo)記FIFO的空滿狀態(tài)。讀寫指針相等且該信號(hào)為低,表示FIFO為空;讀寫指針相等且該信號(hào)為高,表示FIFO為滿。

// spinal/lib/Stream.scala
val io = new Bundle {
val push = slave Stream (dataType)
val pop = master Stream (dataType)
val flush= in Bool() default(False)
val occupancy = out UInt (log2Up(depth + 1) bits)
val availability = out UInt (log2Up(depth + 1) bits)
}
val ram = Mem(dataType, depth)
val pushPtr = Counter(depth)
val popPtr = Counter(depth)
val ptrMatch = pushPtr === popPtr
val risingOccupancy = RegInit(False)
val pushing = io.push.fire
val popping = io.pop.fire
val empty = ptrMatch & !risingOccupancy
val full = ptrMatch & risingOccupancy

io.push.ready := !full
io.pop.valid := !empty & !(RegNext(popPtr.valueNext === pushPtr, False) & !full) //mem write to read propagation
io.pop.payload := ram.readSync(popPtr.valueNext)

when(pushing =/= popping) {
risingOccupancy := pushing
}
when(pushing) {
ram(pushPtr.value) := io.push.payload
pushPtr.increment()
}
when(popping) {
popPtr.increment()
}

2 共享Buffer的多隊(duì)列FIFO

考慮一個(gè)場(chǎng)景,輸入的請(qǐng)求需要分發(fā)至不同的輸出側(cè),下游存在反壓。簡(jiǎn)單實(shí)現(xiàn),基于不同的輸出分別設(shè)置FIFO,但可能存在資源浪費(fèi),某些數(shù)據(jù)流場(chǎng)景FIFO的利用率不高,尤其是在數(shù)據(jù)位寬較大的場(chǎng)景。

共享Buffer的多隊(duì)列FIFO,每個(gè)隊(duì)列的FIFO還是按照簡(jiǎn)單隊(duì)列進(jìn)行管理,基于每個(gè)隊(duì)列管理讀寫指針。但是,不再使用環(huán)形Buffer,每個(gè)buffer entry記錄其隊(duì)列號(hào)、隊(duì)列指針和Payload,如下圖所示。對(duì)于Payload位寬較小的場(chǎng)景,收益不大,若存在大位寬時(shí),可有效提升Buffer的利用率。

圖片

將數(shù)據(jù)寫入Buffer時(shí),先找一個(gè)Free Entry(Vliad為低),將該數(shù)據(jù)所屬的隊(duì)列號(hào)及其對(duì)應(yīng)的寫指針、Payload寫入到對(duì)應(yīng)的Entry內(nèi)。讀取Buffer時(shí),則使用隊(duì)列號(hào)和讀指針進(jìn)行匹配,將命中的Entry內(nèi)容讀取出來(lái)。若讀寫指針?biāo)苊枋龅姆秶萣uffer深度大,則不需要額外的標(biāo)號(hào)記錄空滿狀態(tài)。存在的問題,若buffer深度較大或隊(duì)列數(shù)量較多,隊(duì)列號(hào)和指針匹配邏輯會(huì)占用較多的資源。

3 重力FIFO

類似于排隊(duì),從隊(duì)頭開始尋找可輸出的Entry,調(diào)度輸出并留下空位,后面的Entry再往前排,新輸入的請(qǐng)求則放置在隊(duì)列尾。如圖所示,存在有效數(shù)據(jù)的Entry,其前面的Entry被調(diào)度后留下空位,該Entry就像受到重力作用往下掉,因此我也稱之為重力FIFO。

圖片

該結(jié)構(gòu)的問題,存在大量的移位,設(shè)想Payload位寬為32bit,深度為32,將近1kbit的寄存器在做移位處理,其功耗可想而知。但是對(duì)于一些具體場(chǎng)景,還是能夠帶來(lái)一些收益的,如隊(duì)列數(shù)量較大,甚至大于buffer深度;至于Payload位寬較大的場(chǎng)景,可考慮二次索引處理,Payload保存至另外的buffer,該結(jié)構(gòu)內(nèi)的Payload Entry則緩存其索引信息

4 Bitmap排序

先來(lái)看一個(gè)結(jié)構(gòu),深度為8的隊(duì)列,每個(gè)Entry使用8bit緩存8個(gè)Entry的狀態(tài),若該狀態(tài)信號(hào)滿足觸發(fā)條件,如全為0,則調(diào)度該Entry內(nèi)容。

Bitmap排序就是使用了這一結(jié)構(gòu),在輸入請(qǐng)求進(jìn)入隊(duì)列后,檢查當(dāng)前隊(duì)列狀態(tài),存在關(guān)聯(lián)請(qǐng)求的Entry位置置位為1,否則為0。若存在請(qǐng)求輸出之后,所有Entry狀態(tài)的對(duì)應(yīng)位置均設(shè)為0。若某個(gè)Entry的狀態(tài)信號(hào)全為0,則請(qǐng)求調(diào)度輸出。其數(shù)據(jù)結(jié)構(gòu)如下圖所示,其中0/1僅作為狀態(tài)信號(hào)的示例,并非實(shí)際場(chǎng)景。

圖片

該結(jié)構(gòu)可以實(shí)現(xiàn)較為靈活的排序,隊(duì)列的數(shù)量幾乎不會(huì)受到限制,進(jìn)入隊(duì)列的請(qǐng)求,也可修改其Mask Bitmap,動(dòng)態(tài)刷新其先后關(guān)系。與重力FIFO類似,無(wú)需額外的數(shù)據(jù)結(jié)構(gòu)保存其隊(duì)列關(guān)系,而是直接體現(xiàn)在原有結(jié)構(gòu)內(nèi)。存在的問題,隊(duì)列深度會(huì)受到面積限制,面積與深度的平方成正比;另外,在動(dòng)態(tài)更新Mask Bitmap之后,某些實(shí)現(xiàn)可能無(wú)法保證先后關(guān)系。

面積問題可以考慮用分級(jí)處理。如需實(shí)現(xiàn)256深度的隊(duì)列,其Mask Bitmap需要65536個(gè)寄存器實(shí)現(xiàn)Mask Bitmap。分解為8個(gè)32深度的隊(duì)列,需要的寄存器數(shù)量為8192;分解為16個(gè)16深度的隊(duì)列,寄存器數(shù)量為4096。

5 小結(jié)

隊(duì)列管理電路還有一個(gè)比較常見的實(shí)現(xiàn),鏈表。在亂序數(shù)據(jù)的重排序、資源管理等等方面,通常會(huì)用鏈表實(shí)現(xiàn),與上幾個(gè)結(jié)構(gòu)相比,鏈表會(huì)復(fù)雜一些。該部分將在下篇描述。

除最簡(jiǎn)單的FIFO之外,其余幾個(gè)都沒有代碼,如各位要有興趣,請(qǐng)留言,我可以再嘗試寫一些Spinal代碼實(shí)現(xiàn)。

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

    關(guān)注

    15

    文章

    1028

    瀏覽量

    55006
  • 隊(duì)列管理
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    6307
  • 數(shù)字芯片
    +關(guān)注

    關(guān)注

    1

    文章

    110

    瀏覽量

    18470
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    主動(dòng)隊(duì)列管理建模及最優(yōu)控制策略

    主動(dòng)隊(duì)列管理建模及最優(yōu)控制策略針對(duì)主動(dòng)隊(duì)列管理(AQM)研究中缺乏系統(tǒng)的理論分析的問題,引入最優(yōu)控制理論進(jìn)行分析,得到了主動(dòng)隊(duì)列管理的數(shù)學(xué)模型,該模型包括兩個(gè)差分方程,分別描述隊(duì)列長(zhǎng)度
    發(fā)表于 06-14 00:14

    FreeRTOS學(xué)習(xí)筆記(六)——隊(duì)列管理

    FreeRTOS學(xué)習(xí)筆記(六)——隊(duì)列管理
    發(fā)表于 09-28 14:07

    FreeRTOS學(xué)習(xí)筆記(六)——隊(duì)列管理

    FreeRTOS學(xué)習(xí)筆記(六)——隊(duì)列管理
    發(fā)表于 10-21 20:40

    Agilent TCP和隊(duì)列管理

    TCP和隊(duì)列管理
    發(fā)表于 10-31 09:08

    簡(jiǎn)單羅列幾種隊(duì)列管理邏輯電路

    ,寄存器數(shù)量為4096。5 小結(jié)隊(duì)列管理電路還有一個(gè)比較常見的實(shí)現(xiàn),鏈表。在亂序數(shù)據(jù)的重排序、資源管理等等方面,通常會(huì)用鏈表實(shí)現(xiàn),與上幾個(gè)結(jié)構(gòu)相比,鏈表會(huì)復(fù)雜一些。該部分將在下篇描述。除最簡(jiǎn)單的FIFO
    發(fā)表于 08-29 14:23

    什么是鏈表?怎樣使用鏈表作為隊(duì)列管理電路

    前文聊了隊(duì)列管理的幾種典型電路,硬件邏輯簡(jiǎn)單,代碼實(shí)現(xiàn)時(shí)容易操作。鏈表也是隊(duì)列管理的常用電路,相比前文的幾種結(jié)構(gòu),會(huì)稍微復(fù)雜一些。1 什么是鏈表在非連續(xù)、非順序的物理存儲(chǔ)結(jié)構(gòu)上,通過(guò)指
    發(fā)表于 08-29 14:26

    不同服務(wù)類型的隊(duì)列管理及性能比較

    為提高網(wǎng)絡(luò)利用率和數(shù)據(jù)包處理速度,針對(duì)不同應(yīng)用的網(wǎng)絡(luò)流量,在網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的參數(shù)設(shè)置相同的情況下,使用NS2模擬器對(duì)瓶頸鏈路分別采用7種主動(dòng)隊(duì)列管理機(jī)制進(jìn)行仿真,通過(guò)
    發(fā)表于 04-09 09:46 ?11次下載

    一種改進(jìn)的主動(dòng)隊(duì)列管理算法

    主動(dòng)隊(duì)列管理是實(shí)現(xiàn)網(wǎng)絡(luò)擁塞控制的重要技術(shù),但是多數(shù)主動(dòng)隊(duì)列管理算法如隨機(jī)早期檢(RED)都存在對(duì)參數(shù)依賴性強(qiáng)的問題。針對(duì)RED算法中平均隊(duì)列長(zhǎng)度不能完全反映網(wǎng)絡(luò)擁塞狀況的
    發(fā)表于 04-13 09:08 ?14次下載

    網(wǎng)絡(luò)中常用的隊(duì)列管理方法比較

    本文主要介紹了網(wǎng)絡(luò)中常用的兩種隊(duì)列管理方法:先進(jìn)先出(FIFO)和隨機(jī)提前檢測(cè)(RED),并且通過(guò)實(shí)驗(yàn)比較了這兩種隊(duì)列管理方法在解決網(wǎng)絡(luò)擁塞控制方面的表現(xiàn),體現(xiàn)了研究
    發(fā)表于 05-25 11:24 ?9次下載

    主動(dòng)隊(duì)列管理建模及最優(yōu)控制策略

    針對(duì)主動(dòng)隊(duì)列管理(AQM)研究中缺乏系統(tǒng)的理論分析的問題,引入最優(yōu)控制理論進(jìn)行分析,得到了主動(dòng)隊(duì)列管理的數(shù)學(xué)模型,該模型包括兩個(gè)差分方程,分別描述隊(duì)列長(zhǎng)度和平均隊(duì)列長(zhǎng)
    發(fā)表于 05-25 21:44 ?17次下載

    一種基于速率的公平隊(duì)列管理算法

    針對(duì)主動(dòng)隊(duì)列管理算法普遍存在的公平性問題,提出基于速率的公平隊(duì)列管理算法RFED。該算法根據(jù)分組的到達(dá)速率調(diào)節(jié)丟包率,將隊(duì)列的到達(dá)速率控制在鏈路的服務(wù)速率下,根據(jù)
    發(fā)表于 10-04 14:11 ?15次下載

    一種參數(shù)自適應(yīng)的主動(dòng)隊(duì)列管理算法—自適應(yīng)BLUE

    BLUE算法是一種典型的主動(dòng)隊(duì)列管理 (Active Queue Management,AQM) 算法,研究表明BLUE算法優(yōu)于RED算法。BLUE算法使用丟包事件和鏈路空閑事件控制網(wǎng)絡(luò)擁塞。但由于BLUE算法在參數(shù)設(shè)置方面
    發(fā)表于 11-24 14:19 ?10次下載

    面向網(wǎng)絡(luò)能效優(yōu)化的動(dòng)態(tài)權(quán)重隊(duì)列管理算法

    針對(duì)流量傳輸過(guò)程中能效優(yōu)化的問題,提出一種面向網(wǎng)絡(luò)能效優(yōu)化的動(dòng)態(tài)權(quán)重隊(duì)列管理算法DW_WFQ。該算法在加權(quán)公平隊(duì)列(WFQ)的基礎(chǔ)上通過(guò)動(dòng)態(tài)地分配各類業(yè)務(wù)流的權(quán)重,以更加靈活的方式分配各類業(yè)務(wù)流
    發(fā)表于 12-20 09:27 ?0次下載
    面向網(wǎng)絡(luò)能效優(yōu)化的動(dòng)態(tài)權(quán)重<b class='flag-5'>隊(duì)列管理</b>算法

    傳感器網(wǎng)絡(luò)隊(duì)列管理算法DQC

    為了在保證無(wú)線傳感器網(wǎng)絡(luò)時(shí)延要求的同時(shí)最小化功率消耗,提出一種基于占空比控制和時(shí)延保證的傳感器網(wǎng)絡(luò)隊(duì)列管理算法(DQC)。該算法根據(jù)不斷變化的網(wǎng)絡(luò)條件,為了更好地控制節(jié)點(diǎn)占空比和隊(duì)列閾值,采用一種
    發(fā)表于 01-10 17:13 ?0次下載

    隊(duì)列管理電路-下篇

    前文聊了隊(duì)列管理的幾種典型電路,硬件邏輯簡(jiǎn)單,代碼實(shí)現(xiàn)時(shí)容易操作。鏈表也是隊(duì)列管理的常用電路,相比前文的幾種結(jié)構(gòu),會(huì)稍微復(fù)雜一些。
    的頭像 發(fā)表于 01-21 17:11 ?817次閱讀
    <b class='flag-5'>隊(duì)列管理</b><b class='flag-5'>電路</b>-下篇
    大发888下载 34| 太阳城网址| 全讯网353788| 百家乐打鱼秘籍| 真人百家乐官网的玩法技巧和规则| 川宜百家乐官网软件| 太阳城娱乐城去大丰收娱乐| 大发888 dafa888uk.com| 粤港澳百家乐娱乐平台| 澳门百家乐信誉| 澳门百家乐网址多少| 免费百家乐官网追号| 欧凯百家乐官网的玩法技巧和规则| 百家乐官网这样赢保单分析| 网络百家乐官网破解器| 百家乐官网美食坊| 大发百家乐官网游戏| 巴林右旗| 余江县| 赤水市| 海口市| 龙虎| 鸿盛博娱乐| 淘金盈赌场有假吗| 皇冠网店| 网上在线赌场| 施甸县| 淘金百家乐官网现金网| 百家乐官网有几种打法| 百家乐官网有多少种游戏| 百家乐官网模拟游戏下载| 百家乐官网视频二人麻将| 滨海湾百家乐官网娱乐城| 亚洲百家乐官网新全讯网| 松江区| 百家乐官网学院教学视频| 百家乐官网5式直缆投注法| 怎么玩百家乐官网能赢钱| 百家乐官网园棋牌| 百家乐官网永利娱乐平台| 百家乐官网23珠路打法|