Chr*_*cho 6 simulation verilog fpga yosys
我发现使用iverilog进行模拟是一种不太合适的方法,我可以模拟不能合成的设计,相反的设计不仅可以合成,而且可以在物理硬件上按预期工作,不会与iverilog合成进行仿真.
我理想的做法是采用yosys(一个blif文件)的输出并创建一个我可以更有信心的模拟波形(vcd).
因此,您希望运行iCE40 BLIF网表的综合后仿真.
考虑以下简单示例design(test.v
):
module test(input clk, resetn, output reg [3:0] y);
always @(posedge clk)
y <= resetn ? y + 1 : 0;
endmodule
Run Code Online (Sandbox Code Playgroud)
它的testbench(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
Run Code Online (Sandbox Code Playgroud)
运行预合成模拟当然很简单:
$ iverilog -o test_pre test.v test_tb.v
$ ./test_pre
Run Code Online (Sandbox Code Playgroud)
对于后综合模拟,我们必须首先运行综合:
$ yosys -p 'synth_ice40 -top test -blif test.blif' test.v
Run Code Online (Sandbox Code Playgroud)
然后我们必须将BLIF网表转换为verilog网表,以便Icarus Verilog可以阅读:
$ yosys -o test_syn.v test.blif
Run Code Online (Sandbox Code Playgroud)
现在我们可以从测试平台,综合设计和iCE40仿真模型构建仿真二进制文件,并运行它:
$ iverilog -o test_post -D POST_SYNTHESIS test_tb.v test_syn.v \
`yosys-config --datdir/ice40/cells_sim.v`
$ ./test_post
Run Code Online (Sandbox Code Playgroud)
[..]不会与iverilog合成进行模拟.
这很可能是因为在执行Verilog标准时,Yosys并不像iverilog那么严格.例如,在许多情况下,Yosys将除Verilog文件外,其中reg
关键字缺少reg
关键字,根据Verilog标准需要关键字.例如,yosys将接受以下输入,即使它不是有效的Verilog代码:
module test(input a, output y);
always @* y = !a;
endmodule
Run Code Online (Sandbox Code Playgroud)
对于Icarus Verilog,您必须添加缺失reg
:
module test(input a, output reg y);
always @* y = !a;
endmodule
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
945 次 |
最近记录: |