在传输过程中我们可以用`uvm_do_prio_with来赋予优先级;uvm_sequencer除了优先级的判定,还有锁定功能,两个方法:lock(),grab();lock()是当某一个sequence中的item拿到sequencer的权限之后,必须等该sequence使用unlock()才将权限还回去,一般sequence用来限制住权限,等自己的所有item传输完毕再unlock();而grab()则是只...
uvm_sequence _item 和 uvm_ sequence 都基于 uvm_object, 与 uvm_ component 只在 build 阶段作为 UVM 环境的“ 不动产 ”进行创建和配置不同,它们可以在任何阶段创建。这种类的继承带来的 UVM 应用区别在于: • 因为无法判定环境在 run 阶段的什么时间点创建 sequence 和将其挂载 (attach) 到 sequencer 上...
set_parent_sequence 设置这个sequence_item的父sequence。 get_parent_sequence 返回对调用此方法的任何sequence的父sequence的引用。 set_depth 任何sequence的深度都是自动计算出来的。 get_depth 返回从它的父sequence到这个sequence的深度。 is_item 这个函数可以在任何sequence_item或sequence上调用。 get_root_sequenc...
(1) 与get_parent不同,由于⼀个uvm_component可能有多个child,所以get_child函数需要有⼀个string类型的参数name,表⽰此child实例在实例化时指定的名字;1.4. uvm_component的get_children函数 2.uvm_sequence_item相关函数 2.1. uvm_sequence_item中get_name系列函数 (1) get_name()会打印出”jerry_is_...
uvm_sequence_item 通过 uvm_transaction 类从 uvm_object 继承而来。uvm_object 有许多虚方法,用于实现常见的数据对象功能(复制、克隆、比较、打印、事务记录),建议覆盖这些虚拟方法让 sequence_item 更具通用性。sequence_item 通常用于分析流量,推荐添加有助于功能覆盖或分析的实用函数。
protected uvm_sequence_base m_parent_sequence; static bit issued1,issued2; bit print_sequence_info;//Function: new///The constructor method for uvm_sequence_item.functionnew (stringname ="uvm_sequence_item"); super.new(name);endfunctionfunctionstringget_type_name(); return...
从简而言一个sequence包含了一些有序组织起来的item实例考虑到item在创建后需要被随机化sequence在声明时也需要预留一些可供外部随机化的变量这些随机变量一部分是用来通过层级传递来控制item对象中的变量的一部分也是用来对item对象之间加以组织和时序控制的 UVM序列篇之二:sequence和item(上) 无论是自驾item,穿过...
从hier_seq::body()来看,它其中包含有bus_trans t1,t2和flat_seq s1,s2。而它的层次关系就体现在了对于各个sequence/item的协调上面。例码中使用了`uvm_do_with宏,这个宏完成了三个步骤: sequence或者item的创建 sequence或者item的随机化 sequence或者item的传送 ...
通过继承关系,我们可以看待uvm_sequence_item是扩展自uvm_transaction的。 对于usr来说,想创建自己的transaction一般是从uvm_sequence_item扩展来的,为什么呢?因为 1、The uvm_sequence_item provides a hook to the uvm_sequencer and the functions to build a sequence hierarchy. ...
这里的send_request函数是在uvm_sequence_base(uvm_sequence的父类)调用的,这样就实现了在uvm_sequence的派生类中调finish_item(通常用uvm_do宏包裹)将数据发送到sequencer并存放在m_req_fifo中。 使用try_put()函数是为了进行判断fifo是否溢出,溢出则报错。