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

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

3天内不再提示

SystemVerilog的结构体-1

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

数字硬件建模SystemVerilog-结构体(一)

poYBAGPkn2GALZ3EAAThsbJ2QM4493.png

pYYBAGPkn26AfnHsAAG4PgudtCo769.png

结构体

结构体用于将多个变量组合在一个通用名称下。设计通常具有逻辑信号组,例如总线协议的控制信号,或状态控制器内使用的信号。结构体提供了将这些相关变量捆绑在一起的方法。结构体中的所有变量都可以单个赋值,或者每个变量都可以单独赋值。结构体包可以复制到具有相同定义的另一个结构体,并通过模块端口、任务或函数进出。

结构体声明

结构体是使用struct关键字声明的,类似于C语言。struct关键字后面跟着一个开始的大括号( { )变量声明列表,结束的大括号(}),然后是结构体的名称。

poYBAGPkn3qAP5SDAADbXLheCUk319.png

一个结构体可以将任意数量的变量数据类型捆绑在一起,用户自定义类型、Parameter和localparam常量也可以包含在一个结构体中,结构体中的Parameter不能像模块中的Parameter那样重新定义,结构体中的参数被视为localparam。

结构体成员赋值

结构体中的变量称为结构体成员。每个成员都有一个名称,可用于从结构体中选择该成员。使用结构体的名称引用结构体成员,后跟句点(.)然后是成员的名字。这与C中的语法相同。例如,要为前面结构体的address成员赋值,引用为:

pYYBAGPkn4WAXfXxAABYbLMYmVk544.png

结构体不同于数组,因为数组是所有类型和大小相同的元素的集合,而结构体是不同类型和大小的变量和常量的集合。另一个区别是,数组的元素是通过在数组中使用索引来引用的;结构体的成员是通过使用成员名称来引用的。

整个结构体赋值

可以为整个结构体指定一个结构体表达式。结构体表达式是使用逗号分隔的值列表形成的,这些值包含在标记’{}之间,这与将一组值分配给数组的方式相同,大括号必须包含结构体中每个成员的值。例如:

poYBAGPkn4-AU3dEAAC3H_R3VVc987.png

结构体表达式中的值必须按照在结构体中定义的顺序列出,如前一示例所示。或者,结构体表达式可以指定要为其赋值的结构体成员的名称,其中成员名称和值用冒号(:)分隔。结构体表达式中的成员名称称为tags。指定成员名称后,表达式列表可以是任意顺序。

pYYBAGPkn5iAJ6Z_AAA5CM4b_sI096.png

在同一个结构体表达式中混合按名称和按顺序赋值是非法的。

结构体表达式中的默认值。结构体表达式可以通过指定默认值为一个结构体的多个成员指定值,默认值是使用default关键字指定的。

poYBAGPkn6SAVwPZAAAwNpLtlmA137.png

结构体表达式还可以包含对特定结构体成员的混合赋值,以及对所有其他成员指定默认值。

pYYBAGPkn7eALnUUAAAleJsWGV0098.png

结构体中的枚举数据类型。前两个带有默认值的示例存在语义错误,分配给结构体成员的默认值必须与成员的数据类型兼容。由于大多数SystemVerilog变量都是弱类型的,因此几乎所有默认值都是兼容的。然而,枚举数据类型变量的类型更强。对枚举数据类型变量的赋值必须是其枚举列表中的标签,或者是同一枚举数据类型定义的另一个枚举变量。

上述instruction_word 的两个赋值语句试图将opcode的默认值赋值为0。这是opcode的非法值,它是一个opcode_t枚举数据类型变量(opcode_t的typedef定义是之前枚举变量章节)。当结构体的成员是枚举数据类型变量时,结构体表达式必须为该成员指定合法的显式值。可以为所有其他成员指定默认值。例如:

pYYBAGPkn8WAWKOQAABcJUyV-5w537.png

自定义和匿名结构体

用户自定义类型可以使用typedef关键字从结构体中创建。将结构体声明为用户自定义类型不会分配任何存储空间。在使用该结构体之前,必须声明该用户自定义类型的网络或变量。

pYYBAGPkn9CAP72vAADS_DFarQA142.png

不使用typedef的结构体被定义为匿名结构体。使用typedef声明的结构体被视为自定义结构体。匿名结构体和自定义结构体都可以在模块中定义,但这些本地(局部)定义只能在该模块中使用。自定义结构体也可以在包中定义,并导入到需要结构体定义的设计块中。包中定义的自定义结构体可用于多个模块和验证测试台。

