1.get_response 和 put_response是一一对应的。当在sequence 中启动get_response 是,进程就会阻塞在那,一直等response_queue 中被放入新的记录。
2.如果被阻塞,不可能发出新的transaction。
3.根本原因是sequence 中发送transaction 与get_response 是在同一个进程中执行的。
4.如果分开,需要使用response_handler:
1)response_handler 默认是关闭的,所以要首先调用use_response_handler。
2)打开response_handler后,需要重载虚函数response_handler。参数是一个uvm_sequence_item 类型的指针,需要cast 成my_transaction,之后根据rsp 的值来决定sequence行为。
5.无论put/get_response 或者response_handler,都是新建一个transaction,并将其返回给sequence。
6.事实上,当uvm_do执行完后,其第一个参数不是空指针,而是指向刚刚被送给driver 的transaction。可以实现一种另类response:
driver:
7.sequence检测这个值:
这种另类的response在很多总线的driver 中用到。