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

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

3天内不再提示

网络和变量的未压缩数组

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2022-05-20 10:14 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

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

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

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

2694f634-d7d6-11ec-bce3-dac502259ad0.png

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

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

26a77ee4-d7d6-11ec-bce3-dac502259ad0.png

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

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

[size]

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

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

26b89e40-d7d6-11ec-bce3-dac502259ad0.png

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

访问数组元素

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

271d1ea6-d7d6-11ec-bce3-dac502259ad0.png

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

275837fc-d7d6-11ec-bce3-dac502259ad0.png

复制数组(阵列)

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

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

27aa9128-d7d6-11ec-bce3-dac502259ad0.png

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

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

数组列表赋值

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

27e54750-d7d6-11ec-bce3-dac502259ad0.png

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

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

284c7cfe-d7d6-11ec-bce3-dac502259ad0.png

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

287a0b06-d7d6-11ec-bce3-dac502259ad0.png

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

28e0bd6a-d7d6-11ec-bce3-dac502259ad0.png

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

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

291f81bc-d7d6-11ec-bce3-dac502259ad0.png

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

294e0ec4-d7d6-11ec-bce3-dac502259ad0.png

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

审核编辑 :李倩

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

    关注

    1

    文章

    1672

    浏览量

    51895
  • 变量
    +关注

    关注

    0

    文章

    616

    浏览量

    29566
  • 数组
    +关注

    关注

    1

    文章

    420

    浏览量

    27458

原文标题:SystemVerilog(九)-网络和变量的未压缩数组

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何为 S32DS 中的特定变量(RAM、闪存、数据闪存)强制使用特定内存区域?

    数组时。 My Requirements 1. Dedicated RAM Section 我需要专门为我自己的变量分配一个特定的 RAM 部分。这些变量应放置在固定内存位置并且必须不被移动或覆盖
    发表于 04-16 06:52

    飞凌嵌入式ElfBoard-环境变量之添加修改环境变量putenv

    的一部分了,换言之,putenv()函数将设定 environ 变量(字符串数组)中的某个元素(字符串指针)指向该 string 字符串,而不是指向它的复制副本,这里需要注意!因此,不能随意修改参数
    发表于 03-26 09:22

    飞凌嵌入式ElfBoard-环境变量之获取环境变量

    列表,argv[argc]值为 NULL;env:字符串数组;其中每个元素都是环境变量的 \"名称=值\" 形式。3)示例:(通过 main()函数的env 参数获取环境变量
    发表于 03-13 08:50

    基于凌羽派的OpenHarmony北向应用开发:ArkTS语法-数据类型和变量声明

    isActive}`); console.log(`初始化变量: ${uninitializedVar}, 类型: ${typeof uninitializedVar}`); console.log(`空值
    发表于 02-26 14:24

    面向嵌入式部署的神经网络优化:模型压缩深度解析

    1.为什么需要神经网络模型压缩? 神经网络已经成为解决复杂机器学习问题的强大工具。然而,这种能力往往伴随着模型规模和计算复杂度的增加。当输入维度较大(例如长时序窗口、高分辨率特征空间)时,模型需要
    的头像 发表于 02-24 15:37 5436次阅读
    面向嵌入式部署的神经<b class='flag-5'>网络</b>优化:模型<b class='flag-5'>压缩</b>深度解析

    MinGW-w64工具集压缩包的下载

    MinGW-w64工具集压缩包的下载 这是MinGW-w64工具集压缩包的下载进度界面,文件名为x86_64-13.2.0-release-posix-seh-ucrt-rt_v11-rev0.7z
    发表于 02-07 04:59

    “明牌”对局,自变量开源模型超越pi0

    “明牌”对局,自变量开源模型超越pi0
    的头像 发表于 01-10 12:00 5738次阅读
    “明牌”对局,自<b class='flag-5'>变量</b>开源模型超越pi0

    嵌入式C语言中各变量存储位置

    的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 初始化的全局变量初始化的静态变量
    发表于 12-25 07:54

    linux的压缩和解压操作

    1、 压缩/解压操作 在开发中,很多时候会遇到某些文件要进行压缩的操作,比如文件较大不方便传输的时候,可能会考虑对文件进行压缩,以减少文件传输的时间。 比如在网络中传输文件的时候,就会
    发表于 12-23 06:56

    电能质量在线监测装置的数据压缩存储功能对数据传输速度的影响有多大?

    极端实时性场景有轻微延迟(可忽略) 。影响程度核心取决于 数据量、压缩比、传输带宽、硬件是否加速 四大变量,以下是精准量化分析: 一、核心量化对比:压缩前后传输速度差异(全场景覆盖) 以常见数据类型(暂态录波、稳态历史数据)和传
    的头像 发表于 12-11 16:45 1432次阅读
    电能质量在线监测装置的数据<b class='flag-5'>压缩</b>存储功能对数据传输速度的影响有多大?

    第7章 变量进阶与点阵LED(7.1 7.2)

    走在马路上的时候,经常会看到马路两侧有一些LED点阵的广告牌,这些广告牌看起来绚烂夺目,非常吸引人,而且还会变化很多种不同的显示方式。本章就会学习到点阵LED的控制方式,同时也会学习C语言变量的进阶
    的头像 发表于 12-10 16:25 483次阅读

    数组的初体验

    程序中也需要容器,只不过该容器有点特殊,它在程序中是一块连续的,大小固定并且里面的数据类型一致的内存空间,它还有个好听的名字叫数组。可以将数组理解为大小固定,所放物品为同类的一个购物袋,在该购 物
    发表于 11-25 08:06

    NMSIS神经网络库使用介绍

    用于存储im2col数据。 变量说明: conv1_wt, conv2_wt,conv3_wt是卷积层权重矩阵 conv1_bias, conv2_bias,conv3_bias是卷积层偏置数组
    发表于 10-29 06:08

    PLC中Static和Temp变量的区别

    大家好,收到粉丝投稿,让博主讲下Static变量和Temp变量的区别,新入行的兄弟可能会对这两个概念不太能理解。
    的头像 发表于 09-24 14:51 1610次阅读
    PLC中Static和Temp<b class='flag-5'>变量</b>的区别

    低内存场景下的高效压缩利器:FastLZ压缩库应用实践指南

    在资源受限环境中,数据压缩既要追求速度又要节省内存。本文聚焦FastLZ压缩库,深入探讨其在低内存场景下的应用实践,通过解析其核心算法与优化策略,带您掌握如何利用该库实现快速压缩,满足嵌入式系统、物
    的头像 发表于 07-22 15:13 479次阅读
    低内存场景下的高效<b class='flag-5'>压缩</b>利器:FastLZ<b class='flag-5'>压缩</b>库应用实践指南