0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Systemverilog里class類型的記錄

冬至子 ? 來(lái)源:CSDN ? 作者:谷公子 ? 2023-05-24 14:29 ? 次閱讀

1. class內(nèi)容

class里面包含data和對(duì)data進(jìn)行操作的subroutines(functions and tasks)。class的data稱為class properties,subroutines稱為methods。兩者都是class的members。

class相當(dāng)于是定義了一個(gè)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的時(shí)候?qū)nstance進(jìn)行初始化。

如果用戶沒有顯示指定new方法,那么隱藏的new方法將會(huì)被自動(dòng)加上。在子類的new方法里應(yīng)該首先call父類的new構(gòu)造函數(shù)。

super.new需要在子類構(gòu)造函數(shù)中第一條語(yǔ)句就執(zhí)行,這是因?yàn)閟uperclass需要在子class之前被初始化,如果用戶沒有提供superclass的初始化,那么compiler會(huì)自動(dòng)插入super.new。

image.png

3. static

class中的static properties可以直接引用,不需要該通過(guò)class的instance。

class中的methods也可以是static,static method不能訪問non-static members(properties或methods),但它可以訪問同個(gè)class內(nèi)的static members。如果它訪問了non-static members或this handle,那么應(yīng)該報(bào)編譯錯(cuò)誤。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的值,不會(huì)把handler object里的properties也進(jìn)行復(fù)制。

Shallow copy也不會(huì)創(chuàng)建新的coverage objects(covergroup instances)。

如果要做到連handler里的properties都復(fù)制,那么需要deep_copy,deep copy需要user自己實(shí)現(xiàn)的。

5. chaining constructors

如果多層class extend的話,那么在constructor里需要調(diào)用父類的constructor。

如果父類的constructor需要arguments,那么有兩種方法:1. 用super.new(xx)傳進(jìn)去;2. 在extend父類class時(shí)就傳進(jìn)去的,用這種方式,在constructor里就別加super.new(xx)了。

父類的new函數(shù)如果不需要arguments(沒有參數(shù)或參數(shù)帶默認(rèn)值),那么在子類constructor里對(duì)super.new()可寫可不寫,不寫的話,compiler會(huì)自動(dòng)插入。如果父類的constructor需要傳參數(shù),那么compiler自動(dòng)插入也只是為super.new(),也不會(huì)給你傳參數(shù)值進(jìn)去的(除非在extend時(shí)指定),這樣simulator會(huì)報(bào)錯(cuò)。

記?。喝绻麑ew定義為local,那么該類將不可以被繼承的。

在子類構(gòu)造函數(shù)中需要第一條調(diào)用父類構(gòu)造函數(shù)super.new()中,要等super.new()執(zhí)行完之后,才會(huì)做son class的property初始化,如果property有指定初始值,那么就賦值,如果沒有指定,那就是undefined的。最后才會(huì)繼續(xù)執(zhí)行son class構(gòu)造函數(shù)中super.new()以下的語(yǔ)句。因此在給父類構(gòu)造函數(shù)傳輸參數(shù),如果用子類定義的變量,那么結(jié)果會(huì)是undefined的,因此,來(lái)不及初始化啊。例子如下:

