SpinalHDL仿真时遇到“key not found:(clk: Bool)“

假设仿真代码如下:

​
object SimTest extends App{
        SimConfig.withWave.compile(new testModule()).doSim{ dut =>
                dut.clockDomain.forkStimulus(10)
        }
}
​

SpinalHDL在仿真时遇到了以下报错:

Exception in thread "main" java.util.NoSuchElementException: key not found: (clk :  Bool)

** 原因是:我的testModule中,没有自动产生默认时钟域的clk信号 **

在SpinalHDL中,如果在代码中存在Reg,他是会自动例化时钟信号clk的;但是如果在模块代码testModule中没有Reg,则不会自动生成默认时钟域,相当于我的代码是一堆组合逻辑,因此默认不需要clk。

为了能让仿真代码跑起来,可以尝试:

  1. 检查testModule模块代码中,是否需要添加Reg(Reg会自动例化在默认时钟域下)

  2. 检查代码是否在默认时钟域下运行

  3. 如果你的模块是组合逻辑,不存在时序逻辑,那么删除"dut.clockdomain.forkStimulus()"代码


SpinalHDL的仿真与传统的Verilog仿真思想稍有不同:

传统Verilog的testbench主要是通过“用硬件测试硬件”,主要体现在:在写testbench的时候,生成一堆硬件(wire, reg)并对其附加一定的规则,然后输入到dut上进行测试

SpinalHDL注重“软件与硬件分离”,主要体现在:在testbench时,其使用的仿真代码是“软件”形式的,如"#="信号赋值的时候,用的是scala中的Int类型,而不是spinal中的UInt类型(scala不会生成硬件),又如使用条件分支时,用的是if()(scala的条件分支)而不是when()(生成硬件的条件分支)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值