|
- class axi_drv extends uvm_driver#(axi_trans);
-
- `uvm_component_utils(axi_drv)
- virtual axi_if vif;
- axi_trans tnx;
-
- function new(string name="axi_drv",uvm_component parent);
- super.new(name,parent);
- endfunction
-
- function void build_phase(uvm_phase phase);
- super.build_phase(phase);
- if(!uvm_config_db#(virtual axi_if)::get(this,"","vif",vif))
- `uvm_error("build_phase","driver virtual interface failed");
- endfunction
-
- task run_phase(uvm_phase phase);
- `uvm_info("UVM_DRIVER",$sformatf("driver main phase ended"),UVM_LOW);
- forever
- begin
- seq_item_port.get_next_item(tnx);
- drive(tnx);
- seq_item_port.item_done();
- end
- endtask
- task driver();
- begin
- axi_write_address();
- axi_write_data();
- axi_write_resp();
- axi_read_address();
- axi_read_data();
- end
- endtask
- task axi_write_addr(axi_trans txn);
- $display("start of drive_awaddr");
- vif.drv_cb.AWVALID <= 1;
- vif.drv_cb.AWADDR <= txn.AWADDR;
- vif.drv_cb.AWSIZE <= txn.AWSIZE;
- vif.drv_cb.AWID <= txn.AWID;
- vif.drv_cb.AWLEN <= txn.AWLEN;
- vif.drv_cb.AWBURST <= txn.AWBURST;
-
- @(vif.drv_cb);
- wait(vif.drv_cb.AWREADY)
- vif.drv_cb.AWVALID <= 0;
-
- repeat
- @(vif.drv_cb);
-
- $display("end of drive_awaddr");
- endtask
- task axi_write_data(axi_trans txn);
-
- $display("start of drive_wdata");
- foreach(txn.WDATA[i])
- begin
- vif.drv_cb.WVALID <= 1;
- vif.drv_cb.WDATA <= txn.WDATA[i];
- vif.drv_cb.WSTRB <= txn.WSTRB[i];
- vif.drv_cb.WID <= txn.WID;
- if(i==(txn.AWLEN))
- vif.drv_cb.WLAST <= 1;
- else
- vif.drv_cb.WLAST <= 0;
-
- @(vif.drv_cb);
- wait(vif.drv_cb.WREADY)
- vif.drv_cb.WVALID <= 0;
- vif.drv_cb.WLAST <= 0;
-
- repeat
- @(vif.drv_cb);
- end
-
- $display("end of drive_wdata");
- endtask
-
- task axi_write_resp(axi_trans txn);
-
- $display("start of drive_bresp");
- foreach(tnx.)
- vif.drv_cb.BREADY<=1;
- @(vif.drv_cb)
- wait(vif.drv_cb.BVALID)
- vif.drv_cb.BREADY<=0;
- repeat
- @(vif.drv_cb);
- $display("end of drive_bresp");
- endtask
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- /* task drive(axi_trans trans);
- begin
- `uvm_info("UVM_DRIVER",$sformatf("driver run driver task entered"),UVM_LOW);
- @(this.vif.drv_cb);
-
- `uvm_info("UVM_DRIVER",$sformatf("driver run drive task ended"),UVM_LOW);
- end
- endtask
- endclass*/
|