OpenCores
URL https://opencores.org/ocsvn/apb2spi/apb2spi/trunk

Subversion Repositories apb2spi

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 10 to Rev 9
    Reverse comparison

Rev 10 → Rev 9

/apb2spi/spi_agent/spi_agent.sv
0,0 → 1,37
 
class spi_agent extends uvm_agent;
 
spi_sequencer spi_sqr;
spi_driver spi_drvr;
spi_monitor spi_mntr;
//spi_env_config spi_env_cfg;
uvm_analysis_port #(spi_seq_item) spi_agent_ap;
 
`uvm_component_utils(spi_agent)
 
//uvm_active_passive_enum spi_is_active=UVM_ACTIVE;
 
function new(string name="spi_agent", uvm_component parent=null);
super.new(name,parent);
endfunction
 
 
function void build_phase(uvm_phase phase);
super.build_phase(phase);
// if(spi_is_active==UVM_ACTIVE)begin
spi_sqr = spi_sequencer::type_id::create("spi_sqr",this);
spi_drvr = spi_driver::type_id::create("spi_drvr",this);
// end
spi_agent_ap = new("spi_agent_ap",this);
spi_mntr = spi_monitor::type_id::create("spi_mntr",this);
endfunction
 
function void connect_phase(uvm_phase phase);
// if(spi_is_active==UVM_ACTIVE)begin
spi_drvr.seq_item_port.connect(spi_sqr.seq_item_export);
// end
spi_mntr.spi_ap.connect(spi_agent_ap);
endfunction
 
endclass
 
/apb2spi/spi_agent/spi_driver.sv
0,0 → 1,50
 
class spi_driver extends uvm_driver#(spi_seq_item);
`uvm_component_utils(spi_driver)
 
//uvm_analysis_port#(spi_seq_item) spi_ap;
 
virtual spi_if v_intf;
integer cnt=0;
spi_seq_item txn;
 
function new(string name,uvm_component parent);
super.new(name,parent);
//apb_ap = new("apb_ap",this);
endfunction
 
function void build_phase(uvm_phase phase);
if(!uvm_config_db #(virtual spi_if)::get(this,"","spi_vif",v_intf))
`uvm_fatal("NO_SPI_V_INTF","Virtual interface couldn't be obtained for spi driver")
txn = spi_seq_item::type_id::create("txn");
endfunction
 
task run_phase(uvm_phase phase);
//txn = spi_seq_item::type_id::create("txn");
forever
begin
fork
begin
txn.rdata = txn.ss0_data;
wait(v_intf.SS==1'b0);
for(int i=0;i<=`SPI_REG_WIDTH-1;i++)
begin
@(posedge v_intf.SCLK)
v_intf.MISO = txn.rdata[i];
end
end
begin
wait(v_intf.SS==1'b0);
for(int i=0;i<=`SPI_REG_WIDTH-1;i++)
begin
@(posedge v_intf.SCLK)
txn.wdata[i] = v_intf.MOSI;
end
txn.ss0_data = txn.wdata;
end
join
end
endtask
 
endclass
/apb2spi/spi_agent/spi_if.sv
0,0 → 1,33
interface spi_if;
 
logic SCLK;
logic MISO;
logic MOSI;
logic SS;
 
// SPI INTERFACE
//if Master/Slave Mode
/*modport master_slave_mode(
inout SCLK,
inout MISO,
inout MOSI,
output SS
);*/
 
//if only Master Mode
modport master_mode(
output SCLK,
input MISO,
output MOSI,
output SS
);
 
//if only Slave Mode
modport slave_mode(
input SCLK,
output MISO,
input MOSI,
input SS
);
endinterface
/apb2spi/spi_agent/spi_monitor.sv
0,0 → 1,38
 
class spi_monitor extends uvm_monitor;
`uvm_component_utils(spi_monitor)
 
uvm_analysis_port#(spi_seq_item) spi_ap;
virtual spi_if m_v_intf;
spi_seq_item txn;
integer cnt=0;
 
function new(string name="spi_monitor",uvm_component parent);
super.new(name,parent);
spi_ap=new("spi_ap",this);
endfunction
 
function void build_phase(uvm_phase phase);
super.build_phase(phase);
if(!uvm_config_db#(virtual spi_if)::get(this,"*","spi_vif",m_v_intf))
`uvm_fatal("NO_SPI_MON_V_INTF","Virtual interface couldn't be obtained for spi monitor")
endfunction
 
virtual task run_phase(uvm_phase phase);
txn = spi_seq_item::type_id::create("txn");
forever
begin
wait(m_v_intf.SS==1'b0);
for(int i=0;i<=`SPI_REG_WIDTH-1;i++)
begin
@(posedge m_v_intf.SCLK)
txn.wdata[i] = m_v_intf.MOSI;
txn.rdata[i] = m_v_intf.MISO;
cnt++;
end
wait(m_v_intf.SS==1'b1);
spi_ap.write(txn);
end
endtask
 
endclass
/apb2spi/spi_agent/spi_seq_item.sv
0,0 → 1,15
 
class spi_seq_item extends uvm_sequence_item;
 
`uvm_object_utils(spi_seq_item)
 
bit [`SPI_REG_WIDTH-1:0] wdata;
bit [`SPI_REG_WIDTH-1:0] rdata;
bit [`SPI_REG_WIDTH-1:0] ss0_data;
 
function new(string name="");
super.new(name);
endfunction
 
 
endclass
/apb2spi/spi_agent/spi_seqr.sv
0,0 → 1,11
 
typedef uvm_sequencer #(spi_seq_item) spi_sequencer;
/*class spi_seqr extends uvm_sequencer#(spi_seq_item);
`uvm_component_utils(spi_seqr)
 
function new(string name,uvm_component parent);
super.new(name,parent);
endfunction
 
endclass
*/

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.