SystemVerilog----关于foreach

foreach结构指定在数组元素上的迭代。它的自变量是一个指明任意类型数组(固定尺寸的、动态的、及联合数组)的标识符,然后紧跟着一个包围在方括号内的循环变量的列表。每一个循环变量对应于数组的某一维。foreach结构类似于一个使用数组范围替代一个表达式来指定重复次数的repeat循环。 

 

例子:

string words[2] = {"hello", "world"};
int prod[1:8][1:3];

foreach (words[j])
    $display(j, words[j]); // 打印每一个索引和值

foreach (prod[k,m])
    prod[k][m] = k * m;    // 初始化

循环变量的数目必须匹配数组变量的维数。空循环变量可以用来指示在对应的数组维数上没有迭代,并且趋向于尾部的连续空循环变量可以被忽略。循环变量是自动的、只读的,并且它们的作用范围对于循环来讲是本地的。每一个循环变量的类型被隐含地声明成与数组索引的类型一致。数组中任何具有相同标识符的循环变量都是错误的。 

 

循环变量到数组索引的映射由维基数确定,如23.7节所描述的那样。对于foreach循环,更高基数的索引变化也更快。

//     1  2  3         3    4       1   2 -> 维数
int A [2][3][4]; bit [3:0][2:1] B [5:1][4];

foreach(A[i, j, k]) ...
foreach(B[q, r, , s]) ...

对于第一条foreach子句,i01迭代,j02迭代,k03迭代。对第二条foreach子句,q51迭代,r03迭代、s21迭代(第三个索引的迭代被忽略)。 

 

多个循环变量对应于在指定索引上迭代的嵌套循环。循环的嵌套由维基数确定;外层循环对应于较低的基数索引。在上面的第一个例子中,最外层的循环在i上迭代,最内层的循环在k上迭代。 

 

当循环变量用在表达式当中而不是作为指定数组的索引的时候,它们被自动地强制转换到与索引类型一致的类型。对于固定尺寸或动态数组,强制转换类型时int。对于以特定索引类型索引的联合数组,强制转换类型与索引类型一致。对于使用通配符索引(*)进行索引的联合数组,强制转换类型是无符号的longint类型。为了使用不同的类型,可以使用一个显式的强制类型转换。

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值