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