0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA系統(tǒng)中三種方法減少亞穩(wěn)態(tài)的產(chǎn)生

CHANBAEK ? 來源:頭條號先象社區(qū) ? 作者:頭條號先象社區(qū) ? 2023-03-23 13:18 ? 次閱讀

在基于FPGA的數(shù)字系統(tǒng)設(shè)計中,異步時序是指時序邏輯電路內(nèi)部寄存器時鐘來自兩個及以上的時鐘源,如圖1所示,而且時鐘源之間沒有確定的相位關(guān)系。 相應(yīng)地,把信號從寄存器FF1傳輸?shù)郊拇嫫?FF2,稱為跨時鐘域傳輸 (Clock Domain Crossing,CDC),其中FF1稱為源寄存器,F(xiàn)F2稱為目的寄存器 。

圖1 異步時序電路示例

信號在跨時鐘域傳輸時,由于源寄存器的時鐘和目的寄存器的時鐘之間相位沒有確定的相位關(guān)系,所以數(shù)據(jù)從源寄存器FF1發(fā)出后,有可能在任何時刻到達目的寄存器,因此無法保證能夠滿足目的寄存器FF2的建立時間和保持時間要求。 如果信號不能在目的寄存器的建立時間和保持時間定義的窗口內(nèi)保持穩(wěn)定,那么目的寄存器的輸出有可能進入 非0非1 (介于VOHmin和VOLmax之間)的不確定狀態(tài),如圖2所示,這個狀態(tài)稱為亞穩(wěn)態(tài) (metastability)。 相應(yīng)的,把目的寄存器脫離亞穩(wěn)態(tài)進入穩(wěn)態(tài)的時間稱為決斷時間 (resolution time),用tmet表示。 經(jīng)過決斷時間后,目的寄存器的輸出最終穩(wěn)定到0還是1是隨機的,與輸入信號沒有必然的關(guān)系。

圖2 時序違規(guī)導(dǎo)致亞穩(wěn)態(tài)

處于亞穩(wěn)態(tài)的寄存器在決斷時間前輸出電壓在高電平與低電平之間振蕩時,可能會導(dǎo)致后續(xù)的數(shù)字部件作出不同的判斷,可能判斷為0、可能判斷為1,也可能進入亞穩(wěn)態(tài),從而引發(fā)數(shù)字系統(tǒng)產(chǎn)生錯誤。

除了信號的跨時鐘域傳輸外,異步時序還有另外兩種情況。

第一種情況是系統(tǒng)復(fù)位時,無論是異步復(fù)位還是同步復(fù)位。

對于異步復(fù)位來說,復(fù)位信號如果不能在觸發(fā)器的恢復(fù)時間和撤除時間窗口內(nèi)保持穩(wěn)定,如圖3所示,那么就可能影響觸發(fā)器輸入數(shù)據(jù)的鎖存過程而產(chǎn)生亞穩(wěn)態(tài)。 觸發(fā)器的輸出在Tco后可能會進入亞穩(wěn)態(tài),最終可能穩(wěn)定到0,也可能穩(wěn)定到1,從而導(dǎo)致系統(tǒng)發(fā)生錯誤。

圖3 異步復(fù)位電路及時序圖

對于同步復(fù)位來說,當輸入信號D為高電平時,如果復(fù)位信號不能在觸發(fā)器的建立時間和保持時間定義的窗口內(nèi)保持穩(wěn)定,如圖4所示,同樣可能產(chǎn)生亞穩(wěn)態(tài)。

圖4 同步復(fù)位電路及時序圖

第二種情況是系統(tǒng)對外部信號的采集。

對于按鍵和外部中斷等輸入信號,由于信號的作用時間不受系統(tǒng)時鐘的控制,因此在采集過程中,外部信號可能在任何時刻發(fā)生變化,所以也無法保證滿足寄存器建立時間和保持時間的要求。

綜上分析,亞穩(wěn)態(tài)產(chǎn)生的原因是 :觸發(fā)器的輸入信號變化不滿足寄存器建立時間和保持時間的要求,或者復(fù)位信號不滿足觸發(fā)器恢復(fù)時間和撤除時間的要求。

