0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

你一定要懂的CDC錯(cuò)誤

sanyue7758 ? 來源:IC的世界 ? 2023-07-24 17:00 ? 次閱讀

本文基于VC_SpyGlass_CDC_UserGuide整理了3種常見的cdc(Clock Domain Crossing)錯(cuò)誤。需要注意的是:

?本文描述的跨時(shí)鐘錯(cuò)誤在特定場景下,有些是允許的,甚至有些是正常設(shè)計(jì)。因此IC設(shè)計(jì)者想要確認(rèn)跨時(shí)鐘錯(cuò)誤需要分析應(yīng)用場景。

?還有一些CDC錯(cuò)誤是spyglass 工具無法發(fā)現(xiàn)的,因此不能全部依賴工具檢查。

?有些項(xiàng)目組為了避免新手對(duì)cdc理解不深刻造成bug,對(duì)跨時(shí)鐘設(shè)計(jì)做了更加嚴(yán)格的規(guī)范。例如,下文中的裸跨是不允許存在的。

1、CDC Unsynchronized(沒有跨時(shí)鐘)

沒有采用跨時(shí)鐘模塊,即咱們通常說的裸跨,不同時(shí)鐘域的數(shù)據(jù)直接互連,會(huì)存在亞穩(wěn)態(tài)問題。同步電路會(huì)進(jìn)行STA(靜態(tài)時(shí)序分析)保證setup-hold time滿足要求,因此寄存器能夠保證正確采樣。而不同時(shí)鐘域的信號(hào)之間沒有setup-hold time要求,無法保證正確采樣。

058b2e18-2a00-11ee-a368-dac502259ad0.png

圖5-1 所示為亞穩(wěn)態(tài)的案例,F(xiàn)1是clk_A時(shí)鐘域的寄存器,F(xiàn)2是clk_B時(shí)鐘域的寄存器,clk_A和clk_B是異步時(shí)鐘,寄存器F1的輸出信號(hào)A發(fā)生跳變的時(shí)刻有可能與clk_B的上升沿發(fā)生重疊,此時(shí)對(duì)寄存器F2來說,在setup-hold time時(shí)間區(qū)間內(nèi),輸入A沒有保持穩(wěn)定,因此寄存器F2輸出的B是不確定狀態(tài),這就是亞穩(wěn)態(tài)。

解決方案:根據(jù)實(shí)際場景添加對(duì)應(yīng)的跨時(shí)鐘模塊,例如bit同步器,脈沖跨時(shí)鐘模塊,異步fifo,多比特跨時(shí)鐘等等。

鴿子解讀1

沒有跨時(shí)鐘,不一定就是錯(cuò)誤;在一些場景中,為了節(jié)約資源不跨時(shí)鐘是允許的。

下圖所示案例:配置模塊csr模塊產(chǎn)生的配置信號(hào)cfg_*_mode是clk1時(shí)鐘域,直接用于clk2時(shí)鐘域的邏輯模塊。

芯片使用過程中,復(fù)位和配置順序如下:hrst_n先釋放--->完成csr模塊寄存器配置--->釋放srst_n。

在srst_n復(fù)位釋放后,靜態(tài)配置cfg_*_mode不再發(fā)生改變。這種情況中,功能邏輯模塊處于復(fù)位狀態(tài)時(shí),cfg_*_mode發(fā)生跳變,這種情況下即使發(fā)生了亞穩(wěn)態(tài)也沒有影響,因?yàn)楣δ苓壿嬆K還沒允許。

059a3cf0-2a00-11ee-a368-dac502259ad0.png

鴿子解讀2:

在部分握手機(jī)制的模塊中,沒有跨時(shí)鐘,也能保證不會(huì)出現(xiàn)亞穩(wěn)態(tài)。

CDC無法識(shí)別是否實(shí)現(xiàn)握手機(jī)制,如果跨時(shí)鐘模塊實(shí)現(xiàn)握手機(jī)制,即能夠保證圖5-1中的F2準(zhǔn)備采樣時(shí)信號(hào)A已保持穩(wěn)定,雖然會(huì)報(bào)錯(cuò),但是不會(huì)出現(xiàn)亞穩(wěn)態(tài)。在多bit的配置信號(hào)跨時(shí)鐘模塊中就存在這樣的情況。

2、CDC Glitch (毛刺)

簡單來說,就是組合邏輯直接跨時(shí)鐘,組合邏輯會(huì)存在glitch,導(dǎo)致glitch被目的時(shí)鐘采樣到,導(dǎo)致出現(xiàn)不期望的信號(hào)

