为了测试我的 Chisel 设计,我使用了 Icarus 和 cocotb。但是如果在 verilog 模块代码中没有像这样明确要求 Icarus 不会生成 VCD 跟踪:
`ifdef COCOTB_SIM
initial begin
$dumpfile ("my_module_name.vcd");
$dumpvars (0, my_module_name);
#1;
end
`endif
为了在每次生成凿子模块时添加这个,我写了一个名为 cocotbify.py 的小 python 脚本,它在生成的模块下“注入”这段代码。
同样,要添加一些 systemVerilog assert()/assume() 以使用 yosys-smtbmc 进行正式检查,我必须在生成的每个 verilog 模块下“注入”代码。我还破解了一个名为 smtbmcify.py 的小 python 脚本来注入我的断言/假设代码。
我意识到这是一个 hack,但我找不到直接在 Chisel 模块下执行此操作的好方法。我知道有BlackBox,但我不想实例化子模块,函数setInline创建第二个verilog文件(我想直接写在模块中)。
我在 Chisel scala 代码中看到一个名为 ChiselAnnotation 的类型,但我不确定这是要使用的东西,我现在不知道如何使用。