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

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

3天内不再提示

数字硬件建模SystemVerilog-结构体

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2022-06-30 09:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

ad48a850-f80c-11ec-ba43-dac502259ad0.png

结构体

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

结构体复制

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

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

ad5d799c-f80c-11ec-ba43-dac502259ad0.png

压缩和非压缩结构体

默认情况下,结构体会被非压缩的。这意味着结构体的成员被视为独立变量或常量,并以一个共同的名称分组在一起。SystemVerilog没有指定软件工具应该如何存储非压缩结构体的成员。不同的软件工具具对于结构体的存储分布也是不同的。

通过使用关键字packed,将结构体显式声明为压缩结构体。

ad70cfc4-f80c-11ec-ba43-dac502259ad0.png

压缩结构体以与向量相同的形式将结构体的所有成员存储为连续位。结构体的第一个成员是向量最左边的字段。结构体中最后一个成员的最右边的位是向量的最低有效位,编号为位0。如图4-2所示。

ad8710c2-f80c-11ec-ba43-dac502259ad0.png

图4-2:压缩结构体存储为向量

压缩结构体的所有成员都必须是整数值。整数值是可以表示为向量的值,例如byte、int和使用bit或logic类型创建的向量。如果结构体的任何成员不能表示为向量,则该结构体不能被压缩。这意味着压缩结构体不能包含实数或短实数变量、非压缩结构体、非压缩联合体体或非压缩的数组。

引用压缩结构体和结构体成员。压缩结构体可以复制,或分配一个结构体表达式值列表,方法与非压缩结构体相同。压缩结构体的成员可以通过成员名称引用,方式与非压缩结构体相同。

压缩结构体也可以被视为一个向量。因此,除了结构体分配,向量值还可以分配给压缩结构体

ad9eaf84-f80c-11ec-ba43-dac502259ad0.png

向量赋值是合法的,因为赋值左边的结构体成员已压缩在一起,形成一组连续的位,方式与向量相同。因为压缩结构体存储为一组连续的位,所以对压缩结构体执行向量操作也是合法的,包括位选择和部分选择。以下两个赋值都将分配给data_word的tag成员:

adb4bff4-f80c-11ec-ba43-dac502259ad0.png

可以在向量上执行的数学运算、逻辑运算和任何其他运算也可以在压缩结构体上执行。

有符号压缩结构体。压缩结构体可以用signed和unsigned关键字声明。当在运算或关系运算中用作向量时,这些修饰符会影响整个结构体的识别方式。它们不会影响结构体成员的识别方式。结构体的每个成员都被视为有符号或无符号,这取决于该成员的类型声明。压缩结构体的部分选择是无符号的,与向量的部分选择相同。

adcd0686-f80c-11ec-ba43-dac502259ad0.png

通过端口传递结构体

自定义结构体可以通过模块和接口的端口传递,结构体必须首先使用 typedef 定义为用户自定义数据类型,然后才允许将模块或接口的端口声明为结构体类型。

ade708c4-f80c-11ec-ba43-dac502259ad0.png

非压缩的结构体必须是自定义结构体,才能通过端口传递该结构体。与端口的连接必须是与端口类型完全相同的结构体。也就是说,端口和端口两侧的连接都必须从相同的typedef定义声明。此限制仅适用于非压缩结构体。通过模块端口的压缩结构体被视为向量。端口的外部连接可以是相同类型的压缩结构体,也可以是任何类型的向量。

通过将任务或函数参数声明为结构体类型,自定义结构体也可以作为参数传递给任务或函数。

adfc7dbc-f80c-11ec-ba43-dac502259ad0.png

当调用一个任务或函数时,如果该任务或函数有一个非压缩的结构体作为正式参数菜单,则必须将一个完全相同类型的结构体传递给该任务或函数。压缩结构体形式参数被视为向量,可以传递给任何类型的向量。

传统的Verilog与结构体

最初的Verilog语言没有一种方便的机制来将常见信号收集到一个组中。在传统的Verilog样式的模型中,工程师必须使用特殊的分组方法,例如命名约定,其中一组中的每个信号都以一组公共字符开始或结束。最初的Verilog语言也无法通过模块端口或任务和函数传递信号集合,每个信号都必须通过单独的端口或参数传递。

在原始Verilog语言中添加结构体是一种强大的RTL建模构造,反之亦然。它提供了一种更简洁、更直观、更可重用的复杂模型功能建模方法。包中定义的自定义结构体可以在多个模块中重复使用,也可以在用于验证RTL模型的验证测试台中重复使用。

综合指导

非压缩结构体和压缩结构体都是可综合的。综合工具支持结构体通过模块端口传递 , 也支持作为输入或输出传递给任务和函数 , 也支持使用成员名和值的列表对结构体进行赋值。

综合编译器可能比压缩结构体更好地优化非压缩结构体。非压缩结构体允许软件工具确定存储或实现每个结构体成员的最佳方式,而压缩结构体则决定如何组织每个成员。

ae189c40-f80c-11ec-ba43-dac502259ad0.jpg

审核编辑 :李倩

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

    关注

    0

    文章

    615

    浏览量

    29370
  • 控制信号
    +关注

    关注

    0

    文章

    200

    浏览量

    12595
  • 结构体
    +关注

    关注

    1

    文章

    131

    浏览量

    11300

