2017-07-20 1020 views
0

我需要为模块中的坐标系统使用2D数组,并且我已经创建了下面的测试代码来测试创建和访问数组中的值。当LED输出为1'b1时,此代码应打开LED的led输出,但目前LED保持关闭状态(除了2D阵列外,我还排除了所有其他代码的故障,这在我使用1D阵列时起作用)。如何在Verilog中访问二维数组中的值?

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但这个代码编译没有错误,所以我不认为这是它)。

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

+1

该代码看起来是正确的。在你的代码中是'clk'吗?请确保它确实如此。另外,请在posedge逻辑中使用非阻塞赋值'<='。 – Serge

+0

您正在运行模拟还是直接使用FPGA?我记得试图回答一个先前的问题,结果他们的FPGA缩减为只读一个2D阵列。解决方案是将数据缓存到1D数组中,然后读取该数据。而FYI,你应该开始你的整个阵列,而不仅仅是你使用的位;添加一个for-loop,将每个条目分配给初始块顶部的0。 – Greg

回答

-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 

     [email protected](posedge clk) begin 
      check[0][0] = 1'b1; 

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

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

这个螨帮助你,我已经包括了一个输入信号的二维数组。

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 

    [email protected](posedge clk) begin 
     check[address] = 8'b11111111; 

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

     ledreg = 1'b1; 
    end 
    end 

    assign led = ledreg; 


endmodule 

上面的代码将分配数据对于多维阵列的第一行中的咬入,然后ü可以访问它。

+0

这个建议没有任何意义。它和'assing led = 1'一样好,并且除去其他所有内容。 – Serge

+0

是的但是在我的第二个程序中,我给出了一个地址,我们可以将值存储在数组中,然后我们可以使用它。我不关心制作led = 1我只关心从数组中检索值。 –

0

在VERILOG此声明一个2D REG是更规则

REG [7:0]检查[0:9]; // reg的insted的[7:0]检查[9:0]

,这意味着有10周8位*的REG

并且可以通过检查评估第一8位[0]和可以访问到第一个元素的第三位通过检查[0] [3]

是的,你可以;)