我们在sequence中往driver发包时,最常用的方法就是使用uvm_do()系列宏,偶尔会使用方法start_item()和finish_item()的组合,极个别场景下会 使用`uvm_create()和`uvm_send()宏,极极个别场景下还会看到create_item()方法的使用,这些宏和方法有什么区别,各自使用场景有什么局限和注意事项,他们分别定义在了UVM源代码...
pre_do是一个任务,在start_item中被调用,是start_item返回前执行的最后一行代码,在它执行完成后才开始对transaction进行随机化。pre_do有一个1bit参数,用于表明uvm_do是对一个transaction还是一个sequence进行操作(详见下一节sequence的嵌套)。 mid_do是一个函数,在finish_item最开始被调用,在执行完此函数后才会进...
start是seq的操作 操作关系: start_item是seq中针对item的操作 操作关系: 其中的uvm_do宏,是生成item,start_item,随机化item、finish_item的合集 uvm_do、uvm_do_with等是宏 用于在seq_item和seq之间进行通用。 前后门访问 前门访问 uvm_reg的read和write(注明UVM_FRONTDOOR),uvm_reg_sequced的read_reg、writ...
start_item和finish_item都可以在调用时指定优先级。 了解了uvm_do宏实现的细节之后,为了增加uvm_do系列宏的灵活度,UVM提供了三个接口:pre_do,mid_do与post_do。 pre_do是一个任务,在start_item中被调用,是start_item返回前执行的最后一行代码,在它执行完成后才开始对transaction进行随机化。pre_do有一个1bit...
uvm_do系列宏中,当第一参数是transaction时,调用的是start_item和finish_item; 当第一个参数是sequence时,调用的是此sequence的start的任务,也就是启动sequence。 除了uvm_do系列宏,uvm_create、uvm_send、uvm_rand_send的第一个参数都可以说是sequence的指针。
2.不适用宏产生transaction 主要靠两个任务:start_item 和finish_item。使用前,必须要实例化transaction: 3.构建sequence 如下: 4.可以在transaction 例化后,finish_item 前随机化: 1)assert也可在start_item 之后,finish_item 之前。 5.uvm_do系列宏封装了如下动作: ...
第三种:`uvm_do系列宏启动 代码语言:javascript 复制 `uvm_do(SEQ_OR_ITEM)o`uvm_do_pri(SEQ_OR_ITEM,PRIORITY)`uvm_do_with(SEQ_OR_ITEM, CONSTRAINTS)`uvm_do_pri_with(SEQ_OR_ITEM,PRIORITY,CONSTRAINTS)`uvm_do_on(SEQ_OR_ITEM, SEQR)`uvm_do_on_pri(SEQ_OR_ITEM,SEQR,PRIORITY)`uvm_do_on...
uvm_do_on宏第一参数是sequence。uvm_do_on_pri_with宏中调用宏uvm_create_on。 create_item通过工厂模式创建sequence实例 调用set_item_context()函数,给成员变量m_sequencer, m_parent_sequence赋值,参考上节分析。此处parent_sequence默认是this。 调用sequence的start函数,流程和上节一样,最后调用body()函数。
1.uvm_do 相关宏 在sequence的body中使用uvm_do系列宏,可以自动完成transaction的创建,随机化和发送。 uvm_do系列宏对transaction和sequence都能支持。 如参数是transaction时它会调用start_item&finish_item任务。 如果是sequence,它会调用start任务。 所有uvm_do宏均由uvm_do_on_pri_with而来,如下图示: ...
要产生一个transaction,要分成四步:第一步就是实例化,第二部就是调用start_item,第三部就是执行randomize过程,第四部就是调用finish_item。由于是牵扯到sequencer和driver的通信,因此这里就有一个主动和被动的过程。当driver中使用seq_item_port.get_next_item主动请求一个item(transaction)时,sequencer会要求sequence...