Mantis 2106 AMENDMENTS

 

Modify the text in 6.18 User Defined Types

REPLACE

The actual data type definition of a forward typedef declaration shall be resolved within the same local scope or generate block. Importing a typedef from a package into a local scope can also resolve a type definition.It shall be an error if the type_identifier does not resolve to data type, or basic data type if specified

 

WITH

The actual data type definition of a forward typedef declaration shall be resolved within the same local scope or generate block. Importing a typedef from a package into a local scope can also resolve a type definition.It shall be an error if the type_identifier does not resolve to a data type. It shall be an error if a basic data type was specified by the forward type declaration and the actual type definition does not conform to the specified basic data type.

 

Modify the text in 6.21 Scope and Lifetime

 

REPLACE

 

Any data declared outside a module, interface, task, or function are global in scope (can be used anywhere after its declaration) and have a static lifetime (exist for the whole elaboration and simulation time).

 

Data declared inside a module, interface or program, but outside a task, process, or function, are local in scope and static in lifetime (exist for the lifetime of the module, interface or program). This is roughly equivalent to C static data declared outside a function, which is local to a file.

 

Data declared in an automatic task, function, or block have the lifetime of the call or activation and a local scope. This is roughly equivalent to a C automatic variable.

 

Data declared in a static task, function, or block default to a static lifetime and a local scope.

 

Data can be declared in unnamed blocks as well as in named blocks. These data are visible to the unnamed block and any nested blocks below it. Hierarchical references cannot be used to access these data by name.

 

Tasks and functions can be declared as automatic, making all storage within the task or function automatic.

 

Specific data within a static task or function can be explicitly declared as automatic. Data declared as automatic have the lifetime of the call or block and are initialized on each entry to the call or block (also see 6.7 on variable initialization). The lifetime of a forkjoin, forkjoin_any, or forkjoin_none block shall encompass the execution of all processes spawned by the block. The lifetime of a scope enclosing any fork block includes the lifetime of the fork block.

 

Data can be explicitly declared as static. Data declared to be static in an automatic task, function, or block have a static lifetime and a scope local to the block. This is like C static data declared within a function.

 

WITH

 

Variables declared outside a module, program, interface, task, or function are local to the compilation unit and have a static lifetime (exist for the whole simulation). This is roughly equivalent to C static variables declared outside a function, which are local to a file. Variables declared inside a module, interface or program, but outside a task, process, or function, are local in scope and have a static lifetime.

 

Variables declared inside a static task, function, or block are local in scope and default to a static lifetime. Specific variables within a static task, function, or block can be explicitly declared as automatic. Such variables have the lifetime of the call or block and are initialized on each entry to the call or block (also see 6.7 on variable initialization). This is roughly equivalent to a C automatic variable.

 

Tasks and functions may be declared as automatic. Variables declared in an automatic task, function, or block are local in scope, default to the lifetime of the call or block and are initialized on each entry to the call or block (also see 6.7 on variable initialization). An automatic block is one in which declarations are automatic by default. Specific variables within an automatic task, function, or block can be explicitly declared as static. Such variables have a static lifetime. This is roughly equivalent to C static variables declared within a function.

 

The lifetime of a forkjoin, forkjoin_any, or forkjoin_none block shall encompass the execution of all processes spawned by the block. The lifetime of a scope enclosing any fork block includes the lifetime of the fork block.

 

A variable declaration shall precede any statements within a procedural block and shall precede any simple reference (non-hierarchical) to that variable. Variables may be declared in unnamed blocks as well as in named blocks. These variables are visible to the unnamed block and any nested blocks below it. Hierarchical references shall not be used to access these variables by name.

 

Any data declared outside a module, interface, task, or function are global in scope (can be used anywhere after its declaration) and have a static lifetime (exist for the whole elaboration and simulation time).

 

Data declared inside a module, interface or program, but outside a task, process, or function, are local in scope and static in lifetime (exist for the lifetime of the module, interface or program). This is roughly equivalent to C static data declared outside a function, which is local to a file.

 

Data declared in an automatic task, function, or block have the lifetime of the call or activation and a local scope. This is roughly equivalent to a C automatic variable.

 

Data declared in a static task, function, or block default to a static lifetime and a local scope.

 

Data can be declared in unnamed blocks as well as in named blocks. These data are visible to the unnamed block and any nested blocks below it. Hierarchical references cannot be used to access these data by name.

 

Tasks and functions can be declared as automatic, making all storage within the task or function automatic.

 

Specific data within a static task or function can be explicitly declared as automatic. Data declared as automatic have the lifetime of the call or block and are initialized on each entry to the call or block (also see 6.7 on variable initialization). The lifetime of a forkjoin, forkjoin_any, or forkjoin_none block shall encompass the execution of all processes spawned by the block. The lifetime of a scope enclosing any fork block includes the lifetime of the fork block.

 

Data can be explicitly declared as static. Data declared to be static in an automatic task, function, or block have a static lifetime and a scope local to the block. This is like C static data declared within a function.