亞穩(wěn)態(tài)是觸發(fā)器固有的特性。 在基于FPGA的數(shù)字系統(tǒng)設(shè)計中,主要應(yīng)用三種方法減小亞穩(wěn)態(tài)傳播的概率 :①引入同步器來減小單bit信號亞穩(wěn)態(tài)傳播的概率,實現(xiàn)異步信號與目的時鐘域的同步; ②應(yīng)用異步FIFO實現(xiàn)多bit數(shù)據(jù)的跨時域傳輸; ③應(yīng)用異步復(fù)位同步釋放信號改善純異步復(fù)位信號的特性,提高系統(tǒng)復(fù)位的可靠性。
下面分別講述這三種方法。

01單bit信號的跨時鐘域同步

單bit信號跨時鐘傳輸產(chǎn)生亞穩(wěn)態(tài)的原因是因為信號與目的時鐘不同步,導(dǎo)致信號不能滿足目的寄存器建立時間和保持時間的要求,從而導(dǎo)致寄存器不能輸出正確的邏輯值。

亞穩(wěn)態(tài)傳播的概率與采集延遲時間之間近似為指數(shù)關(guān)系。 延遲時間越長,亞穩(wěn)態(tài)傳播的概率越小。 對于單bit信號的采集,減小亞穩(wěn)態(tài)發(fā)生概率最簡單的方法是應(yīng)用由移位寄存器構(gòu)成的 兩級同步器(double-flop synchronizer)來延長信號的采集時間,如圖5所示。 其中同步器輸入的異步信號為 async_signal ,第一級完成觸發(fā)器的輸出為 reg1 ,第二級觸發(fā)器的輸出為同步信號 sync_out 。

圖5 兩級同步器

同步器在第一個時鐘脈沖作用后,第一級觸發(fā)器的輸出reg1可能會產(chǎn)生亞穩(wěn)態(tài),但是reg1有機會在被第二級觸發(fā)器鎖存之前穩(wěn)定下來,所以在第二個時鐘脈沖作用后,輸出的同步信號sync_out能夠保持穩(wěn)定。

需要注意的是,組合邏輯電路的輸出不能直接應(yīng)用同步器進行同步。 這是因為組合電路的輸出可能存在競爭-冒險現(xiàn)象,會增加同步器中第一級觸發(fā)器產(chǎn)生亞穩(wěn)態(tài)的概率,從而影響同步器輸出信號的可靠性。 所以,在跨時鐘域同步之前,還需要在源時鐘域先將組合電路的輸出信號鎖存后輸出,如圖5中所示,然后再進行同步。

圖5所示的同步器適合于將慢時鐘域的單bit信號同步到快時鐘域,要求異步信號async_signal的脈沖寬度至少應(yīng)維持一個同步器的時鐘周期,才能保證信號在目的時鐘域被采集到,輸出同步信號sync_out的寬度取決于信號在目的時鐘域被采集到的次數(shù)。

同步器的級數(shù)以2~3級為宜。 因為級數(shù)越多,將導(dǎo)致異步信號同步到目的時鐘域的延遲時間越長,因此對異步信號的變化反應(yīng)越慢。 對于只關(guān)心信號邊沿跳變的應(yīng)用場合,還可以應(yīng)用同步器提取脈沖的邊沿。 描述信號邊沿檢測電路的Verilog HDL代碼參考如下:

module edge_detector (
    input det_clk,               // 時鐘,50MHz
    input rst_n,                 // 復(fù)位信號,低電平有效
    input x_signal,             // 被測信號
    output wire rising_edge,  // 上升沿標志,高電平有效
    output wire fall_edge      // 下降沿標志,高電平有效
    );
    // 3級同步寄存器定義
    reg [0:2] sync_reg;
    // 同步移存過程
    always @( posedge det_clk or negedge rst_n ) 
      if ( !rst_n )
        sync_reg <= 3'b000;
      else
        sync_reg[0:2] <= { x_signal, sync_reg[0:1] };
    // 邊沿檢測邏輯
    assign rising_edge  =  sync_reg[1] & ~sync_reg[2];
    assign fall_edge    = ~sync_reg[1] &  sync_reg[2];
