時(shí)鐘域交叉期間要避免的 10 個(gè)設(shè)計(jì)問題
現(xiàn)代 ASIC 由數(shù)百萬個(gè)門和數(shù)十億個(gè)晶體管組成,它們通??梢栽诰哂胁煌妷汉蜁r(shí)鐘頻率的多個(gè)域中運(yùn)行。為了避免數(shù)據(jù)丟失,設(shè)計(jì)人員需要確保從一個(gè)域發(fā)送到另一域的信號不會導(dǎo)致目標(biāo)域中寄存器的建立時(shí)間或保持時(shí)間違規(guī)。以下是跨時(shí)鐘域時(shí)需要確?;虮苊獾?10 件事。
目標(biāo)域中的寄存器(通常是觸發(fā)器)的建立或保持時(shí)間違規(guī)可能會導(dǎo)致觸發(fā)器進(jìn)入稱為亞穩(wěn)態(tài)的狀態(tài)。您可以閱讀 了解時(shí)鐘域交叉問題來了解有關(guān)交叉時(shí)鐘域問題以及它如何導(dǎo)致亞穩(wěn)態(tài)的更多信息,但關(guān)鍵點(diǎn)是同步跨域信號在任何設(shè)計(jì)中都是絕對必須的。處理此任務(wù)的電路(稱為同步器)可能會根據(jù)特定的域條件采用幾種不同的同步方案之一。您可以在多時(shí)鐘域 SoC 和 FPGA 的同步器技術(shù)一文中找到有關(guān)這些方案的更多詳細(xì)信息。
然而,即使使用這些技術(shù),您也需要做一些事情,而不要做一些事情,以避免同步設(shè)計(jì)問題。
使用多級同步
僅使用單個(gè)觸發(fā)器來同步跨時(shí)鐘域的信號會因傳遞亞穩(wěn)態(tài)而面臨很高的失敗風(fēng)險(xiǎn),特別是在域時(shí)鐘頻率差異很大的情況下。最好使二觸發(fā)器同步器,甚至三觸發(fā)器同步器。使用兩個(gè)或三個(gè)觸發(fā)器設(shè)計(jì)可以為跨域的信號在進(jìn)入亞穩(wěn)態(tài)后提供更多的時(shí)間來穩(wěn)定。
避免合并早期同步階段的信號
由于多級同步器中的第一個(gè)觸發(fā)器可以進(jìn)入亞穩(wěn)態(tài),因此切勿將第一個(gè)觸發(fā)器的輸出用作任何單元的邏輯輸入。這樣做可能會導(dǎo)致設(shè)計(jì)中亞穩(wěn)態(tài)的傳播。
同步前注冊組合信號
如果跨越時(shí)鐘域的信號直接來自組合邏輯,則其中可能存在故障。這些毛刺會減少雙觸發(fā)器同步器的平均故障前時(shí)間 (MTBF)。將穿過域的信號注冊到源時(shí)鐘可以消除毛刺。為了幫助保持同步器的 MTBF,請始終在跨域之前注冊組合信號。
考慮亞穩(wěn)態(tài)延遲
當(dāng)使用多位同步器跨越多個(gè)位時(shí),請始終考慮亞穩(wěn)態(tài)延遲。當(dāng)觸發(fā)器時(shí)鐘直到下一個(gè)時(shí)鐘周期才完全同步時(shí),任何經(jīng)歷亞穩(wěn)態(tài)的位。由于這種延遲,無法保證數(shù)據(jù)同步的一致性或順序。不使用雙觸發(fā)器同步器,而是使用另一種形式,例如數(shù)據(jù)多路復(fù)用器、異步FIFO等。然而,如果總線采用格雷碼編碼,那么我們可以使用多位同步器,因?yàn)橐淮沃挥幸晃话l(fā)生變化。只需確保在跨域之前注冊總線,因?yàn)楦窭拙幋a是完全組合邏輯。
確保足夠的時(shí)鐘速率
信號發(fā)送域的時(shí)鐘周期至少應(yīng)為接收域時(shí)鐘周期的一倍半。發(fā)送時(shí)鐘周期太短可能會導(dǎo)致信號不總是被采樣。如果不能滿足這個(gè)條件,那么最好使用請求-確認(rèn)類型的機(jī)制來控制跨域信號的切換。
永遠(yuǎn)不要假設(shè)同步
當(dāng)使用域中其他設(shè)計(jì)者的塊的網(wǎng)絡(luò)或總線時(shí),不要假設(shè)該網(wǎng)絡(luò)已為您同步。如有必要,請務(wù)必檢查并使用同步器。
同步反饋信號
使用同步器中第一個(gè)觸發(fā)器的輸出來復(fù)位傳輸時(shí)鐘域中的觸發(fā)器時(shí)要小心。這可能會導(dǎo)致同步器外部的時(shí)序違規(guī)或者可能會導(dǎo)致亞穩(wěn)態(tài)。當(dāng)這種復(fù)位信號跨域時(shí),最好也使用同步器。這將確保發(fā)送域中的觸發(fā)器不違反任何時(shí)序規(guī)則。
避免同步階段之間的邏輯
避免在同步器的觸發(fā)器之間放置任何組合邏輯,因?yàn)檫@可能會降低同步器的 MTBF。組合邏輯的輸出可能會出現(xiàn)故障并導(dǎo)致時(shí)序問題,最終導(dǎo)致亞穩(wěn)態(tài)。
同步軟件驅(qū)動(dòng)信號
軟件驅(qū)動(dòng)的信號不應(yīng)在沒有同步的情況下用于接收域的邏輯。否則將導(dǎo)致時(shí)序違規(guī)并導(dǎo)致亞穩(wěn)態(tài)。
同步后不要合并信號
接收域中不同同步器的輸出無法組合并在其他地方使用,因?yàn)闊o法保證它們的同步順序,因此有可能采樣到錯(cuò)誤的數(shù)據(jù)。如果必須組合兩個(gè)信號以便在接收域中使用,那么最好在發(fā)送域中組合它們或使用其他一些方法來克服一致性問題。
在跨不同時(shí)鐘域同步信號時(shí)遵循這些準(zhǔn)則將大大有助于確保多域 SoC 和 FPGA 設(shè)計(jì)中不會出現(xiàn)亞穩(wěn)態(tài)問題。