解決方案:增加源時(shí)鐘域寄存器打拍,寄存器輸出的信號(hào)才跨時(shí)鐘。

特殊場景:如果圖10中的D0或者I1是一個(gè)準(zhǔn)靜態(tài)信號(hào)(幾乎不會(huì)跳變的),那么不會(huì)產(chǎn)生glitch,也是可以接受的。

05a2f98a-2a00-11ee-a368-dac502259ad0.png05ac66be-2a00-11ee-a368-dac502259ad0.png

Glitches的產(chǎn)生有如下三種場景:

1)同一個(gè)bit信號(hào)的組合邏輯跨時(shí)鐘

2)多個(gè)源時(shí)鐘域的信號(hào)的組合邏輯跨時(shí)鐘

3)同一個(gè)時(shí)鐘域的多個(gè)源信號(hào)的組合邏輯跨時(shí)鐘

3、CDC-Convergence(跨時(shí)鐘重新匯聚)

CDC-Convergence會(huì)產(chǎn)生不期望的信號(hào)組合,從而導(dǎo)致功能異常。

如果多個(gè)信號(hào)從源時(shí)鐘域通過不同的跨時(shí)鐘路徑進(jìn)入目的時(shí)鐘域,然后這些信號(hào)在目的時(shí)鐘域中又聚合到一起,那么就有可能因?yàn)樾盘?hào)的重新聚合導(dǎo)致電路功能上的異常。例如下圖7-29和7-28中,x和y的組合(x,y)在同步前只有(1,1)和(0,0)的組合,在同步后出現(xiàn)了(1,0)的組合,還有可能出現(xiàn)(0,1)組合。

如下圖7-29和7-28所示,X、X1、Y和Y1 屬于clk_a時(shí)鐘域,delay A和delay B表示不同的延時(shí)(走線延時(shí)),X3,X4,Y3,Y4屬于clk_b時(shí)鐘域。clk_a和clk_b屬于異步時(shí)鐘。X4和Y4作為輸入進(jìn)行組合邏輯獲得O。

假設(shè)因?yàn)槟承┰颍瑇和y的組合(x,y)只會(huì)出現(xiàn)2'b00 或者2‘b11的情況。在正確設(shè)計(jì)過程中,我們期望x4和y4的組合(x4,y4)也只會(huì)出現(xiàn)2'b00 或者2‘b11的情況。但是由于不同的跨時(shí)鐘路徑會(huì)導(dǎo)致(x4,y4)出現(xiàn)錯(cuò)誤組合。見圖7-28,由于delay A和delay B的延時(shí)不同,導(dǎo)致X2和Y2到達(dá)同步器D端口的時(shí)間有差異,因此采樣后的值X3和Y3可能會(huì)出現(xiàn)一個(gè)clk_b周期的差異,此時(shí)(x3,y3)出現(xiàn)了2‘b10的組合,此組合會(huì)傳遞到(x4,y4)。因此輸出的Q可能是不符合預(yù)取的值。此為Convergence導(dǎo)致的錯(cuò)誤

05b9cd4a-2a00-11ee-a368-dac502259ad0.png05c20686-2a00-11ee-a368-dac502259ad0.png

圖8顯示了3種匯聚的情況:

case1:同一個(gè)源時(shí)鐘域的信號(hào)同步后立即匯聚在組合邏輯

case2:源時(shí)鐘域信號(hào)同步后在目的時(shí)鐘域打了若干拍后再匯聚。如果當(dāng)目的時(shí)鐘域打拍數(shù)量過大,例如20級(jí),超過了spyglass 工具默認(rèn)配置值,此種情況spyglass工具就無法檢查出問題了。

case3: 不同源時(shí)鐘域的信號(hào)同步后立即匯聚在組合邏輯

