Verilog 如何使每个模块实例从唯一的文件中读取?

Verilog 如何使每个模块实例从唯一的文件中读取?,verilog,system-verilog,xilinx,iverilog,Verilog,System Verilog,Xilinx,Iverilog,在top.v中,我生成pe模块的X_MAX*Y_MAX实例。在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 #(

在top.v中,我生成
pe
模块的X_MAX*Y_MAX实例。在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),
                ...
            );
初始
块中工作!但是当我需要
$readmem$

$readmemb({"pe_memory_", X, "_y", Y, ".dat"}, n_bound_sel_memory);
不起作用:

X的宽度不定

为X指定宽度,这是一个
参数,其值来自
genvar
,只会抛出更多错误


我的目标是Xilinx FPGA,我正在尝试使用
iVirlog
模拟我的设计。您可以使用
$sformaf
构建文件名:

$readmemb($sformatf("pe_memory_%0d_y%0d.dat", X, Y), n_bound_sel_memory);

请参阅IEEE标准1800-2017第21.3.3节将数据格式化为字符串

谢谢。我无法在iverilog中模拟这一点(我认为这是因为iverilog中还不支持IEEE Std 1800-2017?),但这在Vivado模拟器中非常有效。
$readmemb($sformatf("pe_memory_%0d_y%0d.dat", X, Y), n_bound_sel_memory);