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

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

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

深刻理解跨時(shí)鐘域的三個(gè)主要問題和解決方案

芯司機(jī) ? 來(lái)源:芯片驗(yàn)證工程師 ? 2023-05-11 16:23 ? 次閱讀

如今,SoCs正變得越來(lái)越復(fù)雜,數(shù)據(jù)經(jīng)常從一個(gè)時(shí)鐘域傳輸?shù)搅硪粋€(gè)時(shí)鐘域。

471aa08e-e5b3-11ed-ab56-dac502259ad0.png

上圖信號(hào)A由C1時(shí)鐘域觸發(fā),被C2時(shí)鐘域采樣。 根據(jù)這兩個(gè)時(shí)鐘之間的關(guān)系,在將數(shù)據(jù)從源時(shí)鐘傳輸?shù)侥繕?biāo)時(shí)鐘時(shí),可能會(huì)出現(xiàn)不同類型的問題,并且這些問題的解決方案也有所不同。

本文討論了不同類型的跨時(shí)鐘域,以及每種類型中可能遇到的問題及其解決方案。 在接下來(lái)的所有部分中,都直接使用了上圖所示的信號(hào)名稱。 例如,C1和C2分別表示源時(shí)鐘和目標(biāo)時(shí)鐘。 類似地,A和B分別被用作源觸發(fā)器輸出和目標(biāo)觸發(fā)器輸出。 此外,源和目標(biāo)觸發(fā)器被假定為正沿觸發(fā)。

跨時(shí)鐘域問題

本節(jié)描述了在出現(xiàn)跨時(shí)鐘域時(shí)可能出現(xiàn)的三個(gè)主要問題,然后還描述了這些問題的解決方案。

A.亞穩(wěn)態(tài)問題。

如果信號(hào)A上的翻轉(zhuǎn)發(fā)生在非常接近時(shí)鐘C2的邊沿處,它可能會(huì)導(dǎo)致在目標(biāo)觸發(fā)器“FB”處的setup 或hold 違反。 結(jié)果,輸出信號(hào)B進(jìn)行無(wú)限振蕩。 因此,輸出是不穩(wěn)定的,在C2的下一個(gè)時(shí)鐘邊緣到達(dá)之前也可能會(huì)穩(wěn)定到某個(gè)穩(wěn)定的值。這種現(xiàn)象被稱為亞穩(wěn)態(tài),或者說觸發(fā)器“FB”已經(jīng)進(jìn)入亞穩(wěn)態(tài)。

從設(shè)計(jì)的角度來(lái)看,亞穩(wěn)態(tài)又會(huì)產(chǎn)生以下后果:

1、如果不穩(wěn)定的數(shù)據(jù)被輸入到設(shè)計(jì)中的其他幾個(gè)地方,它可能會(huì)導(dǎo)致大電流,在最壞的情況下甚至導(dǎo)致芯片燒壞。

2、不同的 fan-out可能會(huì)讀取不同的信號(hào)值,并可能導(dǎo)致設(shè)計(jì)進(jìn)入未知的功能狀態(tài),導(dǎo)致設(shè)計(jì)出現(xiàn)功能問題。

3、目標(biāo)時(shí)鐘域輸出可能穩(wěn)定到新值或返回到舊值。 然而,傳播延遲可能很高,會(huì)導(dǎo)致時(shí)序問題。

如下圖,如果輸入信號(hào)A在非常接近C2時(shí)鐘的上升沿翻轉(zhuǎn),則目標(biāo)觸發(fā)器的輸出可以是亞穩(wěn)態(tài)的。 因此,它可以不穩(wěn)定,并可能最終穩(wěn)定到信號(hào)B1和B2所描述的1或0。

472dc38a-e5b3-11ed-ab56-dac502259ad0.png

可以通過在目標(biāo)域中添加同步器來(lái)避免亞穩(wěn)態(tài)問題。 同步器允許振蕩在足夠的時(shí)間穩(wěn)定下來(lái),并確保在目標(biāo)時(shí)鐘域獲得穩(wěn)定的輸出。 一個(gè)常用的同步器是一個(gè)級(jí)聯(lián)觸發(fā)器,如下圖所示。

474bad32-e5b3-11ed-ab56-dac502259ad0.png

該結(jié)構(gòu)主要用于設(shè)計(jì)中的控制信號(hào)和單比特?cái)?shù)據(jù)信號(hào)。 多位的數(shù)據(jù)信號(hào)需要其他類型的同步方案,如MUX recirculation、握手和FIFO。

B.數(shù)據(jù)丟失

