UVM提供了一个新的类uvm_barrier用来对多个组件进行同步协调,同时为了解决组件独立运作的封闭性需要,也定义了新的类uvm_barrier_pool来全局管理这些uvm_barrier对象。这里的uvm_barrier_pool同之前的uvm_event_pool一样,也是基于uvm_object_string_pool的通用参数类来进一步定义的: typedef uv
uvm_object_string_pool的KEY是string类型。uvm_event_pool由uvm_object_string_pool #(uvm_event)声明,KEY是string类型,T是uvm_event类型。uvm_event是sv中event的class warpper,内建了很多方法。 # uvm_pool.svh class uvm_object_string_pool #(type T=uvm_object) extends uvm_pool #(string,T); ... ...
uvm_pool.svh中实现了两个class,其一是uvm_pool,另一是在uvm_pool基础上派生出可通过字符串对动态关联数组进行索引的通用类uvm_object_string_pool。uvm中用到uvm_object_string_pool的地方有uvm_event_pool、uvm_barrier_pool等。 uvm_pool直接派生自uvm_object,实现了一个动态关联数组的基类,可根据需求对稀疏...
首先寄存器模型将HDL路径以字符串的形式存储在队列中,这个队列又作为uvm_object_string_pool键值对中的值存储在hdl_paths_pool中,默认的键(key)是"RTL"。如图12所示。 图12 src/reg/uvm_reg_block.svh中存储HDL路径的键值对 我们可以通过调用add_hdl_path来添加寄存器模型的HDL路径,如图13所示,添加HDL路径可以指...
uvm_event_pool是一个参数为uvm_event类型的uvm_object_string_pool,而uvm_object_string_pool又是继承于uvm_pool。uvm_event_pool和uvm_pool没有太大差别,也不是很复杂,在这里不是重点。 UVM : uvm_event, uvm_event_pool module test import uvm_pkg::*; ...
(1)不同的组件可以共享同一个uvm_event,这不需要通过跨层次传递uvm_event对象句柄来实现共享的,因为这并不符合组件环境封闭的原则。这种共享同一个uvm_event对象是通过uvm_event_pool这一全局资源池来实现的。 (2) uvm_event_pool这个资源池类是uvm_object_string_pool #(T)的子类,它可以生成和获取通过字符串...
这个资源池类是uvm_object_string_pool #(T)的子类,它可以生成和获取通过字符串来索引的uvm_event对象。通过全局资源池对象(唯一的),在环境中任何一个地方的组件都可以从资源池中获取共同的对象,这就避免了组件之间的互相依赖。接下来,我们就结合uvm_event、uvm_event_pool和uvm_event_callback来讲解一个典型用例...
以uvm_event#(uvm_object)作为参数,继承自uvm_object_string_pool,该类的继承关系如下图所示: uvm_object_string_pool#(T)包含的常用方法有:get()、delete()等。 get()根据输入字符串返回一个T类型的对象,delete()删除指定字符串的对象。 uvm_event_pool机制可以方便uvm_event在环境搭建过程中的使用, 可以很...
不同组件可以共享同一个uvm_event,这不需要通过跨层次传递uvm_event对象句柄来实现共享,该共享方式是通过uvm_event_pool这一全局资源池来实现的。uvm_event_pool是uvm_object_string_pool #(T) 的子类,它可以生成和获取通过字符串索引的uvm_event对象。
(1)不同的组件可以共享同一个uvm_event,这不需要通过跨层次传递uvm_event对象句柄来实现共享的,因为这并不符合组件环境封闭的原则。这种共享同一个uvm_event对象是通过uvm_event_pool这一全局资源池来实现的。 (2) uvm_event_pool这个资源池类是uvm_object_string_pool #(T)的子类,它可以生成和获取通过字符串...