I would like to force/release the vif.signal from within a sequence:
class ifu_tx_v_sequence extends ifu_base_v_sequence;
`uvm_object_utils(ifu_tx_v_sequence) // ifu_int_if is instaned in p_sequncer
task body();
shutdown_mac();
endtask : body
task shutdown_mac();
p_sequencer.int_vif.shutdown_rdy();
@(posedge p_sequencer.int_vif.mac_div2); // confirm there is no sop in following cycle
repeat(500)@(posedge p_sequencer.int_vif.mac_div2);
p_sequencer.int_vif.release_mac_ready();
endtask : shutdown_mac
endclass: ifu_tx_v_sequence
i see that the sim pointer does reach the force/release tasks, but the force is not taking place.
Any idea what am i doing wrong?
the objective is to be able to force/release a signal inside a body of a stimuli sequence.
It is strongly recommended that you don’t do any signal access from a sequence. You should create the appropriate sequence_item()/driver task to accomplish your goal.
The reason for this is that by limiting signal access to only the driver, you reduce the potential for signal conflicts coming from many different locations.
You didn’t mention if you are seeing X’s, undefined signals or something else, but I would suspect that you have conflicts somewhere.
@tsafrirw:
I believe you do not understand what the benefits of TLM are. What you want to do is something what should happen inside the driver. Because the transaction does not have a relationship with respect to clock cycles it is impossible to do this from a sequence. The sequence generates untimed seq_items.