SoC中會有着幾百的clock domains,millions的async data crossing。
Glitch等cdc問題是netlist level simulation的主要目的。
CDC的困難點:
1)STA不會進行asynchronous的檢查,只會進行synchronous的檢查;
2)Path across clock domain通常會被設置為false path,不進行check;
3)CDC帶來的一些問題只有在進行post-sim的時候,才會暴露出來;
在RTL level simulation中,無法發現問題。
4)CDC帶有一定的lucky性質,simulation只能檢查出一部分的error;
典型的CDC問題:
1)Metastability:異步相位的必然結果;
2-sync cell會導致一個clock cycle的uncertainty;
metastability可能會導致data-coherency和re-covergence的問題;
2)Reconvergence(correlation):一些reconvergence信號會帶來的glitch以及sample single出錯;(multi-bit uncertainty)
會導致在receiving domain中有一到兩個cycle的latency或者cycle uncertainty;
可以通過gray encoding的方式來避免;
通過verify signals肯定不會在destination clock cycle進行toggle,從而waive掉這個path。
3)Data hold problem(data loss):Fast to slow clock以及data enable sequencing場景;
可以通過implement pulse extenders的方式來避免:
Spyglass對於這類fast-slow cdc crossing,會自動進行formal check,如果data不能被capture到,會報error
處理方法:
1)synchronization scehme(such as handshake,FIFO)
2)reset synchronization(reset is asynchronously asserted and synchronously de-assert)
3)bus async bridge;
4)盡量使用glitch-free的mux;
5)well managed convergence paths;
CDC中主要的問題會在register中,因為Apb/Ahb clock與fucntion clock的async。