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

    文章

    1624

    浏览量

    49109
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28361
  • 数组
    +关注

    关注

    1

    文章

    417

    浏览量

    25939

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

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

收藏 人收藏

    评论

    相关推荐

    指针数组和二维数组有没有区别

    指针数组和二维数组有没有区别?比如这样的两个代码。 int main(){ char *s1[] = { "hello", "world", "total" }; char s2[][6
    的头像 发表于 11-24 11:12 143次阅读

    C语言数组应用计算机导论A第6讲:数组

    C语言数组应用计算机导论A第6讲:数组
    发表于 11-20 15:33 0次下载

    【BearPi-Pico H3863星闪开发板体验连载】LZO压缩算法移植

    偶然的情况下,看到了代码存在没有使用的变量或者数组会导致编译报错,在仔细检查代码,修改之后编译终于过了。 不知道是否有配置把代码中使用的变量数组
    发表于 11-10 21:45

    labview字符串数组转化为数值数组

    在LabVIEW中,将字符串数组转换为数值数组是一项常见的任务,尤其是在处理数据采集、信号处理或用户输入时。 1. 理解LabVIEW的数据类型 在开始之前,了解LabVIEW中的数据类型是非
    的头像 发表于 09-04 17:47 2260次阅读

    卷积神经网络压缩方法

    ,CNN模型的参数量和计算量也随之剧增,这对硬件资源提出了严峻挑战。因此,卷积神经网络压缩方法成为了研究热点。本文将从多个角度详细介绍卷积神经网络压缩方法,包括前端
    的头像 发表于 07-11 11:46 340次阅读

    BP神经网络在处理不连续变量时的应用

    BP神经网络(Backpropagation Neural Network)是一种多层前馈神经网络,广泛应用于各种领域的数据建模和预测任务。然而,BP神经网络在处理不连续变量时可能会遇
    的头像 发表于 07-03 10:19 343次阅读

    深入探索KUKA KRL中的数组应用

    如果 CHAR 类型数组的所有数组元素都拥有相同的字符串,则不必单独初始化每个数组元素。忽略右侧的数组下标。(对于一维数组下标,不写下标。)
    的头像 发表于 04-18 10:37 1230次阅读
    深入探索KUKA KRL中的<b class='flag-5'>数组</b>应用

    鸿蒙TypeScript入门学习第11天【Array(数组)】

    数组对象是使用单独的变量名来存储一系列的值。 数组非常常用。
    的头像 发表于 04-09 14:38 1135次阅读
    鸿蒙TypeScript入门学习第11天【Array(<b class='flag-5'>数组</b>)】

    基于门控线性网络(GLN)的高压缩比无损医学图像压缩算法

    实现基于门控线性网络(GLN)的高压缩比无损医学图像压缩算法,以提高医学图像存储和分发系统的效率。与“传统”的基于上下文的数据压缩算法相比,基于GLN的系统使用一组不同的上下文模型。
    的头像 发表于 04-08 10:29 660次阅读
    基于门控线性<b class='flag-5'>网络</b>(GLN)的高<b class='flag-5'>压缩</b>比无损医学图像<b class='flag-5'>压缩</b>算法

    数组和链表在内存中的区别 数组和链表的优缺点

    数组和链表在内存中的区别 数组和链表的优缺点  数组和链表是常见的数据结构,用于组织和存储数据。它们在内存中的存储方式以及优缺点方面存在一些显著的差异。本文将详细探讨这些差异以及它们的优缺点。 1.
    的头像 发表于 02-21 11:30 1023次阅读

    TC277如何指定该全局数组变量的存储地址的对齐方式?

    定义全局数组变量,如何指定该全局数组变量的存储地址的对齐方式
    发表于 02-19 07:37

    高性能无损数据压缩FPGA IP,LZO无损数据压缩IP

    LZOAccel-C是一个无损数据压缩引擎的FPGA硬件实现,兼容LZO 2.10标准。 Core接收压缩的输入数据块,产生压缩后的数据块。Core使用合适的头和尾封装了
    的头像 发表于 01-25 13:39 468次阅读
    高性能无损数据<b class='flag-5'>压缩</b>FPGA IP,LZO无损数据<b class='flag-5'>压缩</b>IP

    Harmony 鸿蒙页面级变量的状态管理

    页面级变量的状态管理 @State、@Prop、@Link、@Provide、@Consume、@ObjectLink、@Observed和@Watch用于管理页面级变量的状态。 @State
    的头像 发表于 01-25 10:42 589次阅读
    Harmony 鸿蒙页面级<b class='flag-5'>变量</b>的状态管理

    PHP中数组的使用方法!

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

    labview怎么查数组中相同元素的个数

    要查找LabVIEW中数组中相同元素的个数,可以使用以下步骤: 创建一个包含要查找的数值的数组。这可以通过手动输入数组元素或从文件/其他数据源导入数组实现。 使用“For Loop”结
    的头像 发表于 12-28 16:42 3493次阅读