簡介
在實際的工程中選擇復位策略之前必須考慮許多設計方面的問題,如使用同步復位或者異步復位或者異步復位同步釋放(Asynchronous Reset Synchronous Release或者Synchronized Asynchronous Reset),以及是否每一個觸發器都需要進行復位。復位的基本目的是使器件進入到可以穩定工作的確定狀態,這避免了器件在上電后進入到隨機狀態導致跑飛了。在實際設計過程中,設計者必須選擇最適合於設計本身的復位方式。
同步復位
同步復位就是指復位信號只有在時鍾上升沿到來時,才能有效。同步復位RTL代碼:
綜合后的RTL圖如下:
異步復位
異步復位是指無論時鍾沿是否到來,只要復位信號有效,就對系統進行復位。異步復位RTL代碼:
綜合后的RTL圖如下:
對比兩者綜合后的RTL視圖,發現同步復位會多使用一些邏輯單元,這是因為Altera的元件庫中的觸發器帶有異步復位端。
同步復位與異步復位的優缺點
同步復位的優點:
- 一般能夠確保電路是百分之百同步的。
- 確保復位只發生在有效時鍾沿,可以作為過濾掉毛刺的手段。
同步復位的缺點:
- 復位信號的有效時長必須大於時鍾周期,才能真正被系統識別並完成復位。同時還要考慮如:時鍾偏移、組合邏輯路徑延時、復位延時等因素。
- 由於大多數的廠商目標庫內的觸發器都只有異步復位端口,采用同步復位的話,就會耗費較多的邏輯資源。
異步復位優點:
- 異步復位信號識別方便,而且可以很方便的使用全局復位。
- 由於大多數的廠商目標庫內的觸發器都有異步復位端口,可以節約邏輯資源。
異步復位缺點:
- 復位信號容易受到毛刺的影響。
- 復位結束時刻恰在亞穩態窗口內時,無法決定現在的復位狀態是1還是0,會導致亞穩態。
異步復位同步釋放
使用異步復位同步釋放就可以消除上述缺點。所謂異步復位,同步釋放就是在復位信號到來的時候不受時鍾信號的同步,而是在復位信號釋放的時候受到時鍾信號的同步。異步復位同步釋放的原理圖和代碼如下:
1 //Synchronized Asynchronous Reset 2 module sync_async_reset ( 3 input clock, 4 input reset_n, 5 input data_a, 6 input data_b, 7 output out_a, 8 output out_b); 9 10 reg reg1, reg2; 11 reg reg3, reg4; 12 assign out_a = reg1; 13 assign out_b = reg2; 14 assign rst_n = reg4; 15 always @ (posedge clock, negedge reset_n) begin 16 if (!reset_n) begin 17 reg3 <= 1'b0; 18 reg4 <= 1'b0; 19 end 20 else begin 21 reg3 <= 1'b1; 22 reg4 <= reg3; 23 end 24 end 25 26 always @ (posedge clock, negedge rst_n) begin 27 if (!rst_n) begin 28 reg1 <= 1'b0; 29 reg2 <= 1'b0; 30 end 31 else begin 32 reg1 <= data_a; 33 reg2 <= data_b; 34 end 35 end 36 endmodule // sync_async_reset