在for循环中使用变量来指定verilog中数组的索引

时间:2014-04-09 07:00:18

标签: 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:8*(i-2)]==str[15:0])
       begin
           $display("i");
       end
    end // end of for
end // end of initial

endmodule

1 个答案:

答案 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]