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

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

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

淺談IC反壓機(jī)制設(shè)計(jì)思路

CHANBAEK ? 來(lái)源:數(shù)字電路IC ? 作者:lookoutwl ? 2023-09-11 17:09 ? 次閱讀

反壓機(jī)制指的是在輸出(或者輸入)端連接的模塊不能接收數(shù)據(jù)(或者沒(méi)有輸入數(shù)據(jù)),此時(shí)自己的模塊的運(yùn)行狀態(tài)需要暫停運(yùn)行。

反壓機(jī)制適用于所有擁有握手協(xié)議的模塊,且強(qiáng)烈建議使用反壓機(jī)制用于自己模塊設(shè)計(jì)。

反壓機(jī)制在公眾號(hào)最開(kāi)始也有寫(xiě)過(guò),但是過(guò)去了很長(zhǎng)時(shí)間,對(duì)設(shè)計(jì)有了新的理解,這篇文章會(huì)細(xì)述一對(duì)一、多對(duì)一、一對(duì)多、多對(duì)多之間反壓機(jī)制的細(xì)節(jié)和設(shè)計(jì)。

以下具體示例可以參見(jiàn)我的GitHub:back-pressure-mechanism

git@github.com:lookout1992/back-pressure-mechanism.git

一、一對(duì)一

一對(duì)一反壓是反壓機(jī)制中的基礎(chǔ),也是最常見(jiàn)的結(jié)構(gòu)。

圖片

如上圖,如果模塊內(nèi)部由一個(gè)寄存器組成,那模塊的輸出信號(hào)din.ready和dout.valid就可以如下設(shè)計(jì):

logic switch_en;
assign switch_en = !dout.valid | dout.ready;


logic r_valid;
always @ (posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        r_valid <= 'd0;
    end
    else if(switch_en)begin
        r_valid <= din.valid;
    end
end
assign dout.valid = r_valid;
assign din.ready  = switch_en

增加switch_en信號(hào),代表輸出端沒(méi)有準(zhǔn)備好輸出數(shù)據(jù) ,或者是連接輸出端的模塊已經(jīng) 準(zhǔn)備好接收數(shù)據(jù)。

總結(jié)一句話就是模塊(寄存器)的數(shù)據(jù)可以流動(dòng)起來(lái)。因此switch_en也是輸出口i_ready的賦值信號(hào)。

關(guān)于valid(或者沒(méi)有顯示的data計(jì)算部分),只有在switch_en有效時(shí),可以向下傳遞。

如果圖中模塊中由多級(jí)一對(duì)一的寄存器組成,那么最優(yōu)的設(shè)計(jì)思路是像上面設(shè)計(jì)一樣,一級(jí)級(jí)拼接起來(lái),也是最復(fù)雜的。(而不是原始公眾號(hào)文章中,用一個(gè)switch_en控制所有的流水使能)

在實(shí)際設(shè)計(jì)中,有可能會(huì)在時(shí)序和資源之間平衡,需要把流水線拆開(kāi),分時(shí)復(fù)用運(yùn)算邏輯。因此會(huì)出現(xiàn)一筆輸入,但是有兩筆輸出,且運(yùn)算時(shí)需要使用兩次輸入數(shù)據(jù)(即不允許輸入寄存器更新太快)。這個(gè)時(shí)候需要添加新的使能(或者counter)等用于額外的判斷條件

以上具體示例可以參見(jiàn)我的GitHub:back-pressure-mechanism/one2one

二、多對(duì)一

多對(duì)一反壓是處理一對(duì)一之外最常見(jiàn)的結(jié)構(gòu),多用于多個(gè)輸入數(shù)據(jù)運(yùn)算輸出一個(gè)信號(hào)。

圖片

處理這種結(jié)構(gòu),主要思路是 所有輸入有效 ,對(duì)于switch2_en 和 switch3_en見(jiàn)上面一對(duì)一反壓設(shè)計(jì),主要描述switch1_en和輸入輸出之間的關(guān)系:

// din0 和din1 相遇前各自一組寄存器。
logic r_reg_din0_valid;
logic w_reg_din0_ready;
logic r_reg_din1_valid;
logic w_reg_din1_ready;


logic switch1_en;


logic w_reg_din_valid;


logic r_reg_dout_valid;


always@(posedge clk or negedge rst_n)begin  
   if(!rst_n)begin  
      r_reg_dout_valid <= 'd0;
   end  
   else if(switch1_en)begin
      r_reg_dout_valid<= w_reg_din_valid;
   end  
end 


assign switch1_en = !dout.valid | dout.ready;


assign w_reg_din0_ready = r_reg_din1_valid & switch_en;
assign w_reg_din1_ready = r_reg_din0_valid & switch_en;


assign w_reg_din_valid = r_reg_din0_valid & r_reg_din1_valid;

以上具體示例可以參見(jiàn)GitHub:back-pressure-mechanism/more2one

三、一對(duì)多

以一輸入、二輸出為例:

圖片

輸入的ready和輸出的valid將會(huì)取決于所有輸出端口是否 準(zhǔn)備好 。

logic switch_en;
logic r_din_valid;


assign switch_en = (!dout0.valid | dout0.ready)&
                   (!dout1.valid | dout1.ready);


assign din.ready = switch_en;


always@(posedge clk or negedge rst_n)begin  
   if(!rst_n)begin  
      r_din_valid<= 'd0;
   end  
   else if(switch_en)begin
      r_din_valid<= din.valid;
   end  
end 


assign dout0.valid = r_din_valid & dout1.ready;
assign dout1.valid = r_din_valid & dout0.ready;

四、多對(duì)多

多對(duì)多的反壓設(shè)計(jì)可以看做多對(duì)一和一對(duì)多反壓的集合。

五、總結(jié)

反壓設(shè)計(jì)的目的是模塊可以在輸入或者輸出沒(méi)有準(zhǔn)備好是可以自動(dòng)停止運(yùn)算,好的反壓機(jī)制的作用是可以在運(yùn)算因?yàn)檩斎牖蛘咻敵龅脑蛲V购蛦?dòng)時(shí)減少其中的空檔期。

