Synchronous Reset?Asynchronous Reset?


Abstract

  復位是我們經常要使用到的,但是究竟是選擇哪個好呢,兩者之間有什么差別?這個以前都沒怎么仔細看過,這兩天看了一個大牛的論文,做個總結和分析。究竟兩者間有什么區別。

1、Synchronous reset flip-flops with non reset follower flip-flops

每一個verilog程序塊或者VHDL process 應該只構建一種類型的flip-flop,就是一個designer不能將可復位FF與無復位FF混合使用。

module badFFstyle(q2,d,clk,rst_n);
  output q2;
  input d,clk,rst_n;
  reg q2,q1;
  always @(posedge clk)
    if(!rst_n) q1<=1'b0;
    else begin
         q1<= d;
         q2<= q1;
         end
endmodule

在這個always block中q1后面跟着一個無reset的q2,復位信號rst_n變成q2的數據使能信號,產生額外的邏輯。
正確的方式構建follower flip-flop是用兩個verilog程序塊。

module goodFFstyle(q2,d,clk,rst_n);
  output q2;
  input d,clk,rst_n;
  reg q2,q1;
  always @(posedge clk)
    if(!rst_n) q1<=1'b0;
    else begin
         q1<= d;
         end
  always @(posedge clk)
         q2<= q1;
endmodule  

              EXAMPLE 2

figure2

必須注意的是上述的rst_n生成的外部邏輯只是在同步復位中生成,在異步復位中不會產生外部邏輯.

2、Synchronous Reset

Synchronous resets are based on the premise that the reset signal will only affect the state of the FF on the active edge of a clock.

復位信號應用在FF中組成一個組合邏輯作為FF的輸入,這可以用IF-ELSE模塊實現,如果這種模式沒有嚴格遵守,會有兩個問題:

1、一些仿真器中,基於邏輯等式,邏輯會將reset和FF分離成塊。

2、復位信號可能會變成"late arriving signal”相對於時鍾周期,由於reset tree的高fanout,即使有buffer tree,明智地減小它要穿過的logic的數量還是很重要的。

module ctr8sr(q,co,d,ld,rst_n,clk);
  output [7:0]q;
  output      co;
  input  [7:0]d;
  input       ld,rst_n,clk;
  reg    [7:0]q;
  reg         co;
  always @(posedge clk)
    if      (!rst_n) {co,q}<= 9'b0;
    else if (ld)     {co,q}<= d;
    else             {co,q}<= q+1'b1;
endmodule 

              EXAMPLE 3

figure3

 

2.1、Coding style and example circuit

例4顯示了正確的方式去構建同步復位FF。

module sync_resetFFstyle(q,d,clk,rst_n);
  output q;
  input  d,clk,rst_n;
  reg    q;
  always @(posedge clk)
    if (!rst_n) q<= 1'b0;
    else        q<=d;
endmodule 
         EXAMPLE 4

2.2、Advantage of synchronous resets

  (1) 同步復位會綜合成更小的FF,特別當reset生成邏輯電路作為FF的輸入,這樣組合邏輯電路的數量變多,所以總的門電路節省不是那么有意義。

  (2) 同步復位更加容易工作當使用基於周期的仿真器。

  (3) 同步復位確保電路100%是同步的。

  (4) 同步復位確保復位只發生在時鍾有效邊沿,對小的復位毛刺來說,時鍾就像濾波器。

  (5) 在一些設計中,復位必須由內部條件產生,同步復位能濾除毛刺,所以被采用。

  (6) 使用同步復位,FF能夠在復位buffer tree中幫助buffer tree的時序保持在一個周期內。

2.3、Disadvantage of synchronous resets

  (1) 同步復位需要一個脈沖延伸器保證復位脈沖足夠寬能夠被有效時鍾沿采集到。

  (2) 同步復位電路必須要有時鍾。

3、Asynchronous resets

Synopsys要求假如敏感列表中的任何一個信號是邊沿觸發的,那么其余的信號也必須是邊沿觸發。Verilog仿真沒有這種要求,但是如果敏感列表不僅僅對時鍾邊沿和復位邊沿敏感,仿真模型將會不正確。並且只能有時鍾和復位信號能夠在敏感列表中。如果另外的信號在內,仿真模型對FF可能不正確,Synopsys將會報錯。

module async_resetFFstyle(q,d,clk,rst_n);
 outoput q;
 inpout  d,clk,rst_n;
 reg     g;
 always @(posedge clk or negedge rst_n)
   if(!rst_n) q<=1'b0;
   else       q<=d;
endmodule 

               EXAMPLE 5

綜合異步復位的方法因接近復位緩沖樹的遠近不同而不同,如果直接由外部引腳驅動,通常使用set_drive 0命令在復位的引腳,並且在復位網線中設置set_dont_touch_network將會保護網線不被綜合器修改。有時需要set_resistance 0在復位網線上,或者創建一個線載模型在reset輸入端口:set_wire_load pore_list reset.

隨着Synopsys的升級,set_ideal_net命令能創建理想網線,沒有時序升級,沒有延遲優化,沒有DRC混合。

3.1、Modeling verilog Flip-Flops with asynchronous reset and asynchronous set

假如FF的仿真模型中同時包括異步復位和異步set,可能仿真有錯誤除非designer有一些修改,Example 6能正確描述:

