50 lines
1.4 KiB
Systemverilog
50 lines
1.4 KiB
Systemverilog
|
|
`ifndef TEST_SIMPLE_SV
|
||
|
|
`define TEST_SIMPLE_SV
|
||
|
|
|
||
|
|
class test_simple extends uvm_test;
|
||
|
|
|
||
|
|
`uvm_component_utils(test_simple)
|
||
|
|
|
||
|
|
virtual interface calc_if vif;
|
||
|
|
|
||
|
|
function new(string name = "test_simple", uvm_component parent = null);
|
||
|
|
super.new(name,parent);
|
||
|
|
endfunction : new
|
||
|
|
|
||
|
|
function void build_phase(uvm_phase phase);
|
||
|
|
super.build_phase(phase);
|
||
|
|
|
||
|
|
`uvm_info(get_type_name(), "Starting build phase...", UVM_LOW)
|
||
|
|
|
||
|
|
// Preuzimanje virtuelnog interfejsa iz konfiguracione baze podataka.
|
||
|
|
if (!uvm_config_db#(virtual calc_if)::get(null, "*", "calc_if", vif))
|
||
|
|
`uvm_fatal("NOVIF",{"virtual interface must be set:",get_full_name(),".vif"})
|
||
|
|
// ...
|
||
|
|
endfunction : build_phase
|
||
|
|
|
||
|
|
|
||
|
|
task main_phase(uvm_phase phase);
|
||
|
|
super.main_phase(phase);
|
||
|
|
phase.raise_objection(this); //objasnjenje u materijalu za vezbu 6
|
||
|
|
|
||
|
|
|
||
|
|
`uvm_info(get_type_name(), "Starting main phase...", UVM_LOW)
|
||
|
|
//postavljanje komande
|
||
|
|
vif.req1_cmd_in = 4'b0001;
|
||
|
|
//postavljanje prvog podatka
|
||
|
|
vif.req1_data_in = 32'h0001;
|
||
|
|
//Cekanje 1 takt
|
||
|
|
@(posedge vif.clk);
|
||
|
|
//Uklanjanje komande
|
||
|
|
vif.req1_cmd_in = 4'b0000;
|
||
|
|
//Postavljanje drugog podatka
|
||
|
|
vif.req1_data_in = 32'h0002;
|
||
|
|
// ...
|
||
|
|
#1000ns;
|
||
|
|
phase.drop_objection(this); //objasnjenje u materijalu za vezbu 6
|
||
|
|
endtask : main_phase
|
||
|
|
|
||
|
|
endclass : test_simple
|
||
|
|
|
||
|
|
`endif
|