[UVM源代码研究] 聊聊uvm_tlm_analysis_fifo这个特殊的uvm_component(uvm-1.2版)
引言
uvm_tlm_analysis_fifo是我们在进行TLM通信时常用的中介,不仅省去了我们在target端要实现write通信方法的烦恼,同时还解决了同一个target实现多个同名通信方法时必须繁琐的使用`uvm_analysis_imp_decl宏及其配套的代码的问题,那么在具体使用的时候,同学们有时难免会产生以下疑惑:
- uvm_tlm_analysis_fifo从uvm_component继承而来,但为什么我们从来没有看到其中关于phase的定义和使用?
- 既然uvm_tlm_analysis_fifo从uvm_component继承而来,那为什么我们在创建的时候使用的new(“fifo_name”, this)而不是::type_id::create(“fifo_name”, this)
- uvm_tlm_analysis_fifo作为一个uvm_component的派生类,创建时new(“fifo_name”, this)的第二个参数可以缺省不写吗?
以上三个问题通常都会颠覆我们在UVM基础学习阶段的一些认知,通过对源代码的剖析,我们能够对factory机制以及uvm_component的使用场景有更为深刻的认识。
factory机制
在UVM基础知识部分,教科书上都会说明,要想实现某个uvm class(例如uvm_user_type)的factory机制,必须具备以下两个基本条件:
- 将类注册到工厂
uvm_object_utils()和uvm_component_utils(); - 创建对象 uvm_user_type::type_id::create(“”[, container_component]);//对于uvm_component第二个参数必须指定,且通常用this获取当前component所在的component指针
我们这里以uvm_component为例讲解其中的实现机制(其实我们在之前的文章中已经具体讲解过factory机制的实现原理,看过的同学可以快速掠过,详细内容参见 [UVM源代码研究] 浅谈UVM factory机制的实现原理
`uvm_component_utils宏定义部分相关的代码如下:

文章探讨了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结构中的角色。
最低0.47元/天 解锁文章
2215

被折叠的 条评论
为什么被折叠?



