首页|资源下载
登录|注册

您现在的位置是:首页 > 技术阅读 >  类、对象和验证平台

类、对象和验证平台

时间:2024-07-14

类(class)定义对象(object)的属性和行为,即例如一个人有手有脚(属性)、能提桶能跑路(行为)。

类是一个没有实体的描述,根据这个描述可以创建多个相同类型的对象。

多个对象之间的属性通过各自的方法进行交互,共同协作完成一个目的就是程序。

class vs module

在验证平台中使用systemverilog class和使用verilog module是显著不同的。因为类和对象是动态的,具有短暂的生命周期,而verilog module中的所有变量在仿真过程中都是静态的,所以大家往往在verdi里面能拉出verilog设计的信号,而无法拉出systemverilog验证环境中的变量。

在功能验证中,验证平台的构建和激励的发送其实也都是动态的过程,某个请求完成DUT的激励和响应的检查就不再存在,应该释放掉内存。所以使用类来搭建测试平台会更加合理高效。

在UVM中uvm_component和uvm_object都是类,不过uvm_component作用的时间会更长一点。

class 代码示例

class car ;//class definition


int m_num_doors; // number of doors
bit m_is_locked[]; // locked state per door


task drive_forward();
    $display("Car is driving forward");

endtask : drive_forward


task unlock_door(input int door);
      m_is_locked[door] = 0;

  endtask


task lock_door(input int door);
      m_is_locked[door] = 1;

endtask


function new(input int num_doors=4);
m_num_doors = num_doors;
m_is_locked = new[num_doors];
foreach(m_is_locked[i]) m_is_locked[i] = 1;
endfunction
endclass : car

module top;
car my_car;
initial begin
my_car = new(4);
my_car.lock_door(0);
my_car.unlock_door(0);
my_car.drive_forward();
end
endmodule

上面的代码示例是一个典型的class&object和程序的示例:
1、首先这个类或者对象具有2个属性:
m_num_doors:表示这个车具有多少个门
m_is_locked[]:数组的大小会在new函数中根据门的个数设定,表示门打开或者关闭的状态

2、然后这个类具有3个方法:
drive_forward:开车,这边只是简单的打印
lock_door:关特定的门
unlock_door:开特定的门
3、最后的initial begin-end就是前面提到的“程序”,根据程序设计的目的,调用某些类的方法以操作不同的属性,以实现同一个对象或者不同对象之间的交互。

从这个角度来看,程序就是对象属性之间的通信。