知识点(验证)

主要是SV与覆盖率的问题

1.SV的基础知识

(1)数据类型logic

logic类型是SV对Verilog 中reg类型的改进,它既可以是变量,又可以被连续赋值、门电路和模块的

驱动。但是logic不能有多个驱动,在对双向总线建模时,此时需要线网类型。

logic属于四状态数据类型,分别为x z 1 0。四状态类型还包括wire reg integer time。四状态

数据类型在未赋值时默认是x,但wire是Z。

对于双状态数据类型,其连接到输出时需要注意,如果输出为X或Z时,其输出可能是1或0,并不

确定所以当电路有可能输出X或Z时,需要将其转换为1。

(2)动态数组

动态数组是指在定义数组是,不指明数组的宽度,如a[],数组的宽度由[]表示,在仿真时通过new[]

操作符分配空间。

2、class类

(1)类的定义

//定义类为 class name
//实例化为.new()
class sv_class;
  //成员变量
  int x;
 
  //成员函数
  task set(int i);
    x = i;
  endtask
 
  //成员函数
  function int get();
    return x;
  endfunction
endclass


(2)继承

class parent_class;
  bit [31:0] addr;
endclass
 
class child_class extends parent_class;
  bit [31:0] data;
endclass
 
module inheritence;
  initial begin
    child_class c = new();
    c.addr = 10;
    c.data = 20;
    $display("Value of addr = %0d data = %0d",c.addr,c.data);
  end
endmodule

子类继承父类所有的成员变量与成员函数,并且子类可以使用父类所有的成员变量与成员函数。

(3)多态 父类的句柄指向子类实例时,此时调用该句柄的方法实际上只会调用父类的方法,除非使用virtual关键字。将父类中的方法定义为virtual,则指向子类的父类句柄就会根据所指向的子类调用子类方法,这一特性表现为超类句柄的多态

// base class
class base_class;
  virtual function void display();
    $display("Inside base class");
  endfunction
endclass
 
// extended class 1
class ext_class_1 extends base_class;
  function void display();
    $display("Inside extended class 1");
  endfunction
endclass
 
// extended class 2
class ext_class_2 extends base_class;
  function void display();
    $display("Inside extended class 2");
  endfunction
endclass
 
// extended class 3
class ext_class_3 extends base_class;
  function void display();
    $display("Inside extended class 3");
  endfunction
endclass
 
// module
module class_polymorphism;
 
  initial begin
     
    //declare and create extended class
    ext_class_1 ec_1 = new();
    ext_class_2 ec_2 = new();
    ext_class_3 ec_3 = new();
     
    //base class handle
    base_class b_c[3];
     
    //assigning extended class to base class
    b_c[0] = ec_1;
    b_c[1] = ec_2;
    b_c[2] = ec_3;
     
    //accessing extended class methods using base class handle
    b_c[0].display();
    b_c[1].display();
    b_c[2].display();
  end
 
endmodule

输出

Inside base class 1
Inside base class 2
Inside base class 3
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务