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

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

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

SpinalHDL里用于跨時鐘域處理的一些手段方法

FPGA之家 ? 來源:Spinal FPGA ? 作者:玉騏 ? 2022-07-11 10:51 ? 次閱讀
開篇立論

每一個做數(shù)字邏輯的都繞不開跨時鐘域處理,談一談SpinalHDL里用于跨時鐘域處理的一些手段方法。

打拍處理

跨時鐘域信號的打拍處理往往用于單比特信號或類似于格林碼這種信號的跨時鐘域處理。其邏輯電路很簡單。SpinalHDL提供了BufferCC用于實現(xiàn)這種跨時鐘域打拍處理方式:
BufferCC(input: T, init: T = null, bufferDepth: Int = 2)
bufferDepth可用于指定打拍級數(shù)。input信號的時鐘域為源時鐘域,BUfferCC調(diào)用的地方的時鐘域為目的時鐘域。

在日常的電路設(shè)計里,計數(shù)器是常見的DFX信號,有些情況下需要將一個時鐘域的DFX信號轉(zhuǎn)換到另一個時鐘域進行HPI讀取,這種情況也可以通過打拍進行處理,不過前提是需轉(zhuǎn)換成格林碼,如此在源時鐘域和目的時鐘域需分別做一次轉(zhuǎn)換與反轉(zhuǎn)換。但如果計數(shù)器采用格林碼進行計數(shù)則可以少進行一次轉(zhuǎn)換。SpinalHDL有提供一個GrayCounter方法用于生成格林碼計數(shù)器:
GrayCounter(width: Int, enable: Bool) 
提供一個小demo,GtayCounter+BufferCC:

ddc3355a-00c1-11ed-ba43-dac502259ad0.png

這里GrayCounter在時鐘域clkA中實現(xiàn),通過BufferCC將其跨時鐘域至clkB,bufferDepth為3.Tips:BufferCC的第二個參數(shù)init數(shù)據(jù)類型是T,而T<:Data,即意味著init數(shù)據(jù)類型為“硬件”數(shù)據(jù)類型,因而上面init賦值需為U(0,8 bits)而不能直接寫0 》》脈沖信號處理脈沖信號的跨時鐘域處理,SpinalHDL提供了PulseCCByToggle方法:
PulseCCByToggle(input:Bool,clockIn:ClockDomain,clockOut:ClockDomain):Bool
握手處理

對于吞吐要求不是特別高的場合,跨時鐘域信號采用握手形式進行處理也是一種不錯的選擇。SpinalHDL有兩個抽象類型個人一直很喜歡:Stream,F(xiàn)low。這兩種形式基本囊括了所有的信號交互行為,其也可以說是SpinalHDL lib庫的基石。針對跨時鐘域的握手處理,SpinalHDL有一個StreamCCByToggle可以使用:

StreamCCByToggle(input: Stream[T], inputClock: ClockDomain, outputClock: ClockDomain): Stream[T]

其輸入?yún)?shù)包含源時鐘域信號,源時鐘域,目的時鐘域,其返回一個目的時鐘域的Stream信號:

ddd37c80-00c1-11ed-ba43-dac502259ad0.png

這里srcIn隸屬于時鐘域clkA,destOut隸屬于時鐘域clkB。


除了StreamCCByToggle,SpinalHDL里還有一個FlowCCByToggle。由于Flow類型沒有反壓,因而從低時鐘域向高時鐘域進行傳輸則沒什么問題,但從高時鐘域向低時鐘域進行轉(zhuǎn)換則存在丟失數(shù)據(jù)的風(fēng)險。


FIFO跨時鐘域緩存

對于高吞吐的多比特信號跨時鐘域處理,則往往采用FIFO的形式進行處理。在SpinalHDL里則有StreamFifoCC供使用:
val myFifo = StreamFifoCC(  dataType  = Bits(8 bits),  depth     = 128,  pushClock = clockA,  popClock  = clockB)myFifo.io.push << streamAmyFifo.io.pop>>streamB