image.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1333

    瀏覽量

    109713
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    [啟芯公開課] SystemVerilog for Verification

    學(xué)快速發(fā)展,這些趨勢(shì)你了解嗎?SystemVerilog + VM是目前的主流,在未來(lái)也將被大量采用,這些語(yǔ)言和方法學(xué),你熟練掌握了嗎?對(duì)SoC芯片設(shè)計(jì)驗(yàn)證感興趣的朋友,可以關(guān)注啟芯工作室推出的SoC芯片
    發(fā)表于 06-10 09:25

    systemverilog學(xué)習(xí)教程

    systemverilog的一些基本語(yǔ)法以及和verilog語(yǔ)言之間的區(qū)別。
    發(fā)表于 04-01 14:24

    更好地理解SystemVerilog的多態(tài)Polymorphism

    保存子類對(duì)象,并直接使用父類句柄來(lái)調(diào)用子類的方法。因此,SystemVerilog中的多態(tài)性是一種根據(jù)父類對(duì)象句柄實(shí)際指向不同的對(duì)象類型使相同的代碼具備不同行為的能力。為了實(shí)現(xiàn)這個(gè)目的,父類中
    發(fā)表于 12-05 17:34

    SystemVerilog Assertion Handbo

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發(fā)表于 07-22 14:08 ?188次下載

    SystemVerilog的斷言手冊(cè)

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發(fā)表于 07-22 14:12 ?20次下載

    SystemVerilog語(yǔ)言介紹匯總

    作者:limanjihe ?https://blog.csdn.net/limanjihe/article/details/83005713 SystemVerilog是一種硬件描述和驗(yàn)證語(yǔ)言
    的頭像 發(fā)表于 10-11 10:35 ?2279次閱讀

    SystemVerilog中枚舉類型的使用建議

    SystemVerilog中枚舉類型雖然屬于一種“強(qiáng)類型”,但是枚舉類型還是提供了一些“不正經(jīng)”的用法可以實(shí)現(xiàn)一些很常見的功能,本文將示例一些在枚舉
    的頭像 發(fā)表于 09-01 14:20 ?1513次閱讀

    SystemVerilog中$cast的應(yīng)用

    SystemVerilog casting意味著將一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型。在將一個(gè)變量賦值給另一個(gè)變量時(shí),SystemVerilog要求這兩個(gè)變量具有相同的數(shù)據(jù)
    的頭像 發(fā)表于 10-17 14:35 ?2580次閱讀

    SystemVerilog中的package

    SystemVerilog packages提供了對(duì)于許多不同數(shù)據(jù)類型的封裝,包括變量、task、function、assertion等等,以至于可以在多個(gè)module中共享。
    的頭像 發(fā)表于 11-07 09:44 ?1099次閱讀

    SystemVerilog中的struct

    SystemVerilog“struct”表示相同或不同數(shù)據(jù)類型的集合。
    的頭像 發(fā)表于 11-07 10:18 ?2226次閱讀

    Systemverilog中的union

    SystemVerilog union允許單個(gè)存儲(chǔ)空間以不同的數(shù)據(jù)類型存在,所以u(píng)nion雖然看起來(lái)和struct一樣包含了很多個(gè)成員,實(shí)際上物理上共享相同的存儲(chǔ)區(qū)域。
    的頭像 發(fā)表于 11-09 09:41 ?832次閱讀

    SystemVerilogclass的基本概念

    class,是面向?qū)ο缶幊蹋╫bject-oriented programming (OOP))的基礎(chǔ),而OOP可以讓你創(chuàng)建更高抽象級(jí)別的驗(yàn)證環(huán)境(如UVM)。
    的頭像 發(fā)表于 11-14 09:11 ?1701次閱讀

    SystemVerilogclass是什么意思

    class,是面向?qū)ο缶幊蹋╫bject-oriented programming (OOP))的基礎(chǔ),而OOP可以讓你創(chuàng)建更高抽象級(jí)別的驗(yàn)證環(huán)境(如UVM)。
    的頭像 發(fā)表于 11-14 09:11 ?1113次閱讀

    FPGA學(xué)習(xí)-SystemVerilog語(yǔ)言簡(jiǎn)介

    SystemVerilog是一種硬件描述和驗(yàn)證語(yǔ)言(HDVL),它基于IEEE1364-2001 Verilog硬件描述語(yǔ)言(HDL),并對(duì)其進(jìn)行了擴(kuò)展,包括擴(kuò)充了 C語(yǔ)言 數(shù)據(jù)類型、結(jié)構(gòu)、壓縮和非
    的頭像 發(fā)表于 12-08 10:35 ?1930次閱讀

    SystemVerilog的regions以及events的調(diào)度

    本文講一下SystemVerilog的time slot的regions以及events的調(diào)度。SystemVerilog語(yǔ)言是根據(jù)離散事件執(zhí)行模型定義的,由events驅(qū)動(dòng)。
    的頭像 發(fā)表于 07-12 11:20 ?1331次閱讀
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>里</b>的regions以及events的調(diào)度