<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 電源與新能源 > 設計應用 > 數(shù)字信號在不同時鐘域間同步電路的設計

          數(shù)字信號在不同時鐘域間同步電路的設計

          作者: 時間:2011-08-22 來源:網絡 收藏

          異步FIFO的主要有兩個難點,一是如何實現(xiàn)兩種異步化問題以及如何消除由此產生的壓穩(wěn)態(tài),二是如何正確的判斷存儲器空和滿的狀態(tài)。
          為了提高FIFO的利用率,本文把FIFO組織成環(huán)形隊列的形式。寫指針始終指向下一個要寫的字,讀指針始終指向下一個要讀的字。為了方便判斷雙端口存儲器的空滿/狀態(tài),給讀寫指針的最高位增加一個冗余位,把讀寫指針定義為[log2N:0],只有后log2N位是存儲器地址。當FIFO第一次被完全寫滿的時候,寫指針的值為N,而不是全零,所以可以根據讀寫指針方便的判斷存儲器的空滿。當讀寫地址的存儲器地址和冗余位都相等時,說明讀指針追趕上寫指針,即可認為FIFO為空:當存儲器地址相等而冗余位不相等,即可認為FIFO是滿的。
          在異步FIFO的中,讀寫指針是在域里面產生的,只有到一個域里才能進行比較。然而,把一個二進制計數(shù)器到另外一個域里會面臨很大的困難。這是因為自然二進制計數(shù)器的序列中一半的加1操作需要兩個或者更多的計數(shù)器位的翻轉。由于的固有延遲等原因,這些數(shù)據位的翻轉不一定同時進行,那么就有可能在時鐘域之間造成同步出錯,從而導致讀寫指針的比較結果出錯。
          2.2 用格雷碼實現(xiàn)讀寫指針
          有效的解決指針跨時鐘域傳遞的一個方法是格雷碼技術,格雷碼的特點是相鄰的兩個編碼之間只有1位,消除了在同一個時鐘沿多位編碼同時變化所帶來的問題。格雷碼由二進制自然碼右移一位后與原二進制碼進行異或操作得到,運算關系為:
          d.JPG
          其中,N為n+1位二進制自然碼,G為n+1位格雷碼。
          格雷碼到二進制碼的轉變關系為:
          e.JPG
          其中,N[m]為二進制碼的第m位,G[m]為格雷碼的第m位。
          格雷碼和自然碼的對應關系示例如圖4所示,可以看出,直接采用格雷碼進行空滿判斷有些不方便,n+1位格雷碼的上下半區(qū)是一個對稱的結構,因為當寫指針追趕上讀指針時,讀寫指針的G[n-1:0]并不相等,無法進行滿判斷。本文采用修改后的編碼,如圖4所示,修改后的格雷碼MG[n-1:0]上下半區(qū)是一個相等的結構,修改后的編碼只有第n-1位和格雷碼不同,第n-1位按如下方式產生:
          f.JPG
          其中,MG[n-1]為格雷碼的第n位,MG[n-1]為修改后的編碼的第n-1位。
          需要注意的是,修改后的編碼最壞情況下,相鄰的兩個編碼有兩位不同,因此在跨時鐘域的時候仍然采用格雷碼,只有在跨時鐘域結束后,進行空滿判斷的時候才對格雷碼作修改。采用修改后的格雷碼進行空滿判斷,比將格雷碼轉換到自然二進制進行判斷節(jié)省運算量。例如,n+1位的格雷碼轉換到自然二進制碼時,需要(n2+n)/2次異或操作,而轉換為修改后的格雷碼,只需n+1次異或操作,節(jié)省(n2-n-2)/2次異或操作(n>1)。

          3 結束語
          在不同時鐘域之間的轉換是復雜中不可缺少的一部分,直接鎖存法和鎖存反饋法可處理控制的同步,異步FIFO在跨時鐘的數(shù)據交換方面具有高效的優(yōu)勢,本文設計的修改后的格雷碼可以節(jié)省運算量,在具體設計時,需要在編碼方法、跨時鐘域的信號同步等關鍵問題上謹慎處理。

          本文引用地址:http://www.ex-cimer.com/article/178712.htm

          DIY機械鍵盤相關社區(qū):機械鍵盤DIY



          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();