In reply to anirban1950:
Your issue was that the event_generator and event_consumer were fired squentially, thus the .wait_event() was blocking. Use fork/join.
BTW, I beautified your code with Visual Studio, a free, nice and very fast editor
class event_generator;
event class_e;
function new();
endfunction
function trigger;
$display(" %t pre trigger.", $realtime);
->class_e;
$display("%t post trigger.", $realtime);
endfunction
endclass : event_generator
class event_consumer;
event_generator evt;
task wait_event;
$display("%t waiting for trigger", $realtime);
@(evt.class_e);
$display("%t got trigger", $realtime);
endtask
endclass
module top;
event_generator m_event_generator;
event_consumer m_event_consumer;
initial begin
$display(" Start ** ** **.");
#100;
m_event_generator = new();
m_event_consumer = new();
fork
begin
m_event_consumer.evt = m_event_generator;
m_event_consumer.wait_event();
end
begin
#10
m_event_generator.trigger();
end
begin
#10000;
$stop;
end
join
end
endmodule
// simulation
# Start ** ** **.
# 100 waiting for trigger
# 110 pre trigger.
# 110 post trigger.
# 110 got trigger