每一個做數(shù)字邏輯的都繞不開跨時鐘域處理,談一談SpinalHDL里用于跨時鐘域處理的一些手段方法。
打拍處理 跨時鐘域信號的打拍處理往往用于單比特信號或類似于格林碼這種信號的跨時鐘域處理。其邏輯電路很簡單。SpinalHDL提供了BufferCC用于實(shí)現(xiàn)這種跨時鐘域打拍處理方式:
BufferCC(input: T, init: T = null, bufferDepth: Int = 2)
bufferDepth可用于指定打拍級數(shù)。input信號的時鐘域?yàn)樵磿r鐘域,BUfferCC調(diào)用的地方的時鐘域?yàn)槟康臅r鐘域。 在日常的電路設(shè)計里,計數(shù)器是常見的DFX信號,有些情況下需要將一個時鐘域的DFX信號轉(zhuǎn)換到另一個時鐘域進(jìn)行HPI讀取,這種情況也可以通過打拍進(jìn)行處理,不過前提是需轉(zhuǎn)換成格林碼,如此在源時鐘域和目的時鐘域需分別做一次轉(zhuǎn)換與反轉(zhuǎn)換。但如果計數(shù)器采用格林碼進(jìn)行計數(shù)則可以少進(jìn)行一次轉(zhuǎn)換。SpinalHDL有提供一個GrayCounter方法用于生成格林碼計數(shù)器:
GrayCounter(width: Int, enable: Bool)
提供一個小demo,GtayCounter+BufferCC:

這里GrayCounter在時鐘域clkA中實(shí)現(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
握手處理
對于吞吐要求不是特別高的場合,跨時鐘域信號采用握手形式 進(jìn)行處理也是一種不錯的選擇。SpinalHDL有兩個抽象類型個人一直很喜歡:Stream,F(xiàn)low。這兩種形式基本囊括了所有的信號交互行為,其也可以說是SpinalHDL lib庫的基石。針對跨時鐘域的握手處理,SpinalHDL有一個StreamCCByToggle可以使用:
StreamCCByToggle(input: Stream[T], inputClock: ClockDomain, outputClock: ClockDomain): Stream[T]
其輸入?yún)?shù)包含源時鐘域信號,源時鐘域,目的時鐘域,其返回一個目的時鐘域的Stream信號:

這里srcIn隸屬于時鐘域clkA,destOut隸屬于時鐘域clkB。 除了StreamCCByToggle,SpinalHDL里還有一個FlowCCByToggle。由于Flow類型沒有反壓,因而從低時鐘域向高時鐘域進(jìn)行傳輸則沒什么問題,但從高時鐘域向低時鐘域進(jìn)行轉(zhuǎn)換則存在丟失數(shù)據(jù)的風(fēng)險?!贰稦IFO跨時鐘域緩存 對于高吞吐的多比特信號跨時鐘域處理,則往往采用FIFO的形式進(jìn)行處理。在SpinalHDL里則有StreamFifoCC供使用:
val myFifo = StreamFifoCC( dataType = Bits(8 bits), depth = 128, pushClock = clockA, popClock = clockB)myFifo.io.push 《《 streamAmyFifo.io.pop 》》 streamB
編輯:lyn
-
電路設(shè)計
+關(guān)注
關(guān)注
6745文章
2759瀏覽量
220091 -
計數(shù)器
+關(guān)注
關(guān)注
32文章
2320瀏覽量
98485 -
時鐘域
+關(guān)注
關(guān)注
0文章
53瀏覽量
10061
原文標(biāo)題:跨時鐘域那點(diǎn)事兒
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
為何跨復(fù)位域問題是危險的“芯片殺手”
使用PYTHON進(jìn)行的跨平臺仿真
ONET8541T:11.3 Gbps限幅跨阻放大器的詳細(xì)解析
SysClk系統(tǒng)時鐘的切換
什么是位域
如何降低系統(tǒng)時鐘頻率?
關(guān)于六類網(wǎng)線一些問題的解答
航盛電子搭載QNX技術(shù)的墨子跨域融合平臺正式量產(chǎn)
黑芝麻智能武當(dāng)C1200家族作為跨域計算芯片的核心突破
時鐘設(shè)計優(yōu)化實(shí)戰(zhàn)
黑芝麻智能跨域時間同步技術(shù):消除多域計算單元的時鐘信任鴻溝
PTR54L15藍(lán)牙模組的引腳規(guī)劃——電源域
跨異步時鐘域處理方法大全
關(guān)于跨時鐘域的詳細(xì)解答
評論