My driver code is as below for an up/down counter:
virtual task run_phase(uvm_phase phase);
super.run_phase (phase);
// task to initialise the driver signals
initialize();
forever begin
seq_item_port.get_next_item(req);
drive();
seq_item_port.item_done();
end //forever
endtask : run_phase
task initialize();
//default values
counter_vif.load_counter <= 1'b0;
counter_vif.count_value <= 0;
counter_vif.up_counter <= 0;
endtask : initialize
virtual task drive();
@(posedge counter_vif.clk);
if (counter_vif.clk_en) begin
counter_vif.count_value <= req.count_value;
counter_vif.load_counter <= req.load_counter;
counter_vif.up_counter <= req.up_counter;
end //if
req.print();
endtask
My monitor code is as below:
virtual task run_phase(uvm_phase phase);
forever begin
@(posedge counter_vif.MONITOR.clk);
if (counter_vif.MONITOR.clk_en && counter_vif.MONITOR.reset) begin
seq_item_collected.count_value = `MON_IF.count_value;
seq_item_collected.load_counter = `MON_IF.load_counter;
seq_item_collected.up_counter = `MON_IF.up_counter;
// DUT needs a clk to load and start the counter
if(`MON_IF.load_counter)
@(posedge counter_vif.MONITOR.clk);
seq_item_collected.current_value = `MON_IF.current_value;
seq_item_collected.count_reached = `MON_IF.count_reached;
seq_item_collected.print();
// write into uvm_analysis_port for reference by next components
trans_collected_port.write(seq_item_collected);
end //if
end //forever
endtask : run_phase
But the problem I see here is:
Though i am setting load_counter = 1 in the first sequence, i see that monitor and scoreboard see the load_countrer =1 after 2 clocks(3rd sequence). i.e. I am just trying to figure out why is it so?
req.print(); of driver prints @15 :
# UVM_INFO updn_counter_driver.sv(69) @ 15: uvm_test_top.env.counter_agent.driver [DRIVER DEBUG1]
# --------------------------------------------------
# Name Type Size Value
# --------------------------------------------------
# req updn_counter_seq_item - @673
# count_value integral 7 'h10
# load_counter integral 1 'h1
# up_counter integral 1 'h0
# UVM_INFO updn_counter_monitor.sv(45) @ 35: uvm_test_top.env.counter_agent.monitor [MONITOR DEBUG1] seq_item_collected
# ---------------------------------------------------------
# Name Type Size Value
# ---------------------------------------------------------
# updn_counter_seq_item updn_counter_seq_item - @643
# count_value integral 7 'h10
# load_counter integral 1 'h1
# up_counter integral 1 'h0
anyone has any idea, if i am missing something here?