每一個(gè)做數(shù)字邏輯的都繞不開跨時(shí)鐘域處理,談一談SpinalHDL里用于跨時(shí)鐘域處理的一些手段方法。
打拍處理 跨時(shí)鐘域信號(hào)的打拍處理往往用于單比特信號(hào)或類似于格林碼這種信號(hào)的跨時(shí)鐘域處理。其邏輯電路很簡(jiǎn)單。SpinalHDL提供了BufferCC用于實(shí)現(xiàn)這種跨時(shí)鐘域打拍處理方式:
BufferCC(input: T, init: T = null, bufferDepth: Int = 2)
bufferDepth可用于指定打拍級(jí)數(shù)。input信號(hào)的時(shí)鐘域?yàn)樵磿r(shí)鐘域,BUfferCC調(diào)用的地方的時(shí)鐘域?yàn)槟康臅r(shí)鐘域。 在日常的電路設(shè)計(jì)里,計(jì)數(shù)器是常見的DFX信號(hào),有些情況下需要將一個(gè)時(shí)鐘域的DFX信號(hào)轉(zhuǎn)換到另一個(gè)時(shí)鐘域進(jìn)行HPI讀取,這種情況也可以通過打拍進(jìn)行處理,不過前提是需轉(zhuǎn)換成格林碼,如此在源時(shí)鐘域和目的時(shí)鐘域需分別做一次轉(zhuǎn)換與反轉(zhuǎn)換。但如果計(jì)數(shù)器采用格林碼進(jìn)行計(jì)數(shù)則可以少進(jìn)行一次轉(zhuǎn)換。SpinalHDL有提供一個(gè)GrayCounter方法用于生成格林碼計(jì)數(shù)器:
GrayCounter(width: Int, enable: Bool)
提供一個(gè)小demo,GtayCounter+BufferCC:
這里GrayCounter在時(shí)鐘域clkA中實(shí)現(xiàn),通過BufferCC將其跨時(shí)鐘域至clkB,bufferDepth為3.Tips:BufferCC的第二個(gè)參數(shù)init數(shù)據(jù)類型是T,而T《:Data,即意味著init數(shù)據(jù)類型為“硬件”數(shù)據(jù)類型,因而上面init賦值需為U(0,8 bits)而不能直接寫0》》脈沖信號(hào)處理 脈沖信號(hào)的跨時(shí)鐘域處理,SpinalHDL提供了PulseCCByToggle方法:
PulseCCByToggle(input: Bool,clockIn: ClockDomain,clockOut: ClockDomain): Bool
握手處理
對(duì)于吞吐要求不是特別高的場(chǎng)合,跨時(shí)鐘域信號(hào)采用握手形式 進(jìn)行處理也是一種不錯(cuò)的選擇。SpinalHDL有兩個(gè)抽象類型個(gè)人一直很喜歡:Stream,F(xiàn)low。這兩種形式基本囊括了所有的信號(hào)交互行為,其也可以說是SpinalHDL lib庫(kù)的基石。針對(duì)跨時(shí)鐘域的握手處理,SpinalHDL有一個(gè)StreamCCByToggle可以使用:
StreamCCByToggle(input: Stream[T], inputClock: ClockDomain, outputClock: ClockDomain): Stream[T]
其輸入?yún)?shù)包含源時(shí)鐘域信號(hào),源時(shí)鐘域,目的時(shí)鐘域,其返回一個(gè)目的時(shí)鐘域的Stream信號(hào):
這里srcIn隸屬于時(shí)鐘域clkA,destOut隸屬于時(shí)鐘域clkB。 除了StreamCCByToggle,SpinalHDL里還有一個(gè)FlowCCByToggle。由于Flow類型沒有反壓,因而從低時(shí)鐘域向高時(shí)鐘域進(jìn)行傳輸則沒什么問題,但從高時(shí)鐘域向低時(shí)鐘域進(jìn)行轉(zhuǎn)換則存在丟失數(shù)據(jù)的風(fēng)險(xiǎn)。》》FIFO跨時(shí)鐘域緩存 對(duì)于高吞吐的多比特信號(hào)跨時(shí)鐘域處理,則往往采用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è)計(jì)
+關(guān)注
關(guān)注
6677文章
2464瀏覽量
205333 -
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2261瀏覽量
94981 -
時(shí)鐘域
+關(guān)注
關(guān)注
0文章
52瀏覽量
9573
原文標(biāo)題:跨時(shí)鐘域那點(diǎn)事兒
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
TSP研究:車內(nèi)網(wǎng)聯(lián)服務(wù)向跨域融合、全場(chǎng)景融合、艙駕融合方向拓展
![TSP研究:車內(nèi)網(wǎng)聯(lián)服務(wù)向<b class='flag-5'>跨</b><b class='flag-5'>域</b>融合、全場(chǎng)景融合、艙駕融合方向拓展](https://file1.elecfans.com/web3/M00/04/F2/wKgZO2d7NSeAJx92AAA_AQvr9Zc057.png)
混合域示波器的原理和應(yīng)用
在不同時(shí)鐘域下,多片ADS131E08如何實(shí)現(xiàn)不間斷的同步采集?
關(guān)于\"OPA615\"的SOTA的跨導(dǎo)大小的疑問求解
關(guān)于UCC25640x LLC諧振控制器的常見問題解答
![<b class='flag-5'>關(guān)于</b>UCC25640x LLC諧振控制器的常見問題<b class='flag-5'>解答</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
OPA376能用來做跨阻抗放大電路嗎?
極限失控的大模型使電力系統(tǒng)面臨的跨域攻擊風(fēng)險(xiǎn)及應(yīng)對(duì)措施
單芯片運(yùn)行六個(gè)操作系統(tǒng),芯馳科技交卷跨域融合
航盛與高通發(fā)布全新一代墨子艙駕跨域融合平臺(tái)
利用LWIP實(shí)現(xiàn)的Web server,如何修改響應(yīng)報(bào)文中HTTP header里面的Access-Control-Allow-Origin的值?
黑芝麻智能與斑馬智行達(dá)成單芯片跨域融合平臺(tái)項(xiàng)目合作
介紹一個(gè)IC設(shè)計(jì)錯(cuò)誤案例:可讀debug寄存器錯(cuò)誤跨時(shí)鐘
![介紹一個(gè)IC設(shè)計(jì)錯(cuò)誤案例:可讀debug寄存器錯(cuò)誤<b class='flag-5'>跨</b><b class='flag-5'>時(shí)鐘</b>](https://file1.elecfans.com/web2/M00/C4/BB/wKgaomXuuaCAc1UAAAAs-lw8H8Y967.png)
聯(lián)合電子推出面向跨域融合的新一代整車運(yùn)動(dòng)域控制器VCU8.6平臺(tái)
![聯(lián)合電子推出面向<b class='flag-5'>跨</b><b class='flag-5'>域</b>融合的新一代整車運(yùn)動(dòng)域控制器VCU8.6平臺(tái)](https://file1.elecfans.com/web2/M00/C2/77/wKgZomXlKZiAT0pNAAApm66xLXA739.png)
評(píng)論