endmodule

02多bit數(shù)據(jù)的跨時鐘域傳輸

對于多bit數(shù)據(jù),普遍的方法是應(yīng)用圖6所示的異步FIFO實現(xiàn)跨時域傳輸。

圖6 跨時域異步FIFO結(jié)構(gòu)

應(yīng)用異步FIFO最關(guān)鍵的問題是如何判斷FIFO的狀態(tài),產(chǎn)生空/滿標志。 因為異步FIFO的讀/寫操作在不同的時鐘域,所以無法像同步FIFO那樣,通過統(tǒng)計存儲數(shù)據(jù)的個數(shù)來產(chǎn)生empty和full標志。

1)異步FIFO空/滿的檢測方法

FIFO為空有兩種情況:①FIFO復(fù)位時; ②當讀指針rp追上了寫指針wp,讀/寫指針相同時。 FIFO已滿只有一種情況:當寫指針wp多走了一圈, 折回來(wrapped around)追上了讀指針rp,讀/寫指針再次相同時。

綜上所述,F(xiàn)IFO為空和已滿時讀/寫指針都相同。 為了區(qū)分指針相同時FIFO為空還是已滿,需要在FIFO的讀/寫指針前再多加一個標志位來區(qū)分寫指針是否比讀指針多寫了一圈。 所以,對于存儲深度為2^n的異步FIFO,讀/寫指針應(yīng)定義為n+1位 (標志位+n位地址),即對于深度為8的異步FIFO,需要定義4位地址指針,取值為0000~0111和1000~1111,其中最高位為折回標志,低3位為地址值。

添加了標志位后,每當讀/寫指針遞加并越過FIFO的最后一個存儲單元后,將讀/寫指針的最高位翻轉(zhuǎn),其余位回零。 因此,判斷異步FIFO空/滿的方法是:當讀/寫指針的所有位均相同時,說明FIFO為空; 當讀/寫地址的最高位不同而其余均相同時,說明寫指針比讀指針多走了一圈,說明FIFO已滿。

2)讀/寫指針的同步方法

由于異步FIFO的讀/寫在不同的時鐘域,所以還需要將讀/寫指針同步到另一個時鐘域與寫/讀指針進行比較才能產(chǎn)生空/滿標志。 但是,二進制讀/寫指針不能直接同步到另一個時鐘域。 這是因為,當n+1位二進制讀/寫地址有多位同時發(fā)生變化(如地址從0111變化到1000)時,如果直接應(yīng)用同步器進行同步,則可能會因不同數(shù)位亞穩(wěn)態(tài)決斷時間的差異而導(dǎo)致同步后的指針值產(chǎn)生中間值而造成同步后的地址發(fā)生錯誤。

為了解決這一問題, 一般的處理方法是,先將二進制讀/寫指針值轉(zhuǎn)換為格雷碼后再進行同步。 因為格雷碼的相鄰碼之間只有一位發(fā)生變化,其余位不變,如表1所示,而不像二進制地址那樣,存在多位同時發(fā)生變化的情況。 由于FIFO的讀/寫通過地址加1實現(xiàn)的,因而應(yīng)用格雷碼能夠有效地避免同步后的指針產(chǎn)生中間值而造成地址錯誤。

表1 4位格雷碼與二進制碼比較表

將讀/寫地址轉(zhuǎn)換為格雷碼后,能不能直接應(yīng)用同步后的格雷碼產(chǎn)生空/滿標志呢? 下面再進行分析。

深度為2^n的異步FIFO共有n+1位讀/寫指針。 設(shè)格雷碼寫指針用 wptr[n:0] 表示,讀指針用 rptr[n:0]表示,F(xiàn)IFO為空用rempty表示,為滿用wfull表示。

判斷FIFO是否為空比較簡單: 當讀/寫指針值完全相同時,無論用二進制指針還是用格雷碼指針 。 因此,空標志產(chǎn)生的Verilog代碼為

empty = ( rptr == wptr );

