[UVM]UVM Sequence之Response的使用

                        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

  1. 首先需要在pre_body中調用use_response_handler(1);打開該功能。
  2. 其次需要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
发布了185 篇原创文章 · 获赞 118 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/gsjthxy/article/details/105276065