精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

淺談IC反壓機制設計思路

CHANBAEK ? 來源:數字電路IC ? 作者:lookoutwl ? 2023-09-11 17:09 ? 次閱讀

反壓機制指的是在輸出(或者輸入)端連接的模塊不能接收數據(或者沒有輸入數據),此時自己的模塊的運行狀態需要暫停運行。

反壓機制適用于所有擁有握手協議的模塊,且強烈建議使用反壓機制用于自己模塊設計。

反壓機制在公眾號最開始也有寫過,但是過去了很長時間,對設計有了新的理解,這篇文章會細述一對一、多對一、一對多、多對多之間反壓機制的細節和設計。

以下具體示例可以參見我的GitHub:back-pressure-mechanism

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

一、一對一

一對一反壓是反壓機制中的基礎,也是最常見的結構。

圖片

如上圖,如果模塊內部由一個寄存器組成,那模塊的輸出信號din.ready和dout.valid就可以如下設計:

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信號,代表輸出端沒有準備好輸出數據 ,或者是連接輸出端的模塊已經 準備好接收數據。

總結一句話就是模塊(寄存器)的數據可以流動起來。因此switch_en也是輸出口i_ready的賦值信號。

關于valid(或者沒有顯示的data計算部分),只有在switch_en有效時,可以向下傳遞。

如果圖中模塊中由多級一對一的寄存器組成,那么最優的設計思路是像上面設計一樣,一級級拼接起來,也是最復雜的。(而不是原始公眾號文章中,用一個switch_en控制所有的流水使能)

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

以上具體示例可以參見我的GitHub:back-pressure-mechanism/one2one

二、多對一

多對一反壓是處理一對一之外最常見的結構,多用于多個輸入數據運算輸出一個信號。

圖片

處理這種結構,主要思路是 所有輸入有效 ,對于switch2_en 和 switch3_en見上面一對一反壓設計,主要描述switch1_en和輸入輸出之間的關系:

// 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;

以上具體示例可以參見GitHub:back-pressure-mechanism/more2one

三、一對多

以一輸入、二輸出為例:

圖片

輸入的ready和輸出的valid將會取決于所有輸出端口是否 準備好 。

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;

四、多對多

多對多的反壓設計可以看做多對一和一對多反壓的集合。

五、總結

反壓設計的目的是模塊可以在輸入或者輸出沒有準備好是可以自動停止運算,好的反壓機制的作用是可以在運算因為輸入或者輸出的原因停止和啟動時減少其中的空檔期。

六、快速迭代

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

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

圖片

使用switch_en信號給所有輸入信號ready賦值,中間所有寄存器也都由switch_en控制或者由輸入信號的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;
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2671

    瀏覽量

    47340
  • IC
    IC
    +關注

    關注

    36

    文章

    5900

    瀏覽量

    175237
  • 寄存器
    +關注

    關注

    31

    文章

    5317

    瀏覽量

    120008
  • GitHub
    +關注

    關注

    3

    文章

    466

    瀏覽量

    16386
收藏 人收藏

    評論

    相關推薦

    淺談公共機房樣機制作及日常維護

    淺談公共機房樣機制作及日常維護隨著電腦和網絡的應用日益普及, 電腦在日常生活中扮演著越來越重要的角色,而學校的教育,無論是高校還是中小學,公共機房都是一個不可缺少的教學實踐基礎硬件設備。而如何高效
    發表于 10-10 15:04

    高手:誰能提供一個用單片機制作無線鼠標的思路

    高手:誰能提供一個用單片機制作無線鼠標的思路
    發表于 10-24 20:59

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

    python實戰:利用chrome抓包插件HTTP間諜分析有道翻譯機制
    發表于 04-15 11:41

    請推薦激有源鉗位的IC

    請TI工程師推激有源鉗位的IC,主要應用在DC-DC電源上,因寬電壓輸入9-36V范圍,若用正激有源鉗位的話二次側續流管會是比較難處理的問題,加之體積小,所以想用激有源鉗位。早先的IC
    發表于 07-05 11:51

    淺析spark的壓機制與推測機制的原理

    spark的壓與推測機制
    發表于 10-30 06:22

    淺談大型空壓機系統的維護保養

    本文主要論述了空壓機系統在運行過程中的常見故障以及維護保養的措施,從而減少故障率,提高系統效率。
    發表于 05-23 14:44 ?21次下載

    5L空壓機增產節能改造

    本文簡要分析了5L空壓機改造前的使用狀況、存在問題及原因,介紹了對其進行改造的思路、實施及改造后的使用效果。
    發表于 12-28 16:58 ?13次下載

    FPC傳壓機和快壓機的層壓工藝

    FPC傳壓機和快壓機的層壓工藝 一,快壓:1.組合方式:單面壓和雙面壓,一般常用單面壓。2.所用輔材及其作用(1) 玻纖布﹕
    發表于 03-17 10:00 ?5044次閱讀

    連續平壓機伺服位置系統自適應滑模步控制_唐文秀

    連續平壓機伺服位置系統自適應滑模步控制_唐文秀
    發表于 01-18 20:24 ?1次下載

    壓機原理_液壓機的作用

    本文首先介紹了液壓機原理,其次介紹了液壓機的特點,最后介紹了液壓機的作用。
    發表于 04-28 10:33 ?8698次閱讀

    淺談四柱液壓機常見故障

    今天鑫宏偉機械跟大家聊一聊四柱液壓機比較常見的電路問題,希望在面對同樣的問題時有相對的解決方案。
    發表于 03-25 11:51 ?2108次閱讀

    詳解常見的爬蟲的兩種機制

    最近在學爬蟲時發現許多網站都有自己的爬蟲機制,這讓我們沒法直接對想要的數據進行爬取,于是了解這種爬蟲機制就會幫助我們找到解決方法。 常見的
    的頭像 發表于 07-29 15:58 ?5043次閱讀
    詳解常見的<b class='flag-5'>反</b>爬蟲的兩種<b class='flag-5'>機制</b>

    [IC]淺談嵌入式MCU軟件開發之中斷優先級與中斷嵌套

    [IC]淺談嵌入式MCU軟件開發之中斷優先級與中斷嵌套
    發表于 12-05 10:21 ?11次下載
    [<b class='flag-5'>IC</b>]<b class='flag-5'>淺談</b>嵌入式MCU軟件開發之中斷優先級與中斷嵌套

    淺談機場能源管理系統改造項目設計思路

    淺談機場能源管理系統改造項目設計思路 馮長杰 安科瑞電氣股份有限公司 上海嘉定 201801 __【摘要】__針對國內機場用能設備類型多、分布區域廣、采集設備數量大的特點,從改造的角度分析了能源管理
    的頭像 發表于 10-30 16:36 ?654次閱讀
    <b class='flag-5'>淺談</b>機場能源管理系統改造項目設計<b class='flag-5'>思路</b>

    伺服壓機與普通壓機區別在哪

    伺服壓機與普通壓機的區別主要體現在以下幾個方面: 工作原理 伺服壓機是一種采用伺服電機驅動的壓機,其工作原理是通過伺服電機控制壓機的上下運動
    的頭像 發表于 06-17 09:59 ?1029次閱讀