结构体复制

一个自定义结构体可以复制到另一个自定义结构体,只要这两个结构体是从同一个自定义结构体定义声明的。以下示例使用了上节中所示的结构体定义和声明。

匿名结构体不能作为一个整体复制,但可以一次复制一个成员:

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

    关注

    0

    文章

    80

    浏览量

    14736
  • 控制信号
    +关注

    关注

    0

    文章

    118

    浏览量

    11837
  • 结构体
    +关注

    关注

    1

    文章

    125

    浏览量

    10750
收藏 人收藏

    评论

    相关推荐

    [启芯公开课] SystemVerilog for Verification

    学快速发展,这些趋势你了解吗?SystemVerilog + VM是目前的主流,在未来也将被大量采用,这些语言和方法学,你熟练掌握了吗?对SoC芯片设计验证感兴趣的朋友,可以关注启芯工作室推出的SoC芯片
    发表于 06-10 09:25

    systemverilog学习教程

    systemverilog的一些基本语法以及和verilog语言之间的区别。
    发表于 04-01 14:24

    漫谈C语言结构

    我放在下面。  在此,我会围绕以下2个问题来分析和应用C语言结构:  1. C语言中的结构有何作用  2.
    发表于 11-15 15:59

    【干货】c语言基础语法——结构

    1、关于C语言结构的引入在实际问题中有时候我们需要几种数据类型一起来修饰某个变量。例如一个学生的信息就需要学号(字符串),姓名(字符串),年龄(整形)等等。这些数据类型都不同但是他们又是表示一个
    发表于 06-03 17:10

    结构与共用的区别

    转载重点:共用的所有成员占用同一段内存,修改一个成员会影响其余所有成员。图形分析影响过程通过前面的讲解,我们知道结构(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员。在C
    发表于 07-20 06:57

    GPIO结构定义

    #include "stm32f4xx.h"#include "usart.h"void My_USART1_Init(void){//GPIO结构定义 GPIO_InitTypeDefGPIO_InitStructure;/
    发表于 08-04 07:47

    使用结构的主要作用

    结构作用(STM32)来源:正点原子MDK 中很多地方使用结构以及结构指针,下面总结一下其
    发表于 08-24 07:54

    结构变量的定义与使用变量访问结构成员

    知识点回顾关于找最大公共子串的两种解题方法结构的定义(3种)结构变量的定义与使用变量访问结构
    发表于 12-17 07:10

    消息队列传递结构指针和结构异同

    FreeRTOS消息队列 传递结构指针和结构异同1 消息队列传递结构
    发表于 02-11 07:02

    SystemVerilog的断言手册

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    发表于 07-22 14:12 20次下载

    基于事件结构SystemVerilog指称语义

    本文利用形式化的方法对SystemVerilog的指称语义进行研究,采用EBES(extendedbundle event structure)作为抽象模型,以便更好的描述SystemVerilog真并发的特点。我们的主要工作是:首先,
    发表于 12-22 14:01 12次下载

    数字硬件建模SystemVerilog-结构

    默认情况下,结构体会被非压缩的。这意味着结构体的成员被视为独立变量或常量,并以一个共同的名称分组在一起。SystemVerilog没有指定软件工具应该如何存储非压缩结构体的成员。不同的
    的头像 发表于 06-30 09:54 754次阅读

    数字硬件建模SystemVerilog结构体表达式

    结构体用于将多个变量组合在一个通用名称下。设计通常具有逻辑信号组,例如总线协议的控制信号,或状态控制器内使用的信号。
    的头像 发表于 07-01 17:32 846次阅读

    SystemVerilog中可以嵌套的数据结构

    SystemVerilog中除了数组、队列和关联数组等数据结构,这些数据结构还可以嵌套。
    的头像 发表于 11-03 09:59 1229次阅读

    SystemVerilog结构体-2

    结构体用于将多个变量组合在一个通用名称下。设计通常具有逻辑信号组,例如总线协议的控制信号,或状态控制器内使用的信号。结构体提供了将这些相关变量捆绑在一起的方法。结构体中的所有变量都可以单个赋值,或者每个变量都可以单独赋值。
    的头像 发表于 02-09 15:32 527次阅读
    <b class='flag-5'>SystemVerilog</b>的<b class='flag-5'>结构</b>体-2