typedef的应用实例

描述

" 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;

 

  审核编辑:汤梓红

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分