Waiting for event trigger

class event_generator;
event class_e;

function new();
endfunction
function trigger;
$display(" pre trigger.“);
->class_e;
$display(” post trigger.");
endfunction
endclass : event_generator

class event_consumer;
event_generator evt;

task wait_event;
    $display("waiting for trigger");
    @(evt.class_e);
    $display("got trigger");
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();
m_event_consumer.evt = m_event_generator;
m_event_consumer.wait_event();
#10
m_event_generator.trigger();
#10000;
end

endmodule

In simulation is exiting after executing the
@(evt.class_e);

What wrong in this code ?
I have no clue. Please help me.

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

 

Ben Cohen
http://www.systemverilog.us/ ben@systemverilog.us
For training, consulting, services: contact http://cvcblr.com/home


See Paper: VF Horizons:PAPER: SVA Alternative for Complex Assertions - SystemVerilog - Verification Academy

In reply to ben@SystemVerilog.us:

Thanks Ben for the explanation . Now I understand the issue here.