05cd4820-2a00-11ee-a368-dac502259ad0.png





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5295

    瀏覽量

    119824
  • 靜態(tài)時(shí)序分析

    關(guān)注

    0

    文章

    28

    瀏覽量

    9567
  • 時(shí)鐘域
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    9524
  • CDC技術(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    6848

原文標(biāo)題:Spyglass:你一定要懂的CDC錯(cuò)誤

文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    好東西,一定要分享!

    片簡單的嵌入式文章,希望有用,,好東西一定要分享。。
    發(fā)表于 10-18 22:08

    請(qǐng)問RTC為什么一定要從1970年開始計(jì)算?

    為什么RTC一定要從1970年開始計(jì)算??
    發(fā)表于 07-10 01:00

    請(qǐng)問為什么一定要調(diào)用次任務(wù)切換?

    左老師:為什么在視頻中說如果xTaskResumeAll()沒有做任務(wù)切換,那么也一定要調(diào)用portYIELD_WITHIN_API()做次任務(wù)切換?為什么一定要
    發(fā)表于 07-15 08:03

    學(xué)習(xí)編程一定要英語很好嗎?

    編程需要大量的英語代碼,學(xué)習(xí)編程的話,不一定要英語非常得好,但是一定要有英語基礎(chǔ),因?yàn)楝F(xiàn)在編程里面大量都是英語代碼,但是很多編程都是固定的套路,我們只需要知道個(gè)英語代碼是什么意思,然后接下來用這種
    發(fā)表于 07-01 07:55

    這些LED知識(shí)一定要知道

    LED在生活中隨處可見,作為嵌入式工程師,這些LED知識(shí)一定要知道!——LED的圖形標(biāo)號(hào)——LED的基本性質(zhì)——1.最大工作電流——2.導(dǎo)通電壓——LED檢測方法——1.極性判斷——2.好壞檢測
    發(fā)表于 12-21 07:12

    做嵌入式是不是一定要學(xué)習(xí)C語言

    問:做嵌入式是不是一定要學(xué)習(xí) C 語言?答:一定要以 C 語言為基礎(chǔ),嵌入式是個(gè)面很廣的學(xué)科,分類也比較多,但是我認(rèn)為,嵌入式基礎(chǔ)是一定需要 C 語言基礎(chǔ)的,我們以前剛開始學(xué)習(xí)單片機(jī)
    發(fā)表于 02-25 06:11

    FIFO讀后一定要清嗎?

    FIFO讀后一定要清么
    發(fā)表于 09-22 06:31

    為什么高級(jí)助聽器一定要使用鋅空氣電池?

    為什么高級(jí)助聽器一定要使用鋅空氣電池? 鋅空氣電池以空氣中氧氣為正極材料,所以就不必再在電池內(nèi)放入,電池內(nèi)就有空間裝更
    發(fā)表于 12-16 09:59 ?1005次閱讀

    未來是物聯(lián)網(wǎng)的時(shí)代,一定要

    什么是物聯(lián)網(wǎng)呢?物聯(lián)網(wǎng)的定義是通過射頻識(shí)別、紅外感應(yīng)器、全球定位系統(tǒng)、激光掃描器等信息傳感設(shè)備,按約定的協(xié)議,把任何物品與互聯(lián)網(wǎng)相連接,進(jìn)行信息交換和通信,以實(shí)現(xiàn)對(duì)物品的智能化識(shí)別、定位、跟蹤、監(jiān)控和管理的種網(wǎng)絡(luò)。
    發(fā)表于 12-30 16:43 ?852次閱讀

    手機(jī)充電一定要充滿嗎

    充電一定要在手機(jī)沒電之前充電,也不能充滿電,要充到一定電量就拔掉充電器,這樣才能更好的保護(hù)手機(jī)的電池,不要等手機(jī)電量全部用沒之后在充電,這個(gè)叫做深度放電,這樣對(duì)手機(jī)的損害是非常大的,所以說小編請(qǐng)大家千萬不要這么做。
    的頭像 發(fā)表于 03-01 14:00 ?4w次閱讀

    真的CPU大小端模式嗎?

    真的CPU大小端模式嗎?
    的頭像 發(fā)表于 02-27 16:46 ?2690次閱讀

    使用變頻器時(shí)一定要接制動(dòng)電阻嗎

    在要求電機(jī)快速制動(dòng)的情況下變頻器要使用制動(dòng)電阻,所以制動(dòng)電阻一定要接,如果沒有是不安全的。
    的頭像 發(fā)表于 11-13 09:49 ?1.7w次閱讀

    電路設(shè)計(jì)降壓,一定要用變壓器嗎?

    降壓,一定要用變壓器嗎?其實(shí)不是這樣的,除了變壓器,電容也是可以降壓,今天就帶領(lǐng)大家了解下電容降壓!
    發(fā)表于 02-10 10:08 ?4次下載
    電路設(shè)計(jì)降壓,<b class='flag-5'>一定要</b>用變壓器嗎?

    精通STM32的含金量嗎?

    精通ARM的含金量嗎?精通STM32的含金量嗎?不管懂不懂都要,趕緊學(xué)。
    的頭像 發(fā)表于 04-19 09:13 ?1660次閱讀

    pcb設(shè)計(jì)的基本原則分享 PCB設(shè)計(jì)16個(gè)原則一定要知道

    PCB設(shè)計(jì)的這16個(gè)原則一定要知道
    的頭像 發(fā)表于 03-12 11:19 ?2633次閱讀