优秀的设计实践不仅可以通过常规预合成(行为)模拟验证Verilog设计,还可以使用后综合模拟。在调试仿真和硬件之间的不匹配时,这实际上是强制性的。如何使用iCE40 FPGA的开源IceStorm流程实现这一目标?
答案 0 :(得分:3)
有关示例,请参阅https://github.com/cliffordwolf/icestorm/tree/master/examples/icestick。 " rs232demo"项目附带一个测试平台,Makefile包含合成前和模拟后的规则:
make rs232demo_tb.vcd # pre-synthesis simulation
make rs232demo_syntb.vcd # post-synthesis simulation
使用像gtkwave这样的VCD查看器来查看这两个命令生成的VCD文件。
为了运行综合后仿真,首先必须将BLIF网表(综合输出)转换为Verilog网表:yosys -p 'read_blif -wideports example.blif; write_verilog example_syn.v'
此网表将实例化iCE40设备原语。 Yosys为这些原语提供了仿真模型。运行命令yosys-config --datdir/ice40/cells_sim.v
以打印该模拟库的完整路径名。编译模拟时使用此Verilog文件。
编辑:关于合成后仿真的另外两个常见问题解答:
(1)时钟在时间戳0处不应具有时钟边沿,因为这可能导致时钟寄存器更新和寄存器初始化之间的竞争条件。即用于生成时钟的以下测试台代码存在问题:
reg clk = 1;
always #5 clk = ~clk;
相反,你应该使用类似下面这样的东西,使得时间信号在初始阶段不确定:
reg clk;
always #5 clk = (clk === 1'b0);
(2)在合成期间可以优化一些信号(或矢量的各个位)。该位可以设置为常量值(通常为x
)或由工具浮动。在尝试检查合成后仿真结果时,这可能会令人困惑。在您希望工具保留的网络上设置keep
属性:
(* keep *) reg [31:0] foobar;