1. class內(nèi)容
class里面包含data和對data進行操作的subroutines(functions and tasks)。class的data稱為class properties,subroutines稱為methods。兩者都是class的members。
class相當(dāng)于是定義了一個data type。object是該class的instance。Object handle是持有該class type的變量。
class里的method的lifetime必須為automatic,如果定義成static是非法的(這里不是指static task,而是task內(nèi)static的variables或arguments)
2. class構(gòu)造函數(shù)
systemverilog提供了class的構(gòu)造函數(shù),支持在創(chuàng)建object的時候?qū)nstance進行初始化。
如果用戶沒有顯示指定new方法,那么隱藏的new方法將會被自動加上。在子類的new方法里應(yīng)該首先call父類的new構(gòu)造函數(shù)。
super.new需要在子類構(gòu)造函數(shù)中第一條語句就執(zhí)行,這是因為superclass需要在子class之前被初始化,如果用戶沒有提供superclass的初始化,那么compiler會自動插入super.new。
3. static
class中的static properties可以直接引用,不需要該通過class的instance。
class中的methods也可以是static,static method不能訪問non-static members(properties或methods),但它可以訪問同個class內(nèi)的static members。如果它訪問了non-static members或this handle,那么應(yīng)該報編譯錯誤。Static methods也不能是virtual。
Static method和task with static lifetime是不一樣的,前者描述的是class內(nèi)method的lifetime,而后者描述的是task內(nèi)variables和arguments的lifetime。
4. shallow copy和deep copy
Shallow copy只是復(fù)制原有object的properties,但如果原有object里含有object handler,也只是復(fù)制handler的值,不會把handler object里的properties也進行復(fù)制。
Shallow copy也不會創(chuàng)建新的coverage objects(covergroup instances)。
如果要做到連handler里的properties都復(fù)制,那么需要deep_copy,deep copy需要user自己實現(xiàn)的。
5. chaining constructors
如果多層class extend的話,那么在constructor里需要調(diào)用父類的constructor。
如果父類的constructor需要arguments,那么有兩種方法:1. 用super.new(xx)傳進去;2. 在extend父類class時就傳進去的,用這種方式,在constructor里就別加super.new(xx)了。
父類的new函數(shù)如果不需要arguments(沒有參數(shù)或參數(shù)帶默認(rèn)值),那么在子類constructor里對super.new()可寫可不寫,不寫的話,compiler會自動插入。如果父類的constructor需要傳參數(shù),那么compiler自動插入也只是為super.new(),也不會給你傳參數(shù)值進去的(除非在extend時指定),這樣simulator會報錯。
記住:如果將new定義為local,那么該類將不可以被繼承的。
在子類構(gòu)造函數(shù)中需要第一條調(diào)用父類構(gòu)造函數(shù)super.new()中,要等super.new()執(zhí)行完之后,才會做son class的property初始化,如果property有指定初始值,那么就賦值,如果沒有指定,那就是undefined的。最后才會繼續(xù)執(zhí)行son class構(gòu)造函數(shù)中super.new()以下的語句。因此在給父類構(gòu)造函數(shù)傳輸參數(shù),如果用子類定義的變量,那么結(jié)果會是undefined的,因此,來不及初始化啊。例子如下:
-
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110124
發(fā)布評論請先 登錄
相關(guān)推薦
評論