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

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

3天内不再提示

SystemVerilog中至关重要的的数据类型

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

对于刚接触SV的小伙伴来说,SV有几种不怎么能引起关注,但在实际工作中又经常会用到的数据类型。它们就是枚举(enumeration)、结构体(structures)和自定义类型(typedef)。

这三种数据类型的合理应用能够处理不同逻辑结构的数据,提高代码编写效率和可读性。本文先讲枚举类型的使用语法和一些注意的点。

认识枚举类型

枚举指的是一组有限的被赋予了名字的值的集合。在默认情况下,集合中元素的数据类型是int类型,元素值的大小是从0开始的递增关系。当然,元素的数据类型和值都是可以用户自定义的。

枚举类型在日常生活中很常见,比如春夏秋冬就是表示季节的枚举集合,周一到周天就是表示星期的枚举集合。可以看出,枚举的重要作用,就是为了方便区分和使用。

打个比方,在正常交流时,我们会说现在在冬天,而不会故意去说现在是第4季。同样,当我们使用代码来描述有限集合,比如描述状态机各个状态的时候,使用名字可以大致表达不同状态的行为,代码可读性自然也就提高了。

枚举在代码中实现的功能跟使用宏类似,都可以用名字来代替数值。宏是在预处理阶段将名字换成了值,而枚举是在编译阶段将名字换成值。也就是说,枚举类型的这些名字不是变量,它们不会占据任何内存。且这些名字的有效范围是全局的,如果有变量等命名冲突了可能导致编译不过。

枚举类型的使用

SV的枚举类型声明语法跟C语言很像。如果自增的值与已经自定义的值产生冲突,会导致编译不过;如果枚举名以数字开头,也会导致编译不过。另外,SV为枚举变量还提供了一系列的内建方法(first/last/next/prev等),用来方便对枚举变量进行索引等操作。

在SV中还明确说明了枚举类型是一种强类型(strongly typed)的数据类型。如果给一个枚举变量直接赋一个数值,这个数值不管是不是在枚举范围内,都是不允许的。这种类型检查是为了防止用户乱赋值。不过,SV是允许使用显式类型转换(explicit cast)来完成这种赋值的。

此外,SV允许枚举变量写到数值表达式中进行数值计算,枚举名可以当常量使用。这个时候枚举变量会被自动转换成对应的整型数字之后,再继续完成数值计算。不过当计算结果想要重新赋值给枚举变量的时候,依然需要进行显式的类型转换。

都在代码里

下面代码和注释总结了以上介绍的枚举类型的使用方法和限制,个人觉得掌握例程中的内容对工作来说已经完全足够啦,但例程我还没有经过编译哈。

图片

参考文献

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

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

    关注

    0

    文章

    228

    浏览量

    13499
  • 结构体
    +关注

    关注

    1

    文章

    125

    浏览量

    10750
  • 枚举
    +关注

    关注

    0

    文章

    16

    浏览量

    4524
收藏 人收藏

    评论

    相关推荐

    为什么DSP对音频设计至关重要

    DSP和音频解码是实现当今消费者期望的高质量音频的关键要素。这篇博客将是讨论这一主题的系列博客的第一篇。首先简述DSP为什么对音频设计至关重要。在真正开放的空间中,大自然提供了无限数量的音频通道
    发表于 10-30 11:41

    天线系统在NFC设备至关重要

    天线系统在NFC设备至关重要。一般来讲,对工作在13.56MHz的NFC系统进行成功设计不仅需要对发射和接收天线进行电磁仿真,还需要将分立组件(包括将射频功率转换为直流信号的整流桥)包含进设计
    发表于 07-17 07:33

    示波器衡量指标至关重要但常被忽略的两个概念是什么?

    示波器衡量指标至关重要但常被忽略的两个概念是什么?
    发表于 05-12 06:49

    STM32F407重要知识点数据类型

    第9章 STM32F407重要知识点数据类型,变量和堆栈本章教程为大家介绍数据类型,变量和堆栈的相关知识。目录第9章 STM32F407重要知识点
    发表于 08-03 06:00

    浅析System Verilog的整数数据类型

    Data TypesVerilog提供了reg和wire数据类型,但是对于功能验证来说远远不够,所以SystemVerilog提供了很多更加丰富的数据类型,下面将一一介绍。我们先来考古下,一开始
    发表于 10-11 14:15

    SpinalHDLBundle与普通数据类型之间的连接赋值转换

    SpinalHDLBundle与SystemVerilog的packed struct很像,在某些场景下,与普通数据类型之间的连接赋值可以通过asBits,assignFromBi
    发表于 10-18 14:22

    数字硬件建模SystemVerilog-枚举数据类型

    上一节介绍了已经被淘汰的$unit声明空间,今天我们来看看一种重要数据类型-枚举数据类型
    的头像 发表于 07-01 17:44 1257次阅读

    asBits函数如何转换成Bits数据类型

    SpinalHDL中Bundle与SystemVerilog中的packed struct很像,在某些场景下,与普通数据类型之间的连接赋值可以通过asBits,assignFromBits来实现。
    的头像 发表于 10-17 09:53 644次阅读

    SpinalHDL中Bundle数据类型的转换

    SpinalHDL中Bundle与SystemVerilog中的packed struct很像,在某些场景下,与普通数据类型之间的连接赋值可以通过asBits,assignFromBits来实现。
    的头像 发表于 10-17 09:51 1000次阅读

    SystemVerilog中$cast的应用

    SystemVerilog casting意味着将一种数据类型转换为另一种数据类型。在将一个变量赋值给另一个变量时,SystemVerilog要求这两个变量具有相同的
    的头像 发表于 10-17 14:35 2077次阅读

    关于有符号数据类型的示例

    我们学习一下Systemverilog中的有符号数据类型的赋值。
    的头像 发表于 10-17 14:40 739次阅读

    SystemVerilog中的struct

    SystemVerilog“struct”表示相同或不同数据类型的集合。
    的头像 发表于 11-07 10:18 1924次阅读

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

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

    什么是数据类型转换

    常用的3种数据类型:1、Python数据类型第一种:字符串(str)。 2、Python数据类型第二种:整数(int)。 3、Python数据类型第三种:浮点数(float)。
    的头像 发表于 02-23 15:21 583次阅读

    plc数据类型怎么理解和应用

    PLC(可编程逻辑控制器)是一种工业自动化设备,用于控制机械和工业过程。在PLC编程中,数据类型是非常重要的概念,因为它决定了程序中数据的存储和处理方式。正确理解和应用PLC数据类型
    的头像 发表于 12-19 11:39 1460次阅读