24小時聯系電話:18217114652、13661815404
中文
技術專題
跨時鐘域時應避免的10個設計問題
跨時鐘域時應避免的10個設計問題
現代的ASIC由數百萬個門和數十億個晶體管組成,這些晶體管通??梢栽诰哂胁煌妷汉蜁r鐘頻率的多個域中運行。為了避免數據丟失,設計人員需要確保從一個域發送到另一域的信號不會引起目標域中寄存器的建立時間或保持時間違規。這是跨時鐘域時要確?;虮苊獾?span>10件事。
目標域中的寄存器(通常是觸發器)的建立或保持時間違規可能導致觸發器進入稱為亞穩態的狀態。您可以閱讀 了解時鐘域交叉問題,以了解有關時鐘域交叉問題及其如何引起亞穩定性的更多信息,但關鍵是在任何設計中,同步信號跨域都是絕對必要的。處理該任務的電路(稱為同步器)可能會根據特定的域條件采用幾種不同的同步方案之一。
但是,即使使用這些技術,也需要做一些事情,而不要做一些事情,以避免設計出現同步問題。
使用多階段同步
僅通過一個觸發器來同步跨時鐘域的信號就面臨通過傳遞亞穩性的高失敗風險(圖1a),尤其是在域時鐘頻率差異較大的情況下。最好使用如圖1b所示的兩觸發器同步器,甚至使用三觸發器同步器。使用兩觸發器或三觸發器設計后,信號交叉域進入亞穩態后將有更多時間穩定下來。
圖1使用兩個或多個觸發器作為同步器將避免傳播由接收端的時序誤差引起的任何亞穩態。
避免合并早期同步階段的信號
由于多級同步器中的第一個觸發器可以進入亞穩態條件,因此切勿將第一個觸發器的輸出用作任何單元的邏輯輸入(圖2)。這樣做有可能在設計中傳播亞穩性。
圖2同步器第一個觸發器的輸出,除輸入第二個觸發器的輸入外,切勿用于任何下游邏輯。
同步之前注冊組合信號
如果穿越時鐘域的信號直接來自組合邏輯,則可能會有毛刺。這些故障可以減少兩觸發器同步器發生故障之前的平均時間(MTBF)。將將穿過域的信號注冊到源時鐘可消除毛刺(圖3)。為了幫助保留同步器的MTBF,請務必在穿過域之前注冊組合信號。
圖3一個簡單的雙觸發器同步器可以捕獲來自組合邏輯的毛刺,因此在其通過時鐘域之前,將任何組合信號寄存在其傳輸域中。
解釋亞穩定延遲
當使用多位同步器交叉多個位時,請始終考慮亞穩態延遲。當觸發器時鐘直到下一個時鐘周期才完全同步時,任何經歷亞穩態的位。由于存在此延遲,因此無法保證數據同步的一致性或順序。代替使用如圖4a所示的兩個觸發器同步器,而使用另一種形式,例如數據多路復用器,異步FIFO等。但是,如果總線是格雷碼編碼的,如圖4b所示,那么我們可以使用多位同步器,因為一次僅更改一位。只需確保在跨越域之前就注冊總線,因為格雷編碼是完全組合的邏輯。
圖4雙翻轉同步器(a)可能由于亞穩態延遲而失去同步,因此不應該使用。在跨越域之前使用二進制到灰度編碼,然后在(b)之后使用灰度到二進制解碼解決了這個問題。
確保足夠的時鐘頻率
信號發送域中的時鐘周期應至少為接收域的時鐘周期的二分之一。發送時鐘周期太短會導致信號不總是被采樣。如果不能滿足此條件,則最好使用請求確認類機制來控制跨域信號的切換。
永遠不要假設同步
在域中使用來自另一個設計者模塊的網絡或總線時,請勿假定網絡已為您同步。始終檢查并在必要時使用同步器。
同步反饋信號
在同步器中使用第一個觸發器的輸出在發送時鐘域中重置觸發器時要小心(圖5a)。這可能會導致同步器外部出現時序違規,或者可能會通過亞穩態。如圖5b所示,最好在這種復位信號越過域時也使用同步器。這將確保發送域中的觸發器不會違反任何時序規則。
圖5在來自接收域的任何復位信號上使用一個同步器,該信號以發送域中的觸發器為目標。
避免同步階段之間的邏輯
避免在同步器的觸發器之間放置任何組合邏輯,因為這可能會降低同步器的MTBF(圖6)。組合邏輯的輸出可能會出現毛刺并引起時序問題,最終會導致亞穩態。
圖6同步器兩個觸發器之間的組合邏輯將降低其MTBF。
同步軟件驅動的信號
如果沒有同步,則不應在接收域的邏輯中使用由軟件驅動的信號。否則,將導致時序違規并導致亞穩定性。
同步后不要合并信號
接收域中不同同步器的輸出無法合并并在其他地方使用(圖7a),因為無法保證它們的同步順序,因此有可能對錯誤的數據進行采樣。如果必須合并兩個信號以用于接收域,則最好將它們合并在發送域中(圖7b)或使用其他方法來克服一致性問題。
圖7在接收域中重新收斂同步信號可能會導致設計失敗,因此最好在跨時鐘域發送之前對其進行合并。
在跨不同時鐘域的信號同步時,遵循這些準則將有助于確保在多域SoC和FPGA設計中不會出現亞穩性問題。