Sequence:用户自定义的sequence类通常继承自`uvm_sequence(T)`,`T`为该sequence生成的sequence item的类型。在sequence类中可定义方法控制sequence item的生成,如随机化、按特定顺序发送等操作。 Sequence Driver(序列驱动程序):继承自`uvm_driver(T)`,负责从sequence获取sequence item,并将其发送到DUT的接口上。它与...
phase.drop_objection(this)//sequence的隐式启动//该方法可以在sequence中使用starting_phase提起和撤销objectionuvm_config_db#(uvm_object_wrapper)::set(this,"env.i_agt.sqr.main_phase","default_sequence", case0_sequence::get_type());//在my_sequence中的body任务中virtualtaskbody;if(starting_phase ...
sequencer和driver之间的通信机制 sequencer中调用sequence中的body()方法产生数据,产生的数据如何传给driver呢? start_item(req)执行之后会找到对应的sequencer sequencer中有wait_for_grant()被启动 sequencer执行begin_tr(req),开始数据传输,数据传输给driver driver在run_phaze的时候执行get_next_item(req) - 获取到...
引入sequence机制,还使用了factory机制、config机制。使用sequence机制之后,在不同的测试用例中,将不同的sequence设置成sequencer的main_phase的default_sequence。当sequencer执行到main_phase时,发现有default_sequence,那么它就启动sequence sequence的启动与执行 启动方式: 直接启动:my_seq.start(sequencer); uvm_config_d...
2).sequence 是transaction 的 ”序列“。 3).sequencer 是一把枪,负责发射。 4).sequencer是一个uvm_component,sequence 是一个uvm_object。 5).sequence 生命周期比my_transaction 要长,因为是”序列“嘛! 2.sequence 如下: `ifndef MY_SEQUENCE__SV ...
1:sequence机制的目的是为了将激励的产生功能从driver中剥离出来。这样在不同的测试用例中,就可以将不同的sequence设置成sequencer的main_phase的default_sequence,当sequencer执行到main_phase时,发现有default_sequence,那么它就启动sequence。这样就可以在不改变driver的情况下完成不同的激励驱动。
Sequence可在测试用例中被用来构造不同的测试场景,可以说是UVM验证中非常重要甚至最为重要的一部分。开发并应用好sequence,可以极大地提高测试用例的开发效率和质量。 前面两篇文章已经介绍了sequence item的基本构造,以及driver和sequencer的握手机制和使用模型。本文将继续关注sequence这一主题,介绍sequence的基础内容。
uvm_component_item和uvm_sequence都是基于uvm_object,它们不同于uvm_component只应当在build阶段作为UVM环境进行创建和配置,而是可以在任何阶段创建。 由于无法判定环境在run阶段什么时间点会创建sequence和将其产生的sequence item 挂载(attach)到sequencer上面,所以无法通过UVM环境结构或者phase机制来识别sequence的运行阶段...
UVM(九)之sequence机制 如果说transaction是子弹的话,那么sequence无疑就是弹夹了。在整个的UVM验证平台中,sequence负责transaction的产生,并通过sequence发送给driver,driver则根据transaction里存储的信息产生激励。要产生不同的transaction,那么就要在sequence中下功夫。验证中要对DUT施加不同的激励,也就是施加不同的case,...