關于異步電路,是面試里被問的最多的部分,網上也有很多很多的總結文章。這里有兩個原因。第一,這是一種比較成熟的通用設計手段,電路結構也比較經典。第二是因為這塊設計在項目中真的很重要。
那么為什么重要呢? 從功能角度來說,比起同步系統中各種功能的設計可以通過eda驗證保證,異步交互模塊處理跨時鐘域信號傳輸這個功能是沒辦法通過rtl仿真用例測試其正確性的。而在物理實現的時候,因為異步電路時鐘沒有固定相位關系,無法像同步電路一樣通過時鐘關系去約束路徑走線,也需要被特別對待。
這些特殊性決定了異步電路需要設計人員對其結構功能有一個更正確和完善的認識,這樣才能在rtl階段及時識別需求,做好review工作,并通過cdc檢視設計的正確性,以及對后端物理實現人員提出合理的約束需求。當然有條件的還是需要做fpga原型驗證和后仿,來增加設計的可靠性,因為cdc和代碼review這些都僅僅是從設計本身的角度進行確認,只有fpga和eda后仿真可以提供一個真實運行結果的確認。
這篇文章將分幾個角度概括性地歸納總結異步電路跨時鐘域一些比較重要的概念和處理方法,后續文章中將對不同的跨時鐘域同步器結構再一一進行展開介紹。因為這些概念和處理方法已經被翻來覆去總結過無數次了,可能大家也都很熟悉了。
1
異步電路的界定
異步電路不能根據時鐘是否同源來界定,時鐘之間沒有確定的相位關系是唯一準則。 比如同一個時鐘源如果經過pll分出33MHZ和50MHZ 的兩個時鐘,他們的相位關系會時鐘變化的變化,那么他們驅動的電路也屬于異步電路。
2
跨時鐘域處理不當的危害和解決方案
1. 亞穩態 :
異步系統交互時會出現亞穩態,如果直接使用亞穩態信號,或者因處理不當導致其傳播,會使整個系統結果不可預期。合理的異步電路同步器設計可以有效降低亞穩態出現的概率,但其是不可能被完全消除的。而亞穩態出現的概率和器件工藝,時鐘頻率,信號頻率和同步器結構都有關系。
解決方案:
- 使用合適的同步器,包括但不限于:1bit多級打拍同步(電平信號,脈沖信號),多bit格雷碼轉換打拍同步,多bit Dmux同步,握手協議同步,異步FIFO同步。
- 若是打拍同步,需要根據工藝以及頻率選擇合適的打拍級數
2. 毛刺 :
異步系統交互時如果上游模塊有信號毛刺,不當的處理會使其傳播并被下游異步模塊采樣,可能會導致下游功能錯誤。同步系統內有setup檢查保證毛刺在被采樣前有足夠的時間的消除,而異步電路只能靠設計保證毛刺不被傳播和誤采樣。
解決方案:
- 上游待同步信號寄存器輸出過濾毛刺
- 待同步信號的輸出寄存器和同步器之間不能存在任何組合邏輯
3. 漏采、誤采 :
異步系統交互時如果處理不當,可能會造成下游對傳播信號漏采樣或者誤采樣。
解決方案:
- 明確系統間的頻率關系,采用合適的同步器
- 單bit待采集信號要進行位寬確認和拓展(快->慢),一般要保證信號寬度大于采集時鐘加上一個margin(依據經驗而定,來源是采集時鐘域的setup,hold,skew,jitter等)
- 多bit信號不能直接打拍采樣,通過格雷碼或者握手,異步fifo等其他結構的同步器。
4. 再匯集 :
有相互關系的上游信號經過了異步處理之后到達另一個時鐘域的時間是不可預期的,那么他們再次匯聚的時候會出現與預期功能不一致的錯誤。這又被稱為再收斂(reconverge)錯誤。
解決方案:
- 多個1bit信號待同步時,必須在原時鐘域完成組合匯聚和寄存處理,不能分別同步到另一個時鐘域再匯聚
- 同源信號復制跨時鐘域時,需要先進行跨時鐘域,再進行復制。
5. 異步復位 :
如果處理不當或者沒有做好相應時序檢查,復位功能會有問題。
解決方案:
- 采用穩定的復位邏輯單元(普遍使用經典的異步復位同步釋放結構)
- 做好recovery-removal檢查
- 保證對接模塊的異步復位不相互影響
3
異步電路跨時鐘域的設計檢查
- 明確設計規格,做好代碼review
- 做好Clock-Domain-Crossing(CDC)檢查
- 有條件的做好FPGA,EMU和后仿檢查確認
以上便是異步電路跨時鐘域設計的一些總結,希望拋轉引玉,得到更多有價值的經驗談。
-
FPGA
+關注
關注
1629文章
21753瀏覽量
604193 -
EDA工具
+關注
關注
4文章
268瀏覽量
31829 -
異步電路
+關注
關注
2文章
48瀏覽量
11116 -
同步器
+關注
關注
1文章
98瀏覽量
14654 -
FIFO存儲
+關注
關注
0文章
103瀏覽量
6018
發布評論請先 登錄
相關推薦
評論