Port Base Classes   
uvm_port_component_base    This class defines an interface for obtaining a port’s connectivity lists after or during the end_of_elaboration phase.主要用来在end_of_elaboration phase后返回某个接口的连接列表
uvm_port_component #(PORT)    See description of uvm_port_component_base for information about this class是对uvm_port_component_base的特化,实现uvm_port_component_base中的接口
uvm_port_base #(IF)    Transaction-level communication between components is handled via its ports, exports, and imps, all of which derive from this class.是ports,exports,imps的基类,里边实例化了uvm_port_component #(PORT)
typedef uvm_port_component_base uvm_port_list[string];//定义了一个uvm_port_component_base 的数组类型uvm_port_list
uvm_port_component_base://这是一个纯虚类,定义的是纯虚方法,继承自这个类的子类需要提供纯虚方法的实现。
1. 这个类定义了一个接口在end_of_elaboration后获取一个端口的连接列表,The sub-class, uvm_port_component #(PORT), implements this interface.
2. The connectivity lists are returned in the form of handles to objects of this type.  This allowing traversal of any port’s fan-out and fan-in network through recursive calls to get_connected_to and get_provided_to.  Each port’s full name and type name can be retrieved using get_full_name and get_type_name methods inherited from uvm_component.
3. 内部实现的接口
3.1 pure virtual function void get_connected_to(ref uvm_port_list list);该port被连接到了那些port, export,implementations,通过uvm_port_list 返回
1. For a port or export type, this function fills list with all of the ports, exports and implementations that this port is connected to.
3.2 pure virtual function void get_provided_to(ref uvm_port_list list);//本export,implementation为那些port,export,implementation提供了实现
2. For an implementation or export type, this function fills list with all of the ports, exports and implementations that this port is provides its implementation to.
3.3 pure virtual function bit is_port();//根据本port的类型返回 
3.4 pure virtual function bit is_export(); 
3.5 pure virtual function bit is_imp();

剖析uvm_port_component #(PORT)扩展自uvm_port_component_base
2.1 唯一属性PORT m_port;
2.2 function new (string name, uvm_component parent, PORT port);给m_port=port
2.3 virtual function string get_type_name()返回port的类型名字
2.4 virtual function void resolve_bindings();出来m_port的所有端口链接
2.5 function PORT get_port();返回m_port,下列函数都是调用m_port的对应函数实现
2.6 virtual function void get_connected_to(ref uvm_port_list list);//返回实际的端口目标m_port的连接数
2.7 virtual function void get_provided_to(ref uvm_port_list list)//返回实际的端口目标m_port的连接数
2.8 function bit is_port ();
2.9 function bit is_export ();
2.10 function bit is_imp ();

uvm_port_base #(IF)该类继承了IF并在内部组合了uvm_port_component #(PORT=IF)而这些构成了tlm中各种接口的基类.所以uvm_port_base #(IF)是uvm_port_component #(PORT=IF)的代理
1. 组建之间的Transaction-level 通信是通过组件的ports,exports及imps,这些都是由这个类继承而来。
2. IF  The interface type implemented by the subtype to this base port,For the TLM interfaces, the IF
parameter is always uvm_tlm_if_base #(T1,T2).
3. Just before uvm_component::end_of_elaboration_phase, an internal uvm_component::resolve_bindings process occurs,after which each port and export
holds a list of all imps connected to it via hierarchical connections to other ports and exports
4. uvm_port_base拥有组件的属性,他们有一个层次实例路径和父母  Because SystemVerilog does not support multiple inheritance,uvm_port_base cannot extend both the interface it implements and uvm_component.Thus, uvm_port_base contains a local instance of uvm_component, to which it delegates
such commands as get_name, get_full_name, and get_parent. 
// local, protected, and non-user properties
protected int unsigned  m_if_mask;
protected this_type     m_if;    // REMOVE
protected int unsigned  m_def_index;
uvm_port_component #(this_type) m_comp; //组合方式声明一个uvm_port_component #(PORT)
local this_type m_provided_by[string]; //连接到和被连接到的port
local this_type m_provided_to[string];
local uvm_port_type_e   m_port_type;
local int               m_min_size; //允许连接的最大最小端口数量
local int               m_max_size;
local bit               m_resolved;
local this_type         m_imp_list[string];//一个实现的列表
3.1  function new (string name,
uvm_component parent,
uvm_port_type_e port_type,
int min_size=0,
int max_size=1);//配置port的类型,连接数的限制,等
1. 前面两个参数是一般的uvm_component构造类的参数
2. The port_type can be one of UVM_PORT, UVM_EXPORT, or UVM_IMPLEMENTATION.
3. The min_size and max_size specify the minimum and maximum number of implementation (imp) ports that must be connected to this port base by the end of elaboration.  Setting max_size to UVM_UNBOUNDED_CONNECTIONS sets no maximum,i.e., an unlimited number of connections are allowed.
3.2 function string get_name();//m_comp.get_name()
3.3 virtual function string get_full_name();//m_comp.get_full_name()
3.4 virtual function uvm_component get_parent()//m_comp.get_parent()
3.5 virtual function uvm_port_component_base get_comp();return m_comp;
1. 返回一个代表这个端口内部代理组件的句柄 
       2. Ports 被认为是组件,但是他们并没有继承uvm_component,相反,它们包含uvm_port_component #(PORT)的一个实例作为这个端口的代理
 
