Friday, April 20, 2018
SPI UVM Adapter
class spi_reg_adapter extends uvm_reg_adapter;
const string REPORT_TAG = "SPI_REG_ADAPTER";
`uvm_object_utils(spi_reg_adapter)
function new (string name = "spi_reg_adapter");
super.new(name);
`uvm_info(REPORT_TAG, $sformatf("%m", UVM_NONE)
provides_responses =1;
endfunction
virtual function uvm_sequence_item reg2bus (cont ref uvm_reg_bus_op rw);
spi_seq_item spi_req;
spi_req = spi_seq_item::type_id::create("spi_reg");
spi_req.inc=0;
spi_req.data_size = 1;
spi_req.address = rw.addr;
if(rw.kind == UVM_READ) begin
spi_req.cmd_val = 0;
end
else begin
spi_req.cmd_val = 1;
spi_req.data_wr[0] = rw.data;
end
return spi_req;
endfunction
virtual function void bus2reg (uvm_sequence_item bus_item, cont ref uvm_reg_bus_op rw);
spi_seq_item spi_req;
spi_req = spi_seq_item::type_id::create("spi_reg");
if(!$cast(spi_req, bus_item)) begin
`uvm_fatal()
rw.addr = spi_req.address ;
rw.kind = spi_req.cmd_val? UVM_WRITE: UVM_READ;
if(rw.kind == UVM_READ) begin
rw.data = spi_req.data_rd[0];
end
if(rw.kind == UVM_WRITE) begin
rw.data = spi_req.data_wr[0];
end
rw.status = UVM_IS_OK;
endfunction
endclass
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment