SystemVerilog学习笔记(7) ------ 结构体(2)

        SystemVerilog 中的结构体分为压缩和非压缩结构体.

SystemVerilog代码
  1. typedef struct packed {  
  2.     bit [7:0]   main_ver;  
  3.     bit [15:0]  sub_ver;  
  4. }version;  

        计算机在处理一般的结构体时, 对于结构体中的成员处理的方式仍是按一般的数据类型对待的. 如在处理 byte 类型的数据时, 计算机可能按照 32 bit 处理, 因为对于一般的 32 位操作系统来说,处理 32 位数据比 8 位数据可能要简单, 因此, 8 bit 的数据所占的内存空间可能不是 8 bit, 而是 32 bit. 这种情况实际在 C 语言中也有的. C 中也有相应的编译参数来处理这种情况. 这种占用空间可能比变量实际大小要大的情况, 有时对于处理数据会很不方便, 所以在 SystemVerilog 中, 可以用 packed 声名方式来避免这种问题.
        对于压缩结构体, 计算机会把其整体看作是一个向量来处理, 结构体中的成员在内存中是连续存放的. 所以压缩结构体的成员必须是整型数据, 不能是 real, shorreal 以及非压缩结构体, 非压缩的联合体, 非压缩数组.

SystemVerilog代码
  1. version ver_0, ver_1;  
  2. ver_0[23:16] = 8'h1;        // 用向量的方式来访问压缩结构体.  
  3. ver_0[15:0]  = 16'h0a;  
  4. ver_1 = ver_0 << 2;         // 把压缩结构体当作整体来参加运算.  

         因为压缩结构体是被当作向量来处理的, 所以压缩结构体还可以加上 signed, unsigned 标志. 这个符号标志是针对压缩结构体整体的, 不会影响到结构体内部的成员.

SystemVerilog代码
  1. typedef struct packed signed {  
  2.     bit [15:0] hi_bit;  
  3.     bit [15:0] lo_bit;  
  4. }data;  

 



文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: SystemVerilog Verilog FPGA
相关日志:
评论: 0 | 引用: 0 | 查看次数: 1830
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 200 字 | UBB代码 开启 | [img]标签 关闭