0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SystemVerilog中class是什么意思

芯片验证工程师 来源:芯片验证工程师 作者:验证哥布林 2022-11-14 09:11 次阅读

class,是面向对象编程(object-oriented programming (OOP))的基础,而OOP可以让你创建更高抽象级别的验证环境(如UVM)。

class就是相对于verilog更高级别的抽象,因为verilog太过关注细节,不利于验证和建模。

随着SystemVerilog中class的引入,这一切都变了。

class包括变量(类属性,properties)和子程序(类方法,methods)

SystemVerilog中的类方法一般就是SystemVerilog task(可能消耗时间)/function(不能消耗时间)。

简言之,类属性和类方法定义了这个类有什么以及能够干什么

通过类属性和类方法,我们可以更加容易地创建模块化的验证平台,因为在事务级而不是RTL级别,能够更容易理解设计和编码验证用例。

一般,类中会有一个构造函数(new,我们可以理解为RTL中module的例化,只有调用构造函数后,才真正存在类的实体,在这之前就只是一个文本的定义而已。

在一个类没有指向任何的对象实体时,Systemverilog的垃圾回收机制会自动地释放相应的内存空间。

Base Class

基类是类层次结构中最顶层的类,从这个基类可以派生出更加丰富多彩的派生类。

下面是一个基类PCI的例子,类中有command、address,data,CycleType等属性。此外,这个基类还可以基于这些属性,做各种各样的事情,例如命令的发送。

每个设计中PCI总线支持的特性都是不同的,但是作为一个基类,PCI具有一些可以统一封装在定义中的公共属性和方法。

 module class_TOP( );
 
 class PCI;
    //Class properties
    logic [3:0] command;
    logic [31:0] address;
    logic [31:0] data;
    logic [3:0] CycleType;
    //base class constructor -  initialization
    function new( );
        command = 0;
        address = 0;
        CycleType = 4'hf;
        data = 64'bz;
        $display("PCI Init: data=%h command=%b addr=%h 
CycleType=%b", data, command, address, CycleType);
    endfunction
 task PCIWriteCycle (clk);
 begin
    command = $urandom;
    address = $urandom;
    CycleType = $urandom;
    $display("PCI Write Cycle : clk=%b data=%h command=%b 
addr=%h CycleType=%b", clk, data, command, address, CycleType);
 end
 endtask
 endclass : PCI
 
 bit clock;
 PCI PCI1; //defne variable PCI1 of type PCI
 initial begin
    PCI1 = new( ); //instantiate class – allocate memory
 //PCI1 now holds an object handle.
 end
 initial begin
    clock = 0;
    forever begin
    #10; clock=!clock;
 end
 
 end
 always @(posedge clock) begin
 //access class property using object handle PCI1
    PCI1.data = $urandom;
 //Call Class method PCIWriteCycle
    PCI1.PCIWriteCycle(clock);
 end
 
 initial #60 $finish(2);
 endmodule

1、首先,我们声明一个名为PCI的类。在这个类中,我们声明了类属性:

 logic [3:0] command;
 logic [31:0] address;
 logic [31:0] data, mem;
 logic [3:0] CycleType;

2、然后声明类构造函数new(),用于初始化类属性。如果不声明,当类被实例化时会调用隐式的new()函数。

在本例中,函数new()将初始化为类中各个属性的默认值。2态变量初始化为0,4态变量初始化为x。

function new( );
 command = 0;
 address = 0;
 CycleType = 4'hf;
 data = 64'bz;
 $display("PCI Init: data=%h command=%b addr=%h 
CycleType=%b", data, command, address, CycleType);
 endfunction

3、然后定义一个名为PCIWriteCycle的方法,这里是一个systemverilog function。

在这个方法我们我们完成一些类属性的简单赋值,从设计的含义上就是随机发送不同的命令/地址/传输类型等信息

task PCIWriteCycle (clk);
 begin
 command = $urandom;
 address = $urandom;
 CycleType = $urandom;
 $display("PCI Write Cycle : clk=%b data=%h command=%b 
addr=%h CycleType=%b", clk, data, command, address, CycleType);
 end
 endtask

4、在类定义之后,我们继续声明一个类的对象并示例化。注意:只有在调用new()之后才分配了实际的内存,PCI1(对象)就是一个指向这个内存空间的指针(或者是句柄,handle)。

而如果不示例化,变量PCI1就是一个空指针“null”

PCI PCI1; //defne variable PCI1 of type PCI
PCI1 = new( ); //instantiate class – allocate memory

5、然后,我们使用对象句柄PCI1去调用类的方法PCIWriteCycle。

always @(posedge clock) begin
 //access class property using object handle PCI1
 PCI1.data = $urandom;
 //Call Class method PCIWriteCycle
 PCI1.PCIWriteCycle(clock);
end

仿真log:

PCI Init: data=zzzzzzzz command=0000 addr=00000000 CycleType=1111
PCI Write Cycle : clk=1 data=12153524 command=0001 addr=8484d609 
CycleType=0011
PCI Write Cycle : clk=1 data=06b97b0d command=1101 addr=b2c28465 
CycleType=0010
PCI Write Cycle : clk=1 data=00f3e301 command=1101 addr=3b23f176 
CycleType=1101
$fnish called from fle "testbench.sv", line 52.
$fnish at simulation time 60
 V C S S i m u l a t i o n R e p o r t





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    18962
  • OOP
    OOP
    +关注

    关注

    0

    文章

    14

    浏览量

    8741
  • Verilog语言
    +关注

    关注

    0

    文章

    113

    浏览量

    8159

原文标题:SystemVerilog中class的基本概念

文章出处:【微信号:芯片验证工程师,微信公众号:芯片验证工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [启芯公开课] SystemVerilog for Verification

    学快速发展,这些趋势你了解吗?SystemVerilog + VM是目前的主流,在未来也将被大量采用,这些语言和方法学,你熟练掌握了吗?对SoC芯片设计验证感兴趣的朋友,可以关注启芯工作室推出的SoC芯片
    发表于 06-10 09:25

    systemverilog学习教程

    systemverilog的一些基本语法以及和verilog语言之间的区别。
    发表于 04-01 14:24

    round robin 的 systemverilog 代码

    大家好,我对一个 round robin 的 systemverilog 代码有疑惑。https://www.edaplayground.com/x/2TzD代码第49和54行是怎么解析呢 ?
    发表于 03-14 19:16

    做FPGA工程师需要掌握SystemVerilog吗?

    在某大型科技公司的招聘网站上看到招聘逻辑硬件工程师需要掌握SystemVerilog语言,感觉SystemVerilog语言是用于ASIC验证的,那么做FPGA工程师有没有必要掌握SystemVerilog语言呢?
    发表于 08-02 20:30

    如何在SystemVerilog为状态机的命令序列的生成建模

     我们将展示如何在SystemVerilog为状态机的命令序列的生成建模,并且我们将看到它是如何实现更高效的建模,以及实现更好的测试生成。​
    发表于 01-01 06:05

    使用SystemVerilog来简化FPGA接口的连接方式

    FPGA接口的连接方式。    也许很多FPGA工程师对SystemVerilog并不是很了解,因为以前的FPGA开发工具是不支持SystemVerilog的,导致大家都是用VHDL或者Verilog来
    发表于 01-08 17:23

    SystemVerilog有哪些标准?

    SystemVerilog有哪些标准?
    发表于 06-21 08:09

    更好地理解SystemVerilog的多态Polymorphism

    多态(Polymorphism) ,从字面意思上看指的是多种形式,在OOP(面向对象编程)中指的是同一个父类的函数可以体现为不同的行为。在SystemVerilog,指的是我们可以使用父类句柄来
    发表于 12-05 17:34

    SystemVerilog Assertion Handbo

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    发表于 07-22 14:08 188次下载

    SystemVerilog的断言手册

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    发表于 07-22 14:12 20次下载

    SystemVerilog的正式验证和混合验证

    手册的这一部分探讨了使用SystemVerilog进行验证,然后查看了使用SystemVerilog的优点和缺点。
    发表于 03-29 10:32 23次下载

    SystemVerilog中的struct

    SystemVerilog“struct”表示相同或不同数据类型的集合。
    的头像 发表于 11-07 10:18 1915次阅读

    SystemVerilogclass的基本概念

    class,是面向对象编程(object-oriented programming (OOP))的基础,而OOP可以让你创建更高抽象级别的验证环境(如UVM)。
    的头像 发表于 11-14 09:11 1396次阅读

    Systemverilogclass类型的记录

    class里面包含data和对data进行操作的subroutines(functions and tasks)。class的data称为class properties,subroutines称为methods。两者都是
    的头像 发表于 05-24 14:29 383次阅读
    <b class='flag-5'>Systemverilog</b>里<b class='flag-5'>class</b>类型的记录

    SystemVerilog在硬件设计部分有哪些优势

    谈到SystemVerilog,很多工程师都认为SystemVerilog仅仅是一门验证语言,事实上不只如此。传统的Verilog和VHDL被称为HDL(Hardware Description
    的头像 发表于 10-19 11:19 446次阅读
    <b class='flag-5'>SystemVerilog</b>在硬件设计部分有哪些优势