From 1fdf535aafff7f26710b5c7fb889baea8cc7b497 Mon Sep 17 00:00:00 2001 From: manojkumar Date: Mon, 11 Mar 2024 11:07:43 +0530 Subject: [PATCH] tarun files added --- axi_agent.sv | 28 +++++++++++++++ axi_monitor.sv | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++ axi_sqr.sv | 8 +++++ 3 files changed, 134 insertions(+) create mode 100755 axi_agent.sv create mode 100755 axi_monitor.sv create mode 100755 axi_sqr.sv diff --git a/axi_agent.sv b/axi_agent.sv new file mode 100755 index 0000000..f86847d --- /dev/null +++ b/axi_agent.sv @@ -0,0 +1,28 @@ +`include "uvm_macros.svh" +import uvm_pkg::*; +class axi_m_Agent extends uvm_agent; + + `uvm_component_utils(axi_m_Agent); + AXI_SLAVE_SEQR seq; + AXI_SLAVE_DRV drv; + AXI_SLAVE_MON mon; + + + function new(string name = "axi_m_Agent", uvm_component parent); + super.new(name, parent); + endfunction : + + function void build_phase(uvm_phase phase); + super.build_phase(phase); + + seq = AXI_SLAVE_SEQR::type_id::create("seq", this); + drv = AXI_SLAVE_DRV::type_id::create("drv", this); + mon = AXI_SLAVE_MON::type_id::create("mon", this); + + endfunction : build_phase + + function void connect_phase(uvm_phase phase); + drv.seq_item_port.connect(seq.seq_item_export); + endfunction : connect_phase + +endclass \ No newline at end of file diff --git a/axi_monitor.sv b/axi_monitor.sv new file mode 100755 index 0000000..dc88055 --- /dev/null +++ b/axi_monitor.sv @@ -0,0 +1,98 @@ +`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