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

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

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

為什么CDC是問題?常用的CDC設(shè)計(jì)思路

冬至子 ? 來源:數(shù)字邏輯電路小站 ? 作者:孟祥志 ? 2023-06-27 16:41 ? 次閱讀

CDC(Clock Domain Crossing,時(shí)鐘穿越)有很多的論文都討論過這個(gè)主題。本文主要從原理上分析一下為什么CDC是問題、常用的CDC設(shè)計(jì)思路。不能算權(quán)威總結(jié),只是對(duì)工作幾年CDC設(shè)計(jì)的經(jīng)驗(yàn)的一個(gè)總結(jié)。

源起:建立時(shí)間和保持時(shí)間

集成電路設(shè)計(jì)專業(yè)的同學(xué)期末考試肯定考過“setup time"或者”hold time"的定義,這個(gè)也是應(yīng)屆畢業(yè)生面試數(shù)字集成電路設(shè)計(jì)崗位的“明牌”必面題目。

先回顧一下setup time(建立時(shí)間)和hold time (保持時(shí)間)的定義:

建立時(shí)間(t su ) 是在時(shí)鐘翻轉(zhuǎn)(對(duì)于正沿觸發(fā)寄存器為0→1的翻轉(zhuǎn))之前數(shù)據(jù)輸入(D)必須有效的時(shí)間。

維持時(shí)間(t hold )是在時(shí)鐘邊沿之后數(shù)據(jù)輸入必須仍然有效的時(shí)間。

對(duì)于單一時(shí)鐘的電路進(jìn)行 時(shí)序分析 ,最主要是為了滿足這些條件。

比如,說你的設(shè)計(jì)時(shí)序“很緊張”,往往是兩級(jí)寄存器之間的組合邏輯很多,延時(shí)很長(zhǎng)。從上一級(jí)的數(shù)據(jù)傳到下一級(jí)時(shí),無法滿足下一級(jí)的建立時(shí)間。我們這個(gè)時(shí)候需要做時(shí)序修復(fù)(timing fix)。

單時(shí)鐘這個(gè)問題比較好考慮,因?yàn)閿?shù)據(jù)什么時(shí)候開始發(fā)送是明確的——上一個(gè)時(shí)鐘沿——我們能夠有很多辦法去修復(fù)時(shí)序。(比如前文推送的“模板”)

但對(duì)于多時(shí)鐘設(shè)計(jì)(異步電路),從一個(gè)時(shí)鐘域向另一個(gè)時(shí)鐘域送數(shù)據(jù),時(shí)鐘(周期)不同,在一個(gè)時(shí)鐘域隨時(shí)隨刻都可能收到另外時(shí)鐘域的數(shù)據(jù),這自然是不能滿足建立時(shí)間的。

不滿足建立時(shí)間,那么數(shù)據(jù)的傳輸就會(huì)失敗。何謂“失敗”?就是我想傳一個(gè)數(shù)據(jù)1過去,我可能成功的傳了個(gè)1,也可能傳了個(gè)0,也可能我不知道傳了什么值。

不滿足建立時(shí)間,簡(jiǎn)單的理解就是:目標(biāo)時(shí)鐘域(dest. clock) 的時(shí)鐘沿和發(fā)起時(shí)鐘域的數(shù)據(jù)(src. clock)來的時(shí)間 很接近 ,而時(shí)鐘沿和數(shù)據(jù)的誰(shuí)先誰(shuí)后錯(cuò)開一點(diǎn),傳輸?shù)较乱患?jí)的數(shù)據(jù)就是完全不一樣,這種不同這是不可接受的。

因?yàn)椴粷M足建立時(shí)間,我的數(shù)據(jù)是不穩(wěn)的、不可預(yù)知的、不精確的。對(duì)于單個(gè)寄存器而言,我們叫做 亞穩(wěn)態(tài) (Metastability)。

