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

非同步復位同步釋放原理

關鍵詞:同步釋放,recovery,removal

在數字IC設計中肯定會涉及到非同步復位的問題,因為需要對電路進行復位操作。這種復位設計主要依靠前端設計以及工具來檢查,從數字IC後端的角度上講,只要在timing signoff階段檢查好removal和recovery的check就好。

Removal timing check

Removal time是指在時鐘有效沿來臨之後,非同步復位訊號需要繼續保持有效的最短時間。滿足這個最短時間才能確保對暫存器進行正常的復位。Removal time check的波形圖如下圖所示。Removal timing check與hold time check類似。

Recovery timing check

Recovery time是指在時鐘有效沿到來之前,復位訊號保持高電平的最短時間。即復位訊號變到非復位狀態的電平必須在clk之前一定的時間到達。滿足這個Recovery time,可以確保在時鐘有效沿來臨時,非同步復位訊號處於無效狀態,從而確保正常的資料取樣。

從Removal 和Recovery time的定義知道,只要DFF的復位訊號不在時鐘有效沿附近變化(復位訊號遠離時鐘有效沿),就可以保證電路的正常復位和撤銷。

在實際的設計中,比如有的模組是先復位再給模組供應時鐘,即保證了復位訊號與時鐘在時間上是錯開的,這種流程可以保證不會出現recovery和removal的問題,因為復位置起撤銷時都沒有時鐘。即使操作流程保證不了,出現recovery和removal違例,由於模組此時都不會工作,也沒什麼問題。

同步復位

復位訊號可以理解為一個普通的資料訊號,它只有在時鐘的跳變沿才會其作用,一般只要復位訊號持續時間大於一個時鐘週期,就可以保證正確復位。

非同步復位

復位可以在任何時候發生,表面上看跟時鐘沒有關係,但真實情況是非同步復位也需考慮時鐘跳變沿,因為時鐘沿變化和非同步復位都可以引起Q端資料變化。如果非同步復位訊號跟時鐘在一定時間間隔內發生變化,Q值將無法確定,即亞穩態現象。這個時候既是非同步復位訊號持續時間再長都沒有辦法,因為不定態已經傳遞下去。

同步復位雖然解決了當時鐘的有效沿來臨的時候rst_n的邊沿也正好來臨所出現的冒險與競爭。但是從綜合的電路上可以看出,多了一個組合邏輯MUX。

如果設計中所有的復位都是這樣的,那會增加很多的資源,導致芯片面積很大。那麼有沒有更好的解決辦法呢?答案是有,那就是非同步復位同步釋放機制。

非同步復位,同步釋放

非同步復位,同步釋放就是指在復位訊號到來的時候不受時鐘訊號的同步,而是在復位訊號釋放的時候受到時鐘訊號的同步。

如上圖,單獨看方框2的復位策略,是一個非同步復位電路,即復位訊號有效時不管時鐘訊號是否處於有效沿,輸出都會被複位。但是如果復位訊號在時鐘訊號的上升沿撤銷時,這時候的輸出就是亞穩態。

方框1中電路圖是實現非同步復位同步釋放的關鍵。

非同步復位

當rst_async_n有效時,第一個D觸發器的輸出是低電平,第二個D觸發器的輸出rst_sync_n也是低電平,方框2中的非同步復位埠有效,輸出被複位。

同步釋放

假設rst_async_n撤除時發生在clk上升沿,如果不加此電路則可能發生亞穩態事件(有的時候會打三拍)。但是加上此電路以後,假設第一級D觸發器clk上升沿時rst_async_n正好撤除,則D觸發器1可能輸出高電平“1”,也可能輸出亞穩態,也可能輸出低電平。但此時第二級觸發器不會立刻更新輸出,第二級觸發器輸出值為前一級觸發器Q1的輸出狀態。顯然Q1之前為低電平,故第二級觸發器輸出保持復位低電平。直到下一個時鐘有效沿到來之後,才隨著變為高電平。即實現同步釋放。

在數字後端實現時,如果發現第一級暫存器的非同步復位端存在removal和recovery的timing violation,我們可以不用管。因為這一級只是作為過渡,我們不care timing。

非同步復位同步釋放電路Verilog程式碼實現:

always @ (posedge clk, negedge rst_async_n)
    if (!rst_async_n) begin
        rst_s1 <= 1'b0;
        rst_s2 <= 1'b0;
    end
    else begin
        rst_s1 <= 1'b1;
        rst_s2 <= rst_s1;
    end
    assign rst_sync_n = rst_s2;
endmodule

本文轉自 吾愛IC社群

適合轉行小白哈哈哈