如何让每个模块实例从一个唯一的文件中读取?
How can I make each module instance read from a unique file?
在 top.v 中,我生成 X_MAX*Y_MAX 个 pe
模块的实例。在 pe.v 中,我想初始化专门为该实例生成的内存。例如,在 x=0,y=1:“pe_memory_x0_y0.dat”。这是我的顶级模块的样子:
genvar x, y;
generate for (y = 0; y < Y_MAX; y = y + 1) begin : ys
for (x = 0; x < X_MAX; x = x + 1) begin : xs
pe #(
.X_MAX(X_MAX),
.Y_MAX(Y_MAX),
.X(x),
.Y(y)
)
pe_inst(
.clk(clk),
...
);
在 pe.v 内部,诸如
$display("Loading pe memory at (%0d,%0d)", X, Y);
在 initial
街区工作!但是当我需要 $readmem$
,
$readmemb({"pe_memory_", X, "_y", Y, ".dat"}, n_bound_sel_memory);
无效:
X has indefinite width
指定 X 的宽度,parameter
的值来自 genvar
,只会抛出更多错误。
我的目标是 Xilinx FPGA,我正在尝试使用 iverilog
来模拟我的设计。
可以使用$sformatf
构造文件名:
$readmemb($sformatf("pe_memory_%0d_y%0d.dat", X, Y), n_bound_sel_memory);
请参阅 IEEE Std 1800-2017,第 21.3.3 节将数据格式化为字符串
在 top.v 中,我生成 X_MAX*Y_MAX 个 pe
模块的实例。在 pe.v 中,我想初始化专门为该实例生成的内存。例如,在 x=0,y=1:“pe_memory_x0_y0.dat”。这是我的顶级模块的样子:
genvar x, y;
generate for (y = 0; y < Y_MAX; y = y + 1) begin : ys
for (x = 0; x < X_MAX; x = x + 1) begin : xs
pe #(
.X_MAX(X_MAX),
.Y_MAX(Y_MAX),
.X(x),
.Y(y)
)
pe_inst(
.clk(clk),
...
);
在 pe.v 内部,诸如
$display("Loading pe memory at (%0d,%0d)", X, Y);
在 initial
街区工作!但是当我需要 $readmem$
,
$readmemb({"pe_memory_", X, "_y", Y, ".dat"}, n_bound_sel_memory);
无效:
X has indefinite width
指定 X 的宽度,parameter
的值来自 genvar
,只会抛出更多错误。
我的目标是 Xilinx FPGA,我正在尝试使用 iverilog
来模拟我的设计。
可以使用$sformatf
构造文件名:
$readmemb($sformatf("pe_memory_%0d_y%0d.dat", X, Y), n_bound_sel_memory);
请参阅 IEEE Std 1800-2017,第 21.3.3 节将数据格式化为字符串