【问题标题】:How to run post-synthesis simulation with the IceStorm iCE40 FPGA flow如何使用 IceStorm iCE40 FPGA 流程运行综合后仿真
【发布时间】:2020-08-16 13:14:07
【问题描述】:

不仅使用常规的综合前(行为)仿真验证 Verilog 设计,而且还使用综合后仿真来验证 Verilog 设计是一种很好的设计实践。在调试仿真和硬件之间的不匹配时,这实际上是强制性的。如何通过 iCE40 FPGA 的开源 IceStorm 流程实现这一点?

【问题讨论】:

  • 谁能告诉我如何运行 Icestorm,我已经在谷歌上搜索了半个小时。

标签: yosys


【解决方案1】:

有关示例,请参阅 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 处具有时钟边沿,因为这会导致时钟寄存器更新和寄存器初始化之间的竞争条件。 IE。以下用于生成时钟的测试台代码存在问题:

    reg clk = 1;
    always #5 clk = ~clk;

相反,您应该使用类似以下的方法,在初始周期内未定义时钟信号:

    reg clk;
    always #5 clk = (clk === 1'b0);

(2) 一些信号(或向量的单个位)可以在合成过程中被优化掉。该位可以设置为一个常数值(通常为x)或由工具浮动。在尝试检查综合后仿真结果时,这可能会令人困惑。在您希望该工具保留的网络上设置keep 属性:

    (* keep *) reg [31:0] foobar;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多