" typedef "仅仅意味着提供一个类型名,可以简单地理解为文本替换,提高代码的可读性。
typedef existing_type mytype;
例如:
typedef enum {NO, YES} boolean; boolean myvar1, myvar2; // user-defned type
等价于
enum {NO, YES} myvar1,myvar2;
下面是一个简单的例子:
module tdef; typedef integer unsigned u_integer; typedef enum {RED, GREEN, BLUE} rgb; typedef bit [7:0] ubyte; u_integer uI = 32'h face_cafe; u_integer uI1 = 32'h cafe_face; rgb rgb_i = GREEN; rgb rgb_i1 = BLUE; ubyte cnt = 8'hFF; initial begin $display ("rgb_i=%s rgb_i1=%s uI=0x%0h uI1=0x%0h cnt=%0d", rgb_i.name( ), rgb_i1.name( ), uI, uI1, cnt); end endmodule
Simulation log:
rgb_i=GREEN rgb_i1=BLUE uI=0xfacecafe uI1=0xcafeface cnt=255 V C S S i m u l a t i o n R e p o r t
Example 1:
module中声明了三种不同的“类型定义”。
第一个typedef是
typedef integer unsigned u_integer;
然后声明两个类型为“u_integer”的变量u1和uI1并
初始化:
u_integer uI = 32'h face_cafe; u_integer uI1 = 32'h cafe_face;
第二个typedef是
typedef enum {RED, GREEN, BLUE} rgb;
声明两个变量" rgb_i "和" rgb_i1 "并初始化:
rgb rgb_i = GREEN; rgb rgb_i1 = BLUE;
最后一个typedef
typedef bit [7:0] ubyte;
声明一个变量cnt 并初始化
ubyte cnt = 8'hFF;
上面的几个例子还不是很好地体现typedef的好处,最大的优势体现在更复杂的数据结构上上。
Example 1:
typedef struct { bit [31:0] opcode; bit R_W; logic byteEnb; integer data; integer addr; } read_cycle; read_cycle rC;
Example 2:
typedef int data_t [3:0][7:0]; data_t a;
Example 3:
typedef int Qint[$]; Qint DynamicQ[ ]; // same as int DynamicQ[ ][$];
Example 4:
typedef struct packed { bit [3:0] s1; bit s2; } myStruct; typedef union { logic [7:0] u1; myStruct b2; } mUnionT; mUnionT Union1;
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !