晶片設計中需要複位操作使電路進入穩定狀态。複位操作分為同步複位和異步複位。
同步複位
同步複位指在時鐘上升沿時複位信号才起作用,複位時需要時鐘。
always @(posedge clk) begin
if(!rst_n)
dout <= 0;
else
dout <= din;
end
如上,當rst_n為0時,隻有clk上升沿時,dout才為0,dout被同步複位。
同步複位優點:
1.電路都是同步複位;
2.可以過濾毛刺。
同步複位缺點:
1.複位信号的有效時間必須大于時鐘周期,才能完成複位。
2.由于廠商目标庫中隻有異步複位端口,采用同步複位的話,會增加邏輯資源。
3.後端處理時需要區分複位信号和條件清零信号。
異步複位
異步複位不需要時鐘沿,隻要複位信号有效,就可以進行複位。
always @(posedge clk or negedge rst_n) begin
if(!rst_n)
dout <= 0;
else
dout <= din;
end
如上RTL,rst_n信号放在敏感清單中。
異步複位優點:
1.異步複位友善識别,而且可以很友善實作全局複位。
2.廠商目标庫内的觸發器都有異步複位信号端口,可以節省邏輯資源。
異步複位缺點:
1.容易受到毛刺影響。
2.如果異步信号的撤離時刻恰好在亞穩态視窗内,會導緻亞穩态。
異步複位同步釋放
使用異步複位同步釋放可以消除異步複位毛刺和亞穩态問題。實作的方法為,把是實際使用的異步複位信号用目标時鐘做異步複位操作,然後用新的生成的複位信号做資料的複位信号。
reg reset_n_1d;
reg reset_n_2d;
reg reset_n_3d;
wire rst_n;
always @(posedge clk or negedge reset_n) begin
if(!reset_n)
reset_n_1d <= 1'b0;
reset_n_2d <= 1'b0;
reset_n_3d <= 1'b0;
else
reset_n_1d <= 1'b1;
reset_n_2d <= reset_n_1d;
reset_n_3d <= reset_n_2d;
end
assign rst_n = reset_n_3d;
always @(posedge clk or negedge rst_n) begin
if(!rst_n)
dout <= 0;
else
dout <= din;
end