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())