【问题标题】:How can I make each module instance read from a unique file?如何使每个模块实例从唯一文件中读取?
【发布时间】:2020-09-17 23:07:44
【问题描述】:

在 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),
                ...
            );

在 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 的宽度不定

为 X 指定宽度,parameter,其值来自 genvar,只会引发更多错误。

我的目标是 Xilinx FPGA,我正在尝试使用 iverilog 模拟我的设计。

【问题讨论】:

    标签: verilog system-verilog xilinx iverilog


    【解决方案1】:

    可以使用$sformatf来构造文件名:

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

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

    【讨论】:

    • 谢谢。我无法在 iverilog 中进行模拟(我认为这是因为 IEEE Std 1800-2017 在 iverilog 中尚不支持?),但这在 Vivado 模拟器中完美运行。
    猜你喜欢
    • 2011-09-05
    • 2017-11-20
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 2016-04-29
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多