【问题标题】:Is it possible to create a simulation waveform from yosys output是否可以从 yosys 输出创建模拟波形
【发布时间】:2016-06-25 22:57:03
【问题描述】:

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

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

【问题讨论】:

  • 也许题外话,但如果 vhdl 是一个选项,我从来没有遇到过 ghdl 波形的问题。
  • 什么是yosys?没听说过。
  • yosys 是 iCEstick & board 的开源 Verilog 工具链的一部分
  • @Paebbels Yosys 是一个开源 Verilog 综合框架等(例如,除了 ASIC 和 FPGA 综合流程之外,Yosys 还提供各种形式的形式验证)。 clifford.at/yosys

标签: verilog simulation fpga yosys


【解决方案1】:

所以您想运行 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 那样严格。例如,在许多情况下,根据 Verilog 标准,Yosys 将排除在需要 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

【讨论】:

  • 感谢 iverilog 后期合成技巧(更不用说伟大的工具了!)老实说,我在有效 iverilog 代码无法合成方面遇到的麻烦与我遇到的相反情况一样多! (这主要是因为我通过对 verilog 的无知来做一些会让你脚趾弯曲的事情!!!)顺便说一句,ice40/cells_sim.v 对 8k 板好吗?
  • @ChrisCamacho 如果您有您认为应该可以工作但被 yosys 拒绝的 verilog 代码,请在 github 上打开票证或在 stackoverflow 上提出问题。是的,ice40/cells_sim.v 适用于 iCE40 1K、4K 和 8K 设备。
猜你喜欢
  • 2019-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
相关资源
最近更新 更多