`ifndef OTNFrameDelay_sv
`define OTNFrameDelay_sv
class OTNFrameDelay extends BaseTest;
`uvm_component_utils(OTNFrameDelay)
local ProcessStack stack;
local OTNFramePolicy delay_policy;
protected rand int random_delay;
constraint constr_random_delay {random_delay>=100; random_delay<=2000;}
function new(string name = "", uvm_component parent = null);
super.new(name, parent);
endfunction
virtual function void start_of_simulation_phase(uvm_phase phase);
super.start_of_simulation_phase(phase);
if(!randomize())`uvm_fatal("RANDOMIZATION_ERROR", "Failed to generate delay");
`uvm_info("TEST_STATUS", $sformatf("delay: %0d frames", random_delay), UVM_NONE)
endfunction
virtual task main_phase(uvm_phase phase);
phase.raise_objection(this);
//construct a stack
stack = ProcessStack::construct("OTNFrame", getNode(GEN), getTransciever(GEN), ProcessStack::SRC);
//construct a policy
delay_policy = OTNFramePolicy::type_id::create("delay_policy");
//configure the policy;
delay_policy.setFrameCount(random_delay);
//add policy to stack
stack.add(delay_policy).finish();
//start stack in blocking mode
stack.start(phase, 1'b1);
phase.drop_objection(this);
endtask
endclass
`define OTNFrameDelay_sv
class OTNFrameDelay extends BaseTest;
`uvm_component_utils(OTNFrameDelay)
local ProcessStack stack;
local OTNFramePolicy delay_policy;
protected rand int random_delay;
constraint constr_random_delay {random_delay>=100; random_delay<=2000;}
function new(string name = "", uvm_component parent = null);
super.new(name, parent);
endfunction
virtual function void start_of_simulation_phase(uvm_phase phase);
super.start_of_simulation_phase(phase);
if(!randomize())`uvm_fatal("RANDOMIZATION_ERROR", "Failed to generate delay");
`uvm_info("TEST_STATUS", $sformatf("delay: %0d frames", random_delay), UVM_NONE)
endfunction
virtual task main_phase(uvm_phase phase);
phase.raise_objection(this);
//construct a stack
stack = ProcessStack::construct("OTNFrame", getNode(GEN), getTransciever(GEN), ProcessStack::SRC);
//construct a policy
delay_policy = OTNFramePolicy::type_id::create("delay_policy");
//configure the policy;
delay_policy.setFrameCount(random_delay);
//add policy to stack
stack.add(delay_policy).finish();
//start stack in blocking mode
stack.start(phase, 1'b1);
phase.drop_objection(this);
endtask
endclass
`endif //OTNFrameDelay_sv
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
`ifndef OTNFramePolicy_sv
`define OTNFramePolicy_sv
class OTNFramePolicy extends OTNPolicyBase;
`uvm_object_utils(OTNFramePolicy)
function new(string name = "");
super.new(name);
endfunction
function void execute(OTNFrame txn, ExecutionContext cntxt);
endfunction
endclass
`endif //OTNFramePolicy_sv