|
|
|
|
|
|
|
|
|
|
|
|
event
|
|
|
In Verilog, named events are static objects that can be triggered via the -> operator, and processes can wait for an event to be triggered via the @ operator. SystemVerilog events support the same basic operations, but enhance Verilog events in several ways. The most salient enhancement is that the triggered state of Verilog named events has no duration, whereas in SystemVerilog this state persists throughout the time-step in which the event triggered. Also, SystemVerilog events act as handles to synchronization queues, thus, they can be passed as arguments to tasks, and they can be assigned to one another or compared. |
|
|
|
|
|
Syntax |
|
|
|
|
|
event_trigger ::=
-> hierarchical_event_identifier ;
| ->> [ delay_or_event_control ] hierarchical_event_identifier ;
|
|
|
|
|
|
Triggering an event
|
|
|
Named events are triggered via the -> operator. This is same as in Verilog. Triggering an event unblocks all processes currently waiting on that event. |
|
|
|
|
|
Nonblocking event trigger
|
|
|
Nonblocking events are triggered using the ->> operator. The effect of the ->> operator is that the statement executes without blocking and it creates a nonblocking assign update event in the time in which the delay control expires or the event control occurs. |
|
|
|
|
|
|
|
|
|
|
|
Waiting for an event
|
|
|
The basic mechanism to wait for an event to be triggered is via the event control operator, @. This is same in Verilog. |
|
|
|
|
|
Event sequencing: wait_order()
|
|
|
The wait_order construct suspends the calling process until all of the specified events are triggered in the given order (left to right) or any of the untriggered events are triggered out of order and thus causes the operation to fail. |
|
|
|
|
|
Example : events
|
|
|
|
|
|
1 program event_t;
2 event try_event;
3 event get_event;
4
5 initial begin
6 // Start the wait_event as parallel thread
7 fork
8 wait_event();
9 join_none
10
11 // Wait till task wait_event has started execution
12 $write("Waiting for event get_event\n");
13 @ (get_event);
14 $write("Triggering event try_event\n");
15 #1 ;
16 -> try_event;
17 // Wait till task wait_event has done execution
18 $write("Waiting for event get_event\n");
19 wait (get_event.triggered);
20 $write("Got event get_event\n");
21 #10 $finish;
22 end
23
24 // Task which triggers/waits for events
25 task wait_event();
26 begin
27 #1 ;
28 // Inform that wait_event has started
29 $write("--task : Triggering event get_event\n");
30 -> get_event;
31 $write("--task : Waiting for event try_event\n");
32 @(try_event);
33 $write("--task : Got event try_event\n");
34 // Inform that wait_event has done with execution
35 #1 ;
36 $write("--task : Triggering event get_event\n");
37 ->get_event;
38 end
39 endtask
40
41 endprogram
You could download file event_t.sv here
|
|
|
|
|
|
Simulation : events
|
|
|
|
|
|
Waiting for event get_event
--task : Triggering event get_event
--task : Waiting for event try_event
Triggering event try_event
Waiting for event get_event
--task : Got event try_event
--task : Triggering event get_event
Got event get_event
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Copyright © 1998-2014 |
Deepak Kumar Tala - All rights reserved |
Do you have any Comment? mail me at:deepak@asic-world.com
|
|