Posts

Showing posts from April, 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  ...