1.前面使用宏产生transaction,隐藏了细节。 2.不适用宏产生transaction 主要靠两个任务:start_item 和finish_item。使用前,必须要实例化transaction: 3.构建sequence 如下: 4.可以在transaction 例化后,finish_item 前随机化: 1)assert也可在start_item 之后,finish_item 之前。 5.uvm_do系列宏封装了如下动作: 6...
start_item finish_item 上节提到使用uvm_do宏启动sequence,如果宏传入的第一个参数不是uvm_sequence_base类型,就是我们的transaction, 则调用start_item, finish_item函数。 start_item()三个参数,第一个是传入的transaction, 第二个是优先级,第三个是指定该transaction发送给哪一个sequencer, transaction挂载在哪一...
pre_do是一个任务,在start_item中被调用,是start_item返回前执行的最后一行代码,在它执行完成后才开始对transaction进行随机化。pre_do有一个1bit参数,用于表明uvm_do是对一个transaction还是一个sequence进行操作(详见下一节sequence的嵌套)。 mid_do是一个函数,在finish_item最开始被调用,在执行完此函数后才会进...
第四个参数值一般使用默认值,这样uvm_sequence::pre_body()和uvm_sequence::post_body会在uvm_sequence::body()前后执行。 2.2 start_item()和finish_item() 使用场景:将item挂载到sequencer上的应用 uvm_sequence::start_item中第三个参数需要用户注意是否将item和parent sequence挂载到不同的sequencer上面去。 ...
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...
要产生一个transaction,要分成四步:第一步就是实例化,第二部就是调用start_item,第三部就是执行randomize过程,第四部就是调用finish_item。由于是牵扯到sequencer和driver的通信,因此这里就有一个主动和被动的过程。当driver中使用seq_item_port.get_next_item主动请求一个item(transaction)时,sequencer会要求sequence...
在仿真中,序列等待直到同步器处于GO状态。进入GO状态后,同步的代码将使用new生成一个事务,然后调用start_item/finish_item执行该事务。在等待访问driver并执行之后,同步的序列返回到循环的顶部并检查同步器状态。它将再次运行,或停止/等待,如下图2所示。
要产生一个transaction,要分成四步:第一步就是实例化,第二部就是调用start_item,第三部就是执行randomize过程,第四部就是调用finish_item。由于是牵扯到sequencer和driver的通信,因此这里就有一个主动和被动的过程。当driver中使用seq_item_port.get_next_item主动请求一个item(transaction)时,sequencer会要求sequence...
2.5 sequence里的宏及start/finish_item任务 1.uvm_do 相关宏 在sequence的body中使用uvm_do系列宏,可以自动完成transaction的创建,随机化和发送。 uvm_do系列宏对transaction和sequence都能支持。 如参数是transaction时它会调用start_item&finish_item任务。
1)不适用宏产生transaction的方式要依赖于两个任务:start_item和finish_item; 2)在使用这两个任务前,必须要先实例化transaction后才能调用这两个任务; 3)可以在transactin实例化后,finish_item调用前对其进行随机化; 4)uvm_do系列宏其实是将上面四个步骤封装在这个宏中。