Arrays 使用for循环中的变量指定verilog中数组的索引
我是verilog的新手。由于变量不能分配给数组的索引,我如何在verilog中编写这个变量,这样就不会发生编译错误Arrays 使用for循环中的变量指定verilog中数组的索引,arrays,variables,verilog,Arrays,Variables,Verilog,我是verilog的新手。由于变量不能分配给数组的索引,我如何在verilog中编写这个变量,这样就不会发生编译错误 module strMatch(); reg [15:0]str; integer i; reg [10*8-1:0]searchBuffer; initial begin str = "ab"; searchBuffer = "qwertabjkl"; for (i=10;i>=2;i++) begin if(searchBuffer[(8*i-1:
module strMatch();
reg [15:0]str;
integer i;
reg [10*8-1:0]searchBuffer;
initial
begin
str = "ab";
searchBuffer = "qwertabjkl";
for (i=10;i>=2;i++)
begin
if(searchBuffer[(8*i-1:8*(i-2)]==str[15:0])
begin
$display("i");
end
end // end of for
end // end of initial
endmodule
首先,if语句中有一个额外的括号,这会导致语法错误。但是,即使修复了该问题,您的代码仍然不正确,因为您在位选择的两侧都使用了
i
如果你要切片,其中一个指数必须是常数。Verilog有一种特殊的表示法,用于获取恒定范围:
if (searchBuffer[8*i+:16]==str[15:0])
这将使用8*i
作为基础,并获取16位的切片。工作实例
注意还有一个-
位选择:
reg [15:0] big_vect;
reg [0:15] little_vect;
big_vect[lsb_base_expr +: width_expr]
little_vect[msb_base_expr +: width_expr]
big_vect[msb_base_expr -: width_expr]
little_vect[lsb_base_expr -: width_expr]