为了测试我的 Chisel 设计,我将Icarus与cocotb一起使用。但是,如果没有像这样在 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的类型,但我不确定这是要使用的东西,我现在不知道如何使用。