`include "uvm_macros.svh" import uvm_pkg::*; class axi_mon1 extends uvm_monitor; `uvm_component_utils axi_mon1; virtual axi_slave_if mon_avif; uvm_analysis_port #(axi_txn) a_mon_ap; axi_txn w_trans; axi_txn r_trans; function new(string name axi_mon1",uvm_component parent =null); super.new(name, parent); // w_done =1; //r_done =1; endfunction function void build_phase(uvm_phase phase); super.build_phase(phase); `uvm_info("monitor","build_phase",UVM_MEDIUM) a_mon_ap=new("a_mon_ap",this); w_trans= axi_txn :: type_id :: create("axi_mon_txn"); r_trans= axi_txn :: typeid :: create(" r_trans"); endfunction:build_phase task run_phase(uvm_phase phase); forever begin // run_mon(phase); //@(mon_avif.clk); fork begin write_monitor(); read_monitor(); end join_none end endtask: run_phase /* task run_mon(uvm_phase phase); fork if(w_done) begin phase.raise_objection(this); w_done=0; write_monitor(); w_done=1; phase.drop_objection(this); end if(r_done) begin phase.raise_objection(this); r_done=0; read_monitor(); r_done=1; phase.drop_objection(this); end join_none endtask: run_mon */ task write_monitor(); if( mon_avif.awvalid && mon_avif.awready) begin w_trans = axi_txn ::type_id::create("w_trans"); w_trans.awaddr = mon_avif.awaddr; w_trans.awid = mon_avif.awid; w_trans.awsize = mon_avif.awsize; w_trans.awlen = mon_avif.awlen; w_trans.awburst = mon_avif.awburst; w_trans.wdata = new [w_trans.awlen+1]; for (int i=0; i