引言
??本文主要是提供了 ASIC 設計中關于復位技術相關的概念和設計。
一、同步復位 Sync
??當時鐘上升沿檢測到復位信號時,執行復位操作(有效的時鐘沿是前提)。
always @( posedge clk )begin
if(!rst_n)
b <= 0;
else
b <= a;
end
同步復位的 RTL 電路圖
優點
缺點
- 復位信號的有效時長必須大于時鐘周期,才能真正被系統識別并完成復位任務,同時還要考慮諸如 Clock Skew、組合邏輯路徑延時、復位延時等因素;
- 由于大多數的邏輯器件的目標庫內的 DFF 都只有異步復位 SR 端口,所以,倘若采用同步復位的話,綜合器就會在寄存器的數據輸入端口上插入組合邏輯,這樣就會一方面額外增加 FPGA 內部的邏輯資源,另一方面也增加了相應的組合邏輯門時延。
二、異步復位 ASync
??無論時鐘上升沿是否到來,只要復位信號有效,就執行復位操作。
always @( posedge clk or negedge rst_n )begin
if(!rst_n)
b <= 0;
else
b <= a;
end
異步復位的 RTL 電路圖
優點
- 大多數目標器件庫的 DFF 都有異步復位 SR 端口,直接使用的話,就不需要額外的組合邏輯,從而節省資源;
- 設計相對簡單;
- 異步復位信號識別方便(電路在任何情況下都能復位而不管是否有時鐘出現)。
缺點
- 最大的問題在于它屬于異步邏輯,問題出現在復位釋放時,而不是有效時,如果復位釋放接近時鐘有效沿,則觸發器的輸出可能進入亞穩態(此時 clk 檢測到的 rst_n 的狀態就會是一個亞穩態,即是 0 是 1 是不確定的),從而導致復位的失敗;
- 可能因為噪聲或者毛刺造成虛假復位信號(比如以前的游戲機玩到一半突然復位)(注意:時鐘端口、清零和置位端口對毛刺信號十分敏感,任何一點毛刺都可能會使系統出錯,因此判斷邏輯電路中是否存在冒險以及如何避免冒險是設計人員必須要考慮的問題);
- 靜態時序分析比較困難;
- 對于 DFT 設計,如果復位信號不是直接來自于 I/O 引腳,在 DFT 掃描和測試時,復位信號必須被禁止,所以還要消耗額外的同步電路。
三、異步復位、同步釋放
??推薦異步復位、同步釋放的方式,并且復位信號為低電平有效:異步復位、同步釋放指的是復位信號的到來與撤除都與 clk 無關,但是復位信號的撤除是在下一個 clk 到來之后才執行,也就是復位信號 rst_sync_n 由高到低時實現異步復位。電路的目的是防止復位信號的撤除時可能產生的亞穩態。
珍貴的手繪圖
??對于同步釋放,這個是關鍵,即當復位信號 rst_async_n 撤除時(由低到高),由于雙緩沖電路(雙寄存器)的作用,rst_sync_n 不會隨著 rst_async_n 的撤除而撤除。假設 rst_async_n 撤除時發生在 clk 上升沿,如果不加此電路則可能發生亞穩態事件。
??但是,加上此電路之后,假設第一級 D 觸發器 clk 上升沿時 rst_async_n 正好撤除,(第一個 DFF 此時是出于亞穩態的,假設此時識別到高電平;若是識別到低電平,則增加一個 Delay)則 DFF1 輸出高電平,此時第二級觸發器也會更新輸出,但是輸出值為前一級觸發器 clk 來之前時的 Q1 輸出狀態。顯然,Q1 之前為低電平,所以第二級觸發器輸出保持復位低電平,直到下一個 clk 來之后,才隨著變為高電平,即同步釋放。
always @(posedge clk or negedge rst_n)begin
if(!rst_n)
rst_r <= 2'b00;
else
rst_r <= {rst_r[0],1'b1};
end
assign sys_rst_n = rst_r[1];
always @(posedge clk or negedge sys_rst_n)begin
if(!sys_rst_n)
b <= 1'b0;
else
b <= a;
end
異步復位、同步釋放的 RTL 電路圖
-
asic
+關注
關注
34文章
1206瀏覽量
120763 -
時鐘
+關注
關注
11文章
1747瀏覽量
131803 -
SYNC
+關注
關注
1文章
15瀏覽量
11490 -
同步復位
+關注
關注
0文章
27瀏覽量
10739 -
異步復位
+關注
關注
0文章
47瀏覽量
13346
發布評論請先 登錄
相關推薦
評論