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:
- UVM基础总结——基于《UVM实战》示例
一.前言 工作一直在做SoC验证,更关注模块间的连接性和匹配性,所以相比于擅长随机约束激励的UVM来说,定向测试的概念更容易debug.当然前提是IP已经被充分验证.因此觉得接触UVM的机会较少.到现 ...
- UVM基础之------uvm_transaction
uvm_transaction继承自uvm_object,添加了timing和recording接口,该类是uvm_sequence_item的基类.下边将做剖析 1. 这个类提供了时间戳属性(tim ...
- Cadence UVM基础视频介绍(UVM SV Basics)
Cadence关于UVM的简单介绍,包括UVM的各个方面.有中文和英文两种版本. UVM SV Basics 1 – Introduction UVM SV Basics 2 – DUT Exampl ...
- UVM基础之---Command-line Processor
提供一个厂商独立的通用接口命令行参数,支持分类: 1. 基本参数和值:get_args,get_args_matches 2. 工具信息:get_tool_name(),get_tool_ve ...
- UVM基础之------uvm phases机制
代码的书写顺序会影响代码的实现,在不同的时间做不同的事情,这是UVM phase的设计哲学,UVM phase提供了一个通用的TB phase 解决方案.支持显示的隐式的同步方案,运行时刻的线程控制和 ...
- UVM基础之-------uvm factory机制override<博>
override功能是UVM中一个比较重要的功能,这个功能也是在factory里面实现的,我们会在env或者具体的case中使用override功能. class case_x extends bas ...
- UVM基础之---------uvm factory机制register
factory机制的一大特点就是根据类的名字来创建类的实例. factory 机制中根据类名来创建类的实例所用到的技术:一是参数化的类,二是静态变量和静态函数.这两者是factory机制实现的根本所在 ...
- UVM基础之---------uvm factory机制base
从名字上面就知道,uvm_factory用来制造uvm_objects和component.在一个仿真过程中,只有一个factory的例化存在. 用户定义的object和component types ...
- UVM基础之-------uvm report机制的使用
后面的例子我会继续补充: 1. 因为uvm默认定义的message格式比较长,非常不利于debug过程中的分析使用,一般情况下,开始使用uvm,都要利用uvm_report_server重新定义mes ...
随机推荐
- 图解Windows下安装WebLogic
Oracle 的Weblogic分开发者版本和生产版本,有32位和64位.一般生产版本的weblogic是64位的,安装文件是一个大小为1G多的jar包.去oracle官网上下载64版weblogic ...
- 原则 principles
1.找到对的人来讨论问题. 2.把工作分配给对的人才能把事情做对. 3.
- Windows 10 S中的Device Guard详解(上篇)
本文探讨Windows 10 S(下称Win10S)中的Device Guard(设备保护,下称DG).我将提取策略,并弄清楚在默认Win10S系统上可以和不可以运行什么.我将在下一篇文章中介绍在不安 ...
- 剑指Offer —— BFS 宽度优先打印
https://www.nowcoder.net/practice/7fe2212963db4790b57431d9ed259701?tpId=13&tqId=11175&tPage= ...
- Android Jni Android.mk经常使用语句
仅仅要涉及JNI开发都涉及到Android.mk编写,它也是一种makefile语言. 以上一篇博客中提供的project为例! <1> : 信息打印 : 既然是一种简易语言那么首先应该知 ...
- oracle initialization or shutdown in progress 问题解决
今天登录oracle时遇到oracle initialization or shutdown in progress 这个错误提示,在网上搜了下,试了非常多方法,最后结合几种方法结合,成功攻克了问题! ...
- Lighttpd 插件mod_h264 streaming (mp4)安装
1. 对于安装lighttpd须要支持mp4伪流媒体格式,建议不要到官方下载lighttpd安装文件,到 插件H264 Streaming Module官网,下载已经整合了的安装包 http://h2 ...
- 75. Autorelease机制及释放时机
Autorelease机制是iOS开发人员管理对象内存的好伙伴.MRC中.调用[obj autorelease]来延迟内存的释放是一件简单自然的事:ARC下,我们甚至能够全然不知道Autoreleas ...
- 【bzoj4591】[Shoi2015]超能粒子炮·改
设S(n,k)=Σ C(n,i) i=0..k 根据lucas定理可以得到 S(n,k) mod p = [ S(n/p,k/p-1)*S(n mod p,p-1)+C(n/p,k/p)*S(n mo ...
- wxpc