non_port_program_item ::=
{ attribute_instance } continuous_assign
| { attribute_instance
} module_or_generate_item_declaration
| { attribute_instance
} specparam_declaration
| { attribute_instance
} local_parameter_declaration
| { attribute_instance
} parameter_declaration ;
| { attribute_instance
} initial_construct
| { attribute_instance
} concurrent_assertion_item
| { attribute_instance } timeunits_declaration21
| class_declaration
Type and data declarations
within the program are local to the program scope and have static lifetime.
Program variables can only be assigned using blocking assignments. Non-program
variables can only be assigned using nonblocking
assignments. Using nonblocking assignments with
program variables or blocking assignments with design (non-program) variables
shall be an error. References to program variables from
outside any program block shall be an error.
It is allowed to have any
arbitrary number of program definitions or instances. The programs can be fully
independent (without inter-program communication), or cooperative. The degree
of communication can be controlled by choosing to share data using nested
blocks, packages, or hierarchical references (including $root),
or making the data private by declaring it inside the corresponding program
block.