数字IC验证——SystemVerilog学习

一般来说,在数字IC验证中,编写testbench文件会采用verilog,但随着设计越来越复杂,为了更方便例化模块,面向对象编程的SystemVerilog(以下简称SV)越来越流行。
数字IC验证——SystemVerilog学习_第1张图片

1.SV基本语法

见链接:https://blog.csdn.net/qq_39815222/article/details/106538103

2.面向对象编程

有关面向对象编程的基础概念参考 C/C++——基础语法学习 篇第4大节。
链接:https://blog.csdn.net/qq_39815222/article/details/80529000

  • 概念补充

为提高调用效率,免于模块重用,面对对象编程可创建复杂的数据类型并把他们封装在一起使其共同工作。
与C++中不同的是,在SV中,若对象没有指针指向它,它会自动释放掉其物理空间

在新旧项目版本交替过程中,利用继承可在就testbench文件基础上添加新功能。

类内部声明和定义必须是task或function,不得使用过程块always或initial

子类在定义new函数时,首先调用父类的new函数即super.new()。如果父类的new函数没有参数,子类也可以省略该调用,而系统会在编译是自动添加super.new()。

  • 示例

class class1;            //声明
  bit [31:0] A;                 //properties
  function void f1();                  //methods
  endfunction: f1
endclass: example
class class2 extends class1;          //继承
  function void f1();
  super.f1();                                 //调用父类的成员并改写
  endfunction
endclass

class1 example1;              //调用
example1 = new();           //构造函数:分配空间,初始化类里面的变量,返回该空间的地址给example1
example2 = example1;  //把example1的地址空间给example2
example1.A = 32'h48;      //赋值
example1.f1();

3.覆盖率

检测验证目标完成的百分比,
covergroup可以包含多个覆盖采样点,EDA会产生bin来保存采样数据,并通过分析工具来统计

  • 覆盖率分类
  1. function coverage
    根据spec人为描述功能,检查哪些功能覆盖到,需要做的主要是定义覆盖集(采样点)和采样时间
  2. code coverage
    包括语句,状态机,路径覆盖率(path),表达式覆盖率等
  3. assertion coverage
    检测信号间承接的情况
  • 示例

class1 tr;
covergrou conPort;            //声明
     coverpioint    tr.port;    //定义采样点
endgroup
conPort ck = new;           //调用
ck.sample();                   //采样

4. 断言(assertion)

使用一个关键词表明一个意图,通过 property 表现出来

  • 示例

property getSignal;
    @(clk) not( countValue < 9 );
endproperty: getSignal
agetSignal: assert property( getSignal ) statement1;   //若满足assertion执行statement1,否则执行statement2
    else statement2;

 

 

 

 

 

 

你可能感兴趣的:(数字IC)