首页 > 解决方案 > 如何在 Chisel 生成的模块中注入 Verilog 代码?

问题描述

为了测试我的 Chisel 设计,我将Icaruscocotb一起使用。但是,如果没有像这样在 verilog 模块代码中明确询问,Icarus 不会生成 VCD 跟踪:

`ifdef COCOTB_SIM
initial begin
  $dumpfile ("my_module_name.vcd");
  $dumpvars (0, my_module_name);
  #1;
end
`endif

为了在每次生成 chisel 模块时添加它,我编写了一个名为cocotbify.py的小 Python 脚本,它在生成的模块下“注入”此代码。

同样,要添加一些 systemVerilog assert()/assume() 以使用yosys-smtbmc进行正式检查,我必须在生成的每个 verilog 模块下“注入”代码。我还破解了一个名为smtbmcify.py的小 Python 脚本来注入我的断言/假设代码。

我意识到这是一个 hack,但我找不到直接在 Chisel 模块下执行此操作的好方法。我知道有BlackBox,但我不想实例化子模块,函数 setInline 创建第二个verilog文件(我想直接在模块中写入)。

我在 Chisel scala 代码中看到了一个名为ChiselAnnotation的类型,但我不确定这是要使用的东西,我现在不知道如何使用。

标签: veriloghdlchiselyosyscocotb

解决方案


推荐阅读