数字验证学习笔记——SystemVerilog芯片验证9 ——类和对象的概述
admin
2024-02-17 15:00:35
0

一、类和对象的概述

对象编程语言更符合人对自然的理解。这个世界是由无数的类(class)和对象(object)构成的。类是将相同的个体抽象出来的描述方式,对象是实体,其具备有独立行为的能力,一个对象是万千世界中的“一粒沙”。具有相同属性和功能的对象属于同一类,而不同的类之间可能有联系或者没有联系。

面向对象编写三要素:封装、继承和多态。
类的定义核心即是属性声明和方法定义,所以类是数据和方法的自洽体,既可以保存数据也可以处理数据。struct只是 单纯的数据保存,没有数据处理的能力。

验证为什么需要面向对象的编程。
验证环境的不同组件功能和所需要处理的数据内容是不相同的。
不同环境的同一类组件所具备的功能和数据内容是相似的。

第一个transaction事务类
//类是方法和数据的自洽体
class Transaction;
bit [31:0] addr,crc,data[8]; //类定义变量,是动态变量,是软件里面的变量
function void display;
$dispaly(“Transaction: %h”,addr);
endfuction : dispaly
function void clac_crc;
crc=addr^data.xor;
endfuction : clac_crc
endclass:Transaction

面向对象编程的概念要素

  • class 类: 基本模块包含成员变量和方法。在Verilog中module也可以包含变量和方法,只不过它是硬件的盒子,而class是软件的盒子。
  • object对象:类的实例。Verilog中module也可以例化,这是硬件的例化,在SV中可以使用class来例化,这是软件的例化。
  • handle句柄(指针):用来指向对象的指针。在verilog中,可以通过层次化的索引来找到结构中的设计实例(例如 A.B.sigX),而在SV的对象索引时,需要通过句柄来索引对象的变量和方法。
  • Property属性(变量):在类中声明存储数据的变量。在verilog中它可以时wire和reg类型。
  • Method方法:类中可以使用task或者function来定义方法以便处理或者外部传入的数据。在verilog中可以在module定义task/function,也可以使用initial/always处理数据。

创建对象
Transaction tr; //声明句柄
tr = new(); // 创建对象 类的实例 也可以 Transaction tr = new();

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

创建对象时,可以通过自定义构建函数new()来完成变量的初始化和其他操作。
class Transaction;
bit [31:0] addr,crc,data[8];
function new();
addr=3;
foreach(data(i))
data(i) =5 ;
endfuction
endclass

构建函数new()时系统预定义函数,不需要指定返回值,函数会隐约地返回例化后的对象指针。

句柄的传递
Transaction t1,t2;//声明句柄t1、t2 悬空的句柄是空的
t1=new(); //例化对象,将其句柄赋予t1
t2=t1; // 将t1值赋予t2,即t1和t2指向同一个对象
t1=new(); //例化第二对象,将其句柄赋予t1

对象的销毁
当一个对象,在整个程序中没有一个地方再“需要”它时,它便会销毁。这里的需要指的是句柄指向该对象。

class word;
byte nb[];
function new( int i)
nb=new[i]; //动态数组的赋值是new[]
endfuction
endclass

initial begin
word wd;
for(int i=1; i<=4 ; i++)
wd=new(i); //前3个对象没有句柄
end
为对象的例化开辟需要4byte

可以通过句柄来使用对象中的成员变量或者成员方法
Transaction t;// 声明句柄
t=new(); //例化对象
t.addr=32’h42; //对象的成员变量赋初值
t.display();//调用对象成员的方法

静态变量
在class中声明的变量默认为动态变量,其生命周期始于对象创建终于对象销毁
使用static来声明class的变量,则为静态变量。静态变量的生命周期始于编译阶段,贯穿整个仿真阶段
如果在类中声明了静态变量,那么可以直接引用该变量class::var。类中的静态变量声明之后,无论例化多少个对象,
只可以共享一个同名的静态变量,因此静态变量在使用时需要注意共享资源的保护
class Transaction;
static int count=0;
int id;
function new();
id=count++;
endfuction
endclass

