同步復位與異步復位

簡介

在實際的工程中選擇復位策略之前必須考慮許多設計方面的問題,如使用同步復位或者異步復位或者異步復位同步釋放(Asynchronous Reset Synchronous Release或者Synchronized Asynchronous Reset),以及是否每一個觸發器都需要進行復位。復位的基本目的是使器件進入到可以穩定工作的確定狀態,這避免了器件在上電後進入到隨機狀態導致跑飛了。在實際設計過程中,設計者必須選擇最適合於設計本身的復位方式;

同步復位

同步復位就是指復位信號只有在時鐘上升沿到來時,纔能有效。同步復位RTL代碼:

綜合後的RTL圖如下:

異步復位

異步復位是指無論時鐘沿是否到來,只要復位信號有效,就對系統進行復位。異步復位RTL代碼:

綜合後的RTL圖如下:

對比兩者綜合後的RTL視圖,發現同步復位會多使用一些邏輯單元,這是因爲一般的觸發器都帶有異步復位端;

同步復位與異步復位的優缺點

同步復位的優點

  • 一般能夠確保電路是百分之百同步的
  • 確保復位只發生在有效時鐘沿,可以作爲過濾掉毛刺的手段

同步復位的缺點

  • 復位信號的有效時長必須大於時鐘週期,才能真正被系統識別並完成復位。同時還要考慮如:時鐘偏移、組合邏輯路徑延時、復位延時等因素;
  • 由於大多數的廠商目標庫內的觸發器都只有異步復位端口,採用同步復位的話,就會耗費較多的邏輯資源

異步復位優點

  • 異步復位信號識別方便,而且可以很方便的使用全局復位
  • 由於大多數的廠商目標庫內的觸發器都有異步復位端口,可以節約邏輯資源

異步復位缺點

  • 復位信號容易受到毛刺的影響
  • 復位結束時刻恰在亞穩態窗口內時,無法決定現在的復位狀態是1還是0,會導致亞穩態

異步復位同步釋放 

使用異步復位同步釋放就可以消除上述缺點。所謂異步復位,同步釋放就是在復位信號到來的時候不受時鐘信號的同步,而是在復位信號釋放的時候受到時鐘信號的同步。異步復位同步釋放的原理圖和代碼如下:

也就是將復位信號經過兩級同步器與輸入信號同步,代碼如下:

//Synchronized Asynchronous Reset
module sync_async_reset (
        input    clock,
        input    reset_n,
        input    data_a,
        input    data_b,
        output   out_a,
        output   out_b);
        
        reg     reg1, reg2;
        reg     reg3, reg4;
        
        always @ (posedge clock, negedge reset_n) begin
            if (!reset_n) begin
                reg3 <= 1'b0;
                reg4 <= 1'b0;
            end
            else begin
                reg3 <= 1'b1;
                reg4 <= reg3;
            end
        end
        wire rst_n;
        assign  rst_n = reg4;//同步復位信號
        always @ (posedge clock, negedge rst_n) begin
            if (!rst_n) begin
                reg1 <= 1'b0;
                reg2 <= 1'b0;
            end
            else begin
                reg1 <= data_a;
                reg2 <= data_b;
            end
        end
        assign  out_a = reg1;//輸出
        assign  out_b = reg2;
        
endmodule  // sync_async_reset

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章