点击关注我的GitHub

SystemVerilog 类和对象的描述

类class 对象oject

类是将相同的个体抽象出来的描述方式,对象是实体。

面向对象的三要素:封装,集成,多态

类的定义核心即使属性的声明和方法定义。

在验证的世界:

激励生成器:生成激励的内容

驱动器:将激励以时序的形式发送到DUT

检测器:检测信号并且记录

比较器:比较数据

验证环境的不同组件其功能和所需要处理的数据内容不同

第一个激励数据类:

class Transaction;

bit[31:0]addr,crc,data[8];

function void display;

$display("Transaction:%h",addr);

endfunction:dispaly

endclass:Transaction

class中的变量的生命周期是动态的,软件的变量。

bit[31:0]addr,crc,data[8];//默认的是变量类型

class属于硬件的世界,不能定义为reg变量

接口interface(软硬界的媒介)的指针可以传播到类class中

class中可以定义方法,在module定义的方法在initial always调用

class中不能够出现initial always ,但是class中定义的方法可以通过调用class来搞

Handle句柄,:指针,用来只想对象的指针。

句柄是指向对象的指针。

class中可以使用task和function

verilog的例化和SV的class的例化的差别:

两者的共同点在于使用相同的末班来创建内存实例

不同点在于verilog的例化是静态的,在编译连接时完成,而SVclass的例化是动态的,可以在任意的时间点发生,这使得类的例化方式更加灵活和空间

Verilog没有句柄,只能通过曾思华的索引

SVclass通过句柄可以将对象的指针赋予其他的句柄,使得操作更加的灵活

声明对象不同于创建(例化)

Transaction tr;//声明句柄

tr = new;//创建对象

 

 

A:类是可以定义变量和方法的

B:一个类不仅仅能够用来生成一个对象

C:指向对象的句柄可以有很多个

D:类中不能够定义reg

创建对象:开辟了新的内存空间,用来存放新的成员变量和方法

创建对象时候可以通过自定义构建函数,来完成变量的初始化和其他的初始化操作。

任何一个类class都需要new函数:

new()是系统预定义的函数,不需要指定返回值,函数会隐式的返回例化后的对象指针(句柄)

 

 

class Transaction;

  logic[31:0]addr,crc,data[8];

  function new( );

addr = 3;

foreach(data[i])

  data[i] = 5;

endfunction

endclass

国建函数也可以定义多个参数作为初始化时外部传入数值的手段

class Transaction;

logic[31:0]addr = 'h10;

logic[31:0]crc,data[8];

function new(logic[31:0] a=3,d=5);

 

posted @ 2021-06-01 23:09  justkeen  阅读(617)  评论(0编辑  收藏  举报