foreach数组循环结构体
foreach循环遍历任何维数的数组
Systemverilog增加了foreach循环,它可用来对一维或多维数组中的元素进行迭代,而不必指定数组每个维度的宽度。foreach循环的自变量是数组名,它后面是方括号内用逗号隔开的循环变量列表。每个循环变量对应于数组的一个维度。
int sum[1:8][1:3];
foreach(sum(i,j))
sum[i][j] = i + j;//对数组初始化
//最外层循环对i进行迭代,最内层循环对j进行迭代
从循环变量到数组索引的映射是由维度基数决定的。多循环变量创建嵌套循环来对给定索引进行迭代。外循环对应低基数索引。
foreach循环变量可以省略
有必要为数组每个维度指定一个循环变量。使用两个逗号,而不带变量名表示一个变量位置将跳过一个维度。循环变量为空表示循环不会对数组的该维度进行迭代。变量列表末尾的相邻空循环变量不用列出附加逗号也会被忽略。
//函数为一个128位变量的每个字节产生一个校验位。向量被表示成16个8位元素组成的二维压缩数组。只为foreach循环指定了一个变量,它代表数组的第一维([15:0]维)
function [15:0] gen_crc(logic[15:0][7:0] d);
foreach(gen_crc[i]) gen_crc[i] = ~d[i];
endfunction
循环变量时自动的、只读的并且对循环是局部的。每个循环变量的类型被显式声明为与数组索引类型一致。