SV class


SV中的class通過new來創建實例,new函數可以傳遞多個參數

  

  packet P1;  P1 = new;創建一個P1的對象;

        P2 = P1;P2也指向同一個對象;

        P2 = new P1;P2是P1的shadow copy,指針直接被copy

  對於參數化的class的new函數調用:new函數可以通過類操作符::來調用

  class E#(type T = int) extends C;

    T x;

    function new(T x_init)

      super.new();

      x=x_init;

    endfunction

  endclass

  initial begin

    C = E#(.T(byte))::new(.x_init(5));

  end

一個class中的static類型的property包括:static聲明的變量,typedefs,enumeration,parameter,local parameter,

          static constraint,structure,union,

  static的method,主要指定義的static類型的function、task,其中不能使用非static的變量和this 指針

  class的聲明定義,typedef class class_name;

 

SV中的class都是單繼承,single inheritance,baseclass中的property和method都被subclass所復用。

baseclass的handle可以指向subclass object,此時的參數引用,完全根據handle的類型來確定

  

  baseclass中也可以控制data或者method的作用范圍,local,表示只能被該class中的method使用,protect,表示可以被該class

    或者subclass使用,

  class中的const變量,分為global const,與static聲明類似,在class中聲明時,直接賦值,  

              instance const,在class中只是做了聲明,在new中做了賦值(因為只能做一次),這類const是不能使用static的

    

  virtual method,在subclass中的時候,會直接override掉baseclass中的function。不需要調用this。

    並且只會根據對象的類型,來調用function

    virtual function可以override掉一個同名的function,但是聲明過virtual之后,必須都是用virtual做override

  還可以定義一種virtual class其中只定義pure virtual function,做原型定義。(class中是不允許有pure virtual function的)  

  SV中的多態性,主要表現在virtual function的動態調用,以及對象之間的動態$cast

 

super關鍵字,來調用baseclass中的變量和函數,this,是預定義的指向該調用object的指針類型,使用該class中的變量和函數。

  繼承類到baseclass的例化是一條chain constructors;

  在繼承類的new函數中,應該首先調用super.new(),來例化baseclass中值,

     

 

$cast的原型,function int /  task  $cast (dest, src)  只有:

  1) src是dest的superclass handle,

  2) src是一個interface class時此時指向的可以是一個extends的class,cast可以成功;

 

類范圍操作符左側不可以是一個class的實例,只能是一個class的類型

  類范圍操作符“::”,可以被class,package,covergroup,coverpoint,cross,typedef等使用在左側,右側表示內部的變量名。

    主要用在:1)內部static變量和method的調用

         2) extern的function的外部實現。 

 

參數化的類:parameterized class,通過參數化定義,在實現時,可以自己配置,specialization

  可以分為value的參數化和type的參數化,參數化定義時,可以指定默認值,被extend的時候,按需指定

  

  參數化的class,使用類范圍操作符時,必須有type或者value的時候,除非有默認的值

 

interface class,只能在其中定義pure virtual function,typedef,parameter等變量。

  通過implements掛載在相應的class中,不同於extend,interface class只是實現了function

      implement可以在一次extends中實現多個。

  interface class經過implement之后,被extends的class,可以直接將對象賦給implement的interface class句柄。

    但是只能調用該interface中的function。


免責聲明!

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



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