復位信號在使用前一般需要進行消抖處理,也稱為復位濾毛刺。復位的抖動可能會導致芯片產生多次復位動作,給系統帶來不確定性和誤差。消抖的目的是為了確保復位信號的穩定性和可靠性,從而保證系統能夠正常工作。
通過消抖,可以消除復位信號的抖動干擾,保證復位信號的可靠性和穩定性,避免系統故障和數據丟失等問題。
舉個例子,如果要消除30ns以下的復位抖動,那么30ns以下的復位信號rst_n拉低操作就會被消抖電路消除,不會對電路產生任何的影響,只有30ns以上的復位拉低操作才能作用于內部電路。
所以復位消抖電路具體長什么樣子呢?目前我了解的有三種方式,不過因為沒有實際參與過CRG模塊的設計與流片,所以以下內容只做參考。我們假定濾毛刺時鐘為100M,需要濾除的復位抖動為30ns以下的信號。
第一種方式通過濾毛刺時鐘+D觸發器來完成 ,如要濾過30ns的抖動電路圖如下:
D觸發器的數量關系是如何得到的呢?先假設我只有一個延時D觸發器,那么復位信號必須維持L電平在一個clk時鐘周期以上或門才能在時鐘沿處打出一個L信號出來(即時鐘上升沿時rst_n || rst_n_ff1 == 1'b0),如下面的波形圖所示:
同樣的,如果有兩個延時D觸發器,那么復位信號必須維持L電平在兩個clk時鐘周期以上,或門才能在時鐘沿處打出一個L信號出來:
如果有三個延時D觸發器,那么復位信號必須維持L電平在三個clk時鐘周期以上,或門才能在時鐘沿處打出一個L信號出來:
因此,在或們前放置了N個延時D觸發器,就可以濾除N*T(T為消抖時鐘的周期)時長以下的復位毛刺信號。這種方式存在一個巨大隱患,消抖時鐘信號是不受復位控制的,一旦消抖時鐘信號出了什么問題,復位信號將永遠無法從消抖電路傳遞出去。
第二種方式通過累加器來完成, 簡單來說就是數一下rst_n連續出現了多少拍,假如需要通過100M消抖時鐘來濾除100ns以下的復位抖動,那么rst_n要連續出現10拍低電平才達到100ns的復位標準。將rst_n打兩拍rst_n_ff1/rst_n_ff2消除亞穩態,當rst_n_ff2持續達到10拍對外輸出復位信號,對應的波形示意如下:
簡單的代碼示意如下:
reg rst_n_ff1, rst_n_ff2;
reg [3:0]vcnt_100m;
always @(posedge clk_100m) begin
rst_n_ff1 <= rst_n;
rst_n_ff2 <= rst_n_ff1;
end
wire vcnt_100m_clr = (rst_n_ff1 != rst_n_ff2);
always@(posedge clk_100m) begin
if(vcnt_100m_clr)
vcnt_100m <= 4'h0;
else if(!rst_n_ff2)
vcnt_100m <= vcnt_100m + 1'b1;
end
always@(posedge clk_100m) begin
rst_100m_n <= (!rst_n_ff2 & vcnt_100m >=4'd9) ? 1'b0 : 1'b1;
end
這個消抖方案呢同樣存在上面的問題,消抖時鐘信號是不受復位控制的,所以在芯片內的模塊級別可能會被采用,但是在外部復位消抖時是一般不會使用的。
第三種方式是通過延時器件來實現 ,要濾去100ns以下毛刺,那么就引入100ns延時器件,組成如下電路:
對應的波形也很簡單:
通過波形可以看出,如果復位時長不夠100ns,prst_n根本不會被觸發。這個電路的隱患在于如何保證延時器件在不同溫度等外部環境干擾下的延時準確性。
-
D觸發器
+關注
關注
3文章
164瀏覽量
47904 -
延時器
+關注
關注
1文章
36瀏覽量
15097 -
CLK
+關注
關注
0文章
127瀏覽量
17158 -
累加器
+關注
關注
0文章
50瀏覽量
9447 -
消抖電路
+關注
關注
0文章
6瀏覽量
8584
發布評論請先 登錄
相關推薦
評論