首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用IceStorm iCE40 FPGA流程进行后综合仿真

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

Stack Overflow用户
提问于 2017-07-18 16:52:11
回答 1查看 1.7K关注 0票数 3

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-18 16:52:11

有关示例,请参见https://github.com/cliffordwolf/icestorm/tree/master/examples/icestick。"rs232demo“项目附带了一个测试平台,Makefile包含了前后合成模拟的规则:

代码语言:javascript
复制
make rs232demo_tb.vcd      # pre-synthesis simulation
make rs232demo_syntb.vcd   # post-synthesis simulation

使用VCD查看器(如gtkwave )查看这两个命令生成的VCD文件。

为了运行后综合仿真,必须首先将网表(合成输出)转换为Verilog netlist:yosys -p 'read_blif -wideports example.blif; write_verilog example_syn.v'

此netlist将实例化iCE40设备原语。Yosys提供了这些原语的仿真模型。运行命令yosys-config --datdir/ice40/cells_sim.v以打印该模拟库的完整路径名。在编译模拟时使用此Verilog文件。

编辑:关于后合成模拟的另外两个常见问题:

(1)时钟不应在时间戳0处具有时钟边缘,因为这可能导致时钟寄存器更新和寄存器初始化之间的竞争条件。例如,产生时钟的下列测试工作台代码是有问题的:

代码语言:javascript
复制
    reg clk = 1;
    always #5 clk = ~clk;

相反,您应该使用如下内容,使时钟信号在初始阶段不被定义:

代码语言:javascript
复制
    reg clk;
    always #5 clk = (clk === 1'b0);

(2)在合成过程中,可以对某些信号(或矢量的单个比特)进行优化。这个位可以被设置为一个常量值(通常是x),或者由工具留下浮动。当试图检查综合后的仿真结果时,这可能会使人感到困惑。在您希望工具保留的网上设置keep属性:

代码语言:javascript
复制
    (* keep *) reg [31:0] foobar;
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45172834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档