如今典型的SOC 芯片都功能復雜、接口豐富,在眾多復雜功能中不可能所有功能都同時工作,為了能耗,大多數SOC 芯片都會切分成多個電壓域,而豐富的接口就意味著龐雜的clock 和reset. 信號跨越不同domain 時都需要特別處理,比如跨power domain 時需要插入isolation 或level shifter 或 ELS, 對power domain 的處理,需要理清power domain 的關系,定義清楚power intent, 在設計、驗證、實現端都需要做額外處理;相對于Power domain, 信號跨越Clock domains 給設計、驗證、實現帶來的挑戰會更大, 今天捋一捋實現端對跨Clock domains 的處理,主要是CDC check.
從RTL 到GDS 實現過程每一步都需要做CDC check, 以保證輸入正確且實現過程沒有犯錯。
如何確定一個時鐘域?
相位關系確定的兩個或多個時鐘稱為同步時鐘,所有被同步時鐘驅動的時序邏輯,為同一時鐘域;無確定相位關系的兩個或多個時鐘稱為異步時鐘。同步時鐘跟異步時鐘特別像夫妻關系跟情人關系,同步時鐘像夫妻關系,有固定規則保護其正常運轉,出軌就是setup 或hold 沒修干凈;異步時鐘就如情人關系,沒有任何規則可以保證共同財產不受侵犯,沒有任何責任跟義務,所以需要除了靈肉上的交流之外盡量相互隔離。一個道理:信號是可以夸時鐘域的,情人關系是可以有的,只要做好必要的隔離不影響社會規則正常運轉就成。
如果規避亞穩態?
數字電路是個1,0分明的世界,除此之外的狀態都不是穩定狀態,被稱為亞穩態,亞穩態會導致電路功能失效,本來期待一個1結果來了一個0,功能失效,只能姐妹六九天長地久了。同步電路通過setup 跟hold 來規避亞穩態。
但是對于異步電路而言,因為時鐘相位不固定,無法保證來的一定是0或1,所以無法用靜態時序分析的辦法來規避亞穩態,辦法總比問題多,聰明的工程師們拍著地中海造出了同步電路,雖然不能徹底規避亞穩態,但是只要使其發生的概率逼近于無限小,那情人還是情人,靈肉交流就能暢通無阻。
在數字電路中用MTBF 來衡量亞穩態造成故障的風險,可能每家公司用于計算MTBF 的公式都不同,下面是網上找到的兩個,看上去比較科學,根據MTBF 可以計算出在故障率可接受的范圍內同步器所需要的寄存器級數。
常見的同步電路有哪些?
常見的同步電路有:
- 由兩級或多級寄存器組成的同步器 :這是最常見的同步器,用于同步單根信號或一組bus, 如果是同步一組bus 則這組bus 必須用格雷碼。
- MUX 同步電路 :如下圖將dready 信號經過同步器送到目標時鐘域,對于這種同步電路要在設計上保證:sready 信號必須相對于目標時鐘保持m+1 個時鐘周期,也就是說sready 在m+1 個dclk 周期內都不能跳變;同時在數據傳輸過程data 保持穩定,所謂的數據傳輸過程即dready 信號在dclk 時鐘域有效期間。
- 握手同步電路 :如下圖所示,是一個典型的握手同步電路,握手同步電路通過請求信號跟應答信號進行數據交流,當有數據需要傳輸時,源時鐘域發出請求信號,同時發出數據,目標時鐘域收到請求信號后將數據鎖存,同時返回應答信號,源時鐘域收到應答信號后,可改變數據,握手同步電路的弊端是latency 太長。對于握手同步電路,在設計上要保證:sreq 信號必須保持m+1 個dclk 時鐘周期;data 信號必須保持m 個dclk 時鐘周期;dack 信號必須保持m+1 個sclk 時鐘周期;源時鐘域在收到應到信號之前必須保持請求信號;在上一個請求傳輸沒有結束之前不能發出新的請求。
- **異步FIFO: **異步FIFO 應該是大家最熟悉的同步電路了,在學習Verilog 的時候都應該寫過異步FIFO. 異步FIFO 還是常見的筆試面試題,根據需求算FIFO 深度。
CDC check 在檢查什么?
實現端的CDC check 工具,在做CDC check 時,首先根據SDC 確定時鐘域,然后在設計中提取同步電路;然后再分析同步電路的各種問題,常見的檢查有:
-
Convergence in the Crossover Path : 多路跨時鐘信號通過組合邏輯進入同步器,這會導致源時鐘域的glitch 傳遞到目標時鐘域。
-
Divergence in the Crossover Path : 同一個控制信號控制多路數據傳輸,如下圖所示,用Trans_en 來同時控制數據和地址使能信號,但實際中,由于不同的同步電路『meta-stable settling 』時間不同,所以無法保證數據使能跟地址使能同時有效,從而導致功能錯誤。
-
Divergence of Meta-stable Signal: 不要從同步器中間拉出一根信號用作他用,也不要在同步器中間插入多級buffer 或inverter.
-
Re-convergence of Synchronized Signals : 多路跨時鐘信號經過同步器后做邏輯運算,這跟同步一組bus 而沒用格雷碼的風險是類似的,無法保證不同路的同步器在目標時鐘域信號穩定是同時的,各路同步器之間的skew 是無法確切知道的。
實現端做CDC check 是依賴于SDC 的,所以要確保在SDC 中 clock 關系定義正確。小編很好奇,在驗證端的CDC check 是怎么做的?是否用『斷言』更有效?
-
寄存器
+關注
關注
31文章
5318瀏覽量
120015 -
SoC芯片
+關注
關注
1文章
608瀏覽量
34870 -
RTL
+關注
關注
1文章
385瀏覽量
59706 -
同步器
+關注
關注
1文章
94瀏覽量
14617 -
FIFO存儲
+關注
關注
0文章
103瀏覽量
5963
發布評論請先 登錄
相關推薦
評論