一、對於同步復位和非同步復位而言,各自有自己的優缺點:
(1)同步復位:
優點:與時鐘同步,大大降低亞穩態的出現概率;
缺點:消耗片內邏輯資源;
always@(posedge同步復位clk)
if(!rst_n)
a <= 1
'b0;
else
a <= b;
(2)非同步復位:
優點:利用fpga內部暫存器的清零端
,不會增加多餘邏輯消耗
;缺點:容易出現亞穩態,存在於非同步復位和時鐘之間的亞穩態;
always@(posedge clk or非同步復位negedge
rst_n)
if(!rst_n)
a<= 1
'b0;
else
a<= b;
非同步復位產生亞穩態解釋:
always @ (posedge clk or非同步復位的危害negedge
rst_n)
if(!rst_n)
b <= 1
'b0;
else
b <=a;
always @ (posedge clk or
negedge
rst_n)
if(!rst_n)
c <= 1
'b0;
else
c <= b;
note:正常情況下,clk 的上公升沿c 更新為b,b 更新為a。一旦進入復位,b,c 都清零;但是我們不能確定復位訊號rst_n 會在什麼時候結束。如果結束於b_reg0 和c_reg0 的時間只外,那麼一切都會正常。但如果恰恰相反,會出現什麼情況呢? rst_n 的上公升變化出現在了clk 上公升的建立保持時間上,此時clk 檢測到的rst_n 的狀態就會是乙個亞穩態(是0 是1 不確定)。從**裡我們看到如果此時b_reg0 和c_reg0 認為rst_n 為0,那麼依然保持復位清零,而如果認為rst_n為1,那麼就跳出復位。因為此時的rst_n 的不確定性,就可能出現4種情況,即b_reg0 和c_reg0 都復位或者都跳出復位,再或者乙個復位乙個跳出復位。那麼後者就會造成了系統工作不同步的問題,在這個簡單的兩級非同步復位例項中這種危害表現的並不明顯,但是我們試想乙個大的工程專案裡眾多的暫存器出現如此情況又會是如何一番景象呢?
二、由於同步復位和非同步復位都存在一點的缺陷,所以現在大多數工程師均採用另一種復位方式,叫做「非同步復位,同步釋放」,結合了兩者的優點,主要的思想就是非同步的訊號同步化。
1非同步復位、同步釋放always@(posedge
clk)
2 rst_nr <= rst_n; //
現將非同步復位訊號用同步時鐘打一拍34
always@(posedge clk or
negedge
rst_nr)
5if(!rst_nr)
6 b <= 1
'b0;
7else
8 b <=a;910
always@(posedge clk or
negedge
rst_nr)
11if(!rst_nr)
12 c <= 1
'b0;
13else
14 c <= b;
同步復位 非同步復位 非同步復位同步釋放筆記
同步復位 非同步復位 非同步復位同步釋放筆記 一般來說,競爭 冒險是由於組合電路競爭冒險產生毛刺,從而影響整個邏輯電路。其實時序電路中也是存在競爭 冒險的,而這一特性主要是由d觸發器輸入端訊號之間的竟爭產生的。存在以下兩種競爭 冒險。1 clk上公升沿與rstn下降沿同時到達 實際上對於d觸發器而言...
非同步復位同步釋放
結構簡單,節省資源 待深度挖掘,為什麼就結構簡單了呢?1 這裡有乙個巨集觀解釋 最好是系統一起復位釋放,但是時鐘域不同,不可能保證系統一起復位釋放。一般來說,系統復位釋放的順序,是需要保證的。否則系統就是不安全的。舉個例子,系統啟動時,核心讀取啟動指令,要powerdown某外設 但是powerdo...
非同步復位同步釋放
簡介 在實際的工程中選擇復位策略之前必須考慮許多設計方面的問題,如使用同步復位或者非同步復位或者非同步復位同步釋放 asynchronous reset synchronous release或者synchronized asynchronous reset 以及是否每乙個觸發器都需要進行復位。復位...