FPGA基礎之非同步復位和同步釋放電路的詳細解釋

2022-08-05 15:27:12 字數 1163 閱讀 5696

**自

在有大量非同步復位觸發器的設計中,假設rst_async_n撤除時發生在clk上升沿,則可能發生亞穩態事件(有些觸發器判定為1,有些判定為0,有些甚至會振盪)。

若使用“非同步復位,同步釋放”的方式,則可以避免。也可以說“非同步訊號的同步化”。

如上圖,第一個方框內是非同步復位和同步釋放電路(電路圖中的4個觸發器都是非同步復位,低電平有效)。有兩個d觸發器構成。第一級d觸發器的輸入時vcc,第二級觸發器輸出是可以非同步復位,同步釋放後的復位訊號。

所謂非同步復位和同步釋放,是指復位訊號是非同步有效的,即復位的發生與clk無關。後半句“同步釋放”是指復位訊號的釋放則與clk相關,即同步的。

下面說明一下如何實現非同步復位和同步釋放的:

非同步復位:顯而易見,rst_async_n非同步復位後,rst_sync_n將拉低,即實現非同步復位。

同步釋放:這個是關鍵,看如何實現同步釋放,即當復位訊號rst_async_n撤除時,由於雙緩衝電路的作用,rst_sync_n復位訊號不會隨著rst_async_n的撤除而撤除。

假設rst_async_n撤除時發生在clk上升沿,如果不加此電路則可能發生亞穩態事件。但是加上此電路以後,假設第一級d觸發器clk上升沿時rst_async_n正好撤除,則d觸發器1輸出高電平“1”,此時第二級觸發器也會更新輸出,但是輸出值為前一級觸發器次clk來之前時的q1輸出狀態。顯然q1之前為低電平,故第二級觸發器輸出保持復位低電平,直到下一個clk來之後,才隨著變為高電平。

module ex1 ( 

output rst_sync_n,

input clk, rst_async_n);

reg rst_s1, rst_s2;

always @ (posedge clk, posedge rst_async_n)

if (rst_async_n) begin

rst_s1 <= 1'b0;

rst_s2 <= 1'b0;

endelse begin

rst_s1 <= 1'b1;

rst_s2 <= rst_s1;

endassign rst_sync_n = rst_s2;

endmodule