每當(dāng)生成一個(gè)新的源數(shù)據(jù)時(shí),由于亞穩(wěn)態(tài)性,它可能不會(huì)在目標(biāo)時(shí)鐘的第一個(gè)周期中被目標(biāo)域捕獲。只要源信號(hào)上的每個(gè)翻轉(zhuǎn)都在目標(biāo)域中被捕獲,數(shù)據(jù)就不會(huì)丟失。為了確保這一點(diǎn),源數(shù)據(jù)應(yīng)在一段最短的時(shí)間內(nèi)保持穩(wěn)定,以便滿足對(duì)目標(biāo)時(shí)鐘的至少一個(gè)邊沿的setup 和hold 時(shí)間的要求。

如果C1和C2的時(shí)鐘邊沿非常靠近,則在源數(shù)據(jù)A翻轉(zhuǎn)之后的C2的第一個(gè)時(shí)鐘邊沿?zé)o法捕獲它。 該數(shù)據(jù)最終被時(shí)鐘C2的第二個(gè)時(shí)鐘邊沿捕獲,如下圖所示。

4759942e-e5b3-11ed-ab56-dac502259ad0.png

但是,如果在數(shù)據(jù)A翻轉(zhuǎn)和時(shí)鐘C2的邊沿之間有足夠的時(shí)間,則在C2的第一個(gè)周期捕獲數(shù)據(jù)。 因此,源時(shí)鐘域數(shù)據(jù)和目標(biāo)時(shí)鐘域數(shù)據(jù)之間可能不會(huì)一一對(duì)應(yīng)。 無(wú)論如何,一般情況下源數(shù)據(jù)上的每個(gè)翻轉(zhuǎn)都應(yīng)該在目標(biāo)時(shí)鐘域中被捕獲。

假設(shè)源時(shí)鐘C1的速度是目標(biāo)時(shí)鐘C2的兩倍,并且這兩個(gè)時(shí)鐘之間沒有相位差。 進(jìn)一步假設(shè)在時(shí)鐘C1的正邊沿生成的輸入數(shù)據(jù)序列“A”為“00110011”。 在時(shí)鐘C2的正邊沿捕獲的數(shù)據(jù)B將為“0101”。 在這里,由于信號(hào)A上的所有翻轉(zhuǎn)都被B捕獲了,所以數(shù)據(jù)不會(huì)丟失。

47720086-e5b3-11ed-ab56-dac502259ad0.png

但是,如果輸入序列為“00101111”,則目標(biāo)域中的輸出將為“0011”。 這里輸入序列中的第三個(gè)數(shù)據(jù)值“1”丟失。

478231c2-e5b3-11ed-ab56-dac502259ad0.png

為了防止數(shù)據(jù)丟失,數(shù)據(jù)應(yīng)該在源時(shí)鐘域中保持足夠長(zhǎng)的時(shí)間不變,以便在目標(biāo)時(shí)鐘域中正確捕獲。 換句話說,在源數(shù)據(jù)上的每次轉(zhuǎn)換之后,至少有一個(gè)目標(biāo)時(shí)鐘邊沿應(yīng)該到達(dá)沒有違反setup或hold的地方,以便在目標(biāo)時(shí)鐘域中正確地捕獲源數(shù)據(jù)。

C. 數(shù)據(jù)一致性

如前一節(jié)所示,每當(dāng)在源時(shí)鐘域中生成新數(shù)據(jù)時(shí),可能需要1個(gè)或多個(gè)目標(biāo)時(shí)鐘周期來(lái)捕獲它。 考慮這樣一種情況,即多個(gè)信號(hào)從一個(gè)時(shí)鐘域傳輸?shù)搅硪粋€(gè)時(shí)鐘域,并且每個(gè)信號(hào)使用多級(jí)觸發(fā)器同步器分別進(jìn)行同步。 如果所有信號(hào)同時(shí)發(fā)生變化,并且源時(shí)鐘和目標(biāo)時(shí)鐘邊沿接近,那么一些信號(hào)可能在第一個(gè)時(shí)鐘周期中在目標(biāo)域中被捕獲,而另一些信號(hào)可能通過亞穩(wěn)態(tài)在第二個(gè)時(shí)鐘周期中被捕獲。 這可能會(huì)導(dǎo)致目標(biāo)端信號(hào)上的值組合無(wú)效。 也就是說,在這種情況下,數(shù)據(jù)的一致性已經(jīng)丟失了。

如果這些信號(hào)一起控制著設(shè)計(jì)的某些功能,那么這種無(wú)效的狀態(tài)可能會(huì)導(dǎo)致功能錯(cuò)誤。

例如:假設(shè)“00”和“11”是由時(shí)鐘C1生成的信號(hào)X[0:1]的兩個(gè)有效值。 最初在X的兩個(gè)位上都有一個(gè)從1->0的過渡。 這兩個(gè)轉(zhuǎn)變?cè)诘谝粋€(gè)周期本身都被時(shí)鐘C2捕獲。 因此,信號(hào)Y變成了“00”。