審核編輯:湯梓紅


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

    關(guān)注

    48

    文章

    988

    瀏覽量

    103112
  • 時鐘
    +關(guān)注

    關(guān)注

    10

    文章

    1701

    瀏覽量

    131184
  • 數(shù)字邏輯
    +關(guān)注

    關(guān)注

    0

    文章

    72

    瀏覽量

    16616

原文標(biāo)題:跨時鐘域那點事兒

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    關(guān)于時鐘信號的處理方法

    我在知乎看到了多bit信號時鐘的問題,于是整理了下自己對于時鐘信號的
    的頭像 發(fā)表于 10-09 10:44 ?5799次閱讀

    三種時鐘處理方法

    的三種方法時鐘處理方法如下:  1. 打兩拍;  2. 異步雙口RAM;  3. 格雷碼轉(zhuǎn)換
    發(fā)表于 01-08 16:55

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

    時鐘處理是FPGA設(shè)計中經(jīng)常遇到的問題,而如何處理
    發(fā)表于 07-29 06:19

    看看Stream信號是如何做時鐘握手的

    一些,適用于追求高吞吐的場景。寫在最后邏輯處理很多總線都是基于Stream這種信號來實現(xiàn)的(如AXI4家族),通過上面的方法,可以很容易根
    發(fā)表于 07-07 17:25

    FPGA界最常用也最實用的3種時鐘處理方法

    時鐘處理是FPGA設(shè)計中經(jīng)常遇到的問題,而如何處理
    發(fā)表于 11-15 20:08 ?1.4w次閱讀

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

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

    揭秘FPGA時鐘處理的三大方法

    時鐘處理是 FPGA 設(shè)計中經(jīng)常遇到的問題,而如何處理
    的頭像 發(fā)表于 12-05 16:41 ?1571次閱讀

    SpinalHDL時鐘域中的定制與命名

    聊在SpinalHDL時鐘域中時鐘的定制與命名。 相較于Verilog,在SpinalHDL
    的頭像 發(fā)表于 03-22 10:14 ?2069次閱讀

    總線半握手時鐘處理

    總線半握手時鐘處理 簡要概述: 在上篇講了單bit脈沖同步器
    的頭像 發(fā)表于 04-04 12:32 ?2709次閱讀
    總線半握手<b class='flag-5'>跨</b><b class='flag-5'>時鐘</b><b class='flag-5'>域</b><b class='flag-5'>處理</b>

    關(guān)于時鐘的詳細解答

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

    介紹3種方法時鐘處理方法

    時鐘處理是FPGA設(shè)計中經(jīng)常遇到的問題,而如何處理
    的頭像 發(fā)表于 09-18 11:33 ?2.2w次閱讀
    介紹3種<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>

    基于FPGA的時鐘信號處理——MCU

    問題,不過請注意,今后的這些關(guān)于異步信號處理的文 章將會重點從工程實踐的角度出發(fā),以一些特權(quán)同學(xué)遇到過的典型案例的設(shè)計為依托,從代碼的角度來剖析一些特權(quán)同學(xué)認為經(jīng)典的
    發(fā)表于 11-01 16:24 ?11次下載
    基于FPGA的<b class='flag-5'>跨</b><b class='flag-5'>時鐘</b><b class='flag-5'>域</b>信號<b class='flag-5'>處理</b>——MCU

    三種時鐘處理方法

    時鐘處理是FPGA設(shè)計中經(jīng)常遇到的問題,而如何處理
    的頭像 發(fā)表于 10-18 09:12 ?7337次閱讀

    FPGA時鐘處理方法()

    時鐘是FPGA設(shè)計中最容易出錯的設(shè)計模塊,而且時鐘
    的頭像 發(fā)表于 05-25 15:06 ?1815次閱讀
    FPGA<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>)

    FPGA時鐘處理方法(二)

    篇文章已經(jīng)講過了單bit時鐘處理方法,這次解說
    的頭像 發(fā)表于 05-25 15:07 ?914次閱讀
    FPGA<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>(二)