0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

网络和变量的未压缩数组

汽车电子技术 来源:OpenFPGA 作者:碎碎思 2023-02-09 14:50 次阅读

数字硬件建模SystemVerilog(九)-网络和变量的未压缩数组

pYYBAGPkltCAGGloAATFvOF3oVU007.png

SystemVerilog有两种类型的数组:压缩数组和非压缩数组。压缩数组是连续存储的位的集合,通常称为向量。非压缩数组是网络或变量的集合。

集合中的每个网络或变量称为数组元素。未压缩数组的每个元素的类型、数据类型和向量大小都完全相同。每个未压缩的数组元素可以独立于其他元素存储;这些元素不需要连续存储。软件工具,如仿真器和综合编译器,可以以工具认为最佳的任何形式组织未压缩数组的存储。

未压缩数组的基本声明语法为:

pYYBAGPkltyARoU6AABDz2kcx8U818.png

数组的维度定义了数组可以存储的元素总数。未压缩的数组可以用任意数量的维度声明,每个维度存储指定数量的元素。声明数组维度有两种编码样式:显式地址和数组大小。

显式地址样式指定方括号之间数组维度的起始地址和结束地址,格式为:

poYBAGPkluiAHYjdAABLYMhSKu8679.png

Start_address 和 end_address可以是任何整数值,数组可以以地址0、地址512或被建模硬件所需的任何地址开始。起始地址和结束地址之间的范围表示数组维度的大小(元素数)。

数组大小样式定义要存储在方括号中的元素数(类似于C语言数组声明样式)。

[size]

使用array_size样式,起始地址始终为0,结束地址始终为size-1

以下是一些未压缩的数组声明示例:

pYYBAGPklveAOzaNAAErTm7DB8w054.png

前面的mem声明是16位logic变量的一维数组。一维阵列有时被称为内存阵列,因为它通常用于仿真硬件内存设备(如RAMROM)的存储。

访问数组元素

可以使用数组索引引用未压缩数组的每个元素,索引紧跟在数组名称之后,并且位于方括号中,多维数组需要多组方括号才能从数组中选择单个元素:

poYBAGPklwSAL7ouAACkUpyzHdg003.png

数组索引也可以是网络或变量的值,如下一个示例所示:

pYYBAGPklw-AOmduAABaumsTmVU645.png

复制数组(阵列)

如果两个数组(阵列)具有相同的布局,则可以使用赋值语句将一个未压缩的数组(阵列)复制到另一个未压缩的数组(阵列)。也就是说,这两个数组(阵列)必须存储相同向量大小的相同数据类型,必须具有相同的维度数,并且每个维度的大小都相同-

数组(阵列)复制会将源数组(赋值的右侧)的每个元素复制到目标数组(阵列)(赋值的左侧)中相应的元素。两个数组(阵列)的索引编号不需要相同。数组(阵列)的布局和类型必须完全匹配。

poYBAGPklxuAc-e5AACX3FRLMQU468.png

与复制数组(阵列)的方式类似,如果两个切片的布局相同,则可以将数组(阵列)的一部分(称为数组(阵列)切片)复制到另一个数组(阵列)的切片。切片是数组(阵列)一维内的一个或多个连续编号的元素。

在成为SystemVerilog之前,最初的Verilog语言将对数组(阵列)的访问限制为一次只能访问数组中的一个元素。不允许对数组(阵列)的多个元素进行数组(阵列)复制和读/写操作。

数组列表赋值

可以为未压缩的数组或数组的一个片段分配一个值列表,这些值包含在每个数组维度的’{and}大括号之间。

poYBAGPklyWACh76AADNmK5RTTU259.png

列表语法类似于在C中为数组指定值列表,但在大括号前添加了撇号使用’-“作为开头分隔符”表明,所包含的值是表达式列表,而不是SystemVerilog连接运算符(后面会详细介绍)。

还可以使用嵌套列表为多维数组分配值列表。嵌套的列表集必须与数组的维度完全匹配。

poYBAGPklzCAQXHxAABqckj8mNY761.png

此数组分配相当于以下各项的单独分配:

pYYBAGPklz-AMb7LAABxb85n08g517.png

通过指定默认值,可以为未压缩数组的所有元素指定相同的值。默认值是使用’{default:}指定的,如以下代码段所示:

poYBAGPkl0uANj8TAADk6ZFXV-4272.png

数组元素的位选择和部分选择

可以从数组元素向量中选择一位或一组位。必须首先选择数组的单个元素,然后进行位选择或部分选择。

pYYBAGPkl1SAUaVMAADbUI1bIT0540.png

