精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

跨時鐘域CDC之全面解析

ruikundianzi ? 來源:知芯情報局 ? 2023-03-15 13:58 ? 次閱讀

時鐘域(Clock Domain Crossing,CDC)作為數字芯片設計中的經典問題,也歷來是各面試官常問的問題。今天我們來分析一下跨時鐘域的相關問題,希望對你有所啟發。

一、什么是時鐘域?

在一些較為簡單的數字電路中,只有一個時鐘,即所有的觸發器都使用同一個時鐘,那么我們說這個電路中只有一個時鐘域。對于功能較為復雜的芯片,如下圖所示,電路中往往存在多個時鐘,不同的模塊使用不同的時鐘,那么我們說這個設計中有多個時鐘域。當信號在不同時鐘域之間傳輸時,就被稱為跨時鐘域。

d55605d2-c2f4-11ed-bfe3-dac502259ad0.jpg

二、什么是亞穩態?

數字信號跨時鐘域傳輸時,就會產生亞穩態問題。亞穩態是指觸發器無法在某個規定時間段內達到一個可確認的狀態。每一個觸發器都有其規定的建立(setup)和保持(hold)時間參數, 在這個時間窗口內, 輸入信號在時鐘的上升沿是不允許發生改變的。如果觸發器的數據輸入端口上數據在這個時間窗口內發生變化(或者數據更新),那么就會產生時序違規,觸發器的輸出將徘徊在不可預知的電平狀態,即亞穩態。

如下圖所示,在CLK2的上升沿到來的時候,觸發器Din的數據在發生變化,那么Dout的數據將會徘徊在一個中間電平狀態(這個中間電平可能正確值,也可能是錯誤值)。也就是說,電路處于中間態的時間變長,使得電路“反應”遲鈍,這就是“亞穩態”。亞穩態信號的穩定時間通常比一個時鐘周期要短的多。

一般情況下不會超過一個或者兩個周期,取決于觸發器的性能。如果亞穩態超過一個或者兩個周期,那么就會被下一個觸發器采樣到,這樣就會造成亞穩態的傳播。但是需要強調的是,如果產生亞穩態,亞穩態恢復穩定后的電平不一定是正確的電平,如果穩定后的電平是錯誤的,那么就很有可能引起后面的邏輯的錯誤。

d5781a14-c2f4-11ed-bfe3-dac502259ad0.png

再深入一點,觸發器進入亞穩態的時間可以用參數 MTBF(mean time between failures)來描述, MTBF即觸發器采樣失敗的時間間隔,其公式描述如下:

d58b0980-c2f4-11ed-bfe3-dac502259ad0.png

其中:

t:在不引起synchronizer failure的前提下,亞穩態持續的最長時間

τ和T0:觸發器工藝相關的參數

F1:輸入的異步信號頻率

F2:起同步作用的的觸發器時鐘頻率

通常,MTBF越大說明系統采樣失敗的可能越小。從上面公式可以很明顯的看出,對于高速數字電路,MTBF發生的概率更大。此外,對于不同的系統和應用場景,MTBF的要求也不同。比如對于一些消費級的產品,比如手機智能手表等,MTBF的要求要遠遠低于軍工級和航天級別的產品,比如衛星,導彈等。

三、怎么降低亞穩態?

首先,亞穩態是不可避免的,是器件的固有屬性。通過適當的方法,可以將亞穩態帶來的消極影響將至最低。一般來講,主要有下面幾種方案:

使用兩級寄存器同步

也就是俗稱的“打兩拍”。兩級寄存是一級寄存的平方,兩級并不能完全消除亞穩態危害,但是大大降低了亞穩態的發生概率。a_dat是時鐘域a_clk的數據,需要傳輸到時鐘域b_clk。假設在b_clk的上升沿正好采到a_dat的跳變沿(從0變1的上升沿,實際上的數據跳變不可能是瞬時的,所以有短暫的跳變時間),那么此時a_dat為一個不確定的電平狀態。所以b_dat1的值也不能確定.但至少可以保證,在b_clk的下一個上升沿,b_dat1基本上已經穩定,可以滿足下一級觸發器的setup/hold要求,出現亞穩態的概率得到了很大的改善。

如果再加上第三級寄存器,由于第二級寄存器對于亞穩態的處理已經起到了很大的改善作用,第三級寄存器在很大程度上可以說只是對于第二級寄存器的延拍,所以意義是不大的。

