在SpinalHDL中使用之前已有的Verilog等代碼的時候需要將這些代碼包在一個BlackBox里面,但是如果這些代碼里面有時鐘和復位,我們需要怎么將時鐘和復位端口和SpinalHDL中已有的時鐘域連接起來呢?
當BlackBox中只有一個時鐘的時候可以直接使用mapClockDomain完成時鐘信號和復位信號的賦值。在mapClockDomain中如果沒有指定時鐘域的話就采用的是默認時鐘域。
import spinal.core._ import spinal.lib._ class BK extends BlackBox{ val clka = in Bool() val rsta = in Bool() val din = in Bool() val dout = out Bool() mapClockDomain(clock = clka, reset = rsta) } class TestBlackBox extends Component { val din = in Bool() val dout = out Bool() val bk = new BK bk.din <> din bk.dout <> dout } object TestBlackBox extends App{ SpinalVerilog(new TestBlackBox) }
當有兩個時鐘域的時候,就需要把時鐘域給指定一下了,在下面代碼中將時鐘域通過參數的方式傳了進來。
import spinal.core._ import spinal.lib._ class BK(clockDomaina: ClockDomain, clockDomainb: ClockDomain) extends BlackBox{ val clka = in Bool() val rsta = in Bool() val clkb = in Bool() val rstb = in Bool() val din = in Bool() val dout = out Bool() mapClockDomain(clockDomaina,clock = clka, reset = rsta) mapClockDomain(clockDomainb,clock = clkb, reset = rstb) } class TestBlackBox extends Component { val din = in Bool() val dout = out Bool() val clkb = in Bool() val resetb = in Bool() val clockDomainb = ClockDomain(clock = clkb,reset = resetb) val bk = new BK(this.clockDomain,clockDomainb)//默認時鐘域和新建的時鐘域b bk.din <> din bk.dout <> dout } object TestBlackBox extends App{ SpinalVerilog(new TestBlackBox) }
因為在SpinalHDL中默認時鐘域是高復位的,但是我們已有的IP可能是低復位的,這個時候就需要在mapClockDomain中指定一下復位信號是HIGH還是LOW。在下面代碼中就將時鐘域b下面的復位指定為低復位。
import spinal.core._ import spinal.lib._ class BK(clockDomaina: ClockDomain, clockDomainb: ClockDomain) extends BlackBox{ val clka = in Bool() val rsta = in Bool() val clkb = in Bool() val rstb = in Bool() val din = in Bool() val dout = out Bool() mapClockDomain(clockDomaina,clock = clka, reset = rsta) mapClockDomain(clockDomainb,clock = clkb, reset = rstb, resetActiveLevel = LOW) } class TestBlackBox extends Component { val din = in Bool() val dout = out Bool() val clkb = in Bool() val resetb = in Bool() val clockDomainb = ClockDomain(clock = clkb,reset = resetb) val bk = new BK(this.clockDomain,clockDomainb) bk.din <> din bk.dout <> dout } object TestBlackBox extends App{ SpinalVerilog(new TestBlackBox) }
以上三種情況應該足夠應對一般情況下BlackBox的時鐘域的賦值了。
審核編輯:湯梓紅
-
Verilog
+關注
關注
28文章
1351瀏覽量
110396 -
時鐘
+關注
關注
11文章
1747瀏覽量
131803 -
HDL
+關注
關注
8文章
328瀏覽量
47468 -
復位
+關注
關注
0文章
174瀏覽量
24270 -
時鐘信號
+關注
關注
4文章
453瀏覽量
28666
原文標題:SpinalHDL BlackBox時鐘與復位
文章出處:【微信號:FPGA開源工坊,微信公眾號:FPGA開源工坊】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
在SpinalHDL里實現優雅的添加待跟蹤波形信號
在SpinalHDL的設計中集成現有RTL設計(IP)的渠道——BlackBox
關于SpinalHDL仿真中信號驅動那點事兒
聊一聊SpinalHDL 1.6.1引入的blackbox inline功能
談談SpinalHDL中StreamCCByToggle組件設計不足的地方
如何在SpinalHDL里啟動一個仿真
記錄一個在使用BlackBox中parameter踩到的坑
SpinalHDL設計錯誤總結相關資料分享
SpinalHDL里時鐘域中的定制與命名
STM32電源管理、復位、時鐘
![STM32電源管理、<b class='flag-5'>復位</b>、<b class='flag-5'>時鐘</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
SpinalHDL里用于跨時鐘域處理的一些手段方法
原來SpinalHDL中BlackBox封裝數組接口如此簡單
![原來<b class='flag-5'>SpinalHDL</b>中<b class='flag-5'>BlackBox</b>封裝數組接口如此簡單](https://file1.elecfans.com/web2/M00/88/7E/wKgaomRqzgyAJOlqAAAHejrOMtY637.jpg)
評論