六、快速迭代

如果在設(shè)計(jì)中時(shí)間緊張,要求快速迭代出一版可以使用的反壓機(jī)制代碼,那么就不能再按照上面的設(shè)計(jì)思路扣細(xì)活。

可以直接以模塊輸出端的valid&ready作為全部寄存器的switch_en,這就會(huì)造成一個(gè)問(wèn)題在停止時(shí),所有運(yùn)算都將停止,這會(huì)在啟動(dòng)時(shí)有流水中會(huì)有一些空擋(氣泡)。

圖片

使用switch_en信號(hào)給所有輸入信號(hào)ready賦值,中間所有寄存器也都由switch_en控制或者由輸入信號(hào)的valid&ready控制。

logic switch_en = !dout.valid | dout.ready


assign din.ready = switch_en;


logic          r_din_valid;
logic          r_din_valid_d1;
logic          r_din_valid_d2;
logic [DW-1:0] r_din_data;
always @ (posedge clk or negedge rst_n) begin
   if(!rst_n) begin
      r_din_data <= 'd0;
   end
   else if(din.valid & din.ready) begin
      r_din_data <= din.data;
   end
end
...


always @ (posedge clk or negedge rst_n) begin
   if(!rst_n) begin
      r_din_valid    <= 'd0;
      r_din_valid_d1 <= 'd0;
      r_din_valid_d2 <= 'd0;
   end
   else if(switch_en) begin
      r_din_valid    <= din.valid;
      r_din_valid_d1 <= r_din_valid;
      r_din_valid_d2 <= r_din_valid_d1;
   end