Transaction t1,t2;
initial begin
t1=new();// id=0 count=1
t2=new();// id=1 count=2
$dispaly(" Second id=%d ,count=%d “, t2.id, Transaction :: count); // id=1 count=2
end
静态方法
class 定义的方法默认为是动态方法,可以通过添加关键词static变为静态方法。
静态方法禁止使用类的动态变量。
class Transaction;
static Config cfg;
static int count = 0 ;
int id;
//通过静态方法调用静态变量
static function void display_statics();
$dispaly(” Transaction Cfg.mode =%s,count=%d ",cfg.mode.name(),count);
endfunction
endclass

相关内容

热门资讯

安卓7.0系统速度咋样,速度与... 你有没有发现,自从手机更新到安卓7.0系统后,感觉整个手机都焕然一新了呢?今天,就让我来给你详细聊聊...
安卓文件系统隔离,Androi... 你知道吗?在安卓的世界里,有一个神奇的小秘密,那就是安卓文件系统隔离。听起来是不是有点高大上?别急,...
电脑板安卓系统下载,轻松实现多... 你有没有想过,你的电脑板突然间变得如此强大,竟然能运行安卓系统?没错,这就是科技的魅力!今天,就让我...
安卓系统双开app排行,热门双... 安卓系统双开App排行大揭秘在数字化时代,手机已经成为我们生活中不可或缺的一部分。而安卓系统,作为全...
安卓原生系统谁在开发,谷歌主导... 你有没有想过,那个陪伴你每天刷抖音、玩游戏、办公的安卓系统,究竟是谁在背后默默开发呢?今天,就让我带...
vive属于安卓系统吗,揭秘V... 你有没有想过,那个让人眼前一亮的VR设备Vive,它到底是不是安卓系统的呢?这个问题,估计不少对VR...
ios系统和安卓系统传递文件,... 你有没有想过,当你把一张照片或者一个文件从你的手机传给朋友时,背后其实是一个复杂的系统在默默工作呢?...
安卓刷鸿蒙系统工具,一招解锁全... 你有没有想过,让你的安卓手机也来一场华丽的变身?没错,就是那种从安卓系统切换到鸿蒙系统的神奇之旅。今...
安卓系统看不到系统文件,为何无... 你是不是也遇到了这样的烦恼?手机里明明有好多文件,可就是找不到它们的小身影,安卓系统竟然看不到系统文...
安卓系统升级模式,迭代创新与用... 你知道吗?安卓系统升级模式,这可是个让人又爱又恨的话题。每次手机收到升级通知,心里既期待又紧张,就像...
安装安卓虚拟系统教程,安卓虚拟... 你有没有想过在电脑上也能体验安卓系统的乐趣呢?没错,就是那种随时随地都能玩手机游戏、刷抖音的感觉,现...
叶茂然安卓系统下载,畅享智能生... 你有没有听说最近叶茂然安卓系统下载成了热门话题?没错,就是那个叶茂然安卓系统!今天,我就要带你全方位...
安卓子系统下载地址,深度解析下... 你有没有想过,你的安卓手机里那些神秘的子系统其实也可以下载下来,自己动手安装呢?没错,今天就要来给你...
安卓手机系统铃声替换,唤醒你的... 你有没有发现,每次手机响个不停,是不是总想给它换个铃声,让它听起来更个性、更有范儿?没错,安卓手机系...
登陆系统和安卓系统区别,差异解... 你有没有想过,为什么你的手机里装了那么多应用,却还是觉得登陆系统有点儿麻烦呢?今天,就让我带你一起探...
安卓系统手表壁纸华为,科技美学... 你有没有发现,最近安卓系统手表的江湖风头正劲呢?尤其是华为家的那些宝贝,简直让人爱不释手。今天,就让...
安卓系统闹钟组件设置,轻松打造... 你有没有发现,每天早上闹钟响起的时候,是不是总感觉时间过得飞快,一转眼又是一个新的一天呢?今天,就让...
安卓系统的几大组件,组件架构与... 你有没有发现,你的安卓手机里藏着许多神奇的“小精灵”呢?它们默默无闻地工作,让你的手机变得如此强大和...
安卓系统关闭app流量,轻松关... 手机里的APP们是不是有时候让你觉得流量消耗得有点儿太快了呢?别急,今天就来教你几招,让你的安卓手机...
安卓系统无尽之海,安卓系统中的... 安卓系统,无尽之海中的航行者想象你正站在一望无际的海洋边,海风轻拂,波光粼粼。这片海洋,深邃而神秘,...