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 |
*/ |