This example uses an avt_notify2analysis and an avt_tlm2channel adapter to connect a vmm_notifier_consumer and an ovm_passive_producer. The ovm_passive_producer gets notifier through avt_notify2analysis, then puts response on avt_tlm2channel back to consumer
../../../../examples/01_adapters/17_tlm2channel_passive_producer.sv
`define OVM_ON_TOP `include "ovm_vmm_pkg.sv" `include "ovm_apb_rw.sv" `include "vmm_apb_rw.sv" `include "apb_rw_converters.sv" `include "ovm_producers.sv" `include "vmm_consumers.sv" `include "apb_scoreboard.sv" class my_apb_scoreboard extends apb_scoreboard; function new(string name = "my_apb_scoreboard", ovm_component parent=null, vmm_channel_typed #(vmm_apb_rw) vmm_fifo = null); super.new(name, parent, vmm_fifo); endfunction : new virtual task run(); ovm_apb_rw o, v2o=new(); vmm_apb_rw v; forever begin ovm_fifo.get(o); vmm_fifo.get(v); v2o = apb_rw_convert_vmm2ovm::convert(v); if(!o.compare(v2o)) begin ovm_report_error("mismatch", {"OVM:\n", o.convert2string(),"\n", "VMM:\n", v.psdisplay()}); m_mismatches++; end else begin ovm_report_info("match",o.convert2string()); m_matches++; end end endtask endclass class env extends ovm_component; `ovm_component_utils(env) ovm_passive_producer #(ovm_apb_rw) o_prod; vmm_notifier_consumer #(vmm_apb_rw) v_cons; apb_tlm2channel the_adapter0; apb_notify2analysis the_adapter1; my_apb_scoreboard comp; bit PASS = 0; function new (string name="env",ovm_component parent=null); super.new(name,parent); endfunction virtual function void build(); o_prod = new("o_prod", this); v_cons = new("v_cons",0); the_adapter0 = new("the_adapter0",this,v_cons.in_chan); the_adapter1 = new("the_adapter1",this,v_cons.notify, v_cons.GENERATED); comp = new("Comparator", this, v_cons.out_chan); endfunction virtual function void connect(); the_adapter0.blocking_get_peek_port.connect(o_prod.get_peek_export); the_adapter0.request_ap.connect(comp.ovm_in); the_adapter1.analysis_port.connect(o_prod.analysis_export); endfunction virtual task run(); v_cons.start_xactor(); @(v_cons.num_insts == 5); ovm_top.stop_request(); endtask // run virtual function void check(); if(comp.m_matches == 5 && comp.m_mismatches == 0) PASS = 1; endfunction // check virtual function void report(); `ovm_info("TEST_RESULT",((PASS==1)?"PASSED":"FAILED"), OVM_MEDIUM) endfunction // report endclass module example_17_tlm2channel_passive_producer; env e = new; initial run_test(); endmodule