FIFO為滿時二進制讀/寫指針的最高位不同而其余位相同。 從表1中的二進制碼和格雷碼的對應(yīng)關(guān)系可以看出,F(xiàn)IFO為滿時格雷碼指針的最高位和次高位不同,其余位相同。 因此,基于格雷碼判斷FIFO已滿的Verilog代碼為

wfull = ( wptr[n:n-1] == ~rptr[n:n-1])&&( wptr[n-2:0] == rptr[n-2:0]);

3)跨時鐘域異步FIFO的工作原理

對于圖6所示的跨時鐘域異步FIFO,在 寫時鐘域(wclk)收到寫指令 (write instruction,簡寫為winc)時,需要根據(jù)wfull標志判斷FIFO是否已滿,因為FIFO已滿時不能再寫。 在FIFO不滿的情況下,使寫允許信號wclken有效,將數(shù)據(jù)wdata寫入FIFO后寫地址(waddr)加1,同時將格雷碼寫指針(wptr)同步到讀時鐘域與格雷碼讀指針(rptr)進行比較,產(chǎn)生rempty標志 。 在讀時鐘域(rclk)收到讀指令(read instruction,簡寫為rinc)時,需要根據(jù)rempty標志判斷FIFO是否為空,因為FIFO為空時不能再讀。 在FIFO非空的情況下,讀出數(shù)據(jù)rdata后讀地址 (raddr)加1,同時將格雷碼讀指針(rptr)同步到寫時鐘域與格雷碼寫指針(wptr)進行比較,產(chǎn)生wfull標志 。

需要注意的是,由于異步FIFO通過比較讀/寫指針產(chǎn)生空/滿標志,而讀/寫指針屬于不同的時鐘域,所以在比較時需要將讀/寫指針經(jīng)過兩級同步器同步到另一個時鐘域,因此產(chǎn)生的滿/空標志會延遲兩個時鐘周期。 如果在同步時間內(nèi)有新的數(shù)據(jù)寫入,則同步后的寫指針一定小于當前實際的寫地址,所以判斷FIFO為空時實際上不一定為空,因此不會出現(xiàn)讀空的情況。 同樣的道理,如果在同步時間內(nèi)有數(shù)據(jù)讀出,則同步后的讀指針一定小于當前的讀指針,所以判斷FIFO已滿時不一定真滿,因此不會出現(xiàn)寫滿的情況。 因此,異步FIFO空/滿標志的延遲會導(dǎo)致空/滿的判斷更趨于保守,雖然會影響FIFO性能,但是不會出錯。

03應(yīng)用同步釋放電路改善異步復(fù)位信號的特性

異步復(fù)位信號不受時鐘的控制,具有直接快速的優(yōu)點。 但是,當異步復(fù)位信號的釋放時間不滿足觸發(fā)器的恢復(fù)時間和撤除時間要求時,有可能產(chǎn)生亞穩(wěn)態(tài)。 改進方法是應(yīng)用異步復(fù)位信號對系統(tǒng)內(nèi)部所有的寄存器復(fù)位后,釋放時再經(jīng)過時鐘脈沖進行同步。 這樣做的好處是既能夠應(yīng)用異步復(fù)位信號對系統(tǒng)進行快速復(fù)位,又避免了異步復(fù)位信號直接釋放時帶來的亞穩(wěn)態(tài)風險。

異步復(fù)位信號的同步釋放電路原理如圖7所示。 當異步復(fù)位信號async_rst_n有效時,能夠直接將兩個觸發(fā)器復(fù)位,因此第二個觸發(fā)器的輸出rstn_sync_out=0 ,當復(fù)位信號async_rst_n釋放后,兩個觸發(fā)器的復(fù)位信號轉(zhuǎn)為無效,第一個觸發(fā)器輸入的高電平經(jīng)過兩個時鐘脈沖后才能使rstn_sync_out=1,因此第二個觸發(fā)器的輸出rstn_sync_ out具有異步復(fù)位同步釋放特性。 因此,應(yīng)用rstn_sync_out作為系統(tǒng)的全局復(fù)位信號時,既能夠?qū)ο到y(tǒng)中的所有寄存器直接復(fù)位,又能夠避免了復(fù)位信號直接釋放時帶來的亞穩(wěn)態(tài)風險。