4791f800-e5b3-11ed-ab56-dac502259ad0.png

接下來(lái),在信號(hào)X的兩個(gè)比特位上都有一個(gè)從0->1的轉(zhuǎn)換。 在這里,時(shí)鐘C2的上升沿接近于信號(hào)X的翻轉(zhuǎn)。 X[0]上的翻轉(zhuǎn)在第一個(gè)時(shí)鐘周期中被捕獲,而X[1]上的翻轉(zhuǎn)在C2的第二個(gè)時(shí)鐘周期中被捕獲。 這將導(dǎo)致Y[0:1]上的一個(gè)中間值為“10”,這是一個(gè)無(wú)效的狀態(tài)。 在這種情況下,數(shù)據(jù)的一致性丟失了。

在上面的示例中,問題的原因是所有比特沒有在相同的目標(biāo)時(shí)鐘周期中捕獲。 如果所有比特在同一周期中保留其原始值或更新值,則設(shè)計(jì)要么保持原始狀態(tài),要么進(jìn)入正確的新狀態(tài)(參考異步FIFO)。

如果電路的設(shè)計(jì)方式是,在將設(shè)計(jì)從一種狀態(tài)更改到另一種狀態(tài)時(shí),只需要更改一個(gè)位,那么該位將更改為一個(gè)新值或者保留原始值。 由于所有其他位在這兩種狀態(tài)下都有相同的值,所以在這種情況下,完整的總線要么變?yōu)樾轮?,要么保留原始值?/p>

這反過來(lái)又意味著,如果總線是格雷編碼的,那么這個(gè)問題將會(huì)得到解決,并且將永遠(yuǎn)不會(huì)得到一個(gè)無(wú)效的狀態(tài)。

但是,這僅適用于控制總線,因?yàn)闊o(wú)法對(duì)數(shù)據(jù)總線進(jìn)行格雷編碼。在這種情況下,可以使用握手、FIFO和MUX recirculation(如下圖)等其他技術(shù)來(lái)生成一個(gè)公共的控制邏輯來(lái)正確地傳輸數(shù)據(jù)。

47a39dda-e5b3-11ed-ab56-dac502259ad0.png

這里,在源時(shí)鐘域中產(chǎn)生的控制信號(hào)EN使用多級(jí)觸發(fā)器同步器在目標(biāo)域中進(jìn)行同步。同步控制信號(hào)EN_Sync驅(qū)動(dòng)mux的選擇引腳,從而控制總線A所有位的數(shù)據(jù)傳輸。通過這種方式,總線的各個(gè)位不會(huì)單獨(dú)同步,因此不存在數(shù)據(jù)不一致性。但是,重要的是要確保當(dāng)控制信號(hào)被激活時(shí),源域數(shù)據(jù)A[0:1]應(yīng)保持不變。

審核編輯:湯梓紅

聲明:本文內(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)投訴
  • 時(shí)鐘
    +關(guān)注

    關(guān)注

    10

    文章

    1714

    瀏覽量

    131275
  • 總線
    +關(guān)注

    關(guān)注

    10

    文章

    2858

    瀏覽量

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

    關(guān)注

    14

    文章

    1995

    瀏覽量

    61012
  • 輸出信號(hào)
    +關(guān)注

    關(guān)注

    0

    文章

    272

    瀏覽量

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

    關(guān)注

    0

    文章

    51

    瀏覽量

    9524

