SystemVerilog中virtual關鍵字常見用法


在驗證工作中經常使用"virtual"關鍵字,下面列舉該關鍵字應用場景。

  • 主要應用場景在virtual class,virtual interface 以及 virtual task/function。
  • OOP三大特性(封裝,繼承,多態)中的 多態 在SystemVerilog中一般通過 “virtual” 關鍵字實現。

    通過virtual聲明的類,接口,任務與函數,其本身自帶一些方法或者函數。后續的例化或者擴展可以對原有的內容進行增加或者修改,從而實現同一函數不同方法的多種形態。

1. virtual interface
  • 在interface定義時,如果不使用關鍵字 “virtual” 那么在多次調用該接口時,在其中的一個實例中對接口中某一信號的修改會影響其他實例接口;如果使用了 “virtual” 關鍵字,那么每個實例是獨立的。
  • 習慣上在聲明interface時均添加 "virtual"關鍵字。
2. virtual task/function
  • 用於OOP思想的繼承使用。當定義了virtual時,在子類中調用某task/function時,會先查找在子類中是否定義了該 task/function,如果子類沒有定義,則在父類中查找。未定義virtual時,只在子類中查找,沒有定義就是編譯器報錯。
  • 如果某一class會被繼承,則用戶定義的task/function(除new(),randomized(),per_randomize(),pose_randomize()外),都應該加上virtual關鍵字,以備后續擴展。
3. virtual class
  • 虛類一般用來定義類的格式,、類的成員、類的參數等,虛類不能被實例化,只能被擴展(重載)后實例化,用於在項目中定義一些標准的類。

  • 虛類中的方法通常使用關鍵字 " pure virtual " 純虛方法。同時OOP規定,只要class中存在一個沒有被實現的pure function,就不允許例化這個class。

    virtual class (抽象類):可以被擴展但是不能被直接例化,由抽象類擴展而來的類,只有在所以的虛擬方法都有實體的時候才能被例化。
    pure virtual function(純虛方法):沒有實體的方法原型,相當於一個聲明,只能在抽象類中定義。

UVM中一個顯著虛類是uvm_void:里面不包含任何成員變量以及函數,是所有其他UVM類的基類。

virtual class uvm_void;
endclass
 
  • 1
  • 2

PS:有關其他細節可參考UVM Class Reference Manual 1.2以及SystemVerilog的IEEE標准


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM