参考模型调用寄存器模型的读任务。 寄存器模型产生sequence,并产生uvm_reg_item:。 产生driver能够接受的transaction:bus_req=adapter.reg2bus(rw)。 把bus_req交给bus_sequencer。 driver得到bus_req后驱动它,得到读取的值,并将读取值放入bus_req中,调用item_done。 寄存器模型调用adapter.bus2reg(bus_req,rw)将bu...
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是阻塞的,它会一直等到有新的transaction才会返回; try_next_i...
在将事务随机化并设置了数据值之后,它会使用“finish_item”发送给driver进行处理,finish_item应该被真正称为“EXECUTE_ITEM”。此时,driver获取句柄并执行它。一旦driver调用“item_done”,然后finish_item将返回并且事务将会被执行。 执行一个序列——The Driver(驱动器) Driver的代码相对简单,它从uvm_driver派生并...
uvm_do产生一个transaction 后交给sequencer,driver区总这个transaction后,uvm_do不会立刻返回执行下一次uvm_do宏,一直等待,直到driver返回item_done 信号。此时,uvm_do才执行完毕返回,开始下一次uvm_do,产生新的transaction。 1)不是之前想的产生所有的10个后,一起交给sequencer。 2)占内存的应该只是sequence,sequence...
driver中的seq_item_port.item_done(),实际调用的是uvm_sequencer中的item_done函数。sequence通过wait_for_item_done和sequencer的item_done握手,通过成员变量m_wait_for_item_sequence/transaction_id判断。每个sequence, sequence中的每个transaction其ID都是唯一的。
每个sequence中都有个叫body的task,当sequence被启动时会自动调用这个task。通过`uvm_do宏来产生transaction。更灵活的方式是先后使用`uvm_create()和`uvm_send()实现这一功能,并在两者间控制transaction的各个field。只有当消耗仿真时间的driver调用了item_done()后一次transaction的发送才算结束。
将两者连接:drv.seq_item_port.connect(sqr.seq_item_export); 在driver中通过get_next_item任务来得到一个新的req,并且驱动它,驱动完成后调用item_done通知sequencer(完成握手)。 sequencer和sequence之间: sequence中的uvm_do宏发送transaction后,会一直等待,直到driver返回item_done信号。
通信过程中在jelly_bean_driver一侧driver通过调用get_next_item来获取彩虹糖配方的内容jelly_bean_transaction(jb_tx),在最后又调用item_done来结束每一次的数据通信,代码如图1中run_phase所示。 图1. [class] jelly_bean_driver的run_phase代码图 通信过程中涉及到的各个sequence item port相关类及各个类之间的派生...
b.寄存器模型产生 sequence,并产生 uvm_reg_item:rw。 c.产生 driver 能够接受的transaction:bus_req=adapter.reg2bus(rw)。 d.把 bus_req 交给bus_sequencer。 e.driver 得到 bus_req 后驱动它,得到读取的值,并将读取值放入 bus_req 中,调用 item_done。
tasktry_next_item(output REQ req_arg):采取nonblocking的方式从sequencer获取item,如果立即返回的结果req_arg为null,则表示sequence还没有准备好。 function voiditem_done(input RSP rsp_arg=null):用来通知sequence当前的sequence item已经消化完毕,可以有选择性地传递RSP参数,返回状态值。