diff --git a/axi_drv.sv b/axi_drv.sv new file mode 100644 index 0000000..3f84fe1 --- /dev/null +++ b/axi_drv.sv @@ -0,0 +1,152 @@ +class axi_drv extends uvm_driver#(axi_seq_item) + + `uvm_components_utils(axi_drv) + + virtual intf vif; + axi_seq_item txn; + + int [31:0] temp[]; + + function new(string name="axi_drv",uvm_component parent); + super.new(name.parent); + endfunction + + function void build_phase(uvm_phase phase); + + uvm_config_db#(virtual intf)::get(this,"",vif,vif); + txn=axi_seq_item::type_id::create(txn); + + endfunction + + task run_phase(uvm_phase phase); + begin + get_next_item(txn); + drive(txn); + item_done(); + + endtask + + task drive(txn); + + fork + // reset(); + write_add(txn); + write_data(txn); + read_add(txn); + + join + endtask + + ///////////////write addr/////////// + + task write_add(txn); + int lower_wrap_boundary; + int upper_wrap_boundary; + int burst_len,burst_size; + int total_trans; + + if(txn.write==1) + begin + @(vif.clk); + vif.awid<=txn.awid; + vif.awlen<=txn.awlen; + vif.awsize<=txn.awsize; + vif.awburst<=txn.awburst; + + /////////fixed burst///////////// + + if(txn.awburst==2'b00) + begin + vif.awaddr<=txn.awaddr; + end + + /////////////incr burst////////////// + + else if(txn.awaddr==2'b01) + begin + vif.awaddr<=txn.awaddr; + for(int i=0;i