數字信號在不同時(shí)鐘域間同步電路的設計
異步FIFO的設計主要有兩個(gè)難點(diǎn),一是如何實(shí)現兩種異步信號的同步化問(wèn)題以及如何消除由此產(chǎn)生的壓穩態(tài),二是如何正確的判斷存儲器空和滿(mǎn)的狀態(tài)。
為了提高FIFO的利用率,本文把FIFO組織成環(huán)形隊列的形式。寫(xiě)指針始終指向下一個(gè)要寫(xiě)的字,讀指針始終指向下一個(gè)要讀的字。為了方便判斷雙端口存儲器的空滿(mǎn)/狀態(tài),給讀寫(xiě)指針的最高位增加一個(gè)冗余位,把讀寫(xiě)指針定義為[log2N:0],只有后log2N位是存儲器地址。當FIFO第一次被完全寫(xiě)滿(mǎn)的時(shí)候,寫(xiě)指針的值為N,而不是全零,所以可以根據讀寫(xiě)指針?lè )奖愕呐袛啻鎯ζ鞯目諠M(mǎn)。當讀寫(xiě)地址的存儲器地址和冗余位都相等時(shí),說(shuō)明讀指針追趕上寫(xiě)指針,即可認為FIFO為空:當存儲器地址相等而冗余位不相等,即可認為FIFO是滿(mǎn)的。
在異步FIFO的設計中,讀寫(xiě)指針是在不同的時(shí)鐘域里面產(chǎn)生的,只有同步到一個(gè)時(shí)鐘域里才能進(jìn)行比較。然而,把一個(gè)二進(jìn)制計數器同步到另外一個(gè)時(shí)鐘域里會(huì )面臨很大的困難。這是因為自然二進(jìn)制計數器的序列中一半的加1操作需要兩個(gè)或者更多的計數器位的翻轉。由于電路的固有延遲等原因,這些數據位的翻轉不一定同時(shí)進(jìn)行,那么就有可能在不同時(shí)鐘域之間造成同步出錯,從而導致讀寫(xiě)指針的比較結果出錯。
2.2 用格雷碼實(shí)現讀寫(xiě)指針
有效的解決指針跨時(shí)鐘域傳遞的一個(gè)方法是格雷碼技術(shù),格雷碼的特點(diǎn)是相鄰的兩個(gè)編碼之間只有1位不同,消除了在同一個(gè)時(shí)鐘沿多位編碼同時(shí)變化所帶來(lái)的問(wèn)題。格雷碼由二進(jìn)制自然碼右移一位后與原二進(jìn)制碼進(jìn)行異或操作得到,運算關(guān)系為:

其中,N為n+1位二進(jìn)制自然碼,G為n+1位格雷碼。
格雷碼到二進(jìn)制碼的轉變關(guān)系為:

其中,N[m]為二進(jìn)制碼的第m位,G[m]為格雷碼的第m位。
格雷碼和自然碼的對應關(guān)系示例如圖4所示,可以看出,直接采用格雷碼進(jìn)行空滿(mǎn)判斷有些不方便,n+1位格雷碼的上下半區是一個(gè)對稱(chēng)的結構,因為當寫(xiě)指針追趕上讀指針時(shí),讀寫(xiě)指針的G[n-1:0]并不相等,無(wú)法進(jìn)行滿(mǎn)判斷。本文采用修改后的編碼,如圖4所示,修改后的格雷碼MG[n-1:0]上下半區是一個(gè)相等的結構,修改后的編碼只有第n-1位和格雷碼不同,第n-1位按如下方式產(chǎn)生:

其中,MG[n-1]為格雷碼的第n位,MG[n-1]為修改后的編碼的第n-1位。
需要注意的是,修改后的編碼最壞情況下,相鄰的兩個(gè)編碼有兩位不同,因此在跨時(shí)鐘域的時(shí)候仍然采用格雷碼,只有在跨時(shí)鐘域結束后,進(jìn)行空滿(mǎn)判斷的時(shí)候才對格雷碼作修改。采用修改后的格雷碼進(jìn)行空滿(mǎn)判斷,比將格雷碼轉換到自然二進(jìn)制進(jìn)行判斷節省運算量。例如,n+1位的格雷碼轉換到自然二進(jìn)制碼時(shí),需要(n2+n)/2次異或操作,而轉換為修改后的格雷碼,只需n+1次異或操作,節省(n2-n-2)/2次異或操作(n>1)。
3 結束語(yǔ)
信號在不同時(shí)鐘域之間的轉換是復雜數字電路設計中不可缺少的一部分,直接鎖存法和鎖存反饋法可處理控制信號的同步,異步FIFO在跨時(shí)鐘的數據交換方面具有高效的優(yōu)勢,本文設計的修改后的格雷碼可以節省運算量,在具體設計時(shí),需要在編碼方法、跨時(shí)鐘域的信號同步等關(guān)鍵問(wèn)題上謹慎處理。本文引用地址:http://dyxdggzs.com/article/178712.htm
DIY機械鍵盤(pán)相關(guān)社區:機械鍵盤(pán)DIY
評論