sequencer和sequence之间: sequence中的uvm_do宏发送transaction后,会一直等待,直到driver返回item_done信号。 在某个component(如my_sequencer、 my_env)的main_phase中启动这个sequence,即可让sequence向sequencer发送transaction。 get_next_item和try_next_item的比较 get_next_item是阻塞的,它会一直等到有新的transacti...
在将事务随机化并设置了数据值之后,它会使用“finish_item”发送给driver进行处理,finish_item应该被真正称为“EXECUTE_ITEM”。此时,driver获取句柄并执行它。一旦driver调用“item_done”,然后finish_item将返回并且事务将会被执行。 执行一个序列——The Driver(驱动器) Driver的代码相对简单,它从uvm_driver派生并...
修改response item中的数据成员,最终通过seq_item_port.item_done(RSP)将response item对象返回给sequence。 对于uvm_sequence::get_response(RSP)和uvm_driver::item_done(RSP)这种成对的操作,是可选的而不是必须的,即用户可以选择uvm_driver不返回response item,同时sequence也无需获取response item。 在高层的环境...
uvm_do产生一个transaction 后交给sequencer,driver区总这个transaction后,uvm_do不会立刻返回执行下一次uvm_do宏,一直等待,直到driver返回item_done 信号。此时,uvm_do才执行完毕返回,开始下一次uvm_do,产生新的transaction。 1)不是之前想的产生所有的10个后,一起交给sequencer。 2)占内存的应该只是sequence,sequence...
uvm_component_item和uvm_sequence都是基于uvm_object,它们不同于uvm_component只应当在build阶段作为UVM环境进行创建和配置,而是可以在任何阶段创建。 由于无法判定环境在run阶段什么时间点会创建sequence和将其产生的sequence item 挂载(attach)到sequencer上面,所以无法通过UVM环境结构或者phase机制来识别sequence的运行阶段...
当sequence 中的调用宏 uvm_do 等创建事务时,它并不会立即返回执行下一次 uvm_do,而是等待 driver 返回 item_done 信号之后,此时,uvm_do 才算执行完毕,返回后执行下一次 uvm_do,产生新的 transaction。 当然,我们拆解宏 uvm_do。当我们调用宏时,在sequence的body( )任务中产生 transaction 的步骤如下: ...
1.create_item 产生seq_item(factory) 2.wait_for_grant向sqr发出request,和等sqr的grant; sqr返回grant给seq 3.random seq_item ,然后send_request把seq_item 发给sqr.这个过程不消耗仿真时间,然后seq进入wait_for_item_done()的阻塞性等待状态,直到获取drv的response。
在driver中通过get_next_item任务来得到一个新的req,并且驱动它,驱动完成后调用item_done通知sequencer(完成握手)。 sequencer和sequence之间: sequence中的uvm_do宏发送transaction后,会一直等待,直到driver返回item_done信号。 在某个component(如my_sequencer、 my_env)的main_phase中启动这个sequence,即可让sequence向...
get()也是一个阻塞调用,同样用于从sequencer FIFO获取sequence item。但是在使用get()时,由于get()方法隐式完成了握手,因此无需显式调用item_done()。 40、driver中带和不带有参数的item_done()调用有什么区别? item_done()方法是driver中的一种非阻塞方法,用于在get_next_item()或try_next_item()成功之后与...
如果这个agent的驱动器通过put()或item_done()提供了一个单独的响应项,那么provide_response位应该被设置为1,该寄存器模型就知道他需要等待一个response再开始转换(将总线传输项转化为寄存器对象)。如果provide_response位设置为1但该agent的驱动器并没有提供任何的response,那么这个仿真就有一定概率被阻塞。因为APB总线...