新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 跨越鴻溝:同步世界中的異步信號

跨越鴻溝:同步世界中的異步信號

作者: 時間:2015-01-26 來源:網(wǎng)絡 收藏

  現(xiàn)在指針邏輯的設計有多種方法。第一種方法是將讀、寫選通進行同步,同時在各個時鐘域使用計數(shù)器來跟蹤 中可用的項。計數(shù)器反映出可用于讀寫的 項目號,計數(shù)器也與相應的端口同步。讀計數(shù)器跟蹤包含有效數(shù)據(jù)的項數(shù),而寫計數(shù)器則跟蹤可以存儲數(shù)據(jù)的項數(shù)。當對指針邏輯進行復位時,由于沒有數(shù)據(jù)可讀,讀計數(shù)器從零起始。寫計數(shù)器則從 中項的總數(shù)開始計數(shù),即所有項均可用來存儲數(shù)據(jù)。

本文引用地址:http://butianyuan.cn/article/268638.htm

  讀選通信號累減讀計數(shù)器,并與寫時鐘域同步,因為它同時也累加寫計數(shù)器。寫選通信號則累減寫計數(shù)器,并與讀時鐘域同步,因為它同時也累加讀計數(shù)器。

  這種設計需要單時鐘寬度脈沖以及用于讀、寫選通的脈沖同步器,因為當一個電平信號從一個時鐘域跨越到

  另一個更快的時鐘域時,在較快時鐘域中它能在更多的時鐘周期中保持有效。由于只要讀或?qū)懶盘柺怯行У?,每個計數(shù)器就會發(fā)生變化,因此較快的時鐘域就檢測到更多的讀、寫,超出較慢時鐘域?qū)嶋H發(fā)生的數(shù)量。脈沖同步器可以將一個時鐘域的時鐘寬度脈沖轉(zhuǎn)換為新時鐘域的時鐘寬度脈沖,每個脈沖都表示一次 FIFO 的讀或?qū)憽?/p>

  這種 FIFO 狀態(tài)技術對讀、寫狀態(tài)都不太有利。當 FIFO 中所有項均充滿時,寫端口狀態(tài)指示為滿,并在讀選通觸發(fā)后繼續(xù)指示 FIFO 滿,因為同步過程會使選通信號延遲送給寫計數(shù)器。讀端口為空時也會出現(xiàn)這種情況,因為同步過程會使寫選通信號延遲到達讀計數(shù)器。

  這種設計的另一種考慮是及時檢測全滿/全空狀態(tài)。如果 FIFO 還有一項可用,并且有寫選通觸發(fā),則 FIFO 必須立即置為全滿狀態(tài)。這樣才能提前一個時鐘給出全滿標志,使 FIFO 有足夠時間防止下一個數(shù)據(jù)寫入而產(chǎn)生溢出。對 FIFO 的讀端口也是這樣。這種情況下,如果 FIFO 里只有一個數(shù),并且有讀選通觸發(fā),則必須置全空狀態(tài),以給讀電路足夠的時間防止讀空 FIFO。

  這種指針邏輯限制電路在每個時鐘周期中訪問 FIFO,即使在慢速時鐘域中也是這樣。這一功能的優(yōu)點在于訪問 FIFO 的電路至少有一個時鐘周期來評估 FIFO 的狀態(tài)。FIFO 可以將所有項都填滿數(shù)據(jù),而不會出現(xiàn)數(shù)據(jù)被覆蓋或全空無數(shù)據(jù)可讀的情況。這種設計的另一個優(yōu)點是每一端都可以讀其相應的計數(shù)器,來判斷 FIFO 中還有多少項可用。設計者可以將這種 FIFO設計用在進行多次數(shù)據(jù)讀/寫的電路中,而不會造成上溢或下溢的情況。

  這種設計的不足之處是由計數(shù)器來判斷狀態(tài),而不是直接比較讀、寫指針。對大型 FIFO 來說,這些計數(shù)器也很大。而且,由于使用脈沖同步時,來自較快時鐘域的讀、寫脈沖在較慢時鐘域的脈沖間至少必須有兩個時鐘周期,因此平均數(shù)據(jù)速率為最低時鐘頻率的一半。解決這些問題的一種方法是采用直接指針比較法。

  在這種 FIFO 設計中,讀、寫指針的比較決定了 FIFO 的狀態(tài)。異步設計中的指針比較更富有挑戰(zhàn)性,因為每個指針位于不同的時鐘域中,對信號總線的同步要求在同步握手信號期間總線不發(fā)生改變。將這種技術用于指針同步的 FIFO 設計可能會很慢。要解決這個問題,F(xiàn)IFO 指針邏輯使用了格雷碼,代替指針使用的二進制碼。

  格雷碼在每一次計數(shù)增減時只改變其中的一位(表 3)。你可以在格雷碼總線上使用同步器,因為每一次總線改變時只有一根信號線有變化,于是就消除了格雷碼總線各位通過不同同步器時的競爭情況。這種設計的指針為格雷碼計數(shù)器。使用二進制指針時需要將其變換成格雷碼后的同步指針,而使用變換邏輯會違反對同步信號的限制,即同步的信號在跨越時鐘域前要來自觸發(fā)器。

  

