nagasaikrishna 4 месяцев назад
Родитель
Сommit
e26185a541
1 измененных файлов: 124 добавлений и 0 удалений
  1. +124
    -0
      axi_driver.sv

+ 124
- 0
axi_driver.sv Просмотреть файл

@@ -0,0 +1,124 @@
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*/

Загрузка…
Отмена
Сохранить