總結(jié)一下: 在數(shù)據(jù)從一個(gè)時(shí)鐘域向另一個(gè)時(shí)鐘域傳輸時(shí),無法滿足建立時(shí)間,數(shù)據(jù)在被目標(biāo)時(shí)鐘域寄存器采值時(shí),會(huì)進(jìn)入亞穩(wěn)態(tài),無法準(zhǔn)確傳輸數(shù)據(jù)

我們用 時(shí)鐘穿越 (CDC,Clock Domain Crossing)來描述我們現(xiàn)在處理的這種情況。把所有的這種問題都叫做 時(shí)鐘穿越問題 (CDC issue)。

隨著工藝技術(shù)的迭代,很多的公司的集成電路項(xiàng)目出現(xiàn)錯(cuò)誤,都是出現(xiàn)在CDC的解決方法有問題,或者驗(yàn)證不夠充分上。

本章節(jié)先討論1比特的情況。

那如何解決“1bit的時(shí)鐘穿越”問題呢?

既然根子上是亞穩(wěn)態(tài)的問題,那我就破掉亞穩(wěn)態(tài)

破掉亞穩(wěn)態(tài)有很多種方法,方法都是讓數(shù)據(jù)來到目標(biāo)時(shí)鐘域的時(shí)鐘沿之前穩(wěn)定住。

延長(zhǎng)源信號(hào)的方法(不推薦):

我要傳輸1,那我就在源時(shí)鐘域?qū)π盘?hào)1持續(xù)上拉;我要傳輸0,那我就在源時(shí)鐘域?qū)π盘?hào)0持續(xù)下拉。換句話說,就是讓想傳的數(shù)據(jù)1和0都維持“ 足夠長(zhǎng) ”的時(shí)間——長(zhǎng)到我這個(gè)時(shí)鐘沿采不到,下個(gè)時(shí)鐘沿肯定能采到。

這就是我們看很多年前"老代碼"中很普遍的方法:延長(zhǎng)源信號(hào)長(zhǎng)度。比如對(duì)源信號(hào)連續(xù)打多少拍,然后“或”起來組成一個(gè)信號(hào)使用。

或者干脆不做任何處理直接穿越,前提是能夠證明雖然這個(gè)信號(hào)是一個(gè)CDC信號(hào),但是不會(huì)輕易改變(比如寄存器初始化之后的一個(gè)控制信號(hào),只會(huì)在初始化階段改變)。

延長(zhǎng)源信號(hào)方法總結(jié):

  1. 很多老的設(shè)計(jì)是直接CDC使用,或者打多拍然后進(jìn)行傳輸。

  2. 優(yōu)點(diǎn):簡(jiǎn)單,邏輯比較少

  3. 缺點(diǎn):

    3.1.如果源信號(hào)的 前提假設(shè)發(fā)生變化 ,容易出現(xiàn)bug。如第二代設(shè)計(jì)的時(shí)鐘頻率比變化,或者一個(gè)不輕易改變的配置信號(hào)(control signal)“與”上了一個(gè)經(jīng)常變的控制信號(hào)。不經(jīng)過仔細(xì)驗(yàn)證,維持原有設(shè)計(jì),很容易出“大“問題。

    3.2.邏輯雖然簡(jiǎn)單,但是設(shè)計(jì)不具有通用性。比如你需要對(duì)不同時(shí)鐘頻率比例的進(jìn)行不同的打拍。

  4. 所有可以用“延長(zhǎng)源信號(hào)”方法的地方,都可以加上同步器(syncer)邏輯 ,這更加保險(xiǎn)。

  5. 總結(jié):除非維護(hù)不好修改的歷史代碼,新代碼不推薦。

同步器(synchronizer, syncer)

那破掉亞穩(wěn)態(tài)還有什么辦法呢?

方法很簡(jiǎn)單,就是在目標(biāo)時(shí)鐘域 加速穩(wěn)定過程 。

