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。
SV class的更多相关文章
- 挣值管理(PV、EV、AC、SV、CV、SPI、CPI) 记忆
挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三个参数:PV.AC.EV. PV:计划值,在即定时间点前计划 ...
- Cadence UVM基础视频介绍(UVM SV Basics)
Cadence关于UVM的简单介绍,包括UVM的各个方面.有中文和英文两种版本. UVM SV Basics 1 – Introduction UVM SV Basics 2 – DUT Exampl ...
- 挣值管理(PV、EV、AC、SV、CV、SPI、CPI)记忆之我见
挣值管理(PV.EV.AC.SV.CV.SPI.CPI)记忆之我见 挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三 ...
- 【等待事件】序列等待事件总结(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文档结 ...
- 挣值管理不是搞数字游戏(3)——进阶指标:CV、SV、CPI、SPI、EAC
摘要: 要考PMP(Project Management Professional ),挣值管理是必考的知识.软件项目有很大的特殊性,不少人认为挣值管理不太适用于软件项目.挣值管理相关资料也比较超多, ...
- 信息系统项目管理师EV、PV、AC、BAC、CV、SV、EAC、ETC、CPI、SPI概念说明
挣值常用名词: AC [Actual Cost] 实际成本:完成工作的实际成本是多少? [96版的ACWP] PV [Planned Value] 计划值: 应该完成多少工作? [96版的BCWS] ...
- SV randomize
randomize中的变量只支持2-state的values,不支持4-states. randc类型的变量不能被约束在solve------before的语句中. constraint可以被定义在c ...
- sv命令空间 packge
SV中的module,interface,program,checker,都提供declaration空间,内部定义都local当前的那个scope,相互之间的building block不影响,不识 ...
- SV processses
SV中的structured procedure: 1)intial procedure,keyword只有initial:最开始被调用一次: 2)always procedure,keyword包括 ...
随机推荐
- maven and jwt
以目前浅薄的理解,jwt就是一种加密token的手段,这个token也只有自己能解开,如果客户端以cookie存这个token,可能会存在cookie被窃取的情况. 另外,jwt这中加密方式因为有过期 ...
- mysql 游标 demo
一.MySQL游标的概念 1.游标介绍 MySQL的游标(cursor)是一个重要的概念,通过查找资料与自己的理解,主要得出以下几点关于自己的理解. 有数据缓冲的思想:游标的设计是一种数据缓冲区的思想 ...
- Thinkpad L440 无线驱动突然无法使用,无法搜索到无线上网
问题描述: 环境:Thinkpad L440,不知道是什么版本的,找朋友买的,买的时候连系统都没有,自己装的Win7系统,驱动均为官方网站下载安装.电脑在使用过程中一直带着电池,连接电源使用. 问题: ...
- python数据分析及展示(二)
一.Matplotlib库入门 1. Matplotlib库的介绍 http://matplotlib.org/gallery.html可查看Matplotlib库的效果 Matplotlib库由各种 ...
- python开发工具
要用到爬虫,网上推荐crapy,自己在pycharm上没有安装成功,于是使用anaconda,但是在gui界面安装crapy总是失败,且没有提示信息.于是使用命令行的方式,提示PermissionEr ...
- linux安装rabbitmq以及相关的操作命令
1.安装rabbitmqa)进入rabbitmq文件的存放目录b)rpm -ivh rabbitmq-server-3.5.4-1.noarch.rpm2.修改配置cd /etc/rabbitmqcd ...
- PHP指定时间戳/日期加一天,一年,一周,一月
PHP指定时间戳加上1天,1周,1月,一年其实是不需要用上什么函数的!指定时间戳本身就是数字整型,我们只需要再计算1天,1周它的秒数相加即可! 博主搜索php指定时间戳加一天一年,结果许多的文章给出来 ...
- [转]在centos 6.4下安装opencv 2.3.1
系统环境介绍: centos 6.4 1.安装依赖包 yum install cmake gcc gcc-c++ gtk+-devel gimp-devel gimp-devel-tools gimp ...
- 架构4(lvs lb集群解决方案二 lvs+keepalived)
keepalived 1.实现调度器的HA 2.对realserver做健康检测 3.动态维护ipvs路由表
- mimikaz常用命令
常用命令,留着自己使用的时候方便查找 mimikatz是一款功能强大的轻量级调试神器,通过它你可以提升进程权限注入进程读取进程内存,当然他最大的亮点也是让阿刚最感兴趣的就是他可以直接从 lsass中获 ...