" 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;
審核編輯:湯梓紅
-
代碼
+關注
關注
30文章
4823瀏覽量
68904 -
typedef
+關注
關注
0文章
26瀏覽量
9558
原文標題:SystemVerilog 中的typedef
文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論