以下內(nèi)容中,小編將對FPGA跨時鐘域處理技術(shù)方法進行著重介紹和闡述,希望本文能幫您增進對FPGA跨時鐘域處理技術(shù)方法的了解,和小編一起來看看吧。
一、FPGA跨時鐘域處理技術(shù)方法一
1、跨時鐘域之間不能存在組合邏輯。 跨時鐘域本身就容易產(chǎn)生亞穩(wěn)態(tài),如果在跨時鐘域之間存在組合邏輯會大大增加競爭冒險出現(xiàn)的概率。 這一點在實際設(shè)計中通常會因為粗心而導(dǎo)致設(shè)計異常,如下邊代碼中的S_clr_flag_a_all信號,就是在擴展時不小心使用了組合邏輯,這種情況下由于競爭冒險,會導(dǎo)致跨時鐘域后的b信號出現(xiàn)一個clk的異常電平。
此時的跨時鐘域電路為:
正確的處理方法是使用時序邏輯進行擴展:
正確的電路為:
2、跨時鐘域信號要集中在一個位置跨時鐘域,然后再使用,不能分別跨時鐘域處理。
如下圖,a時鐘域的a信號要在b信號內(nèi)的b和b2兩個位置使用,正確的處理如下:
錯誤的處理方式如下,這種處理方式下,由于b和b2分別做的跨時鐘域,由于時鐘抖動、走線路徑的原因,會導(dǎo)致b和b2不同步,如果該信號是一個關(guān)鍵的控制信號,會導(dǎo)致系統(tǒng)異常,要注意避免這種情況的發(fā)生。
二、FPGA跨時鐘域處理技術(shù)方法二
將ADC采樣的數(shù)據(jù)寫入RAM時,需要產(chǎn)生RAM的寫地址,但我們讀出RAM中的數(shù)據(jù)時,肯定不是一上電就直接讀取,而是要等RAM中有ADC的數(shù)據(jù)之后才去讀RAM。這就需要100MHz的時鐘對RAM的寫地址進行判斷,當(dāng)寫地址大于某個值之后再去讀取RAM。
在這個場景中,其實很多人都是使用直接用100MHz的時鐘于RAM的寫地址進行打兩拍的方式,但RAM的寫地址屬于多bit,如果單純只是打兩拍,那不一定能確保寫地址數(shù)據(jù)的每一個bit在100MHz的時鐘域變化都是同步的,肯定有一個先后順序。如果在低速的環(huán)境中不一定會出錯,在高速的環(huán)境下就不一定能保證了。所以更為妥當(dāng)?shù)囊环N處理方法就是使用格雷碼轉(zhuǎn)換。
對于格雷碼,相鄰的兩個數(shù)間只有一個bit是不一樣的(格雷碼,在本文中不作詳細介紹),如果先將RAM的寫地址轉(zhuǎn)為格雷碼,然后再將寫地址的格雷碼進行打兩拍,之后再在RAM的讀時鐘域?qū)⒏窭状a恢復(fù)成10進制。這種處理就相當(dāng)于對單bit數(shù)據(jù)的跨時鐘域處理了。
對于格雷碼與十進制互換的代碼,僅提供給大家作參考:
代碼使用的是函數(shù)的形式,方便調(diào)用,op表示編碼或者譯碼,WADDRWIDTH和RADDRWIDTH表示位寬。
最后,小編誠心感謝大家的閱讀。你們的每一次閱讀,對小編來說都是莫大的鼓勵和鼓舞。希望大家對FPGA跨時鐘域處理技術(shù)方法都已經(jīng)有了初步的認識,最后的最后,祝大家有個精彩的一天。