三種復位實現:同步復位、異步復位、異步復位同步釋放
一、同步復位
同步復位是指復位信號只有在時鍾有效邊沿到來時才能生效的復位方法。如果時鍾有效邊沿未到來,即使是復位信號有效也不執行復位操作。
代碼:
`timescale 1ns / 1ps module sync_reset( input clk, input rst_n, input data_in, output reg data_out ); always @ (posedge clk) if (!rst_n) data_out <= 1'b0; else data_out <= data_in; endmodule
電路圖:
采用同步復位的話,由於大多數寄存器沒有單獨的同步復位端口,綜合出來的RTL一般是數據輸入(data_in)和復位信號(rst_n)取與操作/如圖的MUX。相比於異步復位,會額外消耗電路的組合邏輯資源。
二、異步復位
異步復位是指只要復位信號有效立即執行復位操作。即使是在時鍾有效邊沿未到來的時候,寄存器也執行復位操作。
代碼:
`timescale 1ns / 1ps module async_reset( input clk, input rst_n, input data_in, output reg data_out ); always @ (posedge clk or negedge rst_n) if (!rst_n) data_out <= 1'b0; else data_out <= data_in; endmodule
電路圖:
雖然異步復位沒有占用額外的組合邏輯資源,但是其對復位信號的要求較高,假如復位信號中出現毛刺,會使整個寄存器執行復位操作。
總結一下同步與異步復位各自的優缺點
同步復位 | 異步復位 |
---|---|
優點 | 優點 |
有利於時序分析 | 節省邏輯資源 |
有利於仿真器仿真 | 設計相對簡單 |
能夠濾除復位信號毛刺 | 信號識別方便 |
缺點 | 缺點 |
對復位信號的長度有要求,需要大於一個時鍾周期 | 異步復位容易受到毛刺信號的干擾 |
大多數邏輯器件目標庫內觸發器沒有同步復位端口,若采用同步復位會占用額外的組合邏輯資源 | 異步復位信號在釋放時容易出現問題。異步復位信號在結束的時候,可能會不滿足recovery和removal time,可能使電路進入亞穩態。 |
三、異步復位同步釋放
代碼:
`timescale 1ns / 1ps module test( input clk, input rst_n, input data_in, output reg data_out ); reg rst_n_reg_a,rst_n_reg_b; wire rst_n_sync; always @ (posedge clk or negedge rst_n) if (!rst_n) begin rst_n_reg_a <= 1'b0; rst_n_reg_b <= 1'b0; end else begin rst_n_reg_a <= 1'b1; rst_n_reg_b <= rst_n_reg_a; end assign rst_n_sync = rst_n_reg_b; always @ (posedge clk or negedge rst_n_sync) if (!rst_n_sync) data_out <= 1'b0; else data_out <= data_in; endmodule
電路圖: