" typedef "僅僅意味著提供一個(gè)類型名,可以簡(jiǎn)單地理解為文本替換,提高代碼的可讀性。
typedef existing_type mytype;
例如:
typedef enum {NO, YES} boolean; boolean myvar1, myvar2; // user-defned type
等價(jià)于
enum {NO, YES} myvar1,myvar2;
下面是一個(gè)簡(jiǎn)單的例子:
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中聲明了三種不同的“類型定義”。
第一個(gè)typedef是
typedef integer unsigned u_integer;
然后聲明兩個(gè)類型為“u_integer”的變量u1和uI1并
初始化:
u_integer uI = 32'h face_cafe; u_integer uI1 = 32'h cafe_face;
第二個(gè)typedef是
typedef enum {RED, GREEN, BLUE} rgb;
聲明兩個(gè)變量" rgb_i "和" rgb_i1 "并初始化:
rgb rgb_i = GREEN; rgb rgb_i1 = BLUE;
最后一個(gè)typedef
typedef bit [7:0] ubyte;
聲明一個(gè)變量cnt 并初始化
ubyte cnt = 8'hFF;
上面的幾個(gè)例子還不是很好地體現(xiàn)typedef的好處,最大的優(yōu)勢(shì)體現(xiàn)在更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)上上。
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;
審核編輯:湯梓紅
-
代碼
+關(guān)注
關(guān)注
30文章
4722瀏覽量
68234 -
typedef
+關(guān)注
關(guān)注
0文章
26瀏覽量
9527
原文標(biāo)題:SystemVerilog 中的typedef
文章出處:【微信號(hào):芯片驗(yàn)證工程師,微信公眾號(hào):芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論