一、資料類型
1、logic
logic類型隻能有一個驅動。使用wire和reg的地方均可使用logic,但如雙向總線等有多個驅動的地方,則不可使用logic。
2、二值邏輯
對于二值邏輯變量與DUT中的四值邏輯變量連接配接時,如果DUT中産生了X和Z,會被轉換成雙狀态值。使用($isunknown)操作符,可以在表達式的任意位出現X或Z的時候傳回1。用來檢查未知值的傳播。
3、定寬數組
多元數組的foreach循環,以兩維數組為例:foreach(md[i,j])。
數組下标和位下标可以同時使用。
需要等待數組中的變化(@ event)時,必須使用合并數組。
4、動态數組
隻要基本資料類型相同,定寬數組和動态數組之間就可以互相指派,在元素數目相同的情況下,可以把動态數組的值複制到定寬數組。
5、隊列
隊列的常量初始化中,無需使用單引号。
對于一些非合并的資料類型(非連續存放),需要使用單引号進行标量初始化指派;對于合并的資料類型(連續存放),不需要使用單引号進行标量初始化指派
隊列中的元素是連續存放的,隊頭或隊尾存取資料非常友善,常用來作為FIFO。
6、數組的方法
1)縮減
sum,product,and,or,xor
對于定寬數組、動态數組、隊列和關聯數組,從其中随機取數可以使用$urandum_range($size(array)-1);特别地,隊列和動态數組可以使用$urandum_range($array.size()-1)。
2)定位
min,max,unique
find:使用with來限定條件;還有find_index,find_first,find_first_index,find_last,find_last_index(傳回索引的方法,傳回值類型為int)
3)排序
改變了原始的數組,reverse,sort,rsort,shuffle,其中sort和rsort可以帶with進行條件選擇
7、結構
可以将結構定義為合并結構:typedef struct packed {bit[7:0] r,g,b;} pixel_p_s;
如果需要經常對整個結構體進行複制,那麼,合并結構的效率會高一點;但是,對于合并結構中尺寸不規則的元素進行讀寫,需要移位和屏蔽操作,代價很高。
8、枚舉
枚舉預設值為從0開始遞增的整數,預設類型為int。
可以指定枚舉值,如:typedef enum {INIT, DECODE =2 , IDLE} fsmtype_e;
9、字元串
string用來儲存長度可變的字元串,結尾不帶辨別符null
二、過程塊和方法
1、函數和任務
參數的預設值和方向為logic輸入。
允許不帶ref進行數組參數的傳遞,這時數組會被複制到堆棧區,代價很大。
ref參數在任務裡可以修改變量而且修改結果對調用它的函數随時可見。