[UVM源代码研究] 聊聊uvm_tlm_analysis_fifo这个特殊的uvm_component(uvm-1.2版)

文章探讨了uvm_tlm_analysis_fifo在UVM中的使用,它作为TLM通信的中介,不使用phase机制,从uvm_component继承用于TLM机制。文章解释了factory机制的实现原理,以及为何uvm_tlm_analysis_fifo创建时不能用type_id::create,只能用new,同时讨论了parent参数的默认行为和uvm_tlm_analysis_fifo在UVM结构中的角色。

[UVM源代码研究] 聊聊uvm_tlm_analysis_fifo这个特殊的uvm_component(uvm-1.2版)

引言

uvm_tlm_analysis_fifo是我们在进行TLM通信时常用的中介,不仅省去了我们在target端要实现write通信方法的烦恼,同时还解决了同一个target实现多个同名通信方法时必须繁琐的使用`uvm_analysis_imp_decl宏及其配套的代码的问题,那么在具体使用的时候,同学们有时难免会产生以下疑惑:

  1. uvm_tlm_analysis_fifo从uvm_component继承而来,但为什么我们从来没有看到其中关于phase的定义和使用?
  2. 既然uvm_tlm_analysis_fifo从uvm_component继承而来,那为什么我们在创建的时候使用的new(“fifo_name”, this)而不是::type_id::create(“fifo_name”, this)
  3. uvm_tlm_analysis_fifo作为一个uvm_component的派生类,创建时new(“fifo_name”, this)的第二个参数可以缺省不写吗?

以上三个问题通常都会颠覆我们在UVM基础学习阶段的一些认知,通过对源代码的剖析,我们能够对factory机制以及uvm_component的使用场景有更为深刻的认识。

factory机制

在UVM基础知识部分,教科书上都会说明,要想实现某个uvm class(例如uvm_user_type)的factory机制,必须具备以下两个基本条件:

  1. 将类注册到工厂 uvm_object_utils()uvm_component_utils();
  2. 创建对象 uvm_user_type::type_id::create(“”[, container_component]);//对于uvm_component第二个参数必须指定,且通常用this获取当前component所在的component指针

我们这里以uvm_component为例讲解其中的实现机制(其实我们在之前的文章中已经具体讲解过factory机制的实现原理,看过的同学可以快速掠过,详细内容参见 [UVM源代码研究] 浅谈UVM factory机制的实现原理

`uvm_component_utils宏定义部分相关的代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值