如何在 Verilog 中制作可变尺寸的二维寄存器/数组

How to make a 2D register/ array in Verilog with variable dimensions

我正在尝试在 FPGA 上实现遗传算法。为了生成算法的初始种群,我想制作一个二维数组,其中包含用户通过开关输入的内容。但是,每次我编译它都说信号不是常数。我曾尝试使用无效的整数和参数。我使用状态机获取用户输入,然后计划将代码的遗传算法部分实例化到该模块中。下面是 GA 所在的模块。

module your_exam_module(clk, rst, a, b, c, d,e, start, done);

input clk, rst;
input [7:0]a;
input [7:0]b;
input [7:0]c;
input [7:0]d;
input [7:0]e;



input start;
output done;
reg done;



always @(posedge clk or negedge rst)
    if (rst == 1'b0)
    begin

        done <= 1'b0;
    end
    else
    begin
        if (start == 1'b1)
        begin
       reg [e-1:0]population[b-1:0]; // generates an E by B register (matrix) that will serve as the initial population
            done <= 1'b1;
        end
    end

endmodule

你没有成功,因为做不到。

您正在使用 HDL,这是一种硬件描述语言。没有硬件可以动态地放大和缩小其大小。这就像要求内存芯片动态更改它可以存储的位数。

您最多只能定义您认为需要的最大、最坏情况下的二维数组。然后你可以使用部分或全部。

另一种方法是使用参数,但每次需要新尺寸时都必须编译程序。事实上,您还受到 FPGA 可以容纳的最大二维数组的限制(以及所有其他代码)。