在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
+关注
关注
31文章
1374浏览量
114739 -
时钟
+关注
关注
11文章
2000浏览量
135296 -
HDL
+关注
关注
8文章
332浏览量
49058 -
复位
+关注
关注
0文章
179浏览量
25094 -
时钟信号
+关注
关注
4文章
510浏览量
30099
原文标题:SpinalHDL BlackBox时钟与复位
文章出处:【微信号:FPGA开源工坊,微信公众号:FPGA开源工坊】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
在SpinalHDL里实现优雅的添加待跟踪波形信号
波形跟踪信号。在SpinalHDL里,我们可以借助blackBox及scala语言本身实现在SpinalHDL环境里实现对ILA的集成。上面的代码实现了用于添加ILa单元实现波形追踪的代码,在调用
发表于 06-22 14:37
在SpinalHDL的设计中集成现有RTL设计(IP)的渠道——BlackBox
在集成IP时需显示映射IP的时钟与复位信号,SpinalHDL提供了mapClockDomain、mapCurrentClockDomain两个函数用于时钟映射,mapClockDom
发表于 06-22 14:59
关于SpinalHDL仿真中信号驱动那点事儿
到时钟信号从低电平到高电平变化完成之后才推出。那么我们在随后对dataIn的赋值其实是发生在clk上升沿到来后的0+时间才发生的。 从这里代码分析我们可以看出,在SpinalHDL的仿真里:复位信号会
发表于 06-24 16:34
聊一聊SpinalHDL 1.6.1引入的blackbox inline功能
BlackBox在之前的文章中,曾介绍过如何封装兼容别人的RTL代码:SpinalHDL——集成你的RTL代码整体的思路还是简洁明了的,相信读完后照着做很快就能上手。这对于保持设计的兼容性及混合
发表于 06-29 16:02
谈谈SpinalHDL中StreamCCByToggle组件设计不足的地方
模块设计很巧妙,从原理分析的角度来讲挺完美的。但是,百密一疏,这个模块在设计时,对于两侧时钟域复位信号的处理,作者并未有妥善的考虑。 现象分析 先来看下面这个example和其测试代码
发表于 06-30 15:11
如何在SpinalHDL里启动一个仿真
withConfig(config: SpinalConfig)函数进行配置。这里的配置常用的是对时钟域的配置,包含时钟有效边沿、复位信号类型、时钟频率等。如下例所示:而DUT的编译则
发表于 07-26 16:59
记录一个在使用BlackBox中parameter踩到的坑
SpinalHDL doc里面也曾提到,在创建BlackBox时,关于原始RTL代码中的parameter的处理方式为:嗯,看起来很简单,我们照猫画虎就好了,最近在写代码时偶然间踩到了一个坑,这里用下面的代码来说
发表于 08-31 14:58
SpinalHDL设计错误总结相关资料分享
设计。以下是SpinalHDL检查的简要概括: 重复赋值 时钟域交叉 层次化违例 组合逻辑环路 Latch 未驱动的信号 位宽不匹配 得不到的switch生命 在每个SpinalHDL
发表于 10-24 15:37
SpinalHDL里时钟域中的定制与命名
聊一聊在SpinalHDL里时钟域中时钟的定制与命名。 相较于Verilog,在SpinalHDL里,其对时钟域有着更细致的描述,从而也能够
STM32电源管理、复位、时钟
第二篇文章——STM32电源、复位、时钟电源管理电源电压调节器可编程电压监测器(PVD: Programmable voltage detector )低功耗模式复位Cortex-M3的复位
发表于 01-05 14:25
•10次下载
SpinalHDL里用于跨时钟域处理的一些手段方法
每一个做数字逻辑的都绕不开跨时钟域处理,谈一谈SpinalHDL里用于跨时钟域处理的一些手段方法。
原来SpinalHDL中BlackBox封装数组接口如此简单
当在SpinalHDL中调用别人的RTL代码时,需要采用BlackBox进行封装。对于大多数场景,想必小伙伴们都已轻车熟路。今天着重来看下当RTL代码的接口中存在数组形式的接口时如何处理。
SpinalHDL BlackBox时钟与复位
评论