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。

SV class的更多相关文章

  1. 挣值管理(PV、EV、AC、SV、CV、SPI、CPI) 记忆

    挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三个参数:PV.AC.EV.     PV:计划值,在即定时间点前计划 ...

  2. Cadence UVM基础视频介绍(UVM SV Basics)

    Cadence关于UVM的简单介绍,包括UVM的各个方面.有中文和英文两种版本. UVM SV Basics 1 – Introduction UVM SV Basics 2 – DUT Exampl ...

  3. 挣值管理(PV、EV、AC、SV、CV、SPI、CPI)记忆之我见

    挣值管理(PV.EV.AC.SV.CV.SPI.CPI)记忆之我见 挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三 ...

  4. 【等待事件】序列等待事件总结(enq: SQ - contention、row cache lock、DFS lock handle和enq: SV - contention)

    [等待事件]序列等待事件总结(enq: SQ - contention.row cache lock.DFS lock handle和enq: SV -  contention) 1  BLOG文档结 ...

  5. 挣值管理不是搞数字游戏(3)——进阶指标:CV、SV、CPI、SPI、EAC

    摘要: 要考PMP(Project Management Professional ),挣值管理是必考的知识.软件项目有很大的特殊性,不少人认为挣值管理不太适用于软件项目.挣值管理相关资料也比较超多, ...

  6. 信息系统项目管理师EV、PV、AC、BAC、CV、SV、EAC、ETC、CPI、SPI概念说明

    挣值常用名词: AC [Actual Cost] 实际成本:完成工作的实际成本是多少? [96版的ACWP] PV [Planned Value] 计划值: 应该完成多少工作? [96版的BCWS] ...

  7. SV randomize

    randomize中的变量只支持2-state的values,不支持4-states. randc类型的变量不能被约束在solve------before的语句中. constraint可以被定义在c ...

  8. sv命令空间 packge

    SV中的module,interface,program,checker,都提供declaration空间,内部定义都local当前的那个scope,相互之间的building block不影响,不识 ...

  9. SV processses

    SV中的structured procedure: 1)intial procedure,keyword只有initial:最开始被调用一次: 2)always procedure,keyword包括 ...

随机推荐

  1. virtualbox 在物理机是无线网卡的时候做桥接配置

    在“计算机”图标上右键选择“管理”,在打开的“计算机管理”窗口中选择左侧的“设备管理器”,然后在右侧图示的地方右键选择“添加过时硬件”. 在打开的窗口中点击“下一步”. 选择“安装我手动从列表中选择的 ...

  2. js 模仿jquery 写个简单的小demo

    <div id="div" style="background:red;width:100px;height:300px"> 123123123 & ...

  3. 解决使用微软模拟器VS Emulator for Android在VS2017 Xamarin开发中不能调试程序的问题。

    在使用VS2017 XAMARIN调试Android应用程序时,屏幕闪一下,进入不了调试(使用谷歌的模拟器可以调试,但是太慢), 我们现在来解决一下这个问题. 第一步:打开Hyper-V管理器 第二步 ...

  4. 【Tensorflow】tensorboard

    tbCallBack = tf.keras.callbacks.TensorBoard(log_dir='./log' , histogram_freq=0, write_graph=True, wr ...

  5. QT系统托盘应用程序

    在QT中QSystemTrayIcon类提供了创建系统托盘程序的功能. QSystemTrayIcon类为系统托盘中的应用程序提供图标.现代操作系统通常会在桌面上提供一个称为系统托盘(system t ...

  6. 【Dubbo 源码解析】03_Dubbo Protocol&Filter

    Protocol & Filter Dubbo 服务暴露和服务引用都是通过的 com.alibaba.dubbo.rpc.Protocol 来实现的.它是一个 SPI 扩展. @SPI(&qu ...

  7. 自己动手实现RPC

    一.需求:用户管理系统(UMS),仓库管理系统(WMS),订单管理系统(OMS) 现在OMS有一张订单表:[订单id,用户id,商品id,订单状态,订单时间],需要在客户端展示此订单对应的用户详情和商 ...

  8. 使用RecyclerView设置自定义分割线

    在安卓开发中,RecyclerView控件来做一些列表是非常方便的,如何使用在网上很多文章,这次着重来说一下怎么设置自定义分割线: 首先,我们来看一下怎么设置默认的分割线 RecyclerView m ...

  9. 使用PHP几种写99乘法表的方式

    首先按照规矩,还是先废话一番,对于刚学PHP的新手来讲,用php写九九乘法表无疑是非常经典的一道练习题. 但不要小看这道练习题,它对于逻辑的考验还是相当到位的. 也许有人会觉得,九九乘法表有什么难的, ...

  10. [Golang] 编译程序时打上git提交信息标记

    1.加入代码 //version.go package version import ( "flag" "fmt" "os" ) var ( ...