System Verilog学习5——数据类型-结构体


1. typedef创建struct结构体新类型

结构体struct是一个数据的集合,它是可综合的,结构可以通过模块端进行传递。

如下所示,创建一个名为pixel的无符号字节变量,分别代表红、绿和蓝,

struct {bit[7:0] r,g,b;} pixel;

若要在模块和端口共享变量pixel,必须创建一个新的类型

typedef struct bit[7:0] r,g,b;} pixel_s;
pixel_s my_pixel;//声明变量
my_pixel='{'h10,'h10,'h10};//结构体类型的赋值

在struct的声明中使用“_s”后缀可以方便用户识别自定义类型,简化代码的共享和重用过程。

2. typedef创建不同类型的联合

在硬件中,寄存器里某些位的含义可能与其他位的值有关。带立即操作数的指令,它在操作数位置上存放的是一个常数量,整个指令对这个立即数的译码结果会与浮点指令大不相同。

typedef union {int i; real f;} num_u;
num_u un;
un.f=0.0;//把数值设为浮点形式

使用后缀“_u”表示联合类型

3 typedef创建枚举类型

3.1 enum枚举介绍

定义一个枚举类型

enum {RED,BLUE,GREEN} color;

一周有7天,这样就可以用枚举来实现定义

enum {MON=1, TUE, WED, THU, FRI, SAT, SUN} DAY;

注意:第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。

enum season {spring, summer=3, autumn, winter};

没有指定值的枚举元素,其值为前一元素加 1。也就说 spring 的值为 0,summer 的值为 3,autumn 的值为 4,winter 的值为 5

3.2 typedef创建枚举类型

当创建的枚举类型需要用于子程序或者模块端口时,需要创建枚举类型,使用内建的name()函数,可以得到枚举变量值对应的字符串

//创建代表0,1,2的数据类型
typedef enum {INIT,DECODE,IDLE} fsmstate_e;
fsmstate_e pstate,nstate;    //声明自定义类型变量

initial begin
  case(pstate)
      IDIE:nstate=INIT;    //数据赋值
      INIT:nstate=DECODE;
      default:nstate=IDLE;
  endcase
  $display("Next state is %s",
           nstate.name())
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值