我需要在模块中使用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数组中的值,以便在具有特定值时可以执行操作?
答案 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
上面的代码将为多维数组的第一行中的咬合分配数据,然后你可以访问它。