圖7 異步復(fù)位信號同步釋放原理電路

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1629

    文章

    21744

    瀏覽量

    603666
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5343

    瀏覽量

    120451
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    2000

    瀏覽量

    61170
  • 亞穩(wěn)態(tài)
    +關(guān)注

    關(guān)注

    0

    文章

    46

    瀏覽量

    13290
  • 異步時序
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    8647
收藏 人收藏

    評論

    相關(guān)推薦

    利用IDDR簡化亞穩(wěn)態(tài)方案

    問題的,不過還是有一些方法可降低系統(tǒng)出現(xiàn)亞穩(wěn)態(tài)問題的幾率。先來深入研究一下引起亞穩(wěn)態(tài)的原因,再談?wù)動媚男?b class='flag-5'>方法加以應(yīng)對。什么是
    發(fā)表于 12-29 15:17

    FPGA亞穩(wěn)態(tài)——讓你無處可逃

    ) rst_r <= 2’d0; elserst_r <= {rst_r[0], 1’b1};endassignsys_rst_n = rst_r[1];通過上面三種方式處理異步信號、異步數(shù)據(jù)、以及異步復(fù)位可有效的提高系統(tǒng)的穩(wěn)定性。
    發(fā)表于 04-25 15:29

    簡談FPGA學習中亞穩(wěn)態(tài)現(xiàn)象

    說起亞穩(wěn)態(tài),首先我們先來了解一下什么叫做亞穩(wěn)態(tài)。亞穩(wěn)態(tài)現(xiàn)象:信號在無關(guān)信號或者異步時鐘域之間傳輸時導(dǎo)致數(shù)字器件失效的一現(xiàn)象。接下來主要討論在異步時鐘域之間數(shù)據(jù)傳輸所
    發(fā)表于 08-01 09:50

    FPGA復(fù)位電路中產(chǎn)生亞穩(wěn)態(tài)的原因

    亞穩(wěn)態(tài)概述01 亞穩(wěn)態(tài)發(fā)生原因在 FPGA 系統(tǒng)中,如果數(shù)據(jù)傳輸中不滿足觸發(fā)器的 Tsu 和 Th 不滿足,或者復(fù)位過程中復(fù)位信號的釋放相對于有效時鐘沿的恢復(fù)時間(recovery t
    發(fā)表于 10-19 10:03

    探尋FPGA中三種跨時鐘域處理方法

    時鐘域處理的方法,這三種方法可以說是 FPGA 界最常用也最實用的方法,這三種方法包含了單 bit 和多 bit 數(shù)據(jù)的跨時鐘域處理,學會這
    發(fā)表于 10-20 09:27

    FPGA--中復(fù)位電路產(chǎn)生亞穩(wěn)態(tài)的原因

    FPGA 系統(tǒng)中,如果數(shù)據(jù)傳輸中不滿足觸發(fā)器的 Tsu 和 Th 不滿足,或者復(fù)位過程中復(fù)位信號的釋放相對于有效時鐘沿的恢復(fù)時間(recovery time)不滿足,就可能產(chǎn)生亞穩(wěn)態(tài)
    發(fā)表于 10-22 11:42

    今日說“法”:讓FPGA設(shè)計中的亞穩(wěn)態(tài)“無處可逃”

    亞穩(wěn)態(tài)情況。 3、亞穩(wěn)態(tài)產(chǎn)生概率以及串擾概率 在實際的FPGA電路設(shè)計中,常常人們想的是怎么減少
    發(fā)表于 04-27 17:31

    基于FPGA亞穩(wěn)態(tài)參數(shù)測量方法

    基于FPGA亞穩(wěn)態(tài)參數(shù)測量方法_田毅
    發(fā)表于 01-07 21:28 ?0次下載

    FPGA系統(tǒng)中三種方式減少亞穩(wěn)態(tài)產(chǎn)生

    FPGA系統(tǒng)中,如果數(shù)據(jù)傳輸中不滿足觸發(fā)器的Tsu和Th不滿足,或者復(fù)位過程中復(fù)位信號的釋放相對于有效時鐘沿的恢復(fù)時間(recovery time)不滿足,就可能產(chǎn)生亞穩(wěn)態(tài),此時觸發(fā)
    發(fā)表于 06-27 10:11 ?1w次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>系統(tǒng)</b><b class='flag-5'>中三種</b>方式<b class='flag-5'>減少</b><b class='flag-5'>亞穩(wěn)態(tài)</b>的<b class='flag-5'>產(chǎn)生</b>

    簡述FPGA亞穩(wěn)態(tài)產(chǎn)生機理及其消除方法

    輸出一些中間級電平,或者可能處于振蕩狀態(tài),并且這種無用的輸出電平可以沿信號通道上的各個觸發(fā)器級聯(lián)式傳播下去。 FPGA純工程師社群 亞穩(wěn)態(tài)產(chǎn)生原因 在同步系統(tǒng)中,觸發(fā)器的建立/保持時間
    的頭像 發(fā)表于 07-23 11:03 ?4712次閱讀
    簡述<b class='flag-5'>FPGA</b>中<b class='flag-5'>亞穩(wěn)態(tài)</b>的<b class='flag-5'>產(chǎn)生</b>機理及其消除<b class='flag-5'>方法</b>

    亞穩(wěn)態(tài)產(chǎn)生原因、危害及消除方法

    亞穩(wěn)態(tài)問題是數(shù)字電路中很重要的問題,因為現(xiàn)實世界是一個異步的世界,所以亞穩(wěn)態(tài)是無法避免的,并且亞穩(wěn)態(tài)應(yīng)該也是面試??嫉目键c。
    的頭像 發(fā)表于 09-07 14:28 ?9576次閱讀

    什么是亞穩(wěn)態(tài)?如何克服亞穩(wěn)態(tài)

    亞穩(wěn)態(tài)在電路設(shè)計中是常見的屬性現(xiàn)象,是指系統(tǒng)處于一不穩(wěn)定的狀態(tài),雖然不是平衡狀態(tài),但可在短時間內(nèi)保持相對穩(wěn)定的狀態(tài)。對工程師來說,亞穩(wěn)態(tài)的存在可以帶來獨特的性質(zhì)和應(yīng)用,如非晶態(tài)材料、
    的頭像 發(fā)表于 05-18 11:03 ?4839次閱讀

    FPGA系統(tǒng)中三種方式減少亞穩(wěn)態(tài)產(chǎn)生

    點擊上方 藍字 關(guān)注我們 1.1 亞穩(wěn)態(tài)發(fā)生原因 在 FPGA 系統(tǒng)中,如果數(shù)據(jù)傳輸中不滿足 觸發(fā)器 的Tsu和Th不滿足,或者復(fù)位過程中復(fù)位信號的釋放相對于有效時鐘沿的恢復(fù)時間(recovery
    的頭像 發(fā)表于 06-03 07:05 ?1718次閱讀

    pwm產(chǎn)生三種方法

    pwm產(chǎn)生三種方法 PWM(Pulse Width Modulation)是一常用的控制技術(shù),可以通過調(diào)節(jié)開關(guān)管的通斷時間,通過改變輸出波形的占空比來實現(xiàn)對電路的控制。在現(xiàn)代工業(yè)控制中,PWM
    的頭像 發(fā)表于 09-02 10:25 ?7641次閱讀

    FPGA設(shè)計中的亞穩(wěn)態(tài)解析

    說起亞穩(wěn)態(tài),首先我們先來了解一下什么叫做亞穩(wěn)態(tài)。亞穩(wěn)態(tài)現(xiàn)象:信號在無關(guān)信號或者異步時鐘域之間傳輸時導(dǎo)致數(shù)字器件失效的一現(xiàn)象。
    的頭像 發(fā)表于 09-19 15:18 ?1884次閱讀
    <b class='flag-5'>FPGA</b>設(shè)計中的<b class='flag-5'>亞穩(wěn)態(tài)</b>解析