通过端口将数组传递给任务和函数。任何类型和任意数量的未压缩数组都可以通过模块端口传递,也可以传递到任务和函数参数。端口或任务/函数形式参数也必须声明为数组,端口或参数数组必须与要传递的数组具有相同的布局(与数组复制的规则相同)。

pYYBAGPkl1-AUB43AADxwRPiVhI115.png

最初的Verilog语言只允许简单的向量通过模块端口,或传递到任务或函数参数。要传递上述示例中表数组的值,需要256个端口,数组的每个元素一个端口。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 网络
    +关注

    关注

    14

    文章

    7514

    浏览量

    88620
  • Verilog
    +关注

    关注

    28

    文章

    1343

    浏览量

    109978
  • System
    +关注

    关注

    0

    文章

    165

    浏览量

    36881
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28328
收藏 人收藏

    评论

    相关推荐

    C语言中初始化的局部变量到底是多少

    C语言中,初始化的局部变量到底是多少?
    发表于 10-21 14:42 1954次阅读

    变量 数组

    在AVR中,怎么定义一个变量数组?使得这个数组可在程序中给其赋值例:我在编程中定义了全局变量数组:volatile unsigned int
    发表于 05-05 16:29

    数组中添加变量

    我想把一个变量的值输入到一个一维数组中,该怎么做呢?例如:数组的第二个值就代表输入的变量值吧
    发表于 05-17 14:04

    labview的data dashboard中的下拉控件如何定义对应的网络变量

    目前遇到的问题是data dashboard中想用下拉控件功能,但是在labview中如果新建一个字符串数组网络变量的话,是可以搜到,但是仅仅是item string里有,和字符串数组关联上之后,并不能起到控制的作用,仅仅会显示
    发表于 07-15 07:24

    压缩的彩条信号行频图

    压缩的彩条信号行频图
    发表于 07-31 12:31 831次阅读

    Java数组不始化的使用方法

    数组是大多数编程语言提供的一种复合结构,如果程序需要多个类型相同的变量时,就可以考虑定义一个数组。Java语言的数组变量是引用类型的
    发表于 04-03 15:32 4次下载

    JAVA教程之一维数组和二维数组的介绍和应用说明

    声明一个数组就是要确定数组名、数组的维数和数组元素的数据类型。数组名是符合Java标识符定义规则的用户自定义标识符,它是
    发表于 01-16 11:02 0次下载
    JAVA教程之一维<b class='flag-5'>数组</b>和二维<b class='flag-5'>数组</b>的介绍和应用说明

    指针与数组的详细资料和实例程序免费下载

    指针变量来访问数组中任一元素,通常将数组的首地址称为数组的指针,而将指向数组元素的指针变量称为指
    发表于 11-05 17:07 4次下载
    指针与<b class='flag-5'>数组</b>的详细资料和实例程序免费下载

    单片机的常量和变量数组的详细资料说明

    本文档的主要内容详细介绍的是单片机的常量和变量数组的详细资料说明包括了:单片机的常量,单片机的变量,构造类型:数组,构造类型:结构体,构造类型:指针
    发表于 12-11 17:36 13次下载
    单片机的常量和<b class='flag-5'>变量</b>与<b class='flag-5'>数组</b>的详细资料说明

    数组中的变量取值范围如何进行纠正

    本文档的主要内容详细介绍的是数组变量取值范围如何进行纠正。
    发表于 12-17 17:08 4次下载

    网络变量压缩数组

    数组的维度定义了数组可以存储的元素总数。压缩数组可以用任意数量的维度声明,每个维度存储指定数量的元素。声明
    的头像 发表于 05-20 10:14 1170次阅读

    DECL:对变量数组和常数进行声明

    如果 CHAR 类型数组的所有数组元素都拥有相同的字符串,则不必单独初始化每个数组元素。忽略右侧的数组下标。(对于一维数组下标,不写下标。)
    的头像 发表于 07-10 10:27 3133次阅读

    HDLBits: 在线学习SystemVerilog(三)-Problem 10-14

    集合中的每个网络变量称为数组元素。压缩数组的每个元素的类型、数据类型和向量大小都完全相同。每
    的头像 发表于 08-24 14:58 1240次阅读

    C语言数组元素的指针

    C语言调用函数时虚实结合的方法都是采用“值传递”方式,当用变量名作为函数参数时传递的是变量的值,当用数组名作为函数参数时。 由于数组名代表的是
    的头像 发表于 03-10 14:45 833次阅读

    PHP中数组的使用方法!

    PHP中数组的使用方法! PHP是一种广泛使用的网络编程语言,它的数组功能非常强大且灵活。数组是一种数据结构,它允许我们在单个变量中存储多个
    的头像 发表于 01-12 15:11 502次阅读