Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用for循环中的变量指定verilog中数组的索引_Arrays_Variables_Verilog - Fatal编程技术网

Arrays 使用for循环中的变量指定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:

我是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

首先,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]