SystemVerilog学习笔记(7) ------ 结构体(2)
作者:蓝水映像 日期:2009-01-11
SystemVerilog 中的结构体分为压缩和非压缩结构体.
SystemVerilog代码
- typedef struct packed {
- bit [7:0] main_ver;
- bit [15:0] sub_ver;
- }version;
计算机在处理一般的结构体时, 对于结构体中的成员处理的方式仍是按一般的数据类型对待的. 如在处理 byte 类型的数据时, 计算机可能按照 32 bit 处理, 因为对于一般的 32 位操作系统来说,处理 32 位数据比 8 位数据可能要简单, 因此, 8 bit 的数据所占的内存空间可能不是 8 bit, 而是 32 bit. 这种情况实际在 C 语言中也有的. C 中也有相应的编译参数来处理这种情况. 这种占用空间可能比变量实际大小要大的情况, 有时对于处理数据会很不方便, 所以在 SystemVerilog 中, 可以用 packed 声名方式来避免这种问题.
对于压缩结构体, 计算机会把其整体看作是一个向量来处理, 结构体中的成员在内存中是连续存放的. 所以压缩结构体的成员必须是整型数据, 不能是 real, shorreal 以及非压缩结构体, 非压缩的联合体, 非压缩数组.
SystemVerilog代码
- version ver_0, ver_1;
- ver_0[23:16] = 8'h1; // 用向量的方式来访问压缩结构体.
- ver_0[15:0] = 16'h0a;
- ver_1 = ver_0 << 2; // 把压缩结构体当作整体来参加运算.
因为压缩结构体是被当作向量来处理的, 所以压缩结构体还可以加上 signed, unsigned 标志. 这个符号标志是针对压缩结构体整体的, 不会影响到结构体内部的成员.
SystemVerilog代码
- typedef struct packed signed {
- bit [15:0] hi_bit;
- bit [15:0] lo_bit;
- }data;
评论: 0 | 引用: 0 | 查看次数: 1830
发表评论
上一篇
下一篇


文章来自:
Tags:
相关日志:






