[SystemVerilog语法拾遗] 谈谈foreach使用时数组下标对遍历顺序的影响

[SystemVerilog语法拾遗] 谈谈foreach使用时数组下标对遍历顺序的影响


通常我们在使用foreach遍历数组元素的时候不像for循环那么直观的知道循环变量的值的变化顺序以及step大小,foreach有自己一套遍历顺序,且默认step为1,在使用多维数组的遍历时遍历顺序有时候就会对结果产生重大影响,尤其是当我们在foreach循环中添加队列操作时,所以有必要通过一个实验来对foreach遍历顺序做个系统的总结。(当然,最直接的方法是去查IEEE sv的标准,不过标准中文字描述还是没有我们直接跑个仿真来的直观)
这里我们以二维bit数组为例(foreach认为是一个三维数组,bit数组的下标也被认为是一个维度),更多维的数组可以依此类推。
代码实例如下图所示:
在这里插入图片描述
仿真结果如下图所示:
在这里插入图片描述

由此我们得出如下结论:
以数组 bit [LSB0:MSB0] aa [LSB1:MSB1][LSB2:MSB2]; 为例(LSB和MSB只用来标识遍历顺序,不标识实际大小)
1、foreach的第一个维度是定义在[LSB1:MSB1],最后一个维度为[LSB0:MSB0],中间维度按顺序定义在[LSB1:MSB1]的右侧。
2、遍历顺序时钟是从第一个维度的LSB开始递归遍历其所有子维度的LSB到MSB,最终遍历到最后一个维度的MSB,即遍历顺序是aa[LSB1][LSB2]…[LSB0], aa[LSB1][LSB2]…[LSB0+1], …, aa[MSB1][MSB2]…[MSB0]
3、[LSB:MSB]也可以直接用维度简写[SB],相当于[0:SB-1]

SystemVerilog IEEE 1800-2017标准上关于foreach使用的描述截图如下,大家可以结合上面的例子理解下
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值