FPGA非同步時鐘設計中的同步策略

2022-04-03 23:16:31 字數 2578 閱讀 7707

1 引言

基於fpga的數字系統設計中大都推薦採用同步時序的設計,也就是單時鐘系統。但是實際的工程中,純粹單時鐘系統設計的情況很少,特別是設計模組與外圍晶元的通訊中,跨時鐘域的情況經常不可避免。如果對跨時鐘域帶來的亞穩態、取樣丟失、潛在邏輯錯誤等等一系列問題處理不當,將導致系統無法執行。本文總結出了幾種同步策略來解決跨時鐘域問題。

2 非同步設計中的亞穩態

觸發器是fpga設計中最常用的基本器件。觸發器工作過程中存在資料的建立(setup)和保持(hold)時間。對於使用上公升沿觸發的觸發器來說,建立時間就是在時鐘上公升沿到來之前,觸發器資料端資料保持穩定的最小時間。而保持時間是時鐘上公升沿到來之後,觸發器資料端資料還應該繼續保持穩定的最小時間。我們把這段時間成為setup-hold時間(如圖1所示)。在這個時間引數內,輸入訊號在時鐘的上公升沿是不允許發生變化的。如果輸入訊號在這段時間內發生了變化,輸出結果將是不可知的,即亞穩態 (metastability)。

乙個訊號在過渡到另乙個時鐘域時,如果僅僅用乙個觸發器將其鎖存,那麼取樣的結果將可能是亞穩態。這也就是訊號在跨時鐘域時應該注意的問題。如圖2所示。

訊號dat經過乙個鎖存器的輸出資料為a_dat。用時鐘b_clk進行取樣的時候,如果a_dat正好在b_clk的setup-hold時間內發生變化,此時b_ dat就既不是邏輯"1",也不是邏輯"0",而是處於中間狀態。經過一段時間之後,有可能回公升到高電平,也有可能降低到低電平。輸出訊號處於中間狀態到恢復為邏輯"1"或邏輯"0"的這段時間,我們稱之為亞穩態時間。

觸發器進入亞穩態的時間可以用引數mtbf(mean time between failures)來描述,mtbf即觸發器取樣失敗的時間間隔,表示為:

其中fclock表示系統時鐘頻率,fdata代表非同步輸入訊號的頻率,tmet代表不會引起故障的最長亞穩態時間,c1和c2分別為與器件特性相關的常數。如果mtbf很大,就認為這個設計在實際工作中是能夠正常執行的,不會因為亞穩態導致整個系統的失效。當觸發器處於亞穩態,且處於亞穩態的時間超過了乙個時鐘週期,這種不確定的狀態還會影響到下一級的觸發器,最終導致連鎖反應,從而使整個系統功能失常。

3 同步策略

在非同步設計中,完全避免亞穩態是不可能的。因此,設計的基本思路應該是:首先盡可能減少出現亞穩態的可能性,其次是盡可能減少出現亞穩態並給系統帶來危害的可能性。以下是根據實際工作總結出來的幾種同步策略。

3.1 雙鎖存器法

為了避免進入亞穩態,應當使引數mtbf盡可能大。通常採用的方法是雙鎖存器法,即在乙個訊號進入另乙個時鐘域之前,將該訊號用兩個鎖存器連續鎖存兩次(如圖3所示)。理論研究表明這種設計可以將出現亞穩態的機率降低到乙個很小的程度,但這種方法同時帶來了對輸入訊號的一級延時,需要在設計時鐘的時候加以注意。

對於上面的雙鎖存器法,如果a_clk的頻率比b_clk的頻率高,將可能出現因為dat變化太快,而使b_clk無法取樣的問題。即在訊號從快時鐘域向慢時鐘域過渡的時候,如果訊號變化太快,慢時鐘將可能無法對該訊號進行正確的取樣,所以在使用雙鎖存器法的時候,應該使原始訊號保持足夠長的時間,以便另乙個時鐘域的鎖存器可以正確地對其進行取樣。

3.2 結繩法

由於雙鎖存器法在快時鐘域向慢時鐘域過渡中可能存在取樣失效的問題,我們引入了一種安全的跨時鐘域的方法:結繩法。結繩法適合任何時鐘域的過渡(clk1,clk2的頻率和相位關係可以任意選定),如圖4所示。

圖4中的_clk1表示該訊號屬於clk1時鐘域,_clk2的訊號表示該訊號屬於clk2時鐘域。在兩次src_req_clk1之間被src_vld_clk1結繩(pluse2toggle)。將src_vld—clk1用雙鎖存器同步以後,該訊號轉換為dst_req_clk2(toggle2pluse)。同理,用dst_vld_clk2將dat_req_clk2結繩,dst_vld_clk2表明在clk2時鐘域中,src_dat_clk1已經可以進行正確的取樣了。最後將dst_vld_clk2轉換為dst_ack_clk1(synchronizer and toggle2pluse)。dst_ack_clk表明src_dat_clk1已經被clk2正確取樣了,此後clk1時鐘域就可以安全地傳輸下乙個資料了。可以看出,結繩法的關鍵是將訊號結繩以後,使其保持足夠長的時間,以便另乙個時鐘可以正確取樣。圖5描述了結繩法的具體實現,主要包括3個基本單元:pluse2toggle、synchronizer和toggle2pluse。

pluse2toggle模組負責將兩個脈衝訊號結繩,即將單脈衝訊號延長;synchronizer模組用雙鎖存器法將得到的訊號過渡到另乙個時鐘域;toggle2pluse模組與pluse2toggle功能相對,即將延長的脈衝訊號還原為單脈衝,這裡用到了異或門。整體的設計思想就是用pluse2toggle將訊號延長,用synchronizer過渡,再用toggle2pluse還原,以保證另乙個時鐘域可以正確取樣,而接收方用相反的流程送回響應訊號。

結繩法可以解決快時鐘域向慢時鐘域過渡的問題,且適用的範圍很廣。但是結繩法實現較複雜,在設計要求較高的場合應該慎用。

4 結束語

本文主要把fpga非同步時鐘設計中產生的問題,原因以及解決問題所採用的同步策略做了詳細的分析。其中雙鎖存器法比較適用於只有少數訊號跨時鐘域;結繩法比較適用快時鐘域向慢時鐘過渡的情況。所以,在實際的應用中,應根據自身設計的特點擊擇適當的同步策略。

FPGA設計中的非同步復位 同步釋放思想

fpga設計中的非同步復位 同步釋放思想 1.乙個簡單的非同步復位例子 我們可以看到,fpga的暫存器都有乙個非同步清零端 clr 在非同步復位設計中,低電平有效的rst n復位訊號就可以直接連在這個埠上。如果是高有效的復位,綜合時會把它取反後接在這個埠上 2.乙個同步復位的例子 我們可以看到,該電...

FPGA設計中的非同步復位 同步釋放思想

1.乙個簡單的非同步復位例子 module test input clk,input rst n,input data in,output regout always posedge clk or negedge rst n if rst n out 0 else out data in endmo...

非同步電路中時鐘同步的方法

時鐘是數位電路中所有訊號的參考,特別是在fpga中,時鐘是時序電路的動力,是血液,是核心。沒有時鐘或者時鐘訊號處理不得當,都會影響系統的效能甚至功能,所以在一般情況下,在同乙個設計中使用同乙個時鐘源,當系統中有多個時鐘時,需要根據不同情況選擇不同的處理方法,將所有的時鐘進行同步處理,下面分幾種情況介...