3.6 virtual function string get_type_name();//返回类型名
1. Otherwise, only a generic “uvm_port”, “uvm_export” or “uvm_implementation” is returned.
3.7 function int max_size ();function int min_size ();返回大小范围值
3.8 function bit is_unbounded ();测试max_int是否无穷大,是否为-1
3.9 function bit is_port ();function bit is_export ();function bit is_imp ();测试m_port_type的类型
3.10 function int size ();//返回m_imp_list.num(),连接到本port的export,port, implementation数
1. Gets the number of implementation ports connected to this port.  The value is not valid before the end_of_elaboration phase, as port connections have not yet been resolved
3.11function uvm_port_base #(IF) get_if(int index=0);//从m_imp_list返回一个uvm_port_base #(IF)
3.12 virtual function void resolve_bindings();//该函数在end_of_elaboration phase阶段前自动调用他检查每个port的fanout是否都提供了实现,并记下实现的数目和min, max做比较
3.13 function void set_if (int index=0);//取出一个实现给m_if,m_default_if
  3.14 function void set_default_index (int index);
3.15 local function void m_add_list           (this_type provider);把一个实现记录到m_imp_list
virtual function void connect(this type provider)
1. Connects this port to the given provider port,必须要满足下面的条件:
1. Their type parameters must match
2. The provider’s interface type (blocking, non-blocking, analysis, etc.) must be compatible.Each port has an interface mask that encodes the interface(s) it supports.  If the bitwise AND of these masks is equal to the this port’s mask, the requirement is met and the ports are compatible.  For example, a uvm_blocking_put_port #(T) is compatible with a uvm_put_export #(T) and uvm_blocking_put_imp #(T) because the export and imp provide the interface
required by the uvm_blocking_put_port.
3. Ports of type UVM_EXPORT can only connect to other exports or imps.
4. Ports of type UVM_IMPLEMENTATION cannot be connected, as they are bound to the component that implements the interface at time of construction
注意:
 If this port is a UVM_PORT type, the provider can be a parent port, or a sibling export or implementation port.
       If this port is a UVM_EXPORT type, the provider can be a child export or implementation port.
3.16 local function bit  m_check_relationship (this_type provider);对连接关系进行检查
analysis port, allow connection to anywhere
Connecting port-to-port: CHILD.port.connect(PARENT.port)
Connecting port-to-export: SIBLING.port.connect(SIBLING.export)
Connecting port-to-imp:    SIBLING.port.connect(SIBLING.imp)  
Connecting export-to-export: PARENT.export.connect(CHILD.export)
Connecting export-to-imp:    PARENT.export.connect(CHILD.imp) 
3.17 function void get_provided_to (ref uvm_port_list list);  //返回m_provide_to
3.18function void get_connected_to (ref uvm_port_list list); //返回m_provided_by
3.19function void debug_provided_to  (int level=0, int max_level=-1); //本函数打印一个port/export的图谱
3.20  function void debug_connected_to (int level=0, int max_level=-1); //本函数打印一个本port到port/export/implement的图谱
3.21 virtual function void connect (this_type provider);//为provider到本port提供连接会检查一些连接规则,如果连接规则违反会在这里进行告警,对这部分的连接规则:
uvm_blocking_put_port #(T)-》uvm_put_export #(T)-》uvm_blocking_put_imp #(T)
Ports of type <UVM_EXPORT> can only connect to other exports or imps
Ports of type <UVM_IMPLEMENTATION> can not be connected, as they are
bound to the component that implements the interface at time of   
construction.                                                     
port is an UVM_PORT type, the ~provider~ can be a parent port,or a sibling export or implementation port
If this port is an <UVM_EXPORT> type, the provider can be a child export or implementation port
location:

来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/bob62/p/3874188.html

UVM基础之------uvm_port_base相关推荐

  1. UVM基础-TLM通信机制(二)

    目录 TLM 2.0 通信 端口定义 传送数据 时间标记 同步通信元件 uvm_event uvm_event 总结 uvm_barrier uvm_callback TLM 2.0 通信 TLM 2 ...

  2. UVM基础-Seq-Sqr-Driver交互详解

    一.Sequence机制的使用方法 1.1 seq.sqr与driver 熟悉UVM的朋友都知道,在一个基于UVM搭建的验证环境中,Sequence负责产生环境所需的数据包:Transaction,而 ...

  3. UVM基础-Sequence、Sequencer(二)

    目录 sequence和sequencer 将sequence挂载到sequencer 将item挂载到sequencer 宏定义使用实例 sequencer仲裁特性 实例 sequencer的锁定机 ...

  4. UVM基础-Sequence、Sequencer(一)

    目录 Sequence.Sequencer.Driver大局观 Sequence和item item与sequence的关系 flat sequence hierarchical sequence s ...

  5. 【UVM基础】工厂(factory)机制快速上手指南

    文章目录 一.factory工厂机制 1.1.登记注册 1.2. 实例化对象 1.3. 覆盖override 1.4. 检查覆盖是否完成-factory.print() 一.factory工厂机制 在 ...

  6. 【UVM基础】CallBack机制快速上手指南

    文章目录 一.Callback机制的作用 二.回调函数callback的使用步骤: 三.代码code应用实例 3.1.声明一个UVM callback空壳类 3.2.在组件中的主操作函数或任务之前或者 ...

  7. 【UVM基础】UVM 树形组织结构

    通过parent的形式, UVM建立起了树形的组织结构. 在这种树形的组织结构中, 由run_test创建的实例是树根, 并且树根的名字是固定的, 为uvm_test_top: 在树根之后会生长出枝叶 ...

  8. 【UVM基础】UVM 的 build_phase 执行顺序

    在UVM的树形结构中, build_phase的执行遵照从树根到树叶的顺序, 即先执行my_env的build_phase, 再执行my_driver的build_phase. 当把整棵树的build ...

  9. uvm基础(2)TLM通信,看这一篇就够了

    tlm通信概述 tlm通信的步骤:1.分辨出initiator和target,producer和consumer. 2.在target中实现tlm通信方法. 3.在俩个对象中创建tlm端口. 4.在更 ...

最新文章

  1. 彻底理解H5的DOM事件
  2. 别瞎学了,这几门语言要被淘汰了!
  3. Django REST framework 开始
  4. 虚拟主机的实现方式,真是简单啊!
  5. 通过示例Hibernate–第2部分(DetachedCriteria)
  6. protected访问权限_复习封装与访问控制
  7. java font属性,css font-family属性怎么用
  8. 电子数字计算机最早应用于哪个领域,2013计算机一级B考试模拟试题及答案(2)...
  9. java 旋转图片_Java实现图片翻转以及任意角度旋转
  10. 微信小程序中的空格和换行操作
  11. idea项目乱码问题
  12. scala递归求斐波那契数列
  13. Android-JNI开发系列《一》-动态库的函数注册
  14. 计算机等级考试一级wps office 教程,全国计算机等级考试一级WPSOffice教程
  15. yum源配置(网络仓库)
  16. Mongodb分片学习
  17. 浅析显卡市场的未来走向:现在可以抄底了吗?
  18. 保护你的隐私,五种控制Android应用的权限的方法
  19. 用 JavaScript 编写日历
  20. 一道雅思作文题引发的联想,酒吧凳子为什么那么高?

热门文章

  1. Spring事务专题(四)Spring中事务的使用、抽象机制及模拟Spring事务实现
  2. Struts2 为什么被淘汰?自己作死!
  3. 跟Kafka学技术系列之时间轮
  4. java8常用stream
  5. 我为什么逃离无人车公司
  6. JAVA元注解@interface详解(@Target,@Documented,@Retention,@Inherited)。
  7. 青少年蓝桥杯_2020_steam考试_中级组_第二题
  8. 软件测试报告重点审核点有哪些,软件测试-测试报告.doc
  9. 浅析网络流量分析原理:如何把二进制“天书”变成“人话”
  10. 2020年,数据中心的绿色技术演进与创新