1190-1191行的代码我们知道response_queue_depth变量的意义是设置response_queue这个队列允许的最大深度(这里我们就回答了上面put_response返回的rsp在UVM源代码中究竟以什么样一种形式存在的问题),一旦我们put_response的rsp数目达到我们预设的response_queue_depth值时就会触发1196行的报错机制,response_queue_depth的defaul...
UVM中的get_response在uvm_sequence.svh中定义,以下是get_response函数的原型,通常我们不会care transaction_id, 并且uvm_sequence.svh中定义了RSP类型的rsp, 因此我们在sequence中get_response(rsp)即可。 virtual task get_response(output RSP response, input int transaction_id = -1); uvm_sequence_item r...
可以看到,在driver中调用的seq_item_port.get依旧是最终调用的是sequencer.get 其中除了对fifo进行peek以外,还执行了item_done()的操作,也因此,get方法是不会返回RSP的,需要额外调用put_response来返回RSP RSP是在哪里返回的? 对于get_next_item来说,RSP是使用item_done(RSP)来返回的,item done函数内部会调用put_...
rsp_port,driver向相应的sequencer发送response。还有一个new函数,再无其他。driver内部通过调用get函数来向sequencer索要transaction 相应的uvm_sequencer,派生自uvm_sequencer_param_base,继而派生自uvm_sequencer_base。class uvm_sequencer #(type REQ=uvm_sequence_item, RSP=REQ) extends uvm_sequenc...
virtual task get_response(output RSPresponse, input int transaction_id =-1); uvm_sequence_item rsp; get_base_response( rsp,transaction_id); $cast(response,rsp); endtask response的使用中经常会看到log中显示response_queueoverflows,那么这是什么原因的导致的呢?通过查找UVM的库不难发现,在uvm_seq...