Verilog 是否可以从yosys输出创建模拟波形

Verilog 是否可以从yosys输出创建模拟波形,verilog,simulation,fpga,yosys,Verilog,Simulation,Fpga,Yosys,我发现使用iverilog进行模拟是一种不太合适的方法,我可以模拟不会合成的设计,反之,不仅会合成,而且会在物理硬件上按预期工作的设计,不会使用iverilog进行模拟合成 理想情况下,我希望做的是利用yosys(一个blif文件)的输出,创建一个我可以更放心的模拟波形(vcd)。所以您希望运行iCE40 blif网络列表的合成后模拟 考虑以下简单的示例设计(test.v): 运行预合成模拟当然很简单: $ iverilog -o test_pre test.v test_tb.v $ ./te

我发现使用iverilog进行模拟是一种不太合适的方法,我可以模拟不会合成的设计,反之,不仅会合成,而且会在物理硬件上按预期工作的设计,不会使用iverilog进行模拟合成


理想情况下,我希望做的是利用yosys(一个blif文件)的输出,创建一个我可以更放心的模拟波形(vcd)。

所以您希望运行iCE40 blif网络列表的合成后模拟

考虑以下简单的示例设计(
test.v
):

运行预合成模拟当然很简单:

$ iverilog -o test_pre test.v test_tb.v
$ ./test_pre
对于合成后模拟,我们必须首先运行合成:

$ yosys -p 'synth_ice40 -top test -blif test.blif' test.v
然后,我们必须将BLIF网络列表转换为verilog网络列表,以便Icarus verilog能够读取:

$ yosys -o test_syn.v test.blif
现在,我们可以从测试台、综合设计和iCE40仿真模型构建仿真二进制文件,并运行它:

$ iverilog -o test_post -D POST_SYNTHESIS test_tb.v test_syn.v \
                        `yosys-config --datdir/ice40/cells_sim.v`
$ ./test_post
[…]不会与iverilog合成以进行模拟

这很可能是因为Yosys在执行Verilog标准时没有iverilog严格。例如,在许多情况下,根据Verilog标准,Yosys将删除电线中缺少
reg
关键字的Verilog文件,这些电线需要
reg
关键字。例如,yosys将接受以下输入,即使它不是有效的Verilog代码:

module test(input a, output y); 
  always @* y = !a;
endmodule
对于Icarus Verilog,您必须添加缺少的
reg

module test(input a, output reg y); 
  always @* y = !a;
endmodule

也许是题外话,但如果vhdl是一个选项,我从来没有遇到过ghdl波形的问题。yosys是什么?yosys是iCEstick&;的开源Verilog工具链的一部分board@PaebbelsYosys是一个开源的Verilog综合框架和其他框架(例如,除了ASIC和FPGA综合流之外,Yosys还提供各种形式的形式验证)。感谢iverilog后期合成技巧(更不用说伟大的工具了!)老实说,我在有效的iverilog代码不合成方面遇到的麻烦和我在其他方面遇到的一样多!(这大部分是因为我对verilog一无所知,这会让你觉得很纠结!!!)顺便问一下,ice40/cells\u sim.v适合8k板吗?@ChrisCamacho在github上开一张罚单,或者在stackoverflow上问一个问题,如果你有verilog代码,你认为应该工作,但被yosys拒绝了。是的,
ice40/cells\u sim.v
适用于ice40 1K、4K和8K设备。
module test(input a, output y); 
  always @* y = !a;
endmodule
module test(input a, output reg y); 
  always @* y = !a;
endmodule