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

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

3天内不再提示

SystemVerilog中至关重要的结构体和自定义类型

jf_78858299 来源:芯片学堂 作者:JKZHAN 2023-01-21 17:18 次阅读

在上一篇文章《SystemVerilog中至关重要的的数据类型》中,介绍了枚举类型的本质和使用语法。本文接着介绍SV中同样不可忽略的结构体(structure)和自定义类型(typedef),最后也会给出一小段涵盖绝大部分语法点的例程。个人觉得编程语言的熟练掌握更多在平时练习和思考,语法忘掉了随时可以查阅。

认识结构体

结构体(structure)是一种可以包含不同数据类型元素的集合类型。这一点跟数组、队列等集合类型是不一样的,数组和队列只能包含相同数据类型的元素。结构体在引用的时候,可以对这些元素进行整体引用,也可以通过元素名称来对元素进行单独引用。

基于这个特性,结构体通常可以用来表征一个包含了诸多不同类型属性的对象。比如,当我们想要表征一个人的所有属性的时候,名字元素可以用string类型,年龄元素可以用int类型,存款元素可以用real类型等等,最后可以通过对整体引用来获得一个人的所有属性,也可以通过元素名称来获得单个属性。

另一个栗子,可以使用结构体来定义某个寄存器的结构。在结构体类型定义的时候,我们可以在内部使用logic [n:m]等基本数据类型来定义寄存器的不同域段。这样一来,我们不但可以对寄存器进行整体引用,又可以使用元素名来很方便地读写寄存器的各个域段。

讲完结构体的逻辑结构,下面来看看结构体的物理结构。

在内存存储一个结构体的时候,SV提供了packed关键字用来区分合并(packed)和非合并(unpacked)存储方式。“合并”这个概念在另一篇文章中也有涉及。合并的结构体,其元素会被无间隙的存放到一块连续的内存空间上。而非合并的结构体,其物理结构一般依赖于C编译器。SV默认是非合并的,这是为了提高内存空间的利用率,如果用户想要用合并的,需要在struct关键字后面加上packed。

合并的结构体是有不少用处的。第一,合并结构体的整体可以被当成一个向量来看待,这样一来,合并结构体的赋值、读取和数值计算上多了灵活性;第二,合并结构体可以通过在packed关键字后面加signed/unsigned来指定为有无符号类型,排在第一个位置的元素最高位为符号位,相比之下,非合并的结构体是不能被指定为有符号类型的。

结构体的使用

SV结构体的特性跟C语言基本一致,但在语法上有差别。比如在C语言中,定义一个结构体类型,是在struct关键字后面加上structure tag名来作为类型名称;而在SV中,统一使用typedef来定义结构体类型名称。

这里穿插介绍一下typedef。typedef是SV中提供用来重定义类型名的关键字,一般也叫做用户自定义类型。其最大的好处就是可以将一些“又臭又长”的类型定义成简短的类型名,特别是在一些复杂的testbench中会经常遇到。使用typedef可以提高编程效率,也可以通过新的类型名来提高代码的可读性。

看看代码吧

下面代码和注释总结了结构体的使用方法,个人觉得掌握例程中的内容对工作来说已经完全足够啦,但例程同样没有经过编译哈。

图片

参考文献

[1] IEEE Standard Association. "IEEE Standard for SystemVerilog-Unified Hardware Design, Specification, and Verification Language." (2013).

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

    关注

    8

    文章

    6513

    浏览量

    87609
  • Verilog
    +关注

    关注

    28

    文章

    1327

    浏览量

    109311
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66807
收藏 人收藏

    评论

    相关推荐

    LabVIEW自定义控件

    。如果修改该控键,那么使用该控键的实例也将会做相应的改动。如 果选择 了自定义类型,那么控件和实例的数据类型是 保持一 致的,比如自定义
    发表于 01-07 10:57

    LabVIEW自定义数据类型

    一直只知道自定义控件,不知道自定义数据类型,直到有一天看到别人的后面板某控件左上角有个黑色小三角形,像这样,才知道有自定义数据类型,类似于C
    发表于 03-24 17:24

    用户自定义结构数据怎么存储成VARIANT类型

    将用户自定义的C结构数据存储成VARIANT类型,需要时再将VARIANT类型转为用户自定义结构
    发表于 08-02 07:08

    怎么将用户自定义的C结构数据存储成VARIANT类型

    将用户自定义的C结构数据存储成VARIANT类型,需要时再将VARIANT类型转为用户自定义结构
    发表于 08-02 07:08

    自定义头文件结构变量总是赋值无效的原因?

    自定义了一个头文件,里面包含一个结构,#ifndef Parameterdef#define Parameterdef#endif//Global parameters and variables
    发表于 07-20 14:10

    请问自定义结构u16 RESERVEDi起什么作用?

    STM32的自定义结构,存在u16RESERVEDi(i为一个整数索引值)的作用是什么,我是初学者,对这不是很明白,希望大家帮忙!
    发表于 08-24 08:00

    嵌入式ARM开发之自定义数据类型相关资料推荐

    自定义数据类型变量集合常量集合重命名struct(结构)元素地址连续排列union(共用)元素共用起始地址enum(枚举)被命名的整型常
    发表于 12-14 07:19

    在OPC UA Server添加自定义的变量类型是什么

    文章目录简介目标阅读基础快速阅读环境说明相关软件创建工程Server_Variable_Type创建普通Qt工程添加opcua62541库到Qt工程在Server添加自定义2D空间坐标类型添加相关
    发表于 03-01 06:19

    1602自定义字符

    1602液晶能够显示自定义字符,能够根据读者的具体情况显示自定义字符。
    发表于 01-20 15:43 1次下载

    自定义视图组件教程案例

    自定义组件 1.自定义组件-particles(粒子效果) 2.自定义组件- pulse(脉冲button效果) 3.自定义组件-progress(progress效果) 4.
    发表于 04-08 10:48 14次下载

    ArkUI如何自定义弹窗(eTS)

    自定义弹窗其实也是比较简单的,通过CustomDialogController类就可以显示自定义弹窗。
    的头像 发表于 08-31 08:24 1442次阅读

    SystemVerilog至关重要的的数据类型

    对于刚接触SV的小伙伴来说,SV有几种不怎么能引起关注,但在实际工作中又经常会用到的数据类型。它们就是枚举(enumeration)、结构体(structures)和自定义类型(typ
    的头像 发表于 01-21 17:14 613次阅读
    <b class='flag-5'>SystemVerilog</b>中<b class='flag-5'>至关重要</b>的的数据<b class='flag-5'>类型</b>

    用户自定义类型

    SystemVerilog还为工程师定义新的数据类型提供了一种机制。用户定义的数据类型允许从现有数据类型
    的头像 发表于 02-09 14:53 790次阅读
    用户<b class='flag-5'>自定义</b><b class='flag-5'>类型</b>

    博途PLC1200/1500PLC用户自定义数据类型(UDT)

    用户自定义的数据类型可以包含基本数据类型(例如,INT bool string),以及 数组 ,结构体,以及PLC的专有数据类型等,而且用户
    发表于 04-20 09:46 5次下载
    博途PLC1200/1500PLC用户<b class='flag-5'>自定义</b>数据<b class='flag-5'>类型</b>(UDT)

    labview超快自定义控件制作和普通自定义控件制作

    labview超快自定义控件制作和普通自定义控件制作
    发表于 08-21 10:32 5次下载