class axi_cov extends uvm_subscriber#(axi_tx); axi_tx tx; `uvm_component_utils(axi_cov) covergroup axi_cg; ADDR_CP : coverpoint tx.addr { option.auto_bin_max = 8; } WR_RD_CP : coverpoint tx.wr_rd{ bins WR = {1'b1}; bins RD = {1'b0}; } BURST_TYPE_CP : coverpoint tx.burst_type { bins FIXED = {FIXED}; bins WRAP = {WRAP}; bins INCR = {INCR}; } RESP_CP : coverpoint tx.resp { bins OKAY = {OKAY}; bins EXOKAY = {EXOKAY}; bins SLVERR = {SLVERR}; bins DECERR = {DECERR}; } ADDR_CP_X_WR_RD_CP : cross ADDR_CP, WR_RD_CP; ADDR_CP_X_BURST_TYPE_CP : cross ADDR_CP, BURST_TYPE_CP; ADDR_CP_X_RESP_CP : cross ADDR_CP, RESP_CP; WR_RD_CP_X_BURST_TYPE_CP : cross WR_RD_CP, BURST_TYPE_CP; WR_RD_CP_X_RESP_CP : cross WR_RD_CP, RESP_CP; BURST_TYPE_CP_X_RESP_CP : cross BURST_TYPE_CP, RESP_CP; endgroup function new(string name = "", uvm_component parent=null); super.new(name,parent); axi_cg = new(); endfunction function void write(T t); $cast(tx, t); $display("time : %0t", $time); tx.print(); axi_cg.sample(); endfunction endclass