当前位置: 首页 > news >正文

SystemVerilog数组参数传递及引用方法总结

一、将常数数组传递给task/function

如下面的程序,将一个常数数组传递给function

module my_array_test();function array_test(int array[4]);foreach(array[i]) begin$display("array[%0d] = %0d", i, array[i]);endendfunctioninitial beginarray_test('{0:5, 3:6, 1:2, 2:9});end
endmouule

传递常量数组给function的格式如下:

    '{数组索引:值, 数组索引: 值, 数组索引: 值};
运行结果如下:

二、传递关联数组给function/task

        如下面的function,其参数类型为关联数组。

module my_associative_array_test();function associative_array_test(int array[bit [1:0]]);foreach(array[i]) begin$display("array[%0d] = %0d", i, array[i]);endendfunctioninitial beginassociative_array_test('{3:10});end
endmoule

备注:

       关联数组,即我们通常所说的哈希(Hash),它没有顺序,只是一系列的键-值(key-value)对。如本例中所传递的Hash,他里面只有1个元素。

运行结果如下:

三、传递数组的引用给function/task

  • 通关ref传递数组的引用给子函数,子函数可以修改数组的值,并且对外可见
int    array[4] = '{0, 1, 2, 3};      //'function automatic ref_test(ref int array[4], input int start);foreach(array[i]) beginarray[i] = i + start;// $display("*******%d  \n",start);$display("[NOW]array[%0d] = %0d", i, array[i]);endendfunctioninitial beginforeach(array[i]) begin$display("[BFE]array[%0d] = %0d", i, array[i]);end#100;ref_test(array, 4);#100;foreach(array[i]) begin$display("[AFT]array[%0d] = %0d", i, array[i]);endend

备注:

(1)在使用ref修饰函数参数时(在module/program中),需要将function/task修饰为automatic,否则xrun编译不通过,VCS可以。严谨起见,还是记得加automatic
(2)通过ref传递参数是一个唯一的参数传递限定符,将ref与任何其他方向限定符(input/output/inout)组合应该是非法的
(3)对于具有静态生命的子程序,通过引用的方式传递参数是非法的
运行结果如下:

 四、传递数组的引用给function/task,但不希望子函数修改数组的值

  • 通关键词const修饰ref,传递常数数组给子函数,子函数就不能修改数组值
module my_ref_array_test();int    array[4] = '{0, 1, 2, 3, 4};     //'function const_ref_array_test(const ref int array[5], input start);foreach(array[i]) begin//array[i] = i + start;     //不允许修改,会有编译错误$display("[NOW]array[%0d] = %0d", i, array[i]);endendfunctioninitial beginforeach(array[i]) begin$display("[BFE]array[%0d] = %0d", i, array[i]);endconst_ref_array_test(array, 5);foreach(array[i]) begin$display("[AFT]array[%0d] = %0d", i, array[i]);endendendmoule

注意:

(1)当用const修饰ref之后,子函数就不能修改数组值了,如果加了修改array元素的语句,将会出现编译错误
(2)为了保护引用传递的参数不被子程序修改,const 限定符可以与ref一起使用,表示参数虽然通过引用传递,但它是一个只读变量
(3)如果引用参数使用const修饰,那么该不允许子程序修改, 子程序尝试修改时编译器报错
 

相关文章:

SystemVerilog数组参数传递及引用方法总结

一、将常数数组传递给task/function 如下面的程序,将一个常数数组传递给function module my_array_test();function array_test(int array[4]);foreach(array[i]) begin$display("array[%0d] %0d", i, array[i]);endendfunctioninitial beginarray_tes…...

Shell脚本学习-While循环1

当型循环和直到型循环: 循环语句常用于重复执行一条指令或一组指令,直到条件不满足时停止。 在企业实际应用中,常用于守护进程或者持续运行的程序。 while语法结构: while 条件 do指令... done while循环语句对后面的条件表达…...

docker for Windows, WSL2 ,Hyper-v的关系

Hyper-v Hyper-V是由微软开发的一种虚拟化技术和虚拟机管理器。它允许在Windows操作系统上创建和运行多个虚拟机实例,每个虚拟机可以运行独立的操作系统和应用程序。属于硬件虚拟化。 WSL2 WSL2在技术上与WSL有很大的不同。在WSL2中,Windows 10引入了…...

SAS-数据集SQL水平合并

一、SQL水平合并基本语法 sql的合并有两步,step1:进行笛卡尔乘积运算,第一个表的每一行合并第二个表的每一行,即表a有3行,表b有3行,则合并后3*39行。笛卡尔过程包含源数据的所有列,相同列名会合…...

企业既要用u盘又要防止u盘泄密怎么办?

企业在日常生产生活过程中,使用u盘交换数据是最企业最常用也是最便携的方式,但是在使用u盘的同时,也给企业的数据保密工作带来了很大的挑战,往往很多情况下企业的是通过u盘进行数据泄漏的。很多企业采用一刀切的方式,直…...

汉明距离,两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。

题记: 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y,计算并返回它们之间的汉明距离。 示例 1: 输入:x 1, y 4 输出:2 解释: 1 (0 0 0 1) 4 (0 1 0 0…...

Android 之 使用 Camera 拍照

本节引言 本节给大家带来的是Android中Camera的使用,简单点说就是拍照咯,无非两种: 1.调用系统自带相机拍照,然后获取拍照后的图片 2.要么自己写个拍照页面 本节我们来写两个简单的例子体验下上面的这两种情况~ 1.调用系统自带…...

盘点7月Sui生态发展,了解Sui的近期成长历程!

自5月Sui主网上线三个月以来,7月是Sui网络进行最多次重要更新的一个月,Sui网络和生态正呈指数形式不断向上发展。为吸引更多的项目或开发者加入生态构建以及活跃用户参与生态,Sui基金会推出了Builder House、黑客松、Bullshark Quests、NFT再…...

6.物联网操作系统信号量

一。信号量的概念与应用 信号量定义 FreeRTOS信号量介绍 FreeRTOS信号量工作原理 1.信号量的定义 多任务环境下使用,用来协调多个任务正确合理使用临界资源。 2.FreeRTOS信号量介绍 Semaphore包括Binary,Count,Mutex; Mutex包…...

《向量数据库指南》——使用Milvus Cloud操作员安装Milvus Cloud独立版

Milvus cloud操作员HelmDocker Compose Milvus cloud Operator是一种解决方案,帮助您在目标Kubernetes(K8s)集群上部署和管理完整的Milvus cloud服务堆栈。该堆栈包含所有Milvus cloud组件和相关依赖项,如etcd、Pulsar和MinIO。本主题介绍如何使用Milvus cloud Operator安…...

Redis的基础知识

目录 一、什么是Redis 二、关于Redis的一些基本知识 (1)set命令 (2)get命令 三、Redis中的一些常用命令 (1)keys (2)exists (3)type (4…...

Sorting Layer与Order in Layer

就像是两个数相比,比如34与26,Sorting Layer决定的是十位,而Order in Layer决定的是个位,如果Sorting Layer的级别比较高,则可以忽略Order in Layer的比较,当比较的二者的Sorting Layer级别相同&#xff0c…...

动手学深度学习—卷积神经网络(原理解释+代码详解)

目录 1. 从全连接层到卷积层2. 图像卷积2.1 互相关运算2.2 卷积层2.3 图像中目标的边缘检测2.4 学习卷积核2.5 特征映射和感受野 3. 填充和步幅3.1 填充3.2 步幅 4. 多输入多输出通道4.1 多输入通道4.2 多输出通道4.3 11卷积核 5. 汇聚层5.1 最大汇聚层和平均汇聚层5.2 填充和步…...

环球数科、BUFFALO面试(部分)

环球数科 系统复杂且需求迭代频繁,如何维护微服务之间的接口调用关系? API接口在设计的时候需要大量的需求文档,而且文档也需要不断维护。如何高效维护API文档就很重要了。以下是一些常见的API管理工具:Swagger:Swag…...

RabbitMQ快速入门

文章目录 1、RabbitMQ的概述1.1、什么是消息队列?1.2、为什么要使用消息队列?1.3、RabbitMQ的特点: 2、RabbitMQ的安装2.1 下载与安装2.2 常用命令 3、RabbitMQ消息发送和接受3.1 消息发送和接受机制3.2 AMQP的消息路由3.3 Exchange(交换机)的…...

使用Git在GitHub上部署静态页面

在GitHub中,我们可以将自己的静态页面部署到GitHub中,它会给我们提供一个地址使得我们的页面变成一个真正的网站,可以供用户访问。 一、在GitHub下创建仓库 二、将项目部署到GitHub上 1. 初始化Git仓库 2. 提交代码 3. 关联远程仓库 在Gi…...

SQL-每日一题【1084. 销售分析III】

题目 Table: Product Table: Sales 编写一个SQL查询,报告2019年春季才售出的产品。即仅在2019-01-01至2019-03-31(含)之间出售的商品。 以 任意顺序 返回结果表。 查询结果格式如下所示。 示例 1: 解题思路 前置知识 between and between…...

Redis 软件包,在 CentOS 7 中安装 Redis

Download | Redis 1. 解压 Redis 软件包。假设你的 Redis 软件包名为 redis.tar.gz,进入redis.tar.gz所在目录下 ,可以使用以下命令进行解压: tar xzf redis.tar.gz 2. 切换到 Redis 软件包的解压目录。假设解压后的目录名为 redis&#xf…...

01.Redis实现发送验证码保存功能

学习目标&#xff1a; 提示&#xff1a;学习如何利用Redis来实现发送验证码功能 学习产出&#xff1a; 1. 准备pom环境 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><…...

C++STL——deque容器详解

纵有疾风起&#xff0c;人生不言弃。本文篇幅较长&#xff0c;如有错误请不吝赐教&#xff0c;感谢支持。 &#x1f4ac;文章目录 一.deque容器的基本概念二.deque容器常用操作①deque构造函数②deque元素操作③deque赋值操作④deque交换操作⑤deque大小操作⑥deque插入和删除…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...