UVM Sequence之Response
前言:Sequence機制提供了一種Sequence -> Sequencer -> Driver的單向數據傳輸機制。但是在複雜的驗證平台中,Sequence需要根據Driver對Transaction的反應來決定接下來需要發送的Transaction,換言之,Sequence需要得到Driver的一個反饋。Sequence機制提供了對這種反饋的支持,它允許Driver將一個Response返回給Sequence。本文將介紹這種方法。
Sequence的這種機制主要是應用於Outstanding的場景,例如AXI BUS的Read操作,當R Channel拿到數據的時候,put_response,用於標記讀操作的完成。
一、在Sequence中調用get_response()任務
class axi_vip_test_mst_seq extends uvm_sequence #(axi_transaction);
endclass
二、在Driver中調用put_response()任務
task my_driver::run_phase(uvm_phase phase);
endtask
三、非阻塞的Response方法 --- use_response_handler
- 首先需要在pre_body中調用use_response_handler(1);打開該功能。
- 其次需要Override respon_handler()這個function,一般地是在這個function中做一個Counter,當get到item之後,系統會自動調用response_handler()這個function,Counter用於控制Sequence的結束。
class axi_vip_test_mst_seq extends uvm_sequence #(axi_transaction);
virtual task pre_body();
use_response_handler(1);
endtask
virtual function void response_handler(uvm_sequence_item response);
if() begin
end
else begin
end
endfunction
virtual task body();
endtask
endclass