module dff3_aras(q,d,clk,rst_n,set_n);
  output q;
  input  d,clk,rst_n,set_n;
  reg    q;
  always @(posedge clk or negedge rst_n or negedge set_n)
    if      (!rst_n)  q<= 1'b0;
    else if (!set_n)  q<=1'b1;
    else              q<= d;
//synopsys translate_off
  always @(rst_n or set_n)
    if  (rst_n or !set_n) force   q=1;
    else                  release q;
//synopsys translate_on
endmodule  

注意:這個問題只是一個仿真的問題而非綜合問題,仿真的問題是由於always block都是邊沿觸發的,如果reset有效,接着set active,然后 reset inactive,FF應該先進入reset狀態,然后進入set狀態。因為都是異步的,所以set當reset is removed時本應該馬上active。但是always block必須等到下一個clk時才能被驅動。

這樣的問題可以用translate_off/translate_on命令來解決。

3.2、Advantage of asychronous resets

  (1) 使用異步復位,reset不會被添加到data path中。沒有額外的path delay。

  (2) 能夠被復位無論有沒有clk present。

3.3、Disadvantage of asynchronous resets

  (1) For DFT,如果異步復位不是直接由I/O引腳驅動,復位網線來自復位驅動器不能被DFT scanning and testing。

  (2) STA變的困難,reset tree的同步復位和異步復位一定要約束確保reset的釋放能在一個clk內發生。

  (3) 最大的問題就是異步可能帶來亞穩態。

  (4) 可能有毛刺等,造成不穩定。

4、Asynchronous reset problem

我們必須考慮的是異步復位的亞穩態情況,就是釋放reset時剛好碰上clk active,這樣就會進入亞穩態。

Figure 5中所示,一個復位信號插入到時鍾信號中,這種情形有兩個潛在的問題:(1)違背復位恢復時間。 (2)復位移動發生在不同時鍾周期在不同順序元件中。

figure5

4.1、Reset recovery time

復位恢復時間指的是rst_n信號無效到clk上升沿之間的時間。有3個內建命令測試recovery time,removal time,$recovery,$removal和$recrem.

復位恢復時間指的是一個建立時間,“PRE或者CLR無效的建立時間”不滿足恢復時間可能造成亞穩態。

4.2、Reset removal traversing different clock cycle

不同復位信號的延遲不同,registers or FF離開reset的狀態不同。

5、Reset synchronizer

Guideline:每一個ASIC使用一個異步復位必須包括一個復位同步的電路。

Figure 6利用了同步復位和異步復位各自的優點:

figure6

一個外部的reset信號將master FF異步復位,輸出的masterrst_n再將剩下的FF異步復位,所以整個設計是異步復位。

reset removal在復位信號失效時完成,第一個FF的輸入被一個clk鎖存,總共經過兩個clk,masterrst_n的值等於第一個FF輸入的值。

兩個FF用來同步復位信號和時鍾脈沖,第二個FF被用來移除一些亞穩態(可能發生在復位信號異步移動和離clk邊沿太近,就是第二個FF用來移除rst_n由0變為1時,由於不滿足recovery time或者removal time所引發的亞穩態),同步FF一定要遠離掃描鏈。

figure7

時序最后的檢查顯示復位時序分布是clk-q傳輸延遲的總和。Figure 7顯示了總的延遲和滿足recovery的時序。

module async_resetFFstyle2(rst_n,clk,asyncrst_n)
  output rst_n;
  input  clk,asyncrst_n;
  reg    rst_n,rff1;
  always @(posedge clk or negedge asyncrst_n)
    if(!asyncrst_n) {rst_n,rff1}<= 2'b0;
    else            {rst_n,rff1}<={rff1,1'b1};
endmodule 

               EXAMPLE 7

6、Reset distribution tree

復位分配樹需要和時鍾樹一樣的關注,復位樹的時序要求對同步復位和異步復位是相同的。

時鍾樹和復位樹的一個重要的區別是不同復位信號間的skew要平衡,skew不是非常嚴格,只要任何復位信號的延遲小於一個clk,並且能滿足復位恢復時間。

為了加快reset信號到達系統的各個FF,復位驅動FF的時鍾由提前的clk來驅動(Figure 10中所示),而非由時鍾樹的clk驅動。

figure10

7、Reset-glitch filtering

當復位信號有毛刺時,我們可以通過delay濾除毛刺,這種方法要求有數字延遲

figure11

 

 

增加這個延遲有多種方法:(1)供銷商提供的宏模塊,能被手動設置。(2)可以自行設計一個module,但必須優化后才能實例化,並且設don’t touch.(3)通過增加buffer。

8、Multi_clock reset issues

對於多時鍾,我們的異步復位,同步釋放電路能夠被每一個時鍾域使用,並且確保了復位信號能夠滿足復位恢復時間.

所以說復位active沒問題,問題在於復位釋放時,由於頻率不同,整個系統不同步.

有兩種技術可以應用:(1)不調整復位移動。 (2)順序調整復位移動。

figure12

8.1、Non-coordinated reset removal

正如Figure 12,一般多用於具有握手信號的多時鍾域中。

8.2、Coordinated reset removal

figure13

一般運用在有順序要求的多時鍾域中.

Reference:

Clifford E. Cummings,"Synchronous Resets, Asynchronous Resets,I am so confused,How will I ever know which to use”.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM