脈衝邊沿檢測的亞穩態處理

2021-08-08 10:44:15 字數 3560 閱讀 1956

一、

原理脈衝邊沿檢測是乙個非同步系統設計中常常會使用到的方法。

假設有乙個系統,時鐘域a是

50mhz

的時鐘域,它有乙個待檢測的變化訊號

test;

存在時鐘域

b,利用此時鐘來檢測時鐘域a中

test

訊號的上下沿。

現在需要分兩種情況討論: 1)

假設時鐘域

a的變化訊號

test

變化得非常快,最大快到和

50mhz

的時鐘一樣快(把

test

想象成時鐘)。這個時候時鐘域

b的時鐘頻率,按照取樣定理,必須大於等於兩倍

50mhz

,即時鐘域

b的時鐘頻率大小必須大於等於

100mhz。

2)第二種情況就是

test

de訊號,在畫素頻率下顯得變化得非常慢。這個時候時鐘域

b去取樣

test

的上下邊沿,就不需要遵循取樣定理。這個時候時鐘域

b的時鐘頻率的大小甚至可以小於

50mhz(

當然可能沒人會這樣設計

),都能正確的取樣到

test

的上下邊沿。

二、

取樣過程中的亞穩態

無論test

是變化得很快還是很慢,時鐘域b的取樣時鐘在取樣的時候,如果正巧碰到或接近

test

變化的邊沿,就會遭遇亞穩態。

如上圖所示,

d(test)

的變化邊沿正巧處於

clk取樣時鐘的

tsh/th

時間內,導致建立或保持時間違例,出現亞穩態(圖中

tmet

稱為決斷時間)。

可以預見,

test

變化得越快,亞穩態出現的概率越大。

而亞穩態的結果就是,q端輸出的結果是隨機的、非預期的、不受控制的。

三、

亞穩態的影響

一般的系統設計都存在復位的訊號(這裡說的復位不一定指全域性復位,也是指區域性的模組、邏輯復位

),可以讓系統從亞穩態導致的錯誤中恢復過來。

所以可以分為兩種情況討論。 1)

後續邏輯受取樣結果的影響時間很短。在正確的邏輯設計中,因為亞穩態出現的概率一般來說是遠遠小於正常預期結果的概率的。所以在短時間內設計雖然取樣遭遇了亞穩態,並且輸出了錯誤的結果。但是系統能很快從錯誤中恢復,受錯誤結果的影響很小。這種情況取樣亞穩態似乎是可以接受的。 2)

第二種就是乙個非常糟糕的情況,後續邏輯受取樣結果的影響時間很長。這個時候,亞穩態導致的錯誤輸出結果對後續邏輯的影響可能是致命的,系統需要很長時間才能從錯誤中恢復過來。

四、

處理亞穩態

實際上非同步系統中消滅亞穩態基本是不可能的(以我的設計經驗來說的

),亞穩態總會發生並導致錯誤的結果產生。只能是減少並消滅亞穩態產生的錯誤結果的影響。

之前的設計中,對於非同步時鐘域的脈衝邊沿檢測是採用的常用的方法。

首先用第一級暫存器做同步(這裡示例打一拍,推薦打兩拍

),然後再用兩級暫存器做邊沿檢測。

大致**如下:

always@(posedge

clk)

begin

sync<=

test;

reg_r<=

sync;

reg_n<=

reg_r;

end

assign

rise_t=

reg_r&(!

reg_n);

//上公升沿檢測

其中test

為輸入的待檢測訊號,

sync

為第一級同步暫存器。

reg_r

和reg_n

為兩級暫存器檢測

test

的上公升沿。

這段**中,亞穩態就出現在

sync

暫存器上。

sync

輸出錯誤的結果,就將導致

rise_t

錯誤的拉高乙個週期。

如何減少並消滅

sync

暫存器錯誤給後續邏輯帶來的影響呢?可以採用下面示例**的做法(參考特權的寫法):

always@(posedge

clk)

begin

sync<=

test;

reg_r1<=

sync;

reg_r2<=

reg_r1;

reg_r3<=

reg_r2;

reg_r4<=

reg_r3;

end

assign

rise_t=

reg_r1&

reg_r2&(!

reg_r3)&(!

reg_r4);

同樣是用

sync

先做一級同步寄存,然後使用了四級暫存器來寄存

sync

輸出的結果。最後在判斷上公升沿的時候用四個暫存器做邏輯判斷。

實際工程中表明這種簡單的方法可以有效的減少亞穩態導致的錯誤結果給後續邏輯帶來的影響(在實際工程中,代檢測的訊號變化率相對很慢。而設計需要對這個訊號的下降沿進行取樣計數,然而最初實際的結果為計數遠遠大於預期的值。因此判斷舊的檢測方法或許是因為亞穩態問題,將上公升沿也判斷成了下降沿,因此計數變大。在使用四級暫存器做邏輯判斷後,計數達到了預期值,且計數並沒有減少。當然,也有可能會減少的,因為下降沿也會遇到亞穩態)。

FPGA亞穩態狀態檢測邊沿

如上圖所示,當時鐘上公升沿來的時候,資料恰好改變,這個時候輸出的結果就無法確定是0 1,暫存器會經過一段時間的抖動然後輸出乙個結果 無法確定是正確還是錯誤 通過三個暫存器,資料的抖動會消失,從而得到穩定的資料輸出 資料同樣不確定是否正確 當暫存器抖動之後輸出為0時,如下圖所示,通過兩個暫存器,就可以...

亞穩態的世界

同步系統中輸入訊號總是滿足觸發器的時序要求,不會發生亞穩態。非同步系統中,由於資料和時鐘的關係不固定,所以可能會出現違反建立時間和保持時間的現象,出現亞穩態。並非所有不滿足建立和保持時間的輸入變化都會導致亞穩態。觸發器是否進入亞穩態和返回亞穩態所需時間取決於生產器件的工藝技術與外界環境。一般觸發器都...

FPGA基礎之脈衝邊沿檢測原理verilog版本

最近一直忙著找工作。哎,希望保佑我通過二面吧。verilog的脈衝檢測方法一直在用,就那幾句話,但一直沒想他的原理,今天乙個同學說筆試的遇到這個了,我一想,要我寫還真寫不出來,不懂原理,怎麼寫啊。死記硬背是我不喜歡的。網上搜了一下,總結一下幾種方法。首先介紹一下基本的原理。脈衝邊沿的特性 兩側電平發...