2雙時鐘沿 FPGA跨時鐘域處理3大方法揭秘!

2021-10-14 21:10:07 字數 1986 閱讀 9942

跨時鐘域處理是fpga設計中經常遇到的問題,而如何處理好跨時鐘域間的資料,可以說是每個fpga初學者的必修課。如果是還在校生,跨時鐘域處理也是面試中經常常被問到的乙個問題。

這裡主要介紹三種跨時鐘域處理的方法,這三種方法可以說是fpga界最常用也最實用的方法,這三種方法包含了單bit和多bit資料的跨時鐘域處理,學會這三招之後,對於fpga相關的跨時鐘域資料處理便可以手到擒來。

這裡介紹的三種方法跨時鐘域處理方法如下:

打兩拍;

非同步雙口ram;

格雷碼轉換。

01

方法一:打兩拍

大家很清楚,處理跨時鐘域的資料有單bit和多bit之分,而打兩拍的方式常見於處理單bit資料的跨時鐘域問題。

打兩拍的方式,其實說白了,就是定義兩級暫存器,對輸入的資料進行延拍。如下圖所示。

先簡單說下兩級暫存器的原理:兩級寄存是一級寄存的平方,兩級並不能完全消除亞穩態危害,但是提高了可靠性減少其發生概率。總的來講,就是一級概率很大,**改善不大。

這樣說可能還是有很多人不夠完全理解,那麼請看下面的時序示意圖:

如果再加上第**暫存器,由於第二級暫存器對於亞穩態的處理已經起到了很大的改善作用,第**暫存器在很大程度上可以說只是對於第二級暫存器的延拍,所以意義是不大的。

02

方法二:非同步雙口ram

處理多bit資料的跨時鐘域,一般採用非同步雙口ram。假設我們現在有乙個訊號採集平台,adc晶元提供源同步時鐘60mhz,adc晶元輸出的資料在60mhz的時鐘上公升沿變化,而fpga內部需要使用100mhz的時鐘來處理adc採集到的資料(多bit)。在這種類似的場景中,我們便可以使用非同步雙口ram來做跨時鐘域處理。

先利用adc晶元提供的60mhz時鐘將adc 輸出的資料寫入非同步雙口ram,然後使用100mhz的時鐘從ram中讀出。對於使用非同步雙口ram來處理多bit資料的跨時鐘域,相信大家還是可以理解的。當然,在能使用非同步雙口ram來處理跨時鐘域的場景中,也可以使用非同步fifo來達到同樣的目的。

03

方法三:格雷碼轉換

我們依然繼續使用介紹第二種方法中用到的adc例子,將adc取樣的資料寫入ram時,需要產生ram的寫位址,但我們讀出ram中的資料時,肯定不是一上電就直接讀取,而是要等ram中有adc的資料之後才去讀ram。這就需要100mhz的時鐘對ram的寫位址進行判斷,當寫位址大於某個值之後再去讀取ram。

在這個場景中,其實很多人都是使用直接用100mhz的時鐘與ram的寫位址進行打兩拍的方式,但ram的寫位址屬於多bit,如果單純只是打兩拍,那不一定能確保寫位址資料的每乙個bit在100mhz的時鐘域變化都是同步的,肯定有乙個先後順序。如果在低速的環境中不一定會出錯,在高速的環境下就不一定能保證了。所以更為妥當的一種處理方法就是使用格雷碼轉換。

對於格雷碼,相鄰的兩個數間只有乙個bit是不一樣的(格雷碼,在本文中不作詳細介紹),如果先將ram的寫位址轉為格雷碼,然後再將寫位址的格雷碼進行打兩拍,之後再在ram的讀時鐘域將格雷碼恢復成10進製。這種處理就相當於對單bit資料的跨時鐘域處理了。

-end-

推薦閱讀

精彩!由fpga觸發的晶元戰爭!

fpga設計的八個重要知識點,你都會嗎?

fpgaer公升職記!12年工程師從公司、成長、能力、面試剖析,想入行的必看!

硬貨!拉普拉斯運算元的fpga實現方法

fpga 電源管理不簡單,這幾點要素要牢記

FPGA跨時鐘域處理方法FIFO

1 本節目錄 2 本節引言 3 fpga簡介 4 fpga跨時鐘域處理方法fifo 5 結束語。不積跬步,無以至千里 不積小流,無以成江海。就是說 不積累一步半步的行程,就沒有辦法達到千里之遠 不積累細小的流水,就沒有辦法匯成江河大海。fpga field programmable gate arr...

跨時鐘域處理

需要做的事情 使能訊號txe to eth由時鐘122.88m時鐘輸出 另一使能訊號vde dv由25m時鐘輸出,計算兩個使能訊號之間的時間間隔,即兩個訊號上公升沿之間的時鐘計數。由於兩個訊號屬於不同的時鐘域,因此要先進行跨時鐘域處理,這裡對vde dv進行處理 在122.88m時鐘下將vde dv...

跨時鐘域處理

討論 今天華為面試題 非同步fifo讀時鐘是寫時鐘的100倍,或者寫是讀的100倍會出現什麼問題?今天華為面試題 非同步fifo讀時鐘是寫時鐘的100倍,或者寫是讀的100倍會出現什麼問題?答得 如果是瞬態資料中間有足夠間隔,則不會出現問題。如果是連續資料,則很快輸出空滿標誌位。面試官不滿意,請教下...