女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

在RTL編碼書寫中如何考慮時延與布線的問題呢?

冬至子 ? 來源:小何的芯像石頭 ? 作者:五線譜是偶然來的 ? 2023-06-27 10:36 ? 次閱讀

在RTL編碼中考慮時延

分if-else,case 的各種情況分開討論,主要目的是將分支支路中 晚到的信號放到離輸出最近的一級中.

對多if語句:

代碼

為下面代碼為多if語句

module mult_if (a,b,c,d,sel,z)
 input a,b,c,d;
    input[3:0]sel;
 output Z;
 reg Z;
    always@(*) begin
     z=1'b0;
        if (sel[o])z=a;
        if (sel[1])z=b;
        if (sel[2])z =c;
        if (sel[3])z =d;
 end
endmodule

對應的硬件結構為有優先級的級聯多路選擇器

圖片

如果有個別信號到來的比較晚。應該要盡可能把這個延遲較大的分支單獨拿出來,放到離出口最近的選擇器中。假設b信號的延遲較大,可以在不影響邏輯功能的前提下,將b往后拉,如:

always@(*) begin
     z=1'b0;
        if (sel[o])z=a;
        if (sel[2])z =c;
        if (sel[3])z =d;
        // if (sel[1])z=b;
        if(sel[1]& ~(sel[2]|sel[3]))
            z = b_is_late;
 end

此時如果僅將if (sel[1])z=b;直接放下會使原來的邏輯功能改變。修改后的電路:

圖片

對單if語句

代碼:

