Yosys -- .dot 文件编译成功,但查看器 (xdot) 无法预览它
Yosys -- compilation of .dot file suceeds, but viewer (xdot) can't preview it
我有两个模块,每个都在单独的 verilog 文件中。一个文件是 double_shift_reg.v
,顶层模块 double_shift_reg
:
`include "./shift_reg.v"
`default_nettype none
module double_shift_reg(clk, shi, in, out);
input wire clk; // Clock
input wire shi; // Shift enable
input wire in; // Input information
output wire out; // Output information
wire d1; // Data 1
wire d2; // Data 2
shift_reg r1(.clk(clk), .rst(1'b0), .shi(shi), .in(in), .out(d1));
shift_reg r2(.clk(clk), .rst(1'b0), .shi(shi), .in(in), .out(d2));
assign out = d1 ^ d2;
`ifdef FORMAL
reg [2:0] f_counter;
always @(posedge clk)
begin
assert(out == 0);
f_counter = f_counter + 1;
if (f_counter == 1'b1111)
assume(shi);
end
`endif // FORMAL
endmodule
另一个文件是一个 shift_reg.v
,带有一个在顶层模块中使用的模块 shift_reg
:
`default_nettype none
module shift_reg(clk, rst, shi, in, out);
input wire clk; // Input clock
input wire rst; // Input reset
input wire shi; // Shift enable
input wire in; // Input information
output wire out; // Output bit
parameter wid = 8; // Shift register's width
parameter ini = {{(wid - 1){1'b0}}, 1'b1}; // Shift register's initial state
reg [(wid - 1):0] s_reg;
initial s_reg = ini;
always @(posedge clk)
begin
if(rst)
s_reg <= ini;
else if(shi)
s_reg[(wid - 1):0] <= {in, s_reg[(wid - 1):1]};
end
assign out = s_reg[0];
endmodule
然后我尝试创建和预览 .dot
文件:
yosys \
-p "read_verilog -sv -formal double_shift_reg.v" \
-p "hierarchy -check -top double_shift_reg" \
-p "proc" \
-p "show -prefix $(file_main) -notitle -colors 2 -width -format dot"
xdot $(file_main).dot
最后一部分的编译消息,即 -p "show -prefix $(file_main) -notitle -colors 2 -width -format dot"
如下所示:
-- Running command `show -prefix double_shift_reg -notitle -colors 2 -width -format dot' --
4. Generating Graphviz representation of design.
Writing dot description to `double_shift_reg.dot'.
Dumping module double_shift_reg to page 1.
Dumping module shift_reg to page 2.
Warnings: 1 unique messages, 1 total
End of script. Logfile hash: e53dd145db
CPU: user 0.02s system 0.01s,
只有一个警告,没有错误...但是当我 .dot
被预览器打开时,我得到一个错误:
当我只为一个包含单个模块的单个 verilog 文件创建 .dot
文件时,这从未发生过。我是否遗漏了一些关键部分?
我不知道这是否是您问题的解决方案(不幸的是我不能写评论),但我注意到有很多事情我会尝试:
- 您只读入了您的顶层模块,而没有读入您的第二个设计实体。
- 在声明层次结构时使用显式的“-top”选项。
- 尝试扁平化你的设计。如果您只对顶层模块感兴趣,请将另一个模块声明为黑盒。
这对我一直有效,但我直接使用 graphviz 的点工具。
我找到了解决办法!我错过了添加库的一行。这个 makefile 目标有效:
dot:
yosys \
-p "read_verilog -sv -formal $(file_main).v" \
-p "read_verilog -lib +/ice40/cells_sim.v" \
-p "hierarchy -check -top $(module_top)" \
-p "proc" \
-p "show -prefix $(file_main) -notitle -colors 2 -width -format dot"
xdot $(file_main).dot
我有两个模块,每个都在单独的 verilog 文件中。一个文件是 double_shift_reg.v
,顶层模块 double_shift_reg
:
`include "./shift_reg.v"
`default_nettype none
module double_shift_reg(clk, shi, in, out);
input wire clk; // Clock
input wire shi; // Shift enable
input wire in; // Input information
output wire out; // Output information
wire d1; // Data 1
wire d2; // Data 2
shift_reg r1(.clk(clk), .rst(1'b0), .shi(shi), .in(in), .out(d1));
shift_reg r2(.clk(clk), .rst(1'b0), .shi(shi), .in(in), .out(d2));
assign out = d1 ^ d2;
`ifdef FORMAL
reg [2:0] f_counter;
always @(posedge clk)
begin
assert(out == 0);
f_counter = f_counter + 1;
if (f_counter == 1'b1111)
assume(shi);
end
`endif // FORMAL
endmodule
另一个文件是一个 shift_reg.v
,带有一个在顶层模块中使用的模块 shift_reg
:
`default_nettype none
module shift_reg(clk, rst, shi, in, out);
input wire clk; // Input clock
input wire rst; // Input reset
input wire shi; // Shift enable
input wire in; // Input information
output wire out; // Output bit
parameter wid = 8; // Shift register's width
parameter ini = {{(wid - 1){1'b0}}, 1'b1}; // Shift register's initial state
reg [(wid - 1):0] s_reg;
initial s_reg = ini;
always @(posedge clk)
begin
if(rst)
s_reg <= ini;
else if(shi)
s_reg[(wid - 1):0] <= {in, s_reg[(wid - 1):1]};
end
assign out = s_reg[0];
endmodule
然后我尝试创建和预览 .dot
文件:
yosys \
-p "read_verilog -sv -formal double_shift_reg.v" \
-p "hierarchy -check -top double_shift_reg" \
-p "proc" \
-p "show -prefix $(file_main) -notitle -colors 2 -width -format dot"
xdot $(file_main).dot
最后一部分的编译消息,即 -p "show -prefix $(file_main) -notitle -colors 2 -width -format dot"
如下所示:
-- Running command `show -prefix double_shift_reg -notitle -colors 2 -width -format dot' --
4. Generating Graphviz representation of design.
Writing dot description to `double_shift_reg.dot'.
Dumping module double_shift_reg to page 1.
Dumping module shift_reg to page 2.
Warnings: 1 unique messages, 1 total
End of script. Logfile hash: e53dd145db
CPU: user 0.02s system 0.01s,
只有一个警告,没有错误...但是当我 .dot
被预览器打开时,我得到一个错误:
当我只为一个包含单个模块的单个 verilog 文件创建 .dot
文件时,这从未发生过。我是否遗漏了一些关键部分?
我不知道这是否是您问题的解决方案(不幸的是我不能写评论),但我注意到有很多事情我会尝试:
- 您只读入了您的顶层模块,而没有读入您的第二个设计实体。
- 在声明层次结构时使用显式的“-top”选项。
- 尝试扁平化你的设计。如果您只对顶层模块感兴趣,请将另一个模块声明为黑盒。
这对我一直有效,但我直接使用 graphviz 的点工具。
我找到了解决办法!我错过了添加库的一行。这个 makefile 目标有效:
dot:
yosys \
-p "read_verilog -sv -formal $(file_main).v" \
-p "read_verilog -lib +/ice40/cells_sim.v" \
-p "hierarchy -check -top $(module_top)" \
-p "proc" \
-p "show -prefix $(file_main) -notitle -colors 2 -width -format dot"
xdot $(file_main).dot