1. 程式人生 > 實用技巧 >每日一摘:Verilog復位

每日一摘:Verilog復位

三種復位實現:同步復位、非同步復位、非同步復位同步釋放

一、同步復位

同步復位是指復位訊號只有在時鐘有效邊沿到來時才能生效的復位方法。如果時鐘有效邊沿未到來,即使是復位訊號有效也不執行復位操作。

程式碼:

`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

電路圖: