跨复位域小结
跨復位域小結
跨時鐘域我們比較熟悉,但跨復位域可能就比較陌生了。在平頭哥實習的一面中,面試官問了我較多跨復位域的問題,主要還是自己在簡歷里挖了個坑(就不該寫設計復位網絡的TAT),所以這篇文章就來簡要介紹一下跨復位域中存在的一些問題及解決方法。
異步復位導致的亞穩態
異步復位的釋放
復位如果在時鐘采樣沿的前后的一個時間窗口內釋放的話會導致輸出的Q端存在亞穩態問題,本質上也是觸發器建立時間和保持時間的要求,對復位而言就是Recovery Time和Removal Time的要求。
為解決異步復位釋放的亞穩態問題,我們可以使用異步復位,同步釋放的方式來解決。
異步復位的置位
復位的置位也可能導致亞穩態問題,主要場景是電路中有多復位域,我們分析一下下圖所示場景。
dff1和dff2分別使用不同的時鐘和復位信號,dff1先復位,之后dff2再復位。可能存在的問題是arst1置位時,dff1的Q端數據從data向Reset-value跳變時可能不滿足dff2的建立/保持時間要求,從而使dff2的Q端出現亞穩態。
以下關于時鐘復位的5種情形都可能導致亞穩態:
1、clk1和clk2是一樣的/同步的;
2、clk1和clk2是異步的;
3/4、對arst1和arst2均做異步復位,同步釋放操作;
5、rst2做同步復位;
如何安全地處理跨復位域
1、對復位的順序提出要求
arst2在arst1之前置位的話,就不存在dff2的亞穩態問題,這種先復位后級模塊的策略可以有效避免亞穩態。
2、增加數據隔離單元
在dff1的arst1置位前隔離dff1的輸出,將輸出鉗位到0,避免arst1置位時導致dff2出現亞穩態;
3、通過時鐘門控進行數據隔離
與數據隔離單元的思想類似,只不過通過門控dff2的方式來完成數據隔離。(門控時鐘也可以有效解決異步復位的recovery和removal time的問題,異步復位后再開時鐘就不用考慮上述time的檢查。)
4、通過打拍降低亞穩態概率
通過增加一個dff3來減少亞穩態發生的概率。
小結
安全處理跨復位域的做法:
- 依序對模塊進行復位,后級模塊先復位;
- 通過數據隔離單元或門控時鐘進行數據隔離,避免出現亞穩態;
- 后級模塊通過兩級同步寄存器降低亞穩態發生的概率;
平頭哥一面中,面試官提問我,ASIC中復位網絡的扇出很大,很難保證所有寄存器都滿足recovery和removal time的要求,異步復位/同步釋放的方式也解決不了該問題,因為有Skew存在,問此時如何保證正常的異步復位功能,且不用考慮recovery和removal time?
當時面試過程中沒答出來,于是問了面試官,面試官說異步復位前先把clock關了,復位后再開clock,這樣就可以避免考慮recovery和removal time,這個答案震驚到我了,作下記錄,感謝平頭哥的面試官!
Reference
Reset Domain Crossing
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: 2023届IC实习小结
- 下一篇: 为什么刹车热了会失灵_网曝比亚迪汉“刹车