D觸發(fā)器是一個(gè)簡(jiǎn)單的加速穩(wěn)定的簡(jiǎn)單結(jié)構(gòu)。雖然1級(jí)D觸發(fā)器,可能不滿足建立時(shí)間,但是后面再跟一個(gè)D觸發(fā)器,就會(huì) 使不穩(wěn)態(tài)要么迅速變化為傳輸0,要么迅速變化為傳輸1

兩級(jí)D觸發(fā)器的串聯(lián),就是一個(gè)簡(jiǎn)單的同步器(synchronizer, 或者syncer,或者Sync2D)。

A synchronizer is a device that samples an asynchronous signal and outputs a version of the signal that has transitions synchronized to a local or sample clock."

這種穩(wěn)定是概率性的,與工藝相關(guān)的。穩(wěn)定下來而不是處于亞穩(wěn)態(tài)的時(shí)間,有數(shù)學(xué)上的MTBF(平均失敗時(shí)間)公式進(jìn)行計(jì)算。在日常的設(shè)計(jì)中,一般工藝廠會(huì)告知你的一個(gè)參數(shù)公式(或者是一個(gè)查找表),輸入你的輸入輸出頻率,就能查找到在當(dāng)前工藝下的MTBF,然后比對(duì)MTBF的要求決定是不是選擇SYNC2D(打兩拍的同步器)。

如果SYNC2D不滿足MTBF的要求,那么就再接一級(jí)D觸發(fā)器,組成SYNC3D(打三拍的同步器)。SYNC3D的MTBF比SYNC2D會(huì)長(zhǎng)許多數(shù)量級(jí)。(我在前東家做一個(gè)設(shè)計(jì),同樣的時(shí)鐘頻率,查MTBF表SYCN2D的MTBF是10天,SYNC3D的平均失敗時(shí)間是50年……)

我在過去做14nm工藝下的設(shè)計(jì),項(xiàng)目主管就要求所有的SYNC2D替換為SYNC3D。

我們這里暫時(shí)用SYNC2D作為例子(SYNC3D同理)。

圖片

同步器有什么好處?

能夠安全的排除亞穩(wěn)態(tài)。

同步器有什么壞處或者局限?

目的時(shí)鐘域會(huì)晚幾個(gè)周期。

這個(gè)不算是個(gè)問題,既然是跨時(shí)鐘域的,晚兩三個(gè)周期沒什么問題。

** 數(shù)據(jù)傳過來,對(duì)SYNC2D而言,會(huì)delay2個(gè)周期或者3個(gè)周期。** 也就是說你不能確定是2個(gè)周期后還是3個(gè)周期后能傳過目標(biāo)數(shù)據(jù)來。對(duì)于單比特沒有問題,對(duì)于多比特存在對(duì)齊的問題。 同步器 只能保證數(shù)據(jù)沒有亞穩(wěn)態(tài),不能保證是正確數(shù)據(jù) 。

怎么理解呢?就是說,你給我同步器什么數(shù)據(jù),我都能給你穩(wěn)住。但是 你若給我的是錯(cuò)誤的值,這不能怨我 。

例如,在這個(gè)周期給同步器輸入端一個(gè)信號(hào)1,同步器在能給你穩(wěn)到0或者1,你只要在發(fā)送端的下個(gè)周期還給同步器1就好了。經(jīng)過同步器一走,給個(gè)干凈的1給你。

1.jpg

同步器的正確前提是,信號(hào)必須穩(wěn)定足夠長(zhǎng)的時(shí)間(能夠持續(xù)上拉,或者下拉)。

那么多長(zhǎng)算長(zhǎng)呢?前人理論已經(jīng)有了研究結(jié)論了。在同步器設(shè)計(jì)理論中,叫做”1.5x規(guī)則“或者”三沿規(guī)則“: 輸入端的信號(hào)長(zhǎng)度,至少是1.5倍接收時(shí)鐘周期的長(zhǎng)度,或者三個(gè)接收時(shí)鐘沿的長(zhǎng)度

