如何使用IceStorm iCE40 FPGA流程进行综合后仿真

时间:2017-07-18 16:52:11

标签: yosys

优秀的设计实践不仅可以通过常规预合成(行为)模拟验证Verilog设计,还可以使用后综合模拟。在调试仿真和硬件之间的不匹配时,这实际上是强制性的。如何使用iCE40 FPGA的开源IceStorm流程实现这一目标?

1 个答案:

答案 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;