原文标题:SystemVerilog-结构体(二)

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    共用声明

    共用也称联合体。 和结构还是有点像: union 共用名称 { 成员1; 成员2; 成员3; }; 但是两者有本质的不同。共用
    发表于 12-05 07:24

    为什么不建议用匿名结构

    说起匿名结构,想必大家第一感觉就是看着好高大上的名字,但实际上也就那样。 typedef struct { union { struct { uint8_t bit_0:1
    发表于 12-04 07:39

    C语言结构使用

    有时候需要将不同类型的数据组合为一个整体,以便于引用。例如,一名学生有学号、姓名、性别、年龄等属性,如果针对每个属性都单独定义一个变量,那么当有多名学生时变量就难以分清。结构就是用来管理不同类
    发表于 11-12 08:30

    如何利用三维建模加速FCB-CR8530的定制化开发?案例与工具详解

    领域。然而,传统开发流程中,硬件设计、结构验证与软件调试往往需要多次迭代,导致周期长、成本高。三维建模技术的引入,为FCB-CR8530的定制化开发提供了全新路径,通过数字化仿真与快速
    的头像 发表于 07-22 16:14 420次阅读

    定义IO初始化结构

    由上述IOPORT相关功能的枚举类型我们可以知道,在对IOPORT模块进行初始化时需要根据情况配置它们。因此我们定义一个IOPORT初始化的结构类型IOPORT_Init_t,它的成员包括了由上述所有枚举类型所声明的变量,因此该结构
    的头像 发表于 07-16 16:26 1107次阅读

    VirtualLab Fusion应用:Herriott池的建模

    。Herriott单元是这种系统的一个例子,其特点是使用两个球面反射镜,在其中一个球面反射镜上钻一个离轴孔,以允许光束进出。镜子的曲率改变了光束的方向并控制了它的发散。在此用例中,我们用光学建模和设计软件
    发表于 06-11 08:52

    渗压计在混凝土结构中的安装指南

    在现代土木工程和岩土工程中,渗压计是监测混凝土结构体内孔隙水压力变化的重要工具。南京峟思公司生产的渗压计因其高精度和可靠性而被广泛应用于各种工程监测项目中。一、渗压计在混凝土结构中的应用价值渗压计
    的头像 发表于 05-28 10:55 383次阅读
    渗压计在混凝土<b class='flag-5'>结构</b><b class='flag-5'>体</b>中的安装指南

    索尼FCB-ER8530:三维建模与视觉感知的跨界融合

    数字化浪潮中,三维建模技术正重塑工业设计、文化遗产保护与智慧城市管理等领域,而索尼FCB-ER8530一化摄像机模组凭借其4K超高清成像与智能感知能力,成为这一进程中的关键硬件支撑
    的头像 发表于 05-19 17:30 442次阅读

    GLAD应用:全息光栅模拟

    用于模拟全息记录介质中形成的梯度折射率分布。全息结构一旦形成,就可以在传输过程中将一束入射光波逐渐转换成形成体全息结构的另一束光波。两束光波之间的能量传递转换效率与全息
    发表于 05-15 09:32

    VirtualLab应用:傅科刀口测试的建模

    建模任务 系统构建模块——抛物面镜 系统构建模块 – 球面镜 系统构建块 – 光阑 系统构建模块——理想准直透镜 系统中应用了理想化的透镜功能,以确保刀口后视场的准直。
    发表于 04-26 10:37

    Adams多动力学仿真解决方案全面解析

    Adams/Controls机电液控系统联合仿真机器人、航空航天 Adams/Flex柔性动力学分析轻量化结构设计 Adams/View参数化建模与可视化前处理概念设计阶段验证 三、关键技术
    发表于 04-17 17:24

    基于VT系统的MCU硬件在环建模与仿真应用分析

    在新能源汽车行业快速发展的背景下,电机控制器(MCU)作为核心部件,其开发和测试的重要性日益增加。为了在开发早期阶段快速验证应用层算法功能及基础软件质量,硬件在环(HIL)测试技术应运而生。本文分析
    的头像 发表于 04-16 10:07 1097次阅读
    基于VT系统的MCU<b class='flag-5'>硬件</b>在环<b class='flag-5'>建模</b>与仿真应用分析

    C语言中结构与联合体的深度解析:内存布局与应用场景

    一、基础概念与核心差异 1.1 结构(Struct)的本质 **结构是C语言中实现数据封装的基石,其核心特征在于内存独立性。每个成员变量在内存中按声明顺序依次排列,形成连续的内存块
    发表于 04-08 09:18

    VirtualLab Fusion应用:泰伯效应的建模

    摘要 Talbot效应是一种众所周知的近场衍射效应。当周期结构(例如,一个光栅)被准直的光照射时,在该光栅后面的特定规则间隔,可以观察到其重建图像。分隔这两个平面的具体距离被称为Talbot距离,以
    发表于 02-26 08:52

    VirtualLab Fusion应用:用于抑制高衍射级次的角滤波光栅

    ,以抑制不需要的高衍射阶数。为此,首先分析了光栅的角度灵敏度。 最后,通过使用 VirtualLab Fusion 进行仿真,显示了对不期望的高衍射级次的抑制效果。 建模任务 volume
    发表于 12-09 12:51