" 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条评论
快来发表一下你的评论吧 !