如何在 Verilog 中使用二维数组
how to use 2 Dimensional array in Verilog
我想用 verilog 语法将数据保存在二维数组中。我写了代码。请任何人都可以检查代码,并且可以给我更多关于如何使用二维数组的好主意
reg [9:0] simple_State [0:10][0:10]
reg [9:0] count,
reg [9:0] index_R; // row
reg [9:0] index_C; //
initial
begin
index_C=0;
index_R=0 ;
end
always @ (posedge clock)
simple_State[index_R][index_C] <= count ;
count <= count+1 ;
index_C <= index_C+1 ;
if (count== 10 * index_C)
index_R<= index_R+1 ;
end
您的代码导致 index_C
和 index_R
溢出,并且需要一个乘法运算,如果要综合此描述,这可能会很昂贵。
simple_State
有11行11列,所以行索引和列索引4位就够了。就像您在任何其他语言中所做的那样:递增列,当它达到最大列值时,重置为 0 并递增行值。当达到最大值时,将其重置为 0。
reg [9:0] simple_State [0:10][0:10]
reg [9:0] count,
reg [3:0] index_R; // row
reg [3:0] index_C; // column
initial begin
index_C = 0;
index_R = 0 ;
end
always @ (posedge clock) begin
simple_State[index_R][index_C] <= count ;
count <= count + 1;
if (index_C == 10) begin
index_C <= 0;
if (index_R == 10)
index_R <= 0;
else
index_R <= index_R + 1;
end
else
index_C <= index_C + 1 ;
end
如果您使用时序逻辑,请尽量避免初始块。
reg [9:0] simple_State [0:10][0:10]
reg [9:0] count,
reg [3:0] index_R; // row
reg [3:0] index_C; //
always @ (posedge clock or negedge rst) begin
if(!rst) begin
index_C=0;
index_R=0 ;
end
end
else
begin
simple_State[index_R][index_C] <= count ;
count <= count+1 ;
index_C <= index_C+1 ;
if (count== 10 * index_C)
index_R<= index_R+1 ;
end
end
我想用 verilog 语法将数据保存在二维数组中。我写了代码。请任何人都可以检查代码,并且可以给我更多关于如何使用二维数组的好主意
reg [9:0] simple_State [0:10][0:10]
reg [9:0] count,
reg [9:0] index_R; // row
reg [9:0] index_C; //
initial
begin
index_C=0;
index_R=0 ;
end
always @ (posedge clock)
simple_State[index_R][index_C] <= count ;
count <= count+1 ;
index_C <= index_C+1 ;
if (count== 10 * index_C)
index_R<= index_R+1 ;
end
您的代码导致 index_C
和 index_R
溢出,并且需要一个乘法运算,如果要综合此描述,这可能会很昂贵。
simple_State
有11行11列,所以行索引和列索引4位就够了。就像您在任何其他语言中所做的那样:递增列,当它达到最大列值时,重置为 0 并递增行值。当达到最大值时,将其重置为 0。
reg [9:0] simple_State [0:10][0:10]
reg [9:0] count,
reg [3:0] index_R; // row
reg [3:0] index_C; // column
initial begin
index_C = 0;
index_R = 0 ;
end
always @ (posedge clock) begin
simple_State[index_R][index_C] <= count ;
count <= count + 1;
if (index_C == 10) begin
index_C <= 0;
if (index_R == 10)
index_R <= 0;
else
index_R <= index_R + 1;
end
else
index_C <= index_C + 1 ;
end
如果您使用时序逻辑,请尽量避免初始块。
reg [9:0] simple_State [0:10][0:10]
reg [9:0] count,
reg [3:0] index_R; // row
reg [3:0] index_C; //
always @ (posedge clock or negedge rst) begin
if(!rst) begin
index_C=0;
index_R=0 ;
end
end
else
begin
simple_State[index_R][index_C] <= count ;
count <= count+1 ;
index_C <= index_C+1 ;
if (count== 10 * index_C)
index_R<= index_R+1 ;
end
end