異步復位和同步釋放電路的詳細解釋


轉載自:
http://blog.csdn.net/gtatcs/article/details/8931123
https://www.cnblogs.com/qidaiymm/p/4959445.html
http://www.xue5.com/Developer/Software/665219.html
https://blog.csdn.net/dongdongnihao_/article/details/79827076?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

1、首先給出異步復位信號亞穩態的原因:

  復位結束也就是釋放的時刻恰在時鍾上升沿的建立時間和保持時間之間時無法決定現在的復位狀態是1還是0,造成亞穩態。

  下面是具體解釋:

  在帶有復位端的D觸發器中,當reset信號“復位”有效時,它可以直接驅動最后一級的與非門,令Q端“異步”置位為“1”or“0”。這就是異步復位。當這個復位信號release時,Q的輸出由前一級的內部輸出決定。
然而,由於復位信號不僅直接作用於最后一級門,而且也會做為前級電路的一個輸入信號,因此這個前一級的內部輸出也受到復位信號的影響。前一級的內部電路實際上是實現了一個“保持”的功能,即在時鍾沿跳變附近鎖住當時的輸入值,使得在時鍾變為高電平時不再受輸入信號的影響。對於這一個“維持”電路,在時鍾沿變化附近,如果“reset”信號有效,那么,就會鎖存住“reset”的值;如果reset信號釋放,那么這個“維持”電路會去鎖當時的D輸入端的數據。因此,如果reset信號的“釋放”發生在靠時鍾沿很近的時間點,那么這個“維持”電路就可能既沒有足夠時間“維持”住reset值,也沒有足夠時間“維持”住D輸入端的值,因此造成亞穩態,並通過最后一級與非門傳到Q端輸出。如果reset信號的“釋放”時間能夠晚一點點,也就是說,讓“維持”電路有足夠的時間去鎖住“reset”的值,那么,我們就可以肯定輸出為穩定的“reset”狀態了。這一小段鎖住“reset”值所需要的時間,就是寄存器的removal time要求。

異步復位的弊端:

異步復位中最嚴重的問題是,如果異步復位信號在觸發器時鍾有效沿附近“釋放”(復位信號從有效變為無效)的話,可能會導致觸發器輸出的亞穩態。

  • 異步復位信號釋放(對低電平有效的復位來說就是上跳沿)與緊跟其后的第一個時鍾有效沿之間,有一個必須間隔的最小時間稱為Trecovery(recovery time,恢復時間)。
    舉例:如果異步復位釋放后馬上來了一個時鍾有效邊沿,觸發器輸出端的值將是不確定的,可能是高電平也可能是低電平,可能處於高低電平之間,也可能處於震盪狀態,這就是亞穩態。如下圖所示,Q為輸出。
  • 時鍾有效沿與緊跟其后的異步復位信號釋放之間所必須的最小時間稱為tremoval(removal time消除時間)。小於這個時間,則觸發器的輸出端的值將是不確定的,可能是高電平,可能是低電平,可能處於高低電平之間,也可能處於震盪狀態,並且在未知的時刻會固定到高電平或低電平。這種狀態就稱為亞穩態。
    舉例:如果時鍾有效沿到來后,馬上來了異步復位信號的上升沿(復位信號釋放)觸發器處於亞穩態。如下圖所示。

同步復位的弊端:

同步復位唯一的缺點就是復位信號必須大於一個時鍾周期才能保證被采到,從而能夠復位成功,異步復位信號一旦到來,立馬復位和邊沿沒有關系,所以異步復位信號更容易被識別,在保證同步復位信號持續時長的前提下,同步復位是沒有問題的。

2、異步復位同步釋放。

如圖第一個方框內是異步復位和同步釋放電路。有兩個D觸發器構成。第一級D觸發器的輸入時VCC,第二級觸發器輸出是可以異步復位,同步釋放后的復位信號。

1)電路目的:防止復位信號撤除時產生亞穩態事件。

2)什么是異步復位和同步釋放:是指復位信號是異步有效的,即復位的發生與clk無關。后半句“同步釋放”是指復位信號的撤除也與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 reset_gen ( output rst_sync_n, input clk, rst_async_n);
reg rst_s1, rst_s2;
wire rst_sync_n ;

always @ (posedge clk, posedge 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; //注意這里的rst_sync_n才是我們真正對系統輸出的復位信號

endmodule


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM