更新於 2024/10/17閱讀時間約 6 分鐘

[Verilog] synchronus reset vs asyncronus reset reg

sync rst 和 async rst reg 在rtl上只有差在always block的condition不同,但是在合成上卻是兩種不同type的register,有著不同的優缺

sync reset reg :

always @ (postedge clk) begin
if (!rst_n) begin
a <= 0;
else
a <= input;
end
end

async reset reg :

always @ (postedge clk or negedge rst_n) begin
if (!rst_n) begin
a <= 0;
else
a <= input;
end
end


對於sync reset 而言,合成出來的結果是一個reg D in前接一個mux,

mux會由rst訊號來決定選0或是input作為D的輸入.

對於async reset而言,合成出來的結果是一個多一根reset pin的reg,

藉由這隻reset pin的trigger直接把reg洗成default vaule.


對於這兩種reg type有甚麼差呢?

作為面試答案的話可能有下面幾點比較

async reset :

  1. rst_n訊號assert時,當reg收到rst_n=0時,就會開始把reg設定回reset vaule,較即時
  2. 回復reset value不需要clk的介入,無時無刻都屬於可控狀態
  3. Area 較小
  4. 當reset wire 出現glitch或noise時抵抗力較差, 如果有一個glitch打出到reg reset pin上,value會瞬間reset掉導致function出現錯誤 <- 有甚麼方法可以盡量避免glitch的影響?下集介紹
  5. reset 訊號沒介入data path的timing,對於setup/hold time check較容易收斂一些
  6. 長reset tree難度較高 <- 甚麼是reset tree和一般討論的clk tree有甚麼不同?下集介紹


sync reset :

  1. rst_n 訊號assert需要維持較久,須等到reg收到clk postedge trigger時,reset vaule才會生效
  2. rst_n的功能需要有clk才能生效,module會有先天上的限制,在沒有clk前是無法做reset的,對於有clk gating的電路,假如發生系統reset時會沒有clk讓reg清回reset value
  3. Area 較大
  4. 抵擋reset wire glitch能力較強,glitch出現同時必須配合clk碰到edge trigger的剎那,發生機率較低
  5. reset 訊號介入data path的timing,對於setup/hold time check時必須綜合考慮reset對於timing的影響
  6. reset tree在先前修setup/hold time check時已經和clk tree解過timing問題,長reset tree容易


面試官回頭思考一下,

了解了上述優缺點,答案非常精闢漂亮,

很滿意地問了下一題,在寫design時要怎麼去挑選要用哪種type的reset?

...

..

.


對於這個問題來說,

付費訂閱
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.