原文標(biāo)題:驗(yàn)證學(xué)習(xí) | 深刻理解跨時(shí)鐘域:三個(gè)主要問題和解決方案

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPGA設(shè)計(jì)中解決時(shí)鐘方案

    時(shí)鐘處理是FPGA設(shè)計(jì)中經(jīng)常遇到的問題,而如何處理好時(shí)鐘間的數(shù)據(jù),可以說是每個(gè)FPGA初
    的頭像 發(fā)表于 11-21 11:13 ?3815次閱讀
    FPGA設(shè)計(jì)中解決<b class='flag-5'>跨</b><b class='flag-5'>時(shí)鐘</b><b class='flag-5'>域</b>的<b class='flag-5'>三</b>大<b class='flag-5'>方案</b>

    時(shí)鐘控制信號(hào)傳輸設(shè)計(jì)方案

    1、時(shí)鐘與亞穩(wěn)態(tài) 時(shí)鐘通俗地講,就是模塊之間有數(shù)據(jù)交互,但是模塊用的不是同一
    發(fā)表于 10-16 15:47 ?1132次閱讀
    <b class='flag-5'>跨</b><b class='flag-5'>時(shí)鐘</b><b class='flag-5'>域</b>控制信號(hào)傳輸設(shè)計(jì)<b class='flag-5'>方案</b>

    時(shí)鐘解決方案

    在很久之前便陸續(xù)談過亞穩(wěn)態(tài),F(xiàn)IFO,復(fù)位的設(shè)計(jì)。本次亦安做一個(gè)簡(jiǎn)單的總結(jié),從宏觀上給大家展示時(shí)鐘解決方案。
    的頭像 發(fā)表于 01-08 09:42 ?834次閱讀
    <b class='flag-5'>跨</b><b class='flag-5'>時(shí)鐘</b><b class='flag-5'>域</b>的<b class='flag-5'>解決方案</b>

    如何處理好FPGA設(shè)計(jì)中時(shí)鐘問題?

    時(shí)鐘處理是 FPGA 設(shè)計(jì)中經(jīng)常遇到的問題,而如何處理好時(shí)鐘間的數(shù)據(jù),可以說是每個(gè) FP
    發(fā)表于 09-22 10:24

    探尋FPGA中時(shí)鐘處理方法

    時(shí)鐘處理是 FPGA 設(shè)計(jì)中經(jīng)常遇到的問題,而如何處理好時(shí)鐘間的數(shù)據(jù),可以說是每個(gè) FP
    發(fā)表于 10-20 09:27

    時(shí)鐘處理的方法

      時(shí)鐘處理是FPGA設(shè)計(jì)中經(jīng)常遇到的問題,而如何處理好時(shí)鐘間的數(shù)據(jù),可以說是每個(gè)FPG
    發(fā)表于 01-08 16:55

    種FPGA界最常用的時(shí)鐘處理法式

    時(shí)鐘處理是FPGA設(shè)計(jì)中經(jīng)常遇到的問題,而如何處理好時(shí)鐘間的數(shù)據(jù),可以說是每個(gè)FPGA初
    發(fā)表于 02-21 07:00

    如何處理好FPGA設(shè)計(jì)中時(shí)鐘間的數(shù)據(jù)

    時(shí)鐘處理是FPGA設(shè)計(jì)中經(jīng)常遇到的問題,而如何處理好時(shí)鐘間的數(shù)據(jù),可以說是每個(gè)FPGA初
    發(fā)表于 07-29 06:19

    討論時(shí)鐘時(shí)可能出現(xiàn)的三個(gè)主要問題及其解決方案

    和目標(biāo)時(shí)鐘。類似地,A和B分別被用作源觸發(fā)器輸出和目標(biāo)觸發(fā)器輸出。此外,源和目標(biāo)觸發(fā)器被假定為正沿觸發(fā)。時(shí)鐘問題本節(jié)描述了在出現(xiàn)
    發(fā)表于 06-23 15:34

    cdc路徑方案幫您解決時(shí)鐘難題

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

    關(guān)于FPGA中時(shí)鐘的問題分析

    時(shí)鐘問題(CDC,Clock Domain Crossing )是多時(shí)鐘設(shè)計(jì)中的常見現(xiàn)象。在FPGA領(lǐng)域,互動(dòng)的異步時(shí)鐘
    發(fā)表于 08-19 14:52 ?3305次閱讀

    揭秘FPGA時(shí)鐘處理的大方法

    時(shí)鐘處理是 FPGA 設(shè)計(jì)中經(jīng)常遇到的問題,而如何處理好時(shí)鐘間的數(shù)據(jù),可以說是每個(gè) FP
    的頭像 發(fā)表于 12-05 16:41 ?1599次閱讀

    關(guān)于時(shí)鐘的詳細(xì)解答

    每一個(gè)做數(shù)字邏輯的都繞不開時(shí)鐘處理,談一談SpinalHDL里用于時(shí)鐘
    的頭像 發(fā)表于 04-27 10:52 ?4216次閱讀
    關(guān)于<b class='flag-5'>跨</b><b class='flag-5'>時(shí)鐘</b><b class='flag-5'>域</b>的詳細(xì)解答

    深刻理解Python中的元類(metaclass)

    深刻理解Python中的元類(metaclass)(大工20春電源技術(shù)在線作業(yè)2)-該文檔為深刻理解Python中的元類(metaclass)講解文檔,是一份不錯(cuò)的參考資料,感興趣的可以下載看看,,,,,,,,,,,
    發(fā)表于 09-24 16:12 ?3次下載
    <b class='flag-5'>深刻理解</b>Python中的元類(metaclass)

    時(shí)鐘電路設(shè)計(jì)總結(jié)

    時(shí)鐘操作包括同步時(shí)鐘操作和異步
    的頭像 發(fā)表于 05-18 09:18 ?694次閱讀
    <b class='flag-5'>跨</b><b class='flag-5'>時(shí)鐘</b><b class='flag-5'>域</b>電路設(shè)計(jì)總結(jié)