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

时间:2016-03-10 21:28:00

标签: verilog simulation fpga yosys

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

我理想的做法是取yosys(一个blif文件)的输出并创建一个我可以更有信心的模拟波形(vcd)。

1 个答案:

答案 0 :(得分:9)

因此,您希望运行iCE40 BLIF网表的合成后仿真。

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

module test(input clk, resetn, output reg [3:0] y);
  always @(posedge clk)
    y <= resetn ? y + 1 : 0;
endmodule

其测试平台(test_tb.v):

module testbench;
  reg clk = 1, resetn = 0;
  wire [3:0] y;

  always #5 clk = ~clk;

  initial begin
    repeat (10) @(posedge clk);
    resetn <= 1;
    repeat (20) @(posedge clk);
    $finish;
  end

  always @(posedge clk) begin
    $display("%b", y);
  end

  test uut (
    .clk(clk),
    .resetn(resetn),
`ifdef POST_SYNTHESIS
    . \y[0] (y[0]),
    . \y[1] (y[1]),
    . \y[2] (y[2]),
    . \y[3] (y[3])
`else
    .y(y)
`endif
  );
endmodule

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

$ 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合成进行模拟。

这很可能是因为在执行Verilog标准时,Yosys并不像iverilog那么严格。例如,在许多情况下,Yosys除了根据Verilog标准需要reg关键字的电线中缺少reg关键字的Verilog文件外。例如,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