end


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

    關(guān)注

    7

    文章

    2628

    瀏覽量

    47216
  • IC
    IC
    +關(guān)注

    關(guān)注

    36

    文章

    5838

    瀏覽量

    174917
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5272

    瀏覽量

    119657
  • GitHub
    +關(guān)注

    關(guān)注

    3

    文章

    461

    瀏覽量

    16328
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    淺談公共機(jī)房樣機(jī)制作及日常維護(hù)

    淺談公共機(jī)房樣機(jī)制作及日常維護(hù)隨著電腦和網(wǎng)絡(luò)的應(yīng)用日益普及, 電腦在日常生活中扮演著越來(lái)越重要的角色,而學(xué)校的教育,無(wú)論是高校還是中小學(xué),公共機(jī)房都是一個(gè)不可缺少的教學(xué)實(shí)踐基礎(chǔ)硬件設(shè)備。而如何高效
    發(fā)表于 10-10 15:04

    高手:誰(shuí)能提供一個(gè)用單片機(jī)制作無(wú)線鼠標(biāo)的思路

    高手:誰(shuí)能提供一個(gè)用單片機(jī)制作無(wú)線鼠標(biāo)的思路。
    發(fā)表于 10-24 20:59

    基于HTTP間諜抓包插件分析有道翻譯機(jī)制

    python實(shí)戰(zhàn):利用chrome抓包插件HTTP間諜分析有道翻譯機(jī)制
    發(fā)表于 04-15 11:41

    請(qǐng)推薦激有源鉗位的IC

    請(qǐng)TI工程師推激有源鉗位的IC,主要應(yīng)用在DC-DC電源上,因?qū)掚妷狠斎?-36V范圍,若用正激有源鉗位的話二次側(cè)續(xù)流管會(huì)是比較難處理的問(wèn)題,加之體積小,所以想用激有源鉗位。早先的IC
    發(fā)表于 07-05 11:51

    淺析spark的壓機(jī)制與推測(cè)機(jī)制的原理

    spark的壓與推測(cè)機(jī)制
    發(fā)表于 10-30 06:22

    淺談大型空壓機(jī)系統(tǒng)的維護(hù)保養(yǎng)

    本文主要論述了空壓機(jī)系統(tǒng)在運(yùn)行過(guò)程中的常見(jiàn)故障以及維護(hù)保養(yǎng)的措施,從而減少故障率,提高系統(tǒng)效率。
    發(fā)表于 05-23 14:44 ?21次下載

    5L空壓機(jī)增產(chǎn)節(jié)能改造

    本文簡(jiǎn)要分析了5L空壓機(jī)改造前的使用狀況、存在問(wèn)題及原因,介紹了對(duì)其進(jìn)行改造的思路、實(shí)施及改造后的使用效果。
    發(fā)表于 12-28 16:58 ?13次下載

    FPC傳壓機(jī)和快壓機(jī)的層壓工藝

    FPC傳壓機(jī)和快壓機(jī)的層壓工藝 一,快壓:1.組合方式:?jiǎn)蚊鎵汉碗p面壓,一般常用單面壓。2.所用輔材及其作用(1) 玻纖布﹕
    發(fā)表于 03-17 10:00 ?4990次閱讀

    連續(xù)平壓機(jī)伺服位置系統(tǒng)自適應(yīng)滑模步控制_唐文秀

    連續(xù)平壓機(jī)伺服位置系統(tǒng)自適應(yīng)滑模步控制_唐文秀
    發(fā)表于 01-18 20:24 ?1次下載

    壓機(jī)原理_液壓機(jī)的作用

    本文首先介紹了液壓機(jī)原理,其次介紹了液壓機(jī)的特點(diǎn),最后介紹了液壓機(jī)的作用。
    發(fā)表于 04-28 10:33 ?8252次閱讀

    淺談四柱液壓機(jī)常見(jiàn)故障

    今天鑫宏偉機(jī)械跟大家聊一聊四柱液壓機(jī)比較常見(jiàn)的電路問(wèn)題,希望在面對(duì)同樣的問(wèn)題時(shí)有相對(duì)的解決方案。
    發(fā)表于 03-25 11:51 ?2058次閱讀

    詳解常見(jiàn)的爬蟲(chóng)的兩種機(jī)制

    最近在學(xué)爬蟲(chóng)時(shí)發(fā)現(xiàn)許多網(wǎng)站都有自己的爬蟲(chóng)機(jī)制,這讓我們沒(méi)法直接對(duì)想要的數(shù)據(jù)進(jìn)行爬取,于是了解這種爬蟲(chóng)機(jī)制就會(huì)幫助我們找到解決方法。 常見(jiàn)的
    的頭像 發(fā)表于 07-29 15:58 ?5009次閱讀
    詳解常見(jiàn)的<b class='flag-5'>反</b>爬蟲(chóng)的兩種<b class='flag-5'>機(jī)制</b>

    [IC]淺談嵌入式MCU軟件開(kāi)發(fā)之中斷優(yōu)先級(jí)與中斷嵌套

    [IC]淺談嵌入式MCU軟件開(kāi)發(fā)之中斷優(yōu)先級(jí)與中斷嵌套
    發(fā)表于 12-05 10:21 ?11次下載
    [<b class='flag-5'>IC</b>]<b class='flag-5'>淺談</b>嵌入式MCU軟件開(kāi)發(fā)之中斷優(yōu)先級(jí)與中斷嵌套

    淺談機(jī)場(chǎng)能源管理系統(tǒng)改造項(xiàng)目設(shè)計(jì)思路

    淺談機(jī)場(chǎng)能源管理系統(tǒng)改造項(xiàng)目設(shè)計(jì)思路 馮長(zhǎng)杰 安科瑞電氣股份有限公司 上海嘉定 201801 __【摘要】__針對(duì)國(guó)內(nèi)機(jī)場(chǎng)用能設(shè)備類(lèi)型多、分布區(qū)域廣、采集設(shè)備數(shù)量大的特點(diǎn),從改造的角度分析了能源管理
    的頭像 發(fā)表于 10-30 16:36 ?611次閱讀
    <b class='flag-5'>淺談</b>機(jī)場(chǎng)能源管理系統(tǒng)改造項(xiàng)目設(shè)計(jì)<b class='flag-5'>思路</b>

    伺服壓機(jī)與普通壓機(jī)區(qū)別在哪

    伺服壓機(jī)與普通壓機(jī)的區(qū)別主要體現(xiàn)在以下幾個(gè)方面: 工作原理 伺服壓機(jī)是一種采用伺服電機(jī)驅(qū)動(dòng)的壓機(jī),其工作原理是通過(guò)伺服電機(jī)控制壓機(jī)的上下運(yùn)動(dòng)
    的頭像 發(fā)表于 06-17 09:59 ?818次閱讀