driver在调用get_next_item,尝试从req fifo中取出数据,但实际上get_next_item真正是在哪里执行的呢,实际上是在sequencer中执行的,这与TLM1.0通信有关。port调用get_next_item函数,port的get_next_item函数调用imp的get_next_item函数,imp的get_next_item函数再调用组件的get_next_item函数,归根结底实际上调用的是...
分别在item_done和stop_sequences这两个函数中对get_next_item_called做了赋0的操作,由此我们不难得出如下结论:driver执行get_next_item获取数据的时候,如果前一次get_next_item获取数据后driver中没有执行item_done或者sequencer没有调用stop_sequences来强制kill掉上面运行的所有transaction/sequence,那么sequencer中会报...
首先我们看下在uvm_sequencer里是如何实现get_next_item这样一个通信方法的 这里需要注意的是get_next_item_called(sequence_item_requested同理)这样一个变量,也就是说调用get_next_item的时候get_next_item_c…
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...
body任务:每个sequence都有一个body任务,启动后自动执行其中的代码。uvm_do宏:body中常用uvm_do宏来产生transaction。不使用uvm_do宏时,也可以手动使用start_item与finish_item。sequencer角色:负责协调sequence和driver的请求,确保激励的生成和传输。get_next_item和try_next_item的比较:get_next_item...
uvm item 文章目录 1.与sequencer之间完成握手。 2.与sequence之间完成握手。 总结 PS:sequencer 的仲裁机制 1.与sequencer之间完成握手。 当driver 使用 get_next_item( ) 得到一个 transaction 时,sequencer 同时也会保留一份这个刚刚发送出去的 transaction。当 driver 没有得到 transaction 的情况下,sequencer会将...
item_done 是一个非阻塞方法,应该在get_next_item() 或成功的 try_next_item() 调用之后调用。如果不传参数或者传一个空句柄,也可以完成握手,然后sequencer的fifo也不会有item进去,如果传的不是空句柄的话,就会送进对应的fifo。 peek 如果在sequencer的对应 FIFO 中没有可用的 REQ sequence_item,peek() 方法...
taskget_next_item(output REQ req_arg):采取blocking的方式等待从sequence获取下一个item。 tasktry_next_item(output REQ req_arg):采取nonblocking的方式从sequencer获取item,如果立即返回的结果req_arg为null,则表示sequence还没有准备好。 function voiditem_done(input RSP rsp_arg=null):用来通知sequence当前的...
set_item_context()函数上节已提到。wait_for_grant()等待sequencer仲裁。pre_do() hook函数。 在finish_item中,调用transaction挂载sequencer的函数send_request(), 这个函数定义在uvm_sequencer_param_base中。将transaction放入m_req_fifo容器中。 当driver中调用**seq_item_port.get_next_item(req)**时,实际调...
drv.seq_item_port.connect(sqr.seq_item_export); end ap = mon.ap; endfunction 1. 2. 3. 4. 5. 6. 7. 好像永远是port 主动连接export。 6.在driver中通过get_next_item 任务向sequencer 申请新的transaction: task my_driver::main_phase(uvm_phase phase); ...