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

    文章

    115

    浏览量

    14832
  • 控制信号
    +关注

    关注

    0

    文章

    162

    浏览量

    11943
  • 结构体
    +关注

    关注

    1

    文章

    129

    浏览量

    10822
收藏 人收藏

    评论

    相关推荐

    systemverilog学习教程

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

    漫谈C语言结构

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

    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 Assertion Handbo

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

    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次下载

    共用结构的区别

    在c++中,结构(struct)和共用(union)是两种很相似的复合数据类型,都可以用来存储多种数据类型,但是两者还有很大的区别。 结构
    发表于 11-19 17:46 3.7w次阅读

    数字硬件建模SystemVerilog-结构

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

    SystemVerilog中可以嵌套的数据结构

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

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

    在上一篇文章《SystemVerilog中至关重要的的数据类型》中,介绍了枚举类型的本质和使用语法。本文接着介绍SV中同样不可忽略的结构(structure)和自定义类型(typedef),最后也
    的头像 发表于 01-21 17:18 1953次阅读
    <b class='flag-5'>SystemVerilog</b>中至关重要的<b class='flag-5'>结构</b><b class='flag-5'>体</b>和自定义类型

    SystemVerilog结构-2

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

    结构与指针的关系

    指针则是指向结构类型的指针,用于操作和访问结构的成员。下面我们将分别详细解释结构
    的头像 发表于 01-11 08:00 904次阅读
    <b class='flag-5'>结构</b><b class='flag-5'>体</b>与指针的关系