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

SystemVerilog学习笔记(八):循环 循环只不过是将需要多次运行的语句包含在循环中,而不是重复编写这些语句。循环将根据条件语句运行多次,如果条件始终为真,则它会变成无限循环,系统将挂起。 阅读详情

[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使用的描述截图如下,大家可以结合上面的例子理解下
​在这里插入图片描述
在这里插入图片描述

System Verilog数据类型及系统函数 System Verilog的数据类型,初始化,类型转换,系统函数介绍 阅读详情

相关推荐

【从零开始学习 SystemVerilog】3.1.2、SystemVerilog 控制流—— foreach 循环

【从零开始学习 SystemVerilog】3.1.2、SystemVerilog 控制流—— foreach 循环

努力,加油每一天鸭~ 1876

SystemVerilog基本数组操作for与foreach

在数组操作中使用for和foreach循环 利用for和foreach对一维数组进行操作: initial beigin bit[31:0] src[5],dst[5]; for(int i=0;i<$size(src);i++) src[i]=[i]; foreach(dst[j]) dst[j]=src[j]*2; end 在foreach循环中只需要指定数组名并在其后方括号中给出索引变量,SV会自动遍历数组中的元素。索引变量将会自动声明,并只在循环内收敛。 利用foreach初始

weixin_42046696的博客 1万+

【从零开始学习 SystemVerilog】8.8、SystemVerilog 约束—— foreach Constraint

【从零开始学习 SystemVerilog】8.8、SystemVerilog 约束—— foreach Constraint

努力,加油每一天鸭~ 1424

SystemVerilog----关于foreach

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

xavi_siege的专栏 2万+

【小白指南】如何将deepseek引入WPS\Word\Excel中去?

如何将deepseek引入WPS\Word\Excel中去?纯小白都能看的懂,一步步操作就能行

2503_90498422的博客 1万+

告别手动画图!用SUMO的netedit快速搭建高速公路交织区路网(附完整XML文件)

本文详细介绍了如何使用SUMO的netedit工具高效构建高速公路交织区路网,避免手动绘图的低效与错误。通过实战案例和XML文件示例,帮助交通工程专业学生快速掌握复杂道路结构建模技巧,特别解析了spreadType参数设置和速度单位换算等关键操作。

weixin_29085865的博客 259

数字硬件建模SystemVerilog-循环语句

数字硬件建模SystemVerilog-循环语句经过几周的更新,SV核心部分用户自定义类型和包内容已更新完毕,接下来就是RTL表达式和运算符。马上HDLBits-SystemVerilog版本也开始准备了,基本这一部分完成后就开始更新~循环语句允许多次执行编程语句或begin-end语句组。SystemVerilog中的循环语句有:for、repeat、while、do..while、foreac...

OpenFPGA的博客 5597

逆向Shopee签名机制:从参数分析到稳定采集方案

本文深入解析了Shopee签名机制的逆向过程,从参数分析到稳定采集方案的实现。通过抓包定位关键参数`sap-ri`和`x-sap-sec`,还原了签名生成算法,并提供了Python实现代码。文章还分享了反反爬策略、性能优化技巧及长期维护建议,帮助开发者构建稳定的Shopee数据采集方案。

weixin_27722377的博客 672

【system verilog】foreach遍历多维数组

前言 关于多维数组的便利顺序,请参考: https://blog.youkuaiyun.com/moon9999/article/details/104190800 正篇 先搬出这个神图,然后做个实验: 实验1: 打印结果: 显然先遍历的[3:0],之后是[1:0],最后是[2:0],就是我们索引时候倒过来。 ...

moon9999的博客 8181

别再让PyCharm吃光你的C盘!保姆级教程:安全迁移config、plugins和remote sources到D盘

本文提供了一份详细的PyCharm配置与缓存文件迁移指南,帮助开发者将config、plugins和remote sources等占用大量C盘空间的文件安全转移到D盘。通过修改data.properties文件和正确迁移顺序,确保PyCharm功能不受影响,同时释放宝贵的系统盘空间。

weixin_28836989的博客 423

Jupyter实战:解决ModuleNotFoundError之xgboost缺失问题

本文详细解析了在Jupyter Notebook中遇到ModuleNotFoundError: No module named 'xgboost'错误的完整解决方案。通过诊断环境、使用pip正确安装xgboost、配置Python路径以及最终验证,帮助用户彻底解决模块缺失问题,并理解Jupyter内核与Python环境的关系,提升问题排查能力。

weixin_29064103的博客 384

systemverilog中的循环(loop)

什么是循环?循环是一段会反复执行的代码。循环中通常包含一个条件语句,以便在条件变为真时能够终止循环。如果循环一直运行下去,那么仿真就会无限期地停滞。SystemVerilog中不同类型的循环结构如下表所示。

m0_71354184的博客 1144

AI自动化流程在金融风控中的3个典型案例

AI自动化风控流程全流程自动化:最小化人工干预,实现从数据输入到决策输出的闭环自适应学习:通过持续数据反馈实现模型自动迭代优化实时决策能力:满足毫秒级(支付风控)至分钟级(信贷审批)的响应需求多模态数据融合:整合结构化、非结构化和实时流数据智能决策解释:自动生成符合监管要求的决策解释人机协同机制:在高风险场景下实现AI与人类专家的协同决策实施后关键绩效指标(KPI)变化指标实施前实施后改进幅度平均审批时间3.2天4.7分钟-99.7%自动审批率15%85%+467%

架构师的AI之路,分享AI应用开发架构的学习与实践。 1535

SystemVerilog学习笔记2 ---《多维数组的遍历》

一维数组遍历 数组遍历一遍使用foreach或者使用for循环 foreach int array[3] = '{9, 5, 8}; foreach(array[i]) $display("array[%0d] = %d", i, array[i]); foreach循环相当于从数组的宽度的左端点,向数组宽度的右端点循环。 ...

llxxyy507的博客 3456

人工智能在文学领域的应用:创作无限可能的智能作家

人工智能在文学领域的应用:创作无限可能的智能作家 作者:禅与计算机程序设计艺术 1. 背景介绍 人工智能技术近年来飞速发展,在各个领域都有广泛应用。文学创作作为人类最高级的智力活动之一,也逐渐受到人工智能技术的影响和改变。随着自然语言处理、生成式模型等人工智能

AI天才研究院 1110

实战干货|.NET9 C#上位机:多PLC并发通信+数据防丢+指令精准下发(10台设备实测+踩坑实录)

摘要:本文介绍了一个基于.NET9重构汽车零部件产线10台西门子S7-1200 PLC并发通信的工业级解决方案。针对原有系统存在的同步轮询阻塞、数据丢失、指令重复等问题,采用连接池复用、异步并发控制、超时隔离等技术,实现800ms内完成10台PLC并发采集、零丢包率、100%指令精准下发。方案通过.NET9的ThreadPool调度优化和ValueTask内存管理,将CPU占用控制在15%以内,解决了多PLC通信中的并发冲突、超时扩散等核心痛点,并提供了可直接复用的工业级代码实现。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 452

21.【SV】SystemVerilog foreach loop

想象一下:你有一盒彩色棋子(数组),需要逐个检查颜色。用for循环需要数清楚有多少棋子,而foreach就像说:“把每个棋子都给我看看”——系统自动处理所有细节。核心思想foreach是专门为数组遍历设计的语法,它自动处理索引范围,避免越界错误。验证任务foreach 应用代码示例遍历测试向量批量应用输入检查响应数组验证输出一致性覆盖率分析统计覆盖点内存验证检查存储单元错误注入批量注入错误foreach 是专用工具:专为数组遍历设计,不是通用循环安全第一:自动处理边界,避免常见的索引错误代码简洁。

啄缘之间的博客 1132

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

system verilog1 数组,for,foreach

代码 `timescale 1ns/1ps module tb; int array1[0:7][0:3]; int array2[8][4]; initial begin for(int i=0;i&lt;$size(array1);i++) for(int j=0;j&lt;$size(array1[0]);j++) array1[i]...

wuzhouqingcy的博客 6847

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

foreach遍历二维数组注意点

foreach遍历二维数组注意点

m0_61479247的博客 1044

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

system verilog如何使用二维动态数组

program dynamic_array; //dynamic array declaration bit [7:0] d_array[][]; initial begin //memory allocation d_array = new[3]; //首先创建第一层的 foreach(d_array[i]) d_array[i] = new[2]; //然后创建第二层的 //assigning .

qwe2508的博客 6720

我的 System Verilog 学习记录(5)

本文简单介绍 System Verilog 语言的 控制流。

记录所学,分享知识,结识挚友 3033

systemverilog学习 ----数组(1)

systemverilog学习 --- 数组(1)

weixin_45614076的博客 2105

SystemVerilog数据类型和操作方法

逻辑类型相当于verilog中reg变量的改进版,是的变量可以被连续赋值、门单元和模块所驱动;任何使用线网的地方都可以使用logic,唯一要注意的是logic不能进行多驱。

qq_40263454的博客 2776

四、控制流语句

控制流语句

baidu_38317135的博客 948
上一篇: [验证百花筒] DPI-C在sv中最简单的应用
下一篇: [SystemVerilog语法拾遗] SV 中Hierarchy reference的动态调用
数字验证Kane陈
博客等级 码龄12年 662粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值