Section 12.1

 

Change the second sentence of the second paragraph as shown in blue:

 

SystemVerilog adds a semaphore built-in class, which can be used for synchronization and mutual exclusion to shared resources, and a mailbox built-in class that can be used as a communication channel between processes.

 

Add the following paragraph as a new paragraph at the end of the section.

 

Semaphores and mailboxes are a built-in type, nonetheless, they are classes, and can be used as base classes for deriving additional higher level classes.

Section 12.2

 

Change list of methods for Semaphore at end of section as shown in blue:

 

— Obtain one or more keys from the bucket: get()

— Return one or more keys into the bucket: put()

 

Section 12.2.3

 

In the first sentence of the first paragraph make the change shown in blue:

 

The semaphore get() method

 

Change first sentence of next to last paragraph as shown in blue:

 

If the specified number of keys are available, the method returns and execution continues.

Section 12.3

 

In the last sentence of the last paragraph make the change shown in blue:

 

If the specified number of keys are available, the method returns 1 and execution continues.

 

Section 12.4

Add at the end of the section (as the last item in the list of methods) the following:

 

¾      Retrieve the number of messages in the mailbox: num()

Section 12.4.1

 

In the first sentence of the third paragraph make the change shown in blue:

 

The new() function returns the mailbox handle, or null if the mailboxes cannot be created.

 

Add to the last paragraph:

 

The bound must be positive.  Negative bounds are illegal and may result in indeterminate behavior, but implementations may issue a warning.

 

Section 12.4.3

 

Change scalar to singular in the prototype.

 

task put(singular message);

 

In the third paragraph change as shown in blue:

 

The message is any singular expression, including object handles.

 

Section 12.4.4

 

Change scalar to singular in the prototype.

 

function int try_put(singular message);

 

In the third paragraph change as shown in blue:

 

The message is any singular expression, including object handles.

Section 12.4.5

 

Change scalar to singular in the prototype.

 

task get( ref singular message );

 

In the third paragraph change as shown in blue:

 

The message can be any singular expression, and it must be a valid l-value.

 

In the fourth paragraph change as shown in blue:

 

Non-parameterized mailboxes are type-less, that is, a single mailbox can send and receive different types of data.

 

Section 12.4.6

 

Change scalar to singular in the prototype.

 

function int try_get( ref singular message );

 

In the third paragraph change as shown in blue:

 

The message can be any singular expression, and it must be a valid l-value.

 

Change the sentences in the last paragraph as shown in blue:

 

If the mailbox is empty then the method returns 0. If there is a type mismatch between the message variable and the message in the mailbox, the method returns –1. If a message is available and the message type matches the type of the message variable, the message is retrieved and the method returns 1.

 

Section 12.4.7

 

Change scalar to singular in the prototype.

task peek( ref singular message );

 

In the third paragraph change as shown in blue:

 

The message can be any singular expression, and it must be a valid l-value.

Section 12.4.8

 

Change scalar to singular in the prototype.

 

function int try_peek( ref singular message );

 

In the third paragraph change as shown in blue:

 

The message can be any singular expression, and it must be a valid l-value.

 

Change the sentences in the next to the last paragraph as shown in blue:

 

If the mailbox is empty then the method returns 0. If there is a type mismatch between the message variable and the message in the mailbox, the method returns –1. If a message is available and the message type matches the type of the message variable, the message is copied and the method returns 1.

 

Delete the last paragraph in the section (it is the following).

 

Mailboxes are a built-in type, nonetheless, they are classes, and can be used as base classes for deriving more higher level classes.

Section 12.5

 

Change the last paragraph as shown in blue:

 

The only difference between a generic (dynamic) mailbox and a parameterized mailbox is that for a parameterized mailbox the compiler ensures that all put, peek, try_peek, and get methods are compatible with the mailbox type so that all type mismatches are caught by the compiler and not at run-time.

Section 12.6

 

Delete the last sentence of the first paragraph.

 

In this respect, SystemVerilog events behave like object handles; they can be assigned to one another, they can be assigned the special value null, they can be arguments to tasks (but not functions), and they can be dynamically allocated and reclaimed.

 

Section 12.6.1

 

Change the third sentence of the first paragraph as shown in blue:

 

This is similar to the way in which an edge can trigger a flip-flop but the state of the edge can not be ascertained: if( posedge clock ) is illegal.

Section 12.6.4

 

Change the first sentence of the last paragraph as shown in blue:

 

When the second fork executes, the first process may trigger the event blast before the second process (assuming the processes in a fork…join execute in source order) has a chance to execute and wait for the event.

Section 12.8.1

 

Change null to null in the second sentence of the first paragraph as shown in blue:

 

That is, when the event is set to null, no process can wait for the event again.

Section 12.9

Change scalar to singular in the prototype.

 

task $wait_var(singular variable1,..., variableN);

 

In the first sentence of the fourth paragraph change by removing the word an as shown stroked out in the following:

 

Arguments to $wait_var() can be an array subscript expressions, in which case the index expression is evaluated only once when $wait_var() is executed.