滿足了這個(gè)規(guī)則,因?yàn)槭侨齻€(gè)邊沿,那么肯定會(huì)有一個(gè)安全的上升沿可以采到。

這是非常重要的一個(gè)規(guī)則。只要滿足了這一規(guī)則,同步器就是安全的。

使用同步器本身,可能會(huì)漏采或者多采。

其實(shí)這只是上一個(gè)要點(diǎn)的延伸。同步器是一個(gè)穩(wěn)定單元,只能做到”穩(wěn)“,你需要“穩(wěn)+準(zhǔn)”,這超出了同步器的能力范圍,需要加上一些配合電路才能工作。但幾乎所有的CDC電路在時(shí)鐘穿越的核心邏輯,同步器都包含其中。

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

    關(guān)注

    31

    文章

    5425

    瀏覽量

    123526
  • D觸發(fā)器
    +關(guān)注

    關(guān)注

    3

    文章

    165

    瀏覽量

    48562
  • CDC
    CDC
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    18147
  • 同步器
    +關(guān)注

    關(guān)注

    1

    文章

    106

    瀏覽量

    15078
  • 時(shí)鐘電路
    +關(guān)注

    關(guān)注

    10

    文章

    243

    瀏覽量

    51274
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    FPGA User Guide之report_cdc

    report_cdc 可以報(bào)告設(shè)計(jì)中所有的 cdc 路徑并將其分類(前提是時(shí)鐘被約束好),我們可以基于該報(bào)告來檢查設(shè)計(jì)中是否有不安全的 cdc 路徑。
    發(fā)表于 11-28 10:53 ?1401次閱讀

    cdc_acm類設(shè)備與主機(jī)建立通信問題

    USB設(shè)備定義成cdc_acm類并與linux主機(jī)枚舉成功后,在未進(jìn)行數(shù)據(jù)傳輸時(shí)出現(xiàn)此信息:cdc_acm:failed to set dtr/rts有知道這是什么引起的嗎?求思路,拜謝大家了
    發(fā)表于 12-20 08:45

    infosphere CDC性能調(diào)優(yōu)的文檔

    infosphere CDC性能調(diào)優(yōu)的文檔
    發(fā)表于 09-07 09:30 ?7次下載
    infosphere <b class='flag-5'>CDC</b>性能調(diào)優(yōu)的文檔

    08 CDC設(shè)備

    08 CDC設(shè)備
    發(fā)表于 10-11 09:17 ?9次下載
    08 <b class='flag-5'>CDC</b>設(shè)備

    火幣為什么要停止CDC交易

    一石激起千層浪,火幣公告發(fā)出之后迅速引發(fā)連鎖反應(yīng),先是ZB交易所緊隨其后關(guān)閉CDC交易,緊接著CDC項(xiàng)目負(fù)責(zé)人楊寧迅速接受媒體采訪,倒苦水撇清關(guān)系。更多媒體開始深挖,CDC更多內(nèi)幕也被披露出來。廣大群眾這才知道,原來
    發(fā)表于 11-08 11:33 ?6554次閱讀

    如何使用report_cdc命令分析、調(diào)試和修復(fù)CDC問題

    了解如何使用命令report_cdc分析,調(diào)試和修復(fù)設(shè)計(jì)中的CDC問題。 命令report_cdc是一個(gè)僅限TCL的命令,用于分析您的設(shè)計(jì)并識(shí)別設(shè)計(jì)中潛在的CDC結(jié)構(gòu)問題并將其標(biāo)記為
    的頭像 發(fā)表于 11-21 06:05 ?5026次閱讀

    ic設(shè)計(jì)——CDC的基本概念

    一個(gè)系統(tǒng)中往往會(huì)存在多個(gè)時(shí)鐘,這些時(shí)鐘之間有可能是同步的,也有可能是異步的。如果一個(gè)系統(tǒng)中,異步時(shí)鐘之間存在信號(hào)通道,則就會(huì)存在CDC(clock domain crossing)問題。在下面的文章里,我們將會(huì)討論CDC的一些技術(shù)細(xì)節(jié)。
    發(fā)表于 01-04 16:59 ?1.5w次閱讀
    ic設(shè)計(jì)——<b class='flag-5'>CDC</b>的基本概念

    CapTIvate技術(shù)中CDC設(shè)計(jì)平臺(tái)的介紹(1)

    CapTIvate Technology軟件設(shè)計(jì)快速指南(二) - CapTIvate軟件設(shè)計(jì)中心(CDC)介紹1
    的頭像 發(fā)表于 04-16 06:33 ?3617次閱讀
    CapTIvate技術(shù)中<b class='flag-5'>CDC</b>設(shè)計(jì)平臺(tái)的介紹(1)

    CDC設(shè)備枚舉過程解析

    本篇筆記將詳述 CDC設(shè)備枚舉過程,讓大家對(duì)整體的枚舉過程有個(gè)概念。
    的頭像 發(fā)表于 10-09 11:43 ?3077次閱讀
    <b class='flag-5'>CDC</b>設(shè)備枚舉過程解析

    vc++-CDC常用函數(shù)總結(jié)

    vc++-CDC常用函數(shù)總結(jié)(電源技術(shù)論壇)-該文檔為vc++-CDC常用函數(shù)總結(jié)講解文檔,是一份還算不錯(cuò)的參考文檔,感興趣的可以下載看看,,,,,,,,,,,,,,,,,
    發(fā)表于 09-27 15:40 ?2次下載
    vc++-<b class='flag-5'>CDC</b><b class='flag-5'>常用</b>函數(shù)總結(jié)

    STM32 USB如何配置多個(gè)CDC設(shè)備—5個(gè)CDC設(shè)備

    title: STM32 USB如何配置多個(gè)CDC設(shè)備—5個(gè)CDC設(shè)備,date: 2021/1/18 20:10:25 +8,STM32 USB如何配置多個(gè)CDC設(shè)備—5個(gè)CDC設(shè)備
    發(fā)表于 12-28 19:43 ?31次下載
    STM32 USB如何配置多個(gè)<b class='flag-5'>CDC</b>設(shè)備—5個(gè)<b class='flag-5'>CDC</b>設(shè)備

    各種類型CDC路徑中的毛刺問題

    CDC 驗(yàn)證不僅在 RTL 有必要,在門級(jí)也必不可少。在 RTL,重點(diǎn)是通過識(shí)別 CDC 結(jié)構(gòu)和方案來確定時(shí)鐘域和 CDC 路徑。
    的頭像 發(fā)表于 03-30 11:03 ?1375次閱讀

    HD74CDC2509B 數(shù)據(jù)表

    HD74CDC2509B 數(shù)據(jù)表
    發(fā)表于 06-27 18:49 ?0次下載
    HD74<b class='flag-5'>CDC</b>2509B 數(shù)據(jù)表

    HD74CDC2510B 數(shù)據(jù)表

    HD74CDC2510B 數(shù)據(jù)表
    發(fā)表于 06-27 18:49 ?0次下載
    HD74<b class='flag-5'>CDC</b>2510B 數(shù)據(jù)表

    cdc減振器控制原理是什么

    CDC(Continuous Damping Control,連續(xù)阻尼控制)是一種先進(jìn)的車輛懸掛系統(tǒng)技術(shù),它能夠根據(jù)車輛的行駛條件實(shí)時(shí)調(diào)整懸掛的阻尼力,以提供最佳的乘坐舒適性和操控穩(wěn)定性。CDC系統(tǒng)
    的頭像 發(fā)表于 09-18 15:16 ?1699次閱讀

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品