systemVerilog的一些基本概念(类/对象/句柄/属性/方法/原型) this指针和$cast

目录

1. 基本概念

2.this指针

3.$cast


1. 基本概念

以下的这些基本概念其实是面向对象编程的基本术语。
类(class):包含变量和子程序的基本构建块。
对象(object):类的实例
句柄(handle):指向对象的指针。一个句柄可以指向很多对象。
属性(property):存储数据的变量
方法(method):任务或者函数中操作的程序性代码
原型(prototype):程序的头,包括程序名、返回类型和参数列表

可参考:

systemverilog语法(五)

2.this指针

this指针的概念在c++里面也有。

在面向对象语言中,this经常用来表示对当前对象的一个引用,可以理解为指向对象本身的一个指针,并且常作为类中方法的隐含形参,通过该形参可以访问对象内部的属性和方法

可参考 SystemVerilog中这个this到底怎么回事 

3.$cast

$cast可以对不同的内建类型进行转换,用的更多的是不同层次之间类的转换。也就是在父类与子类之间的转换。

可以参考

$cast()的个人理解

下面给出一种使用cast的场景:

在sequence中交替发送my_transaction和your_transaction。在sequencer和driver中设置能够接受的数据类型为uvm_sequence_item。

class case0_sequence extends uvm_sequence;
    my_transaction m_trans;
    your_transaction y_trans;

    virtual task body();
        repeat (10) begin
            `uvm_do(m_trans);
            `uvm_do(y_trans);
        end
    endtask

    `uvm_object_utils(case0_sequence)
endclass

这样带来的问题是,由于driver中接收的数据类型是uvm_sequence_item,如果它要使用my_transaction或者your_transaction中的成员变量,就必须使用cast转换:

task my_driver::main_phase(uvm_phase phase);
    my_transaction m_tr;
    your_transaction y_tr;

   while(1) begin
    seq_item_port.get_next_item(req);
    if ($cast(m_tr, req)) begin
        drive_my_transaction(m_tr);
        `uvm_info("drive", "receive a transaction whose type is my_transaction", UVM_NONE);
    end
    else if ($cast(y_tr, req)) begin
        drive_your_transaction(y_tr);
        `uvm_info("drive", "receive a transaction whose type is your_transaction", UVM_NONE);
    end
    else begin
        `uvm_error("drive", "receive a transaction whose type is unknown");
    end

    seq_item_port.item_done();
end

endtask

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值