我是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:8*(i-2)]==str[15:0])
begin
$display("i");
end
end // end of for
end // end of initial
endmodule
答案 0 :(得分:1)
首先,if语句中有一个额外的括号,导致语法错误。但是,即使您确定代码仍然不正确,因为您在位选择的两侧都使用了i
。
如果您正在进行切片,一个指数必须保持不变。 Verilog有一个特殊的符号表示:
if (searchBuffer[8*i+:16]==str[15:0])
这将使用8*i
作为基础并获取16
位的片段。关于EDA Playground的工作示例。
注意还有一个-
位选择:
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]