異步雙口RAM

在處理多bit數據的跨時鐘域時,采用較多的是異步雙口RAM。假設我們現在有一個信號采集平臺,ADC芯片提供源同步時鐘20MHz,ADC芯片輸出的數據在20MHz的時鐘上升沿變化,而FPGA內部需要使用100MHz的時鐘來處理ADC采集到的數據(多bit)。

在這種類似的場景中,我們便可以使用異步雙口RAM來做跨時鐘域處理。先利用ADC芯片提供的20MHz時鐘將ADC輸出的數據寫入異步雙口RAM,然后使用100MHz的時鐘從RAM中讀出。在能使用異步雙口RAM來處理跨時鐘域的場景中,也可以使用異步FIFO來達到同樣的目的。

d5a243d4-c2f4-11ed-bfe3-dac502259ad0.png

格雷碼

在上面的第二種方案中,master要等RAM中有ADC的數據之后才去讀RAM。這就需要100MHz的時鐘對RAM的寫地址進行判斷,當寫地址大于某個值之后再去讀取RAM。程序員們使用直接用100MHz的時鐘于RAM的寫地址進行打兩拍的方式,但RAM的寫地址屬于多bit,如果單純只是打兩拍,那不一定能確保寫地址數據的每一個bit在100MHz的時鐘域變化都是同步的,肯定有一個先后順序。如果在低速的環境中不一定會出錯,在高速的環境下就不一定能保證了。所以更為妥當的一種處理方法就是使用格雷碼轉換。

首先什么是格雷碼?在一組數的編碼中,若任意兩個相鄰的代碼只有一位二進制數不同,則稱這種編碼為格雷碼(Gray Code),另外由于最大數與最小數之間也僅一位數不同,即“首尾相連”,因此又稱循環碼或反射碼。在數字系統中,常要求代碼按一定順序變化。例如,按自然數遞增計數,若采用8421碼,則數0111變到1000時四位均要變化,而在實際電路中,4位的變化不可能絕對同時發生,則計數中可能出現短暫的其它代碼(1100、1111等)。在特定情況下可能導致電路狀態錯誤或輸入錯誤。

使用格雷碼可以避免這種錯誤。格雷碼有多種編碼形式。格雷碼(Gray Code)又稱Grey Code、葛萊碼、格萊碼、戈萊碼、循環碼、反射二進制碼、最小差錯碼等。如下圖所示,若不作特別說明,格雷碼就是指典型格雷碼,它可從自然二進制碼轉換而來。二進制格雷碼的生成方法有很多,具體可自行搜索。

十進制數字 自然二進制碼 典型格雷碼 十進制余三格雷碼 十進制空六格雷碼 步進碼
0 0000 0000 0010 0000 00000
1 0001 0001 0110 0001 00001
2 0010 0011 0111 0011 00011

對于格雷碼,相鄰的兩個數間只有一個bit是不一樣的,如果先將RAM的寫地址轉為格雷碼,然后再將寫地址的格雷碼進行打兩拍,之后再在RAM的讀時鐘域將格雷碼恢復成10進制。這種處理就相當于對單bit數據的跨時鐘域處理了。






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5317

    瀏覽量

    120008
  • MTBF
    +關注

    關注

    1

    文章

    30

    瀏覽量

    13567
  • 數字電路
    +關注

    關注

    193

    文章

    1600

    瀏覽量

    80498
  • CDC
    CDC
    +關注

    關注

    0

    文章

    57

    瀏覽量

    17771
  • 觸發器
    +關注

    關注

    14

    文章

    1996

    瀏覽量

    61052

原文標題:干貨 | 跨時鐘域(CDC)之全面解析

