BTF - Verilog Identifiers and Hierarchical Referencing

From: Clifford E. Cummings (cliffc@sunburst-design.com)
Date: Thu Jun 04 1998 - 00:43:34 PDT


Based on Stu's recommendations and comments from Shalom:
X-Lines: 225
Content-Type: text/plain; charset="us-ascii"
Content-Length: 8510
X-Status: $$$$
X-UID: 0000000514
Status: RO

System tasks or system functions:

- A system_function_identifier is an identifier for system functions and is
never used in a hierarchical reference.
- A system_task_identifier is an identifier for system tasks and is never
used in a hierarchical reference.
- As described in section 2.7.3, a system task or system function is used
to name and identify Verilog standard system tasks and functions, user
defined system tasks and functions (created using the PLI) and software
implementation system tasks and functions. Additional system tasks and
functions that may not be available in all implementations of the Verilog
HDL are described in Annex F.

A.6
1998 BE49>system_task_enable ::= system_task_identifier [ ( expression { ,
expression } ) ] ;

A.8
1998 BE49> system_function_identifier [ ( expression { , expression } ) ]
Deleted
1998 BE08>system_task_function_name2 ::= $system_function_identifier

NOTES:
1998 BE??>6 - The $ character in a system_function_identifier or
system_task_identifier shall not
1998 BE??> be followed by white space. A system_function_identifier or
system_task_identifier
1998 BE??> shall not be escaped.

These have been incorporated into the latest rev of the BNF.

-------------

Identifiers:

- An identifier is either a simple or escaped identifier.
- An identifier is used to name and identify blocks, events, functions,
generate_blocks, genvar_functions, genvars, inout ports, input ports,
memories, modules, nets, output ports, parameters, reals, regs, registers,
specparams, tasks, terminals and udps.

Instances and arrayed instances:

- An arrayed_identifier is either a simple_arrayed_identifier (which could
just be a simple_identifier) or an escaped_arrayed_identifier (which could
just be an escaped_identifier)
- An instance or arrayed instance is used to name and identify gate
instances, module instances and udp instances.

References to instances, arrayed instances or an instance located in a
different part of the design hierarchy:

- A hierarchical_identifier is either a simple_hierarchical_identifier
(which could just be a simple_arrayed_identifier or simple_identifier) or
an escaped_hierarchical_identifier (which could just be an
escaped_arrayed_identifier or escaped_identifier)

System tasks or system functions:

- A system_function_identifier is an identifier for system functions and is
never used in a hierarchical reference.
- A system_task_identifier is an identifier for system tasks and is never
used in a hierarchical reference.
- As described in section 2.7.3, a system task or system function is used
to name and identify Verilog standard system tasks and functions, user
defined system tasks and functions (created using the PLI) and software
implementation system tasks and functions. Additional system tasks and
functions that may not be available in all implementations of the Verilog
HDL are described in Annex F.

All possible identifier types are listed alphabetically below:

1998 BE??>arrayed_identifier ::=
1998 BE??> simple_arrayed_identifier
1998 BE??> | escaped_arrayed_identifier

1998 BE??>block_identifier ::= identifier
1998 BE??>combinational_task_identifier ::= identifier
1998 BE??>edge_identifier ::= identifier

1998 BE??>escaped_arrayed_identifier ::= escaped_identifier [ [ range ] ]

1998 BE??>escaped_hierarchical_identifier5 ::=
1998 BE??> escaped_hierarchical_branch [ { .simple_hierarchical_branch |
.escaped_hierarchical_branch } ]

escaped_identifier ::= \ {Any_ASCII_character_except_white_space} white_space

1998 BE??>function_identifier ::= identifier
1998 BE??>gate_instance_identifier ::= arrayed_identifier
1998 BE??>generate_block_identifier ::= identifier
1998 BE??>genvar_function_identifier ::= identifier
1998 BE??>genvar_identifier ::= identifier

1998 BE??>hierarchical_identifier ::=
1998 BE??> simple_hierarchical_identifier
1998 BE??> | escaped_hierarchical_identifier

1998 BE??>identifier ::=
1998 BE??> simple_identifier
1998 BE??> | escaped_identifier

1998 BE??>event_identifier ::= identifier
1998 BE??>inout_port_identifier ::= identifier
1998 BE??>input_identifier ::= identifier
1998 BE??>input_port_identifier ::= identifier
1998 BE??>memory_identifier ::= identifier
1998 BE??>module_identifier ::= identifier
1998 BE??>module_instance_identifier ::= arrayed_identifier
1998 BE??>net_identifier ::= identifier
1998 BE??>output_identifier ::= identifier
1998 BE??>output_port_identifier ::= identifier
1998 BE??>parameter_identifier ::= identifier
1998 BE??>port_identifier ::= identifier
1998 BE??>real_identifier ::= identifier
1998 BE??>reg_identifier ::= identifier
1998 BE??>register_identifier ::= identifier

