如何在Verilog中访问2D数组中的值?

时间:2017-07-20 02:24:34

标签: arrays multidimensional-array verilog

我需要在模块中使用2D数组作为坐标系,我已经创建了下面的测试代码来测试创建和访问数组中的值。当LED输出为1< b1时,此代码应打开LED LED输出,但目前LED保持关闭状态(除了2D阵列之外,我对所有其他代码进行了故障排除,当我使用1D阵列时,它可以正常工作这里)。

input clk;
reg [7:0] check[9:0];
reg ledreg;
output led;

initial begin
    check[0][0] = 1'b1;
    ledreg = 1'b0;
end

always @(posedge clk) begin
    if (check[0][0] == 1'b1) begin
        ledreg = 1'b1;
    end
end

assign led = ledreg;

我不确定我的数组初始化语法是关闭reg [7:0] check[9:0]还是值检查语法关闭check[0][0] == 1'b1,或者这是否是一个不能使用的SystemVerilog功能只是Verilog(我没有SystemVerilog,但这段代码编译没有错误,所以我不认为它是这样的。)

如何检查2D数组中的值,以便在具有特定值时可以执行操作?

2 个答案:

答案 0 :(得分:0)

用于在verilog中声明2D reg,这是更常规的

reg [7:0]检查[0:9]; //注册reg [7:0]检查[9:0]

这意味着你有10 * 8bit regs

你可以通过check [0]评估前8位,你可以通过check [0] [3]

访问第一个元素的第3位

是的,你可以;)

答案 1 :(得分:-1)

你在初始块中分配一个值,这就是它不接受它的原因。我已编辑你的代码并检查它

 module led(clk,led,address
        );
         input clk;
         input [3:0] address;
    reg [7:0] check[9:0];
    reg ledreg;
    output led;

    //  initial begin
    //    check[0] = 1;
    //    ledreg = 1'b0;
    //  end

        always@(posedge clk) begin
            check[0][0] = 1'b1;

        if ( check[0][0] == 1'b1) begin

            ledreg = 1'b1;
        end
        end
    assign led = ledreg;
    endmodule

这个螨帮助你为2D阵列提供输入信号。

module led(clk,led,address
    );
     input clk;
     input [3:0] address;
reg [7:0] check[9:0];
reg ledreg;
output led;

//  initial begin
//    check[0] = 1;
//    ledreg = 1'b0;
//  end

    always@(posedge clk) begin
        check[address] = 8'b11111111;

    if ( check[0][0] == 1'b1) begin

        ledreg = 1'b1;
    end
    end

    assign led = ledreg;


endmodule

上面的代码将为多维数组的第一行中的咬合分配数据,然后你可以访问它。