格雷碼與二進制碼比較

 

  表 3

  格雷碼計數(shù)器是一個二進制累加器,在累加器前、后各帶有一個轉(zhuǎn)換器,分別用于格雷碼轉(zhuǎn)換為二進制碼,和二進制碼轉(zhuǎn)換為格雷碼(圖 8)。格雷碼與二進制碼的轉(zhuǎn)換是一個異或運算,所以只需比一個二進制計數(shù)器多幾個邏輯電平。在格雷碼轉(zhuǎn)換成二進制碼時,使用:BN=GN;BN-1=BN+GN-1;BN-2=BN-1+GN-2 . B1=B2+G1;B0=B1+G0。而將二進制碼轉(zhuǎn)換成格雷碼時,使用:GN=BN;GN-1=BN+BN-1;GN-2=BN-1+BN-2 . G1=B2+B1;G0=B1+B0。在設計中可以采用同樣的技術來比較格雷碼指針的值,即在各個指針與二進制比較邏輯之間增加轉(zhuǎn)換器。

  

格雷碼計數(shù)器是一個二進制累加器

 

  圖8,格雷碼計數(shù)器是一個二進制累加器,在累加器前、后各帶有一個轉(zhuǎn)換器。

  用這種指針邏輯的 FIFO 很快,每個時鐘周期中電路都可以讀寫 FIFO。但是,在每個周期都訪問 FIFO 意味著 FIFO 狀態(tài)要包括“將滿”和“將空”兩種指示,這樣讀寫 FIFO 的電路才能有停止時間。“將滿”表示只能再寫入一項,“將空”則表示只有一項可讀。這種情況描述了一個要求最少的可能狀態(tài)信號的設計,以及一個需要更多指示的設計,如果在固定的最小尺寸情況下用猝發(fā)方式訪問 FIFO 的電路的話。

  這種 FIFO 狀態(tài)技術會給讀、寫帶來不良狀態(tài)。當 FIFO 滿時,寫端口的狀態(tài)指示已滿,而在電路從 FIFO 中讀出一項后,該狀態(tài)仍為滿,因為同步機制使讀指針相對寫入一側(cè)的比較邏輯有個延遲。同樣,在讀出一側(cè)的空狀態(tài)指示也有這個問題,因為同步機制使寫指針相對讀出一側(cè)的比較邏輯有延遲。

  如果你在設計跨不同時鐘域電路時,使用一些技術來降低通信失敗的風險,則處理跨時鐘域的信號就不再是艱巨的任務。同步機制可以防止接收跨時鐘域信號的觸發(fā)器出現(xiàn)亞穩(wěn)態(tài),從而避免導致不可預知的電路行為。對于在多個時鐘周期內(nèi)一直保持有效的信號來說,電平同步器的效果很好。對于要轉(zhuǎn)換成新時鐘域脈沖的較慢時鐘域電平信號,要采用邊沿檢測同步器。最后,對跨時鐘

  域的脈沖信號應使用脈沖同步器。還要記住,當一個信號總線跨越時鐘域時,整個總線要在同一個時鐘周期內(nèi)到達新的時鐘域。不要分別同步每一個信號,而要采用一個保持寄存器和握手方式。握手用來表示寄存器中的信號何時有效,何時可以采樣。對數(shù)據(jù)總線來說,握手和一個保持寄存器很有用,但每次向新時鐘域傳送的數(shù)據(jù)字不超過一個。

模擬信號相關文章:什么是模擬信號


電路相關文章:電路分析基礎


脈沖點火器相關文章:脈沖點火器原理

上一頁 1 2 3 下一頁

關鍵詞: FPGA 異步信號 FIFO

評論


相關推薦

技術專區(qū)

關閉