1998 BE??>simple_arrayed_identifier ::= simple_identifier [ [ range ] ]

1998 BE??>simple_hierarchical_identifier4 ::=
1998 BE??> simple_hierarchical_branch [ .escaped_identifier ]

1998 BE01>simple_identifier3 ::= [a-zA-Z_] { [a-zA-Z0-9_$] }

1998 BE??>specparam_identifier ::= identifier

1998 BE??>system_function_identifier6 ::= $[a-zA-Z0-9_$]{ [a-zA-Z0-9_$] }
1998 BE??>system_task_identifier6 ::= $[a-zA-Z0-9_$]{ [a-zA-Z0-9_$] }

1998 BE??>task_identifier ::= identifier
1998 BE??>terminal_identifier ::= identifier
1998 BE??>udp_identifier ::= identifier
1998 BE??>udp_instance_identifier ::= arrayed_identifier
1998 BE??>udp_output_port_identifier ::= identifier

1998 BE??>simple_hierarchical_branch4 ::=
1998 BE??> simple_identifier [ [ unsigned_number ] ] [ {
.simple_identifier [ [ unsigned_number ] ] } ]
1998 BE??>escaped_hierarchical_branch5 ::=
1998 BE??> escaped_identifier [ [ unsigned_number ] ] [ {
.escaped_identifier [ [ unsigned_number ] ] } ]

1995>white_space ::= space | tab | newline
1998 BE??>white_space ::= space | tab | newline | eof7

1995>NOTE - The period in identifier may not be preceded or followed by a
space
1998 BE??>NOTE
1998 BE??>3 - A simple_identifier and arrayed_reference shall start with an
alpha or underscore
1998 BE??> character, shall have at least one character and shall not have
any spaces
1998 BE??>4 - The period in simple_hierarchical_identifier and
simple_hierarchical_branch shall not
1998 BE??> be preceded or followed by white_space
1998 BE??>5 - The period in escaped_hierarchical_identifier and
escaped_hierarchical_branch shall
1998 BE??> be preceded by white_space but shall not be followed by white_space
1998 BE??>6 - The $ character in a system_function_identifier or
system_task_identifier shall not
1998 BE??> be followed by white space. A system_function_identifier or
system_task_identifier
1998 BE??> shall not be escaped.
1998 BE??>7 - End of file

<p>Definitions that probably require hierarchical and multidimensional
additions and/or modifications

net_assignment ::= net_lvalue = expression

blocking_assignment ::= reg_lvalue = [ delay_or_event_control ] expression

non_blocking_assignment ::= reg_lvalue <= [ delay_or_event_control ]
expression

combinational_blocking_assignment ::= reg_lvalue = [ delay_control ]
expression

combinational_non_blocking_assignment ::= reg_lvalue <= [ delay_control ]
expression

reg_assignment ::= reg_lvalue = expression

reg_lvalue ::=
          reg_identifier
        | reg_identifier [ expression ]
        | reg_identifier [ msb_constant_expression : lsb_constant_expression ]
        | reg_concatenation

constant_primary ::=
          number
        | parameter_identifier
        | constant_concatenation
        | constant_multiple_concatenation
        | constant_function_call

primary ::=
          number
        | identifier
        | identifier [ expression ] { [ expression ] }
        | identifier [ expression ] { [ expression ] } [ [ msb_constant_expression
: lsb_constant_expression ] ]
        | identifier [ msb_constant_expression : lsb_constant_expression ]
        | concatenation
        | multiple_concatenation
        | function_call
        | system_function_call
        | constant_function_call
        | ( mintypmax_expression )

expression -> hierarchical tasks and functions

Alternate method: create a local identifier and use it in names

<p>//********************************************************************//
// Cliff Cummings E-mail: cliffc@sunburst-design.com //
// Sunburst Design Phone: 503-579-6362 / FAX: 503-579-7631 //
// 15870 SW Breccia Dr., Beaverton, OR 97007 //
// //
// Verilog & Synthesis Training / On-Site Training //
// Verilog, VHDL, Synopsys, LMG, FPGA, Consulting and Contracting //
//********************************************************************//



This archive was generated by hypermail 2.1.4 : Mon Jul 08 2002 - 12:52:55 PDT and
sponsored by Boyd Technology, Inc.