From 0bc21f1d8e4644c1f49540c19e48b464ac6dc4a0 Mon Sep 17 00:00:00 2001 From: shivakanta Date: Wed, 8 May 2024 12:16:26 +0100 Subject: [PATCH] new --- axi_master_driver.sv | 211 +++++++++++++++++++++++++++++++++++++++++++ axi_sequnce.sv | 85 +++++++++++++++++ axi_transaction.sv | 125 +++++++++++++++++++++++++ 3 files changed, 421 insertions(+) create mode 100644 axi_master_driver.sv create mode 100644 axi_sequnce.sv create mode 100644 axi_transaction.sv diff --git a/axi_master_driver.sv b/axi_master_driver.sv new file mode 100644 index 0000000..73844d1 --- /dev/null +++ b/axi_master_driver.sv @@ -0,0 +1,211 @@ +class axi_driver extends uvm_driver#(axi_seq_item); +`uvm_component_utils(axi_driver) + +virtual intf vif; +axi_seq_item tx; +int temp[]; +int burst_len; +int burst_size; +int total_tr; +int wrap_lower_boundary; +int wrap_upper_boundary; + +function new(string name="axi_driver",uvm_component_parent); +super.new(name,parent); +endfunction + +function void build_phase(uvm_phase phase); +super.new(); +tx=axi_seq_item::type_id::create("tx",this); + +if(!uvm_config_db#(virtual intf)::get("this",*,"intf",vif) +`uvm_error(get_type_name(),$sformatf("failed for get vif")) +endfunction + +task run_phase(uvm_phase phase) +forever begin +seq_item_port.get_next_item(tx); + +drive(); + +seq_item_port.item_done(tx); +end +endtask + +task drive(); + +if(tx.wr_rd) +begin + +write_address(); +write_data(); +write_response(); + +end + +else + +read_address(); + +endtask +////////write address/////// +task write_adress(); +@(posedge vif.clk) + +tx.awvalid<=1; +vif.awvalid<=tx.awvalid; + + +vif.awid<=tx.awid; +//vif.awaddr<=tx.awaddr; +vif.awsize<=tx.awsize; +vif.awlen<=tx.awlen; +vif.awburst<=tx.awburst; +//////////fixed burst//////////// + +if(tx.awburst==2'b00) + +vif.awaddr<=tx.awaddr; + +////////increament burst//////// +else if(awburst==2'b01)begin + +vif.awaddr<=tx.awaddr; +for(i=0;i