文章出處:【微信號:IP與SoC設計,微信公眾號:IP與SoC設計】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    多位寬數據通過握手方式時鐘

    對于多位寬數據,我們可以采用握手方式實現時鐘操作。該方式可直接使用xpm_cdc_handshake實現,如下圖所示。
    的頭像 發表于 05-06 09:22 ?1104次閱讀
    多位寬數據通過握手方式<b class='flag-5'>跨</b><b class='flag-5'>時鐘</b><b class='flag-5'>域</b>

    處理時鐘CDC)信號同步的最常見方法

    時鐘( **Clock Domain Crossing,CDC** )通俗地講,就是 **模塊之間數據交互時用的不是同一個時鐘進行驅動*
    的頭像 發表于 09-20 11:24 ?3739次閱讀
    處理<b class='flag-5'>跨</b><b class='flag-5'>時鐘</b><b class='flag-5'>域</b>(<b class='flag-5'>CDC</b>)信號同步的最常見方法

    關于cdc時鐘處理的知識點,不看肯定后悔

    關于cdc時鐘處理的知識點,不看肯定后悔
    發表于 06-21 07:44

    cdc路徑方案幫您解決時鐘難題

    這一章介紹一下CDC也就是時鐘可能存在的一些問題以及基本的時鐘
    的頭像 發表于 11-30 06:29 ?7143次閱讀
    <b class='flag-5'>cdc</b>路徑方案幫您解決<b class='flag-5'>跨</b><b class='flag-5'>時鐘</b><b class='flag-5'>域</b>難題

    關于FPGA中時鐘的問題分析

    時鐘問題(CDC,Clock Domain Crossing )是多時鐘設計中的常見現象。在FPGA領域,互動的異步
    發表于 08-19 14:52 ?3318次閱讀

    CDC單bit脈沖時鐘的處理介紹

    單bit 脈沖時鐘處理 簡要概述: 在上一篇講了總線全握手時鐘處理,本文講述單bit脈沖
    的頭像 發表于 03-22 09:54 ?3472次閱讀

    CDC時鐘的基礎概念

    時鐘clock domain:以寄存器捕獲的時鐘來劃分時鐘。 單時鐘
    的頭像 發表于 08-29 15:11 ?2465次閱讀

    CDC時鐘的基礎概念介紹

    時鐘clock domain:以寄存器捕獲的時鐘來劃分時鐘。單時鐘
    的頭像 發表于 12-26 15:21 ?1685次閱讀

    單位寬信號如何時鐘

    單位寬(Single bit)信號即該信號的位寬為1,通常控制信號居多。對于此類信號,如需時鐘可直接使用xpm_cdc_single
    的頭像 發表于 04-13 09:11 ?1282次閱讀

    時鐘電路設計總結

    時鐘操作包括同步時鐘操作和異步
    的頭像 發表于 05-18 09:18 ?708次閱讀
    <b class='flag-5'>跨</b><b class='flag-5'>時鐘</b><b class='flag-5'>域</b>電路設計總結

    CDC時鐘處理及相應的時序約束

    CDC(Clock Domain Conversion)時鐘分單bit和多bit傳輸
    的頭像 發表于 06-21 14:59 ?1754次閱讀

    時鐘電路設計—單比特信號傳輸

    時鐘CDC)的應從對亞穩定性和同步性的基本了解開始。
    的頭像 發表于 06-27 14:25 ?1014次閱讀
    <b class='flag-5'>跨</b><b class='flag-5'>時鐘</b><b class='flag-5'>域</b>電路設計—單比特信號傳輸

    時鐘電路設計:單位寬信號如何時鐘

    單位寬(Single bit)信號即該信號的位寬為1,通常控制信號居多。對于此類信號,如需時鐘可直接使用xpm_cdc_single,如下圖代碼所示。參數DEST_SYNC_FF決
    的頭像 發表于 08-16 09:53 ?1224次閱讀
    <b class='flag-5'>跨</b><b class='flag-5'>時鐘</b><b class='flag-5'>域</b>電路設計:單位寬信號如何<b class='flag-5'>跨</b><b class='flag-5'>時鐘</b><b class='flag-5'>域</b>

    如何處理時鐘這些基礎問題

    對于數字設計人員來講,只要信號從一個時鐘跨越到另一個時鐘,那么就可能發生亞穩態。我們稱為“時鐘
    發表于 01-08 09:39 ?585次閱讀
    如何處理<b class='flag-5'>跨</b><b class='flag-5'>時鐘</b><b class='flag-5'>域</b>這些基礎問題

    一文解析時鐘傳輸

    一、單比特CDC傳輸1.1 慢到快 快時鐘相比慢時鐘采樣速度更快,也就是說從慢時鐘
    的頭像 發表于 11-16 11:55 ?318次閱讀
    一文<b class='flag-5'>解析</b><b class='flag-5'>跨</b><b class='flag-5'>時鐘</b><b class='flag-5'>域</b>傳輸