首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

贰 | 数据类型7 —— typedef & struct & union

System Verilog 引进的新的数据类型,他们所具有的优点:

1. 双状态数据类型(bit, byte, shortint, int, longint):具有更好的性能,更低的内存消耗。

2. 队列(int a[$]),动态数组(int a[]),关联数组(int a[string]):减少内存消耗,且自带搜索和分类功能。

3. 类(class)和结构(struct):支持抽象的数据结构。

4. 联合结构和合并结构:允许对统一数据有多种视图(view)。

5. 字符串(string):支持内建的字符序列。

6. 枚举类型(enum):方便代码编写,增加代码可读性。(工程实践中经常使用)

1

思维导图

2

思维导图大纲

typedef & struct & union

typedef

创建新类型

typedef bit[31:0] uint;

自定义类型后缀常带"_t"

struct

只是数据的集合所以是可综合的

默认情况下,结构体是非压缩的(unpacked),结构体成员是独立的变量或常量

压缩(packed)结构体按照指定的顺序以相邻的位来存储结构体成员;压缩结构体被当做一个向量存储,结构体的第一个成员在向量的最左边;向量的最低位是结构体最后一个成员最低位,最低位编号即为 bit 0

packed struct 的成员可以通过成员名引用(<struct_name>.<mem_name>)也可以使用结构体向量的对应位来引用(<struct_name>[M:N])

packed struct 可被当作是向量来操作('{ }赋值操作依然是当做 unpacked 来处理)

若想生成带约束的随机数据,应该使用类

常使用后缀 "_s" 以便于识别

union

union 内的成员共用同一存储空间,对其中一个成员赋值,其他成员也会相应变化,只是数据类型不同

常使用后缀 "_u" 以便于识别

3

示例

例1:typedef & struct & union

typedef 用于创建新的数据类型,对于新的数组类型的定义需要将数组的下标放在新的数组名称中,例第 2 行。

第 19 行,对于 struct 的初始化,可以像数组那样直接使用 '{ } 进行赋值。

第 11 行,由于没有使用 typedef,p2 只是一个变量,而非一种自定义数据类型。

第 21 行和第 23 行,可以说明对 unpacked struct 和 packed struct 进行赋值时,源数据类型和目的数据类型位宽不匹配时,会进行截取适应(my1.b = 32'haabbccdd = 8'hdd)。

第 25 行说明了可以将 packed struct 当作向量处理,和使用位索引来提取数据。

第 26 行显示了 union 的用处,只对 u1.i 赋值 -1,i 表示有符号数,j 表示无符号数。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Ol-DfrRNWvgIPWTOuNPbQsmg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券