吴忠躺衫网络科技有限公司

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

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

3天內不再提示

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

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

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

打拍處理

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

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

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

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

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

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

其輸入參數包含源時鐘域信號,源時鐘域,目的時鐘域,其返回一個目的時鐘域的Stream信號:

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

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


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


FIFO跨時鐘域緩存

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

審核編輯:湯梓紅


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

    關注

    48

    文章

    1042

    瀏覽量

    103401
  • 時鐘
    +關注

    關注

    11

    文章

    1746

    瀏覽量

    131797
  • 數字邏輯
    +關注

    關注

    0

    文章

    74

    瀏覽量

    16697

原文標題:跨時鐘域那點事兒

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

收藏 人收藏

    評論

    相關推薦

    關于時鐘信號的處理方法

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

    三種時鐘處理方法

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

    如何處理好FPGA設計中時鐘間的數據

    時鐘處理是FPGA設計中經常遇到的問題,而如何處理
    發表于 07-29 06:19

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

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

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

    時鐘處理是FPGA設計中經常遇到的問題,而如何處理
    發表于 11-15 20:08 ?1.4w次閱讀

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

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

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

    時鐘處理是 FPGA 設計中經常遇到的問題,而如何處理
    的頭像 發表于 12-05 16:41 ?1701次閱讀

    SpinalHDL時鐘域中的定制與命名

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

    總線半握手時鐘處理

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

    關于時鐘的詳細解答

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

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

    時鐘處理是FPGA設計中經常遇到的問題,而如何處理
    的頭像 發表于 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

    問題,不過請注意,今后的這些關于異步信號處理的文 章將會重點從工程實踐的角度出發,以一些特權同學遇到過的典型案例的設計為依托,從代碼的角度來剖析一些特權同學認為經典的
    發表于 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設計中經常遇到的問題,而如何處理
    的頭像 發表于 10-18 09:12 ?8000次閱讀

    FPGA時鐘處理方法()

    時鐘是FPGA設計中最容易出錯的設計模塊,而且時鐘
    的頭像 發表于 05-25 15:06 ?2081次閱讀
    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時鐘處理方法(二)

    篇文章已經講過了單bit時鐘處理方法,這次解說
    的頭像 發表于 05-25 15:07 ?1082次閱讀
    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>(二)
    百家乐赔率技巧| 百家乐官网统计| 百家乐投注方法多不多| 星空棋牌舟山下载| 百家乐官网论坛官网| 百家乐号公| 百家乐官网赌博软件下载| 三公百家乐玩法| 豪杰百家乐官网现金网| 大发百家乐现金| 百家乐官网游戏机出千| 百家乐线上| 百家乐游戏大| 娱乐城百家乐官网可以代理吗 | 赌博网站| 百家乐经验在哪找| 百家乐官网公式与赌法| ea百家乐打水| 百家乐官网群lookcc| 百家乐官网外套| 百家乐官网最稳妥的打法| 陵水| 百家乐的方法和公式| 百家乐微笑玩| 百家乐官网赌场走势图| 大发888开户博盈国际| 爱拼百家乐官网的玩法技巧和规则| 龙虎斗游戏| 澳门百家乐国际| 网上赌百家乐官网被抓应该怎么处理 | 百家乐正品| 百家乐出千的高科技| 利都百家乐官网国际娱乐平台| bet365体育投注心得| 百家乐投注网中国体育| 现金百家乐官网人气最高| 威尼斯人娱乐城老牌| 荷规则百家乐官网的玩法技巧和规则 | 百家乐赌场信息| 百家乐官网www| 大庆冠通棋牌世界|