module single_if_late (A,C,CTRL_is_late_arriving,Z):
input [6:1]A:
input [5:1]C;
input CTRL_is_late_arriving:
output Z;
reg Z;
always@(A or C or CTRL_is_late_arriving)begin
 if(C[1]==1'b1)
        Z=A[1];
    else if (C[2]==1'b0)
        Z=A[2];
 else if (C[3]==1'b1)
        Z=A[3];
    else if (C[4]==1'b1&CTRL_is_late_arriving==1'b0)
        Z=A[4];
    else if (C[5]==1'b0)
        Z=A[5];
 else
        Z=A[6];
 end
endmodule

其中 CTRL_is_late_arriving 到來延遲較大,此時就會把這個延遲較大的分支單獨拿出來,放到離出口最近的選擇器中:

圖片

具體的修改代碼是這樣的,先將原來的if打散,再在后面出口做一個選擇,單獨處理A[4]:

module single_if_improved (A,C,CTRL_is_late_arriving,Z);
input [6:1]A;
input [5:1]C;
input CTRL_is_late_arriving;
output Z;
reg Z,Z1;
wire Z2,prev_cond;
always@(A or C)begin
 if(C[1]==1'b1)
        Z1=A[1];
    else if (C[2]==1'b0)
        Z1=A[2];
    else if (C[3]==1'b1)
        Z1=A[3];
    else if (C[5]==1'b0)
        Z1=A[5];
    // removed the branch with the late_arriving control signal
    // else if (C[4]==1'b1&CTRL_is_late_arriving==1'b0)
 else
        Z1=A[6];
end
    
    assign Z2=A[4];
    assign prev_cond=(C[1]=1'b1)l(C[2]==1'b0)||(C[3]==1'b1);
    
always @ (C or prev_cond or CTRL_is_late_arriving or Z1 or Z2) begin
    if((C[4]==1'b1)&&(CTRL_is_late_arriving==1'b0))
  if(prev_cond) Z=Z1:
  else Z=Z2;
 else Z=Z1 ;
end
endmodule

case和if嵌套

module case_in_if_01(A,DATA_is_late_arriving,C,sel,Z);
input[8:1] A;
input DATA_is_late_arriving;
input [2:0] sel;
input [5:!] C;
output Z;
reg Z;
    
always @ (sel or C or A or DATA_is_late_arriving) begin
 if (C[1])
  Z=A[5];
    else if (C[2]==1'b0)
  Z=A[4];
    else if (C[3])
  Z=A[1]:
 else if (C[4])
  case (sel)
   3'b010:Z=A[8];
   3'b011:Z=DATA_is_late_arriving;
   3'b101:Z=A[7]:
   3'b11O:Z=A[6];
  default:Z=A[2];
  endcse
 else if (C[5]==1'b0)
  Z=A[2];
 else Z=A[3];
end
endmodule

假設case中有一個支路到達比較晚,其電路結構為:

圖片

此時與單if相似,將這條通路往外提:

圖片

代碼與單if-else結構的相似,去掉了case分支,單獨判斷這個分支:

module case_in_if_01(A,DATA_is_late_arriving,C,sel,Z);
input[8:1] A;
input DATA_is_late_arriving;
input [2:0] sel;
input [5:!] C;
output Z;
reg Z,Z1;
reg FIRST_IF;
always @ (sel or C or A or DATA_is_late_arriving) begin
 if (C[1])
  Z1=A[5];
    else if (C[2]==1'b0)
  Z1=A[4];
    else if (C[3])
  1Z=A[1]:
 else if (C[4])
  case (sel)
   3'b010:Z1=A[8];
   // 3'b011:Z=DATA_is_late_arriving;
   3'b101:Z1=A[7]:
   3'b11O:Z1=A[6];
  default:Z1=A[2];
  endcse
 else if (C[5]==1'b0)
  Z1=A[2];
 else Z=A[3];
 FIRST_IF=(C[1]==1'b1) || (C[2]==1'b0) ||(C[0]==1'b1);
 if(!FIRST_IF && C[4] &&(sel==3'b011))
        Z=DATA_is_late_arriving;
    else Z=Z1;
end
endmodule

“先加后選”和“先選后加”

注意“先加后選”和“先選后加”兩種方法對數據通道延遲的影響,對以下代碼:

module BEFORE(ADRESS, PTR1,PTR2, B,CONTROL,COUNT);
input [7:O] PTR1, PTR2;
input CONTROL: //CONTROL is late arriving
output [15:0] COUNT:
parameter [7:0] BASE=8'b1000000;
wire [7:O] PRT,OFFSET;
wire [15:0] ADDR;
    
assign PTR = (CONTROL ==1'b1)?PTR1:PTR2;
assign OFFSET=BASE-PTR:
assign ADDR = ADRESS-{8'h00-OFFSET};
assign COUNT=ADDR+B;
endmodule

這里是先選后加, 假設控制信號到達比較晚 ,則需要改為先加后選:

圖片

代碼修改如下

assign OFFSET1 = BASE-PTR1;//could be T(BASE,PTR)
assign OFFSET2 = BASE-PTR2; //could be f(BASE,PTR)
assign ADDR1 = ADRESS-{8'h00-OFFSET1);
assign ADDR2 = ADRESS-{8'h00-OFFSET2};
assign COUNT1=ADDR1+B;
assign COUNT2=ADDR2+B;
assign COUNT=(CONTROL==1'b1)?COUNT1:COUNT2;

復制數據路徑將CONTROL信號放到最后

調整計算順序

在下例中,包含一個加法器和比較器:

module cond_oper(A,B,C,D,Z):
parameter N=8;
input [N-1:O] A,B,C,D; //A is late arriving
output [N-1:0] Z;
reg [N-1:O] Z;
always@(A,B,C,D) begin
 if(A+B 24)Z<=C;
 else Z<=D;
end
endmodule

假設A信號到來較晚,此時調整A的計算路徑,原來的計算順序為:

圖片

通過調整代碼:

always@(A,B,C,D) begin
 if(A 24-B)Z<=C;
 else Z<=D;
end

A將少過一個減法器,此時電路結構變為:

圖片

在RTL編碼中考慮面積

  • 隨著芯片工藝的進步和生產成本的降低,面積顯得沒有時序問題重要。
  • 減少設計面積可以
    • 成本降低、功耗降低,
    • 特別是對于FPGA的設計,直接決定FPGA的選型。
  • 一般綜合過程中可以對面積進行優化,但在RTL編碼中如果注意節約設計面積,往往可以達到事半功倍的效果。
  • 減少設計的面積
    • 估計設計使用資源的數量
    • 知道設計中那些部分占用了較大的面積(觸發器,加法器,乘法器)
  • 觸發器的資源估計
    • 觸發器的數量:觸發器的數量由功能決定,很難減少
    • 觸發器的面積:比較好估計

操作符優化

所以優化目標大頭放在 組合邏輯 中,其對應著RTL代碼中的各種操作符 RTL代碼屮的一個“+“可能對應著一個64位的加法器。以下這些操作符都可能產生較大的組合邏輯,使用時應加以重視,如“+”、“-”、“×”、“/”以及 條件語句的比較運算 。對于這些操作,首先應該 判斷其必要性 ,是否能用更簡單的運算代替。

比如考慮

if(A< 32)

可以將其修改為

if(A[5]==1'b1)

通過這種方式即可節省一個6bit的比較器

此處例子中,需要考慮A的自身位寬,未必適合于所有設計,對所有定值比較都可以這樣考慮

資源共享

如果,必須使用復雜的運算符,則應考慮是否可以 資源共享 。盡管電路邏輯綜合工具也會在綜合的過程中采用資源共享的方法進行優化,但是,綜合器的策略是有限的,因此在編寫RTL的時候,應該盡量考慮共享,而不是把這項工作完全留給綜合工具。

比如對以下代碼:

If(y1 >a+b+q)
 statement1;
If(y2 >a+b+r)
 statement2;
If(y3 >a+b+s)

可以修改為:

sum<=a+b;
If(yl >sum+q)
 statement1;
If(y2 >sum+r)
 statement2;
If(y3 >sum+s)

則可以減少兩個不必要的加法器

多比特

多比特的信號也往往會占用較大的資源,因為使用這些信號的操作都是對所有的比特進行的,相當于成倍使用資源,因此,對這類信號的操作也應重視。

應該看一看這個信號的所有比特是否都需要參與操作,如果不是,則可以只對需要的部分比特進行操作。

假設:

訪問—RAM的地址有8比特,而寫入操作時從0開始,每隔32個地址寫入一個值,地址的產生可以有兩種寫法。

addr <= addr + 32;

addr[7:5] <= addr[7:5] + 1;
addr[4:0] <= addr[4:0] + 0;

邏輯優化

針對不同的設計,還有可能有各種各樣的優化和改進的方法,但是,歸結到一點,就是編寫代碼時,應對操作符有足夠的重視,對有可能簡化的地方盡量簡化。 邏輯簡化往往在減少面積的同時也減少了延遲 ,因此,是值得花費一些時間的。

在RTL編碼中考慮功耗

考慮電路割點的功耗:

1.jpg

在RTL設計中無法改變負載電容工作電壓 ,所以在RTL級主要考慮盡量降低電路的翻轉頻率

主要措施包括如下:

  • 門控時鐘,門控時鐘是電路設計最常用也是最有效的方法,在邏輯綜合階段可以讓綜合工具自行插入。
  • 增加使能信號,使得部分電路只有在需要工作時才工作;
  • 對芯片各個模塊進行控制,在需要工作時才工作;
  • 除了有用信號和時鐘的翻轉會消耗功耗,組合邏輯產生的毛刺也會大量消耗功耗。但是,毛刺在設計中無法避免,因此,只有盡呈減少毛刺在電路中的傳播,才可以減少功耗。即在設計中,盡量把產生毛刺的電路放在傳播路徑的最后。另外,可以使用一些減少毛刺的技術。
  • 對于有限狀態機,可以通過低功耗編碼來減少電路的翻轉。比如對4比特狀態編碼:

圖片

更改狀態編碼后:

圖片

總的來說,使用這些技術時,應首先

  • 考慮全局的功耗控制
  • 在RTL編碼中,注意消耗功率較多的電路,如狀態機、譯碼器、多路選擇器等。
  • 在綜合中,使用門控時鐘和其他減少功耗的優化技術。
  • 這里要注意下門控時鐘和增加使能控制的區別。增加使能僅僅是使得電路的信號不在翻轉,但是時鐘每個周期還會繼續翻轉。而門控時鐘則是直接關掉時鐘,這種方法效果更好。

在RTL編碼中考慮布線問題

布線(routing)是芯片設計中 最后的流程 ,其功能是根據門級網表的描述實現各個單元的連接

布局(placement)是芯片設計中 最關鍵的因素 ,但即使使用最好的布局工具,還是可能出現無法布通的情況

-> 如果可以在RTL編碼階段考慮代碼可能對布線產生的影響,就可能避免最后出現無法布通的情況。

布線階段,通常熱點是一個影響布線質量的問題。

熱點是指設計的功能需要在一個面積內占用大量的布線資源:

圖片

熱點產生原因:RTL編碼時使用了特定的結構,如很大的MUX:

圖片

  • 這種結構產生的熱點,在綜合的時候,導致的延遲是看不出來 只有到了布線階段才能給看到它的負面影響。因此,我們在RTL階段應該重視這種電路,及早發現可能在布線階段產生的問題。
  • 如果設計的功能中確實需要采用大的mux,可以通過其他方式改變他的結構。其基本的思路是將一個大的mux分解為多級較小的mux。

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA設計
    +關注

    關注

    9

    文章

    428

    瀏覽量

    27140
  • 比較器
    +關注

    關注

    14

    文章

    1840

    瀏覽量

    108517
  • RTL
    RTL
    +關注

    關注

    1

    文章

    388

    瀏覽量

    60663
  • 觸發器
    +關注

    關注

    14

    文章

    2032

    瀏覽量

    61874
  • 多路選擇器
    +關注

    關注

    1

    文章

    22

    瀏覽量

    6662
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    求PCB布線考慮的EMC的相關資料

    最近遇到一個項目,其電源有24V,12V,5V,及3.3V;也有分模擬地,數字地及大地;設計涉及到電機大電流驅動,因此該PSB板的布線比較復雜。現求PCB布線
    發表于 10-14 13:18

    LabVIEW

    請教大家一個問題,一個程序框圖:假如在一個While循環,程序執行的時間需要100ms,且我該while循環中加了一個500ms的
    發表于 11-22 11:42

    函數

    本帖最后由 sdzd 于 2013-12-25 10:05 編輯 單片機,用C語言進行編程時,時函數如下編寫,似乎無法確切對應,假設晶振為8Mhz,問:(1)對應1微秒(us),方式一
    發表于 12-25 09:12

    信號PCB走線傳輸時(下)

    可以看出信號線周圍的攻擊線會對信號線的傳輸時延到來影響,如果設計處理不當,導致傳輸時偏差較大最終會導致系統工作不穩定。設計的時候要盡量減小這種影響,可以從以下幾點考慮: 1,拉大線間距。線間距越大
    發表于 10-21 09:51

    信號PCB走線傳輸時 (上)

    / DDR2/ DDR3。DDR4預計2015年將成為消費類電子的主要設計,隨著DDR信號速率的不斷提高,DDR4設計特別是DQ和DQS之間傳輸時對設計者提出更高的挑戰。
    發表于 10-21 09:54

    信號PCB走線關于串擾 , 奇偶模式的傳輸時

    為消費類電子的主要設計,隨著DDR信號速率的不斷提高,DDR4設計特別是DQ和DQS之間傳輸時對設計者提出更高的挑戰。PCB設計的時候為了時序的要求需要對源同步信號做一些等長,
    發表于 01-05 11:02

    Verilog HDL代碼書寫規范

    :① 邏輯功能正確,②可快速仿真,③ 綜合結果最優(如果是hardware model),④可讀性較好。2. 范圍本規范涉及Verilog HDL編碼風格,編碼應注意的問題, Testbench的
    發表于 12-08 14:36

    高速PCB的布線需要考慮哪些事項?

    PCB(印制電路板)布線高速電路具有關鍵作用,那么高速PCB的布線需要考慮哪些事項? 這個
    發表于 08-02 06:46

    介紹RTL設計引入的后端實現過程布線問題

    RTL設計引入的后端實現過程布線(routing)問題。后端物理實現需要完成芯片中布局布線(place&routing)的工作。
    發表于 04-11 17:11

    深入剖析RTL與LUT之間的關系

    1、RTL與LUT的關系理解  Quartus II EDA工具進行綜合  布局布線后,點擊“Chip Planner”,Chip Planner打開后可以看到版圖模型中有一個塊藍色區域的顏色變深
    發表于 10-14 14:43

    低時無線系統 有哪些設計因素是要注意的?

    對許多應用系統和用戶都非常關鍵,如電信運營商采用的低時通信系統和應用,以及高頻交易無線網絡的用戶。 信號傳輸過程,有很多地方都會發生延遲,從入射無線信號與天線交互,直到信號所包含的信息可以被使用或到達
    的頭像 發表于 04-23 16:54 ?2506次閱讀

    RTL編碼考慮延時、面積、功耗與布線的問題

    看下面一段代碼,第四個else if 分支的數據信號DATA_is_late_arriving延時比較高,要怎么處理,將電路的性能提高?
    的頭像 發表于 06-05 15:42 ?1773次閱讀
    <b class='flag-5'>在</b><b class='flag-5'>RTL</b><b class='flag-5'>編碼</b>中<b class='flag-5'>考慮</b>延時、面積、功耗與<b class='flag-5'>布線</b>的問題

    AD的PCB如何增加布線

    AD的PCB如何增加布線AD軟件,要增加布線層,需要進行以下步驟: 步驟1:打開A
    的頭像 發表于 10-26 17:47 ?1.2w次閱讀

    一個系統,包含了dsp和pld,請問布線時要注意哪些問題

    一個系統,包含了dsp和pld,請問布線時要注意哪些問題設計和布線系統
    的頭像 發表于 11-24 14:44 ?838次閱讀

    蛇形走線設計電路板布線的秘密

    布線方式,經常出現在高頻電路板等特定應用。這種走線方式名稱來源于其外形,因為線路呈現出類似蛇形的彎曲形態。電路設計中使用蛇形走線并非出于美觀,而是出于對電氣性能的考慮。那么,蛇形
    的頭像 發表于 08-20 09:18 ?666次閱讀