1. 程式人生 > 其它 >關於非同步復位同步釋放

關於非同步復位同步釋放

技術標籤:verilog

關於非同步復位同步釋放

一 概念:

非同步置位和復位與時鐘無關,可以解釋為不需要等到時鐘沿到來,也能進行置位和復位。
事件控制語法:
@(<沿關鍵詞 時鐘訊號> or<沿關鍵詞 復位訊號> or <沿關鍵詞 置位訊號> )


同步置位和復位是指只有在時鐘的有效跳變沿時刻置位和復位。
事件控制語法:
1.正沿觸發:
@(posedge clk)
2.負沿觸發:
@(negedge clk)


二.
非同步:

always @(posedge clk or negedge rst_n )

          if(!rst_n)

在這裡插入圖片描述
這種方式佔用的邏輯資源較小,但是容易產生競爭


同步:always @(posege clk or posedge rst_n)

            If(!rst_n)

在這裡插入圖片描述
這種方式佔用的邏輯資源較多,但是不容易產生競爭

三:採用波形圖進行原理解釋

在這裡插入圖片描述
如圖第一黃色圓圈:與時鐘無關;標記為非同步復位效果,只要有復位訊號就進行復位。
第二個黃色圓圈:同步釋放的效果,當復位按鍵釋放之後,復位訊號不是立即消失,而是要等到時鐘上升沿到來時才進行復位。
以上為非同步復位同步釋放,好處:防止復位訊號撤除時產生亞穩態事件。


module Sys_Rst(
    input       clk,
    input       rst,
    output      sys_rst
);

reg     rst_r0;
reg     rst_r1;

always @(posedge clk or posedge rst)begin  //非同步復位與時鐘無關,則無需等時鐘沿的到來
    if(rst)begin          //復位低電平有效
        rst_r0 <= 1'b1;
        rst_r1 <= 1'b1;
    end
    else begin      //rst=0時,不復位:釋放         
        rst_r0 <= 1'b0;     //與時鐘同步的邏輯,為了實現同步釋放
        rst_r1 <= rst_r0;
    end
end

assign  sys_rst = rst_r1;

endmodule 

最近老是不會寫testbench了,學深入一點後在補吧!!!