關於非同步復位同步釋放
阿新 • • 發佈:2021-01-24
技術標籤: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了,學深入一點後在補吧!!!