sequencer是uvm组件,一个sequencer可以调用多个sequence uvm_squence class普通成员 sequence执行流程 sequencer和driver是在agent中进行例化的 sequencer中可以设置默认的sequence,设置完成之后,会自动执行sequence中的body(),另外会自动执行driver中的get_next_item() sequencer中的start()函数会调用sequence中的body()函数,...
sequence item是每一次driver与DUT互动的最小粒度内容,在sequence与driver之间起到桥梁作用的是sequencer,sequencer与driver均是component组件,它们之间的通信也是通过TLM端口实现的。UVM序列的连接传送如下图所示: sequence对象自身会产生目标数量的sequence item对象。借助于SV的随机化和sequence item对随机化的支持...
我们在sequence中往driver发包时,最常用的方法就是使用uvm_do()系列宏,偶尔会使用方法start_item()和finish_item()的组合,极个别场景下会 使用`uvm_create()和`uvm_send()宏,极极个别场景下还会看到create_item()方法的使用,这些宏和方法有什么区别,各自使用场景有什么局限和注意事项,他们分别定义在了UVM源代码...
class my_sequencer extends uvm_sequencer #(uvm_sequence_item);class my_driver extends uvm_driver #(uvm_sequence_item); 这样子,在driver接收数据时,通过cast将其转换为不同的transaction类型,即可实现一个sequencer/driver发送多种类型transaction的功能了。 考虑一种特殊情况,即sequence中产生的transaction受对应...
这里的sequence值的是类uvm_sequence,而item指的是uvm_sequence_item,为了文章的简洁,我们称之为sequence和item。对于激励的生成和场景控制,是由sequence来编织的,而对于激励所需要的具体数据和控制要求,则是从item中的成员数据得来的。 Sequence Item 在上一节《新手上路》中,我们已经提出item是基于uvm_object,这...
UVM:SEQUENCE机制详解 从应用入手,最简单的seq机制使用方式如下: 其涉及5个基本组件或object:agent/driver/sequence/sequencer/item。 A、agent中完成driver和sequencer的连接:my_drv.seq_item_port.connect(my_seqr.seq_item_export); B、driver中调用seq_item_port的函数获取下个item、进行相应驱动后,结束当前item...
一个flat sequence往往由细小的sequence item群落构成,在此之上sequence中还有更多的信息来完备它自身需要实现的激励场景。一般对于一个flat sequence而言,它里面包含的信息有: sequence item以及相关的constraint用来关联生成的item之间的关系,从而完善出一个flat sequence的时序形态。
在sequence的body中使用uvm_do系列宏,可以自动完成transaction的创建,随机化和发送。 uvm_do系列宏对transaction和sequence都能支持。 如参数是transaction时它会调用start_item&finish_item任务。 如果是sequence,它会调用start任务。 所有uvm_do宏均由uvm_do_on_pri_with而来,如下图示: ...
uvm_component_item和uvm_sequence都是基于uvm_object,它们不同于uvm_component只应当在build阶段作为UVM环境进行创建和配置,而是可以在任何阶段创建。 由于无法判定环境在run阶段什么时间点会创建sequence和将其产生的sequence item 挂载(attach)到sequencer上面,所以无法通过UVM环境结构或者phase机制来识别sequence的运行阶段...
3)每一个sequence都有一个body 任务(main_phase 是属于components之类的),当一个sequence 启动之后,会自动执行body 的代码。 4)uvm_do 宏:1)创建一个my_transaction 的实例m_trans;2)将其随机化;3)最终送给sequencer。 5)如果不使用uvm_do 宏,可以直接使用start_item 与finish_item 产生transaction。