非同步復位同步釋放

2021-08-07 19:34:08 字數 3281 閱讀 9865

結構簡單,節省資源——(待深度挖掘,為什麼就結構簡單了呢?)

(1)這裡有乙個巨集觀解釋

最好是系統一起復位釋放,但是時鐘域不同,不可能保證系統一起復位釋放。一般來說,系統復位釋放的順序,是需要保證的。否則系統就是不安全的。

舉個例子,系統啟動時,核心讀取啟動指令,要powerdown某外設;但是powerdown的邏輯要求外設和核心沒有通訊請求正在發生。此時,外設比核心先釋放復位的情況(復位釋放的時刻,外設有可能已經開始與核心發生請求),與核心比外設先釋放復位的情況(復位釋放的時刻,外設肯定與核心沒有發生請求),是不一樣的,powerdown也許不能處理成功。

這也是非同步復位訊號需要同步釋放的原因,目的都是為了避免亞穩態的產生。

(2)下面這個解釋會更加的全面一些

fpga開發中,一種最常用的復位技術就是「非同步復位同步釋放」,這個技術比較難以理解,很多資料對其說得並不透徹,沒有講到本質,但是它又很重要,所以對它必須理解,這裡給出我的看法。

講到這個之前,我們要先熟悉recovery time和removal time的概念。如下圖:

對於非同步復位而言,假設是低電平有效,那麼很容易碰到的情況就是我在釋放該訊號的時候,發現它的釋放沿居然跟時鐘跳變沿太接近了!這會導致d觸發器處於亞穩態。我們知道,上圖的reset_n訊號是接d觸發器的直接復位端的。如果兩個跳變沿過於接近,那麼d觸發器就有可能發現自己該取樣了,但是復位訊號還沒取消呢!採還是不採就不能確定。所以,我們要求reset_n訊號釋放的時候,必須遠離clock上公升沿recovery time +removal time這麼大的時間區域,其中clock上公升沿之前的必須遠離的那段時間叫做recovery time,上公升沿之後必須遠離的那段時間叫做removel time。簡單的講,兩者不能同時跳變,或者接近同時跳變!(待深度挖掘,為什麼呢?rst並不是出於輸入埠啊,也要考慮保持建立時間嗎)

為了避免釋放的時候造成亞穩態問題,提出了「非同步復位,同步釋放」的解決辦法。所謂非同步復位,就是復位訊號可以直接不受時鐘訊號影響,在任意時刻只要是低電平就能復位(假如約定低電平復位),也就是說,復位訊號不需要和時鐘同步。而同步釋放就很有意思了,它的意思是讓復位訊號取消的時候,必須跟時鐘訊號同步,也就是說正好跟時鐘同沿。這就奇怪了!因為之前我們剛講,要避免復位釋放沿跟時鐘沿同步。這裡為什麼就可以了呢?

我們先看乙個非同步復位同步釋放的**,verilog**如下:

module prac (

clk,

reset_n,

dataa,

datab,

outa,

outb

);input clk;

input reset_n;

input dataa;

input datab;

output outa;

output outb;

reg reg1;

reg reg2;

reg reg3;

reg reg4;

assign outa = reg1;

assign outb = reg2;

always @ (posedge clk or negedge reset_n) //「非同步復位同步釋放」的復位模組

begin

if (!reset_n)

begin

reg3 <= 1

'b0;

reg4 <= 1

'b0;

endelse

begin

reg3 <= 1

'b1;

reg4 <= reg3;

endend always @ (posedge clk or negedge rst_n) //功能模組,注意rst_n是沿變驅動。

begin

if (!rst_n)

begin

reg1 <= 1

'b0;

reg2 <= 1

'b0;

endelse

begin

reg1 <= dataa;

reg2 <= datab;

endendendmodule

綜合後的rtl圖表如下:

下面對上面的圖進行解說。我們看到,真正驅動reg2和reg1等功能模組工作的復位訊號其實是rst_n訊號,而rst_n訊號則是非同步復位端reset_n經過reg3和reg4兩級寄器之後的產生的新的復位訊號。其中reset_n為非同步復位,而rst_n則是經過同步釋放得到的新的復位驅動訊號。rst_n將與時鐘沿同步,所以它本質上是同步復位訊號。

這樣,通過reg3和reg4兩級鎖存,就把reset_n從乙個非同步復位埠,加工成了乙個輸出同步復位rst_n的模組。

reg3的輸入端永遠接「1」,所以某時刻,正常情況下,reg3和reg4都輸出「1」。假設在某時刻,reset_n訊號被拉為低電平,這將導致reg3直接復位,輸出為「0」,而此時reg4需要下乙個時鐘週期才會變成「0」;而且reg4是在時鐘沿作用下取樣,所以reg4從「1」跳變為「0」的時刻一定跟時鐘沿是同步的,這就得到了乙個同步釋放的結果。而reg2和reg1都是時鐘沿驅動,所以這種同步釋放的rst_n將可以有效的驅動後面的復位,不會造成亞穩態效應。

我們看到,其實最後我們也就是實現了同步復位的功能,那我們為什麼不直接使用同步復位來寫呢?原因在於,很多模組本身不具有同步復位埠,但是基本都支援非同步復位,所以使用非同步復位更加節省資源,如果一定要實現同步復位,那麼會生成更多組合邏輯。比如圖中所有暫存器的clr埠其實就是非同步復位埠。而通過上面多加了reg4觸發,我們讓clr這個非同步復位的埠實現了同步復位的功能,而同步復位訊號效果更好,對毛刺抑制能力強,這就是「非同步復位同步釋放」的意義。所以讓非同步復位埠實現同步復位功能,這才是「非同步復位同步釋放的本質」!

這是因為同步之後,rst作為reg4的d觸發器的資料埠,即d和q。基於d觸發器的基本時序要求,所以d端會在clk邊沿後滿足保持時間約束。q至少會在clk的邊沿後,再等待d的holdtime+tcq時間段後,才能跳變。所以邊沿對邊沿就不存在了啊。

同步復位 非同步復位 非同步復位同步釋放筆記

同步復位 非同步復位 非同步復位同步釋放筆記 一般來說,競爭 冒險是由於組合電路競爭冒險產生毛刺,從而影響整個邏輯電路。其實時序電路中也是存在競爭 冒險的,而這一特性主要是由d觸發器輸入端訊號之間的竟爭產生的。存在以下兩種競爭 冒險。1 clk上公升沿與rstn下降沿同時到達 實際上對於d觸發器而言...

非同步復位同步釋放

簡介 在實際的工程中選擇復位策略之前必須考慮許多設計方面的問題,如使用同步復位或者非同步復位或者非同步復位同步釋放 asynchronous reset synchronous release或者synchronized asynchronous reset 以及是否每乙個觸發器都需要進行復位。復位...

非同步復位,同步釋放

對於復位情況下的亞穩態,常常是由於恢復時間 recovery time 和移除時間 removal time 不滿足造成的。最常用的處理方式是採用非同步復位,同步釋放。採用第二級暫存器輸出作為全域性復位訊號輸出,模組如下 module rst input i clk,input i rst n,非同...