Verilog 使用参数数组生成模块

Verilog 使用参数数组生成模块,verilog,system-verilog,Verilog,System Verilog,我有一个模块,它存储不同字符的位图,我计划用它在矩阵上显示文本。目前,位图中填充了一个内存初始化文件,该文件作为参数传入(我已经确认这在Quartus和ModelSim中有效) 为了实际拥有所有字符的查找表,我想创建一个单独的模块,该模块包含所有位图的实例化,并根据字符代码选择正确的位图。这些位图实例化是在generate块中创建的,它们从数组中获取正确的文件名。然而,ModelSim不喜欢这样。我的代码如下: module mem_char_disp_lib( output logic

我有一个
模块
,它存储不同字符的位图,我计划用它在矩阵上显示文本。目前,位图中填充了一个内存初始化文件,该文件作为
参数
传入(我已经确认这在Quartus和ModelSim中有效)

为了实际拥有所有字符的查找表,我想创建一个单独的
模块
,该模块包含所有位图的实例化,并根据字符代码选择正确的位图。这些位图实例化是在
generate
块中创建的,它们从数组中获取正确的文件名。然而,ModelSim不喜欢这样。我的代码如下:

module mem_char_disp_lib(
    output logic pixel,
    input logic [4:0] x,
    input logic [5:0] y,
    input logic [6:0] code,
    input logic clk
);
    localparam CHAR_NUM = 26;
    logic [CHAR_NUM-1:0] alphabet;

    const var [CHAR_NUM-1:0] BITMAPS = {
        "/mem/char/A.hex",
        "/mem/char/B.hex",
        "/mem/char/C.hex",
        // ... a lot more declarations here...
        "/mem/char/X.hex",
        "/mem/char/Y.hex",
        "/mem/char/Z.hex"
    };

    genvar i;
    generate
        for (i=0; i<CHAR_NUM; i=i+1) begin : mem_char_disp_blocks
            mem_char_disp #(.BITMAP(BITMAPS[i])) block (
                .pixel(alphabet[i]),
                .x, .y, .clk,
                .code(i),
                .data(1'b0),
                .write_en(1'b0)
            );
        end
    endgenerate

    always_comb
        pixel = alphabet[code];

endmodule

错误是未找到覆盖的模块参数“位图”。(每个生成模块的其中一个错误;
CHAR\u NUM
total。)这对我来说没有意义,因为直接实例化一个参数可以很好地工作(例如,
mem\u CHAR\u disp#(.BITMAP(/mem/CHAR/a.hex”)block/*/
).

变量
const
不是常量-它是一个一次写入的变量,在分配变量时在运行时初始化。您需要使用
参数或
localparam
来分配更新中发现的另一个参数。您还需要修复数组的维度

parameter bit [1:15*8] BITMAPS[26] = {
        "/mem/char/A.hex",   // 15 8-bit chars
        // more elements...
        "/mem/char/Z.hex" // 26 elements
    };

如果不查看模块
mem_char_disp
A
const
变量的声明,则无法帮助您处理上一个错误。变量不是常量-它是一个一次写入变量,在分配变量时会在运行时初始化。您需要使用
参数或
localparam
来分配给另一个变量参数。您还需要修复数组的维度

parameter bit [1:15*8] BITMAPS[26] = {
        "/mem/char/A.hex",   // 15 8-bit chars
        // more elements...
        "/mem/char/Z.hex" // 26 elements
    };

如果没有看到模块的声明,就无法帮助您解决上一个错误
mem\u char\u disp

第二个错误的问题在于我的编译脚本;
mem\u char\u disp
模块中的测试台正在工作,但它们不在
mem\u char\u disp\u lib
模块中。谢谢!结果是这样的第二个错误的问题是我的编译脚本;
mem\u char\u disp
模块中的测试台正在工作,但它们不在
mem\u char\u disp\u lib
模块中。谢谢!