hyper-linked BNF

From: Adam Krolnik (adamk@cyrix.com)
Date: Mon Jul 20 1998 - 04:09:14 PDT


Here is the BNF with html links:
  from definition to a usage.
  from usage to the definition.

This shows immediately, definitions which have no usage. E.g. 'source_text'
as non-underlined definition.

It also shows names that aren't defined as non-underlined text (and non-bold.) E.g. 'scalar_expression' in "Primitive instances" is not defined.

It does not show circular references such as 'function_statement' which is referenced
but always within it's own definitions. This is one we will need to pick through -
or are there any ideas to identify this?

   Adam

<p>Begin forwarded message:

Date: Mon, 20 Jul 1998 16:46:34 -0500
From: adamk
To: adamk
Subject: hyper-linked BNF

<HTML>

<HEAD>

   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">

   <META NAME="GENERATOR" CONTENT="Mozilla/4.04 [en] (X11; I; SunOS 5.5.1 sun4m) [Netscape]">

</HEAD>

<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000">

<BR><TT><FONT SIZE=4><B>A.1 Source text </B></FONT></TT>

<BR><TT> </TT>

<BR><TT>source_text ::= { <A NAME="Rdescription" HREF="#description">description</A> } </TT>

<BR><TT><A NAME="description" HREF="#Rdescription">description</A> ::= </TT>

<BR><TT> <A NAME="Rmodule_declaration" HREF="#module_declaration">module_declaration</A> </TT>

<BR><TT> | <A NAME="Rudp_declaration" HREF="#udp_declaration">udp_declaration</A> </TT>

<BR><TT><A NAME="module_declaration" HREF="#Rmodule_declaration">module_declaration</A> ::= </TT>

<BR><TT> <A NAME="Rmodule_keyword" HREF="#module_keyword">module_keyword</A> <A NAME="Rmodule_identifier" HREF="#module_identifier">module_identifier</A> [ <A NAME="Rlist_of_ports" HREF="#list_of_ports">list_of_ports</A> ] <B>;</B> { <A NAME="Rmodule_item" HREF="#module_item">module_item</A> } <B>endmodule</B> </TT>

<BR><TT><A NAME="module_keyword" HREF="#Rmodule_keyword">module_keyword</A> ::= <B>module</B> | <B>macromodule</B> </TT>

<BR><TT><A NAME="list_of_ports" HREF="#Rlist_of_ports">list_of_ports</A> ::= <B>(</B> <A NAME="Rport" HREF="#port">port</A> { <B>,</B> port } <B>)</B> </TT>

<BR><TT><A NAME="port" HREF="#Rport">port</A> ::= </TT>

<BR><TT> [ <A NAME="Rport_expression" HREF="#port_expression">port_expression</A> ] </TT>

<BR><TT> | . <A NAME="Rport_identifier" HREF="#port_identifier">port_identifier</A> <B>(</B> [ port_expression ] <B>)</B> </TT>

<BR><TT><A NAME="port_expression" HREF="#Rport_expression">port_expression</A> ::= </TT>

<BR><TT> <A NAME="Rport_reference" HREF="#port_reference">port_reference</A> </TT>

<BR><TT> | { port_reference { <B>,</B> port_reference } } </TT>

<BR><TT><A NAME="port_reference" HREF="#Rport_reference">port_reference</A> ::= </TT>

<BR><TT> port_identifier </TT>

<BR><TT> | port_identifier [ <A NAME="Rconstant_expression" HREF="#constant_expression">constant_expression</A> ] </TT>

<BR><TT> | port_identifier [ <A NAME="Rmsb_constant_expression" HREF="#msb_constant_expression">msb_constant_expression</A> <B>:</B> <A NAME="Rlsb_constant_expression" HREF="#lsb_constant_expression">lsb_constant_expression</A> ] </TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="module_item" HREF="#Rmodule_item">module_item</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <A NAME="Rmodule_item_declaration" HREF="#module_item_declaration">module_item_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rmodule_or_generate_item" HREF="#module_or_generate_item">module_or_generate_item</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rgenerated_instantiation" HREF="#generated_instantiation">generated_instantiation</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rspecify_block" HREF="#specify_block">specify_block</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="module_item_declaration" HREF="#Rmodule_item_declaration">module_item_declaration</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <A NAME="Rparameter_declaration" HREF="#parameter_declaration">parameter_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rlocal_parameter_declaration" HREF="#local_parameter_declaration">local_parameter_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rinput_declaration" HREF="#input_declaration">input_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Routput_declaration" HREF="#output_declaration">output_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rinout_declaration" HREF="#inout_declaration">inout_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="module_or_generate_item" HREF="#Rmodule_or_generate_item">module_or_generate_item</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <A NAME="Rmodule_or_generate_item_declaration" HREF="#module_or_generate_item_declaration">module_or_generate_item_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rparameter_override" HREF="#parameter_override">parameter_override</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rcontinuous_assign" HREF="#continuous_assign">continuous_assign</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rgate_instantiation" HREF="#gate_instantiation">gate_instantiation</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rudp_instantiation" HREF="#udp_instantiation">udp_instantiation</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rmodule_instantiation" HREF="#module_instantiation">module_instantiation</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rinitial_construct" HREF="#initial_construct">initial_construct</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Ralways_construct" HREF="#always_construct">always_construct</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Ralways_combinational_construct" HREF="#always_combinational_construct">always_combinational_construct</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="module_or_generate_item_declaration" HREF="#Rmodule_or_generate_item_declaration">module_or_generate_item_declaration</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <A NAME="Rnet_declaration" HREF="#net_declaration">net_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rreg_declaration" HREF="#reg_declaration">reg_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rinteger_declaration" HREF="#integer_declaration">integer_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rreal_declaration" HREF="#real_declaration">real_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rtime_declaration" HREF="#time_declaration">time_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rrealtime_declaration" HREF="#realtime_declaration">realtime_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Revent_declaration" HREF="#event_declaration">event_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rtask_declaration" HREF="#task_declaration">task_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rfunction_declaration" HREF="#function_declaration">function_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | local_parameter_declaration </FONT></TT>

<BR><TT><A NAME="parameter_override" HREF="#Rparameter_override">parameter_override</A> ::= <B>defparam</B> <A NAME="Rlist_of_param_assignments" HREF="#list_of_param_assignments">list_of_param_assignments</A> <B>;</B> </TT>

<BR><TT> </TT>

<BR><TT><FONT SIZE=4><B>A.2 Declarations </B></FONT></TT>

<BR><TT> </TT>

<BR><TT><FONT COLOR=#800080><A NAME="parameter_declaration" HREF="#Rparameter_declaration">parameter_declaration</A> ::= <B>parameter</B> <B>[</B> <A NAME="Rrange" HREF="#range">range</A> <B>]</B> list_of_param_assignments <B>;</B> </FONT></TT>

<BR><TT><A NAME="list_of_param_assignments" HREF="#Rlist_of_param_assignments">list_of_param_assignments</A> ::= <A NAME="Rparam_assignment" HREF="#param_assignment">param_assignment</A> { <B>,</B> param_assignment } </TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="local_parameter_declaration" HREF="#Rlocal_parameter_declaration">local_parameter_declaration</A> ::= <B>localparam</B> <A NAME="Rlist_of_local_param_assignments" HREF="#list_of_local_param_assignments">list_of_local_param_assignments</A> <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="list_of_local_param_assignments" HREF="#Rlist_of_local_param_assignments">list_of_local_param_assignments</A> ::= param_assignment { <B>,</B> param_assignment } </FONT></TT>

<BR><TT><A NAME="param_assignment" HREF="#Rparam_assignment">param_assignment</A> ::= <A NAME="Rparameter_identifier" HREF="#parameter_identifier">parameter_identifier</A> <B>=</B> constant_expression </TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="input_declaration" HREF="#Rinput_declaration">input_declaration</A> ::= <B>input</B> [ <B>signed</B> ] [ <A NAME="Rnet_type" HREF="#net_type">net_type</A> ] <B>[</B> range <B>]</B> <A NAME="Rlist_of_port_identifiers" HREF="#list_of_port_identifiers">list_of_port_identifiers</A> <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="output_declaration" HREF="#Routput_declaration">output_declaration</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <B>output</B> [ <B>signed</B> ] [ net_type ] <B>[</B> range <B>]</B> list_of_port_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <B>output</B> [ <B>signed</B> ] [ <A NAME="Rreg_type" HREF="#reg_type">reg_type</A> ] <B>[</B> range <B>]</B> <A NAME="Rlist_of_reg_port_identifiers" HREF="#list_of_reg_port_identifiers">list_of_reg_port_identifiers</A> <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="inout_declaration" HREF="#Rinout_declaration">inout_declaration</A> ::= <B>inout</B> [ <B>signed</B> ] [ net_type ] <B>[</B> range <B>]</B> list_of_port_identifiers <B>;</B> </FONT></TT>

<BR><TT><A NAME="list_of_port_identifiers" HREF="#Rlist_of_port_identifiers">list_of_port_identifiers</A> ::= port_identifier { <B>,</B> port_identifier } </TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="list_of_reg_port_identifiers" HREF="#Rlist_of_reg_port_identifiers">list_of_reg_port_identifiers</A> ::= port_identifier [ <B>=</B> constant_expression ] { <B>,</B> port_identifier [ <B>=</B> constant_expression ] } </FONT></TT>

<BR><TT> (Question <B>-</B> were multi-dimensional tasks <B>and</B> functions also going to be permitted??? <B>-</B> </TT>

<BR><TT> NO?! <B>-</B> breaks assignment rule) </TT>

<BR><TT> (If this BNF is correct <B>for</B> multidimensional arrays, this will also be added to <B>automatic</B> tasks, etc.) </TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="reg_declaration" HREF="#Rreg_declaration">reg_declaration</A> ::= <B>reg</B> [ <B>signed</B> | <B>unsigned</B> ] <B>[</B> range <B>]</B> <A NAME="Rlist_of_regmem_identifiers" HREF="#list_of_regmem_identifiers">list_of_regmem_identifiers</A> <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="event_declaration" HREF="#Revent_declaration">event_declaration</A> ::= <B>event</B> <A NAME="Rlist_of_event_identifiers" HREF="#list_of_event_identifiers">list_of_event_identifiers</A> <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="list_of_regmem_identifiers" HREF="#Rlist_of_regmem_identifiers">list_of_regmem_identifiers</A> ::= <A NAME="Rregister_name" HREF="#register_name">register_name</A> | <A NAME="Rmemory_name" HREF="#memory_name">memory_name</A> { <B>,</B> register_name | memory_name } </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="list_of_register_identifiers" HREF="#Rlist_of_register_identifiers">list_of_register_identifiers</A> ::= register_name { <B>,</B> register_name } </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="memory_name" HREF="#Rmemory_name">memory_name</A> ::= <A NAME="Rmemory_identifier" HREF="#memory_identifier">memory_identifier</A> [ <A NAME="Rupper_limit_constant_expression" HREF="#upper_limit_constant_expression">upper_limit_constant_expression</A> <B>:</B> <A NAME="Rlower_limit_constant_expression" HREF="#lower_limit_constant_expression">lower_limit_constant_expression</A> ] </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="register_name" HREF="#Rregister_name">register_name</A> ::= <A NAME="Rregister_identifier" HREF="#register_identifier">register_identifier</A> [ <A NAME="Rdimension" HREF="#dimension">dimension</A> { <B>,</B> dimension }] </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="list_of_real_identifiers" HREF="#Rlist_of_real_identifiers">list_of_real_identifiers</A> ::= <A NAME="Rreal_identifier" HREF="#real_identifier">real_identifier</A> [ dimension { <B>,</B> dimension }] { <B>,</B> real_identifier [ dimension { <B>,</B> dimension }] } </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="list_of_event_identifiers" HREF="#Rlist_of_event_identifiers">list_of_event_identifiers</A> ::= <A NAME="Revent_identifier" HREF="#event_identifier">event_identifier</A> [ dimension { <B>,</B> dimension }] { <B>,</B> event_identifier [ dimension { <B>,</B> dimension }] } </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="range" HREF="#Rrange">range</A> ::= [ msb_constant_expression <B>:</B> lsb_constant_expression ] </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="dimension" HREF="#Rdimension">dimension</A> ::= [ <A NAME="Rdimension_constant_expression" HREF="#dimension_constant_expression">dimension_constant_expression</A> <B>:</B> dimension_constant_expression ] </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="list_of_net_identifiers" HREF="#Rlist_of_net_identifiers">list_of_net_identifiers</A> ::= <A NAME="Rnet_identifier" HREF="#net_identifier">net_identifier</A> [ dimension { <B>,</B> dimension }] { <B>,</B> net_identifier [ dimension { <B>,</B> dimension }] } </FONT></TT>

<BR><TT><A NAME="time_declaration" HREF="#Rtime_declaration">time_declaration</A> ::= <B>time</B> list_of_register_identifiers <B>;</B> </TT>

<BR><TT><A NAME="integer_declaration" HREF="#Rinteger_declaration">integer_declaration</A> ::= <B>integer</B> list_of_register_identifiers <B>;</B> </TT>

<BR><TT><A NAME="real_declaration" HREF="#Rreal_declaration">real_declaration</A> ::= <B>real</B> list_of_real_identifiers <B>;</B> </TT>

<BR><TT><A NAME="realtime_declaration" HREF="#Rrealtime_declaration">realtime_declaration</A> ::= <B>realtime</B> list_of_real_identifiers <B>;</B> </TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="net_declaration" HREF="#Rnet_declaration">net_declaration</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> net_type [ <B>vectored</B> | <B>scalared</B> ] [ <B>signed</B> | <B>unsigned</B> ] <B>[</B> range <B>]</B> [ <A NAME="Rdelay3" HREF="#delay3">delay3</A> ] list_of_net_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <B>trireg</B> [ <B>vectored</B> | <B>scalared</B> ] [ <B>signed</B> | <B>unsigned</B> ] [ <A NAME="Rcharge_strength" HREF="#charge_strength">charge_strength</A> ] <B>[</B> range <B>]</B> [ delay3 ] </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> list_of_net_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | net_type [ <B>vectored</B> | <B>scalared</B> ] [ <B>signed</B> | <B>unsigned</B> ] [ <A NAME="Rdrive_strength" HREF="#drive_strength">drive_strength</A> ] <B>[</B> range <B>]</B> [ delay3 ] </FONT></TT>

<BR><TT> <A NAME="Rlist_of_net_decl_assignments" HREF="#list_of_net_decl_assignments">list_of_net_decl_assignments</A> <B>;</B> </TT>

<BR><TT><A NAME="net_type" HREF="#Rnet_type">net_type</A> ::= <B>wire</B> | <B>tri</B> | <B>tri1</B> | <B>supply0</B> | <B>wand</B> | <B>triand</B> | <B>tri0</B> | <B>supply1</B> | <B>wor</B> | <B>trior</B> </TT>

<BR><TT><A NAME="drive_strength" HREF="#Rdrive_strength">drive_strength</A> ::= </TT>

<BR><TT> <B>(</B> <A NAME="Rstrength0" HREF="#strength0">strength0</A> <B>,</B> <A NAME="Rstrength1" HREF="#strength1">strength1</A> <B>)</B> </TT>

<BR><TT> | <B>(</B> strength1 <B>,</B> strength0 <B>)</B> </TT>

<BR><TT> | <B>(</B> strength0 <B>,</B> <B>highz1</B> <B>)</B> </TT>

<BR><TT> | <B>(</B> strength1 <B>,</B> <B>highz0</B> <B>)</B> </TT>

<BR><TT> | <B>(</B> <B>highz0</B> <B>,</B> strength1 <B>)</B> </TT>

<BR><TT> | <B>(</B> <B>highz1</B> <B>,</B> strength0 <B>)</B> </TT>

<BR><TT><A NAME="strength0" HREF="#Rstrength0">strength0</A> ::= <B>supply0</B> | <B>strong0</B> | <B>pull0</B> | <B>weak0</B> </TT>

<BR><TT><A NAME="strength1" HREF="#Rstrength1">strength1</A> ::= <B>supply1</B> | <B>strong1</B> | <B>pull1</B> | <B>weak1</B> </TT>

<BR><TT><A NAME="charge_strength" HREF="#Rcharge_strength">charge_strength</A> ::= <B>(</B> <B>small</B> <B>)</B> | <B>(</B> <B>medium</B> <B>)</B> | <B>(</B> <B>large</B> <B>)</B> </TT>

<BR><TT><A NAME="delay3" HREF="#Rdelay3">delay3</A> ::= <B>#</B> <A NAME="Rdelay_value" HREF="#delay_value">delay_value</A> | <B>#</B> (delay_value [ <B>,</B> delay_value [ <B>,</B> delay_value ] ] <B>)</B> </TT>

<BR><TT><A NAME="delay2" HREF="#Rdelay2">delay2</A> ::= <B>#</B> delay_value | <B>#</B> (delay_value [ <B>,</B> delay_value ] <B>)</B> </TT>

<BR><TT><A NAME="delay_value" HREF="#Rdelay_value">delay_value</A> ::= <A NAME="Runsigned_number" HREF="#unsigned_number">unsigned_number</A> | parameter_identifier | <A NAME="Rconstant_mintypmax_expression" HREF="#constant_mintypmax_expression">constant_mintypmax_expression</A> </TT>

<BR><TT><A NAME="list_of_net_decl_assignments" HREF="#Rlist_of_net_decl_assignments">list_of_net_decl_assignments</A> ::= <A NAME="Rnet_decl_assignment" HREF="#net_decl_assignment">net_decl_assignment</A> { <B>,</B> net_decl_assignment } </TT>

<BR><TT><A NAME="net_decl_assignment" HREF="#Rnet_decl_assignment">net_decl_assignment</A> ::= net_identifier <B>=</B> <A NAME="Rexpression" HREF="#expression">expression</A> </TT>

<BR><TT><A NAME="function_declaration" HREF="#Rfunction_declaration">function_declaration</A> ::= </TT>

<BR><TT><FONT COLOR=#FF0000> <B>function</B> [signed] [ <A NAME="Rrange_or_type" HREF="#range_or_type">range_or_type</A> ] <A NAME="Rfunction_identifier" HREF="#function_identifier">function_identifier</A> <B>;</B> </FONT></TT>

<BR><TT> <A NAME="Rfunction_item_declaration" HREF="#function_item_declaration">function_item_declaration</A> { function_item_declaration } </TT>

<BR><TT> <A NAME="Rstatement" HREF="#statement">statement</A> </TT>

<BR><TT> <B>endfunction</B> </TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="reg_type" HREF="#Rreg_type">reg_type</A> ::= <B>reg</B> | <B>integer</B> | <B>real</B> | <B>realtime</B> | <B>time</B> </FONT></TT>

<BR><TT><A NAME="range_or_type" HREF="#Rrange_or_type">range_or_type</A> ::= range | <B>integer</B> | <B>real</B> | <B>realtime</B> | <B>time</B> </TT>

<BR><TT><A NAME="function_item_declaration" HREF="#Rfunction_item_declaration">function_item_declaration</A> ::= </TT>

<BR><TT> <A NAME="Rblock_item_declaration" HREF="#block_item_declaration">block_item_declaration</A> </TT>

<BR><TT> | input_declaration </TT>

<BR><TT><FONT COLOR=#FF0000>recursive_function_declaration ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <B>function</B> [ <B>automatic</B> ] [ range_or_type ] function_identifier <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <A NAME="Rrecursive_function_item_declaration" HREF="#recursive_function_item_declaration">recursive_function_item_declaration</A> { function_item_declaration } </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> statement </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <B>endfunction</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="range_or_type" HREF="#Rrange_or_type">range_or_type</A> ::= range | <B>integer</B> | <B>real</B> | <B>realtime</B> | <B>time</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="recursive_function_item_declaration" HREF="#Rrecursive_function_item_declaration">recursive_function_item_declaration</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <A NAME="Rautomatic_block_item_declaration" HREF="#automatic_block_item_declaration">automatic_block_item_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rautomatic_input_declaration" HREF="#automatic_input_declaration">automatic_input_declaration</A> </FONT></TT>

<BR><TT><A NAME="task_declaration" HREF="#Rtask_declaration">task_declaration</A> ::= </TT>

<BR><TT> <B>task</B> <A NAME="Rtask_identifier" HREF="#task_identifier">task_identifier</A> <B>;</B> </TT>

<BR><TT> { <A NAME="Rtask_item_declaration" HREF="#task_item_declaration">task_item_declaration</A> } </TT>

<BR><TT><FONT COLOR=#800080> statement </FONT></TT>

<BR><TT> <B>endtask</B> </TT>

<BR><TT><FONT COLOR=#FF0000>combinational_task_declaration ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <B>task</B> <A NAME="Rcombinational_task_identifier" HREF="#combinational_task_identifier">combinational_task_identifier</A> <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> { task_item_declaration } </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <A NAME="Rcombinational_statement" HREF="#combinational_statement">combinational_statement</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <B>endtask</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="task_item_declaration" HREF="#Rtask_item_declaration">task_item_declaration</A> ::= </FONT></TT>

<BR><TT> block_item_declaration </TT>

<BR><TT><FONT COLOR=#800080> | input_declaration </FONT></TT>

<BR><TT> | output_declaration </TT>

<BR><TT> | inout_declaration </TT>

<BR><TT><A NAME="block_item_declaration" HREF="#Rblock_item_declaration">block_item_declaration</A> ::= </TT>

<BR><TT> parameter_declaration </TT>

<BR><TT><FONT COLOR=#FF0000> | local_parameter_declaration </FONT></TT>

<BR><TT> | reg_declaration </TT>

<BR><TT> | integer_declaration </TT>

<BR><TT> | real_declaration </TT>

<BR><TT> | time_declaration </TT>

<BR><TT> | realtime_declaration </TT>

<BR><TT> | event_declaration </TT>

<BR><TT><FONT COLOR=#FF0000>recursive_reentrant_task_declaration ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <B>task</B> [ <B>automatic</B> ] task_identifier <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> { <A NAME="Rrecursive_reentrant_task_item_declaration" HREF="#recursive_reentrant_task_item_declaration">recursive_reentrant_task_item_declaration</A> } </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> statement </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <B>endtask</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="recursive_reentrant_task_item_declaration" HREF="#Rrecursive_reentrant_task_item_declaration">recursive_reentrant_task_item_declaration</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> automatic_block_item_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | automatic_input_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rautomatic_output_declaration" HREF="#automatic_output_declaration">automatic_output_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rautomatic_inout_declaration" HREF="#automatic_inout_declaration">automatic_inout_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="automatic_block_item_declaration" HREF="#Rautomatic_block_item_declaration">automatic_block_item_declaration</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> parameter_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | local_parameter_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rautomatic_reg_declaration" HREF="#automatic_reg_declaration">automatic_reg_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rautomatic_integer_declaration" HREF="#automatic_integer_declaration">automatic_integer_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rautomatic_time_declaration" HREF="#automatic_time_declaration">automatic_time_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rautomatic_real_declaration" HREF="#automatic_real_declaration">automatic_real_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rautomatic_realtime_declaration" HREF="#automatic_realtime_declaration">automatic_realtime_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rautomatic_event_declaration" HREF="#automatic_event_declaration">automatic_event_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="automatic_input_declaration" HREF="#Rautomatic_input_declaration">automatic_input_declaration</A> ::= <B>input</B> [ <B>automatic</B> ] [ <B>signed</B> ] list_of_port_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="automatic_output_declaration" HREF="#Rautomatic_output_declaration">automatic_output_declaration</A> ::= <B>output</B> [ <B>automatic</B> ] [ <B>signed</B> ] list_of_port_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="automatic_inout_declaration" HREF="#Rautomatic_inout_declaration">automatic_inout_declaration</A> ::= <B>inout</B> [ <B>automatic</B> ] [ <B>signed</B> ] list_of_port_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="automatic_reg_declaration" HREF="#Rautomatic_reg_declaration">automatic_reg_declaration</A> ::= <B>reg</B> [ <B>automatic</B> ] [ <B>signed</B> | <B>unsigned</B> ] [range] list_of_regmem_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="automatic_integer_declaration" HREF="#Rautomatic_integer_declaration">automatic_integer_declaration</A> ::= <B>integer</B> [ <B>automatic</B> ] list_of_register_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="automatic_time_declaration" HREF="#Rautomatic_time_declaration">automatic_time_declaration</A> ::= <B>time</B> [ <B>automatic</B> ] list_of_register_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="automatic_real_declaration" HREF="#Rautomatic_real_declaration">automatic_real_declaration</A> ::= <B>real</B> [ <B>automatic</B> ] list_of_real_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="automatic_realtime_declaration" HREF="#Rautomatic_realtime_declaration">automatic_realtime_declaration</A> ::= <B>realtime</B> [ <B>automatic</B> ] list_of_real_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="automatic_event_declaration" HREF="#Rautomatic_event_declaration">automatic_event_declaration</A> ::= <B>event</B> [ <B>automatic</B> ] list_of_event_identifiers <B>;</B> </FONT></TT>

<BR><TT> </TT>

<BR><TT><FONT SIZE=4><B>A.3 Primitive instances </B></FONT></TT>

<BR><TT> </TT>

<BR><TT><A NAME="gate_instantiation" HREF="#Rgate_instantiation">gate_instantiation</A> ::= </TT>

<BR><TT> <A NAME="Rn_input_gatetype" HREF="#n_input_gatetype">n_input_gatetype</A> [drive_strength] [delay2] <A NAME="Rn_input_gate_instance" HREF="#n_input_gate_instance">n_input_gate_instance</A> { <B>,</B> n_input_gate_instance } <B>;</B> </TT>

<BR><TT> | <A NAME="Rn_output_gatetype" HREF="#n_output_gatetype">n_output_gatetype</A> [drive_strength] [delay2] <A NAME="Rn_output_gate_instance" HREF="#n_output_gate_instance">n_output_gate_instance</A> { <B>,</B> n_output_gate_instance } <B>;</B> </TT>

<BR><TT> | <A NAME="Renable_gatetype" HREF="#enable_gatetype">enable_gatetype</A> [drive_strength] [delay3] <A NAME="Renable_gate_instance" HREF="#enable_gate_instance">enable_gate_instance</A> { <B>,</B> enable_gate_instance } <B>;</B> </TT>

<BR><TT> | <A NAME="Rmos_switchtype" HREF="#mos_switchtype">mos_switchtype</A> [delay3] <A NAME="Rmos_switch_instance" HREF="#mos_switch_instance">mos_switch_instance</A> { <B>,</B> mos_switch_instance } <B>;</B> </TT>

<BR><TT> | <A NAME="Rpass_switchtype" HREF="#pass_switchtype">pass_switchtype</A> <A NAME="Rpass_switch_instance" HREF="#pass_switch_instance">pass_switch_instance</A> { <B>,</B> pass_switch_instance } <B>;</B> </TT>

<BR><TT><FONT COLOR=#800080> | <A NAME="Rpass_en_switchtype" HREF="#pass_en_switchtype">pass_en_switchtype</A> [delay2] <A NAME="Rpass_enable_switch_instance" HREF="#pass_enable_switch_instance">pass_enable_switch_instance</A> { <B>,</B> pass_enable_switch_instance } <B>;</B> </FONT></TT>

<BR><TT> | <A NAME="Rcmos_switchtype" HREF="#cmos_switchtype">cmos_switchtype</A> [delay3] <A NAME="Rcmos_switch_instance" HREF="#cmos_switch_instance">cmos_switch_instance</A> { <B>,</B> cmos_switch_instance } <B>;</B> </TT>

<BR><TT> | <B>pullup</B> [<A NAME="Rpullup_strength" HREF="#pullup_strength">pullup_strength</A>] <A NAME="Rpull_gate_instance" HREF="#pull_gate_instance">pull_gate_instance</A> { <B>,</B> pull_gate_instance } <B>;</B> </TT>

<BR><TT> | <B>pulldown</B> [<A NAME="Rpulldown_strength" HREF="#pulldown_strength">pulldown_strength</A>] pull_gate_instance { <B>,</B> pull_gate_instance } <B>;</B> </TT>

<BR><TT><A NAME="n_input_gate_instance" HREF="#Rn_input_gate_instance">n_input_gate_instance</A> ::= [<A NAME="Rname_of_gate_instance" HREF="#name_of_gate_instance">name_of_gate_instance</A>] <B>(</B> <A NAME="Routput_terminal" HREF="#output_terminal">output_terminal</A> <B>,</B> <A NAME="Rinput_terminal" HREF="#input_terminal">input_terminal</A> { <B>,</B> input_terminal } <B>)</B> </TT>

<BR><TT><A NAME="n_output_gate_instance" HREF="#Rn_output_gate_instance">n_output_gate_instance</A> ::= [name_of_gate_instance] <B>(</B> output_terminal <B>,</B> { output_terminal } <B>,</B> input_terminal <B>)</B> </TT>

<BR><TT><A NAME="enable_gate_instance" HREF="#Renable_gate_instance">enable_gate_instance</A> ::= [name_of_gate_instance] <B>(</B> output_terminal <B>,</B> input_terminal <B>,</B> <A NAME="Renable_terminal" HREF="#enable_terminal">enable_terminal</A> <B>)</B> </TT>

<BR><TT><A NAME="mos_switch_instance" HREF="#Rmos_switch_instance">mos_switch_instance</A> ::= [name_of_gate_instance] <B>(</B> output_terminal <B>,</B> input_terminal <B>,</B> enable_terminal <B>)</B> </TT>

<BR><TT><A NAME="pass_switch_instance" HREF="#Rpass_switch_instance">pass_switch_instance</A> ::= [name_of_gate_instance] <B>(</B> <A NAME="Rinout_terminal" HREF="#inout_terminal">inout_terminal</A> <B>,</B> inout_terminal <B>)</B> </TT>

<BR><TT><A NAME="pass_enable_switch_instance" HREF="#Rpass_enable_switch_instance">pass_enable_switch_instance</A> ::= [name_of_gate_instance] <B>(</B> inout_terminal <B>,</B> inout_terminal <B>,</B> enable_terminal <B>)</B> </TT>

<BR><TT><A NAME="cmos_switch_instance" HREF="#Rcmos_switch_instance">cmos_switch_instance</A> ::= [name_of_gate_instance] <B>(</B> output_terminal <B>,</B> input_terminal <B>,</B> </TT>

<BR><TT> <A NAME="Rncontrol_terminal" HREF="#ncontrol_terminal">ncontrol_terminal</A> <B>,</B> <A NAME="Rpcontrol_terminal" HREF="#pcontrol_terminal">pcontrol_terminal</A>) </TT>

<BR><TT><A NAME="pull_gate_instance" HREF="#Rpull_gate_instance">pull_gate_instance</A> ::= [name_of_gate_instance] (output_terminal <B>)</B> </TT>

<BR><TT><A NAME="name_of_gate_instance" HREF="#Rname_of_gate_instance">name_of_gate_instance</A> ::= <A NAME="Rgate_instance_identifier" HREF="#gate_instance_identifier">gate_instance_identifier</A> [range] </TT>

<BR><TT><A NAME="pullup_strength" HREF="#Rpullup_strength">pullup_strength</A> ::= </TT>

<BR><TT> <B>(</B> strength0 <B>,</B> strength1 <B>)</B> </TT>

<BR><TT> | <B>(</B> strength1 <B>,</B> strength0 <B>)</B> </TT>

<BR><TT> | <B>(</B> strength1 <B>)</B> </TT>

<BR><TT><A NAME="pulldown_strength" HREF="#Rpulldown_strength">pulldown_strength</A> ::= </TT>

<BR><TT> <B>(</B> strength0 <B>,</B> strength1 <B>)</B> </TT>

<BR><TT> | <B>(</B> strength1 <B>,</B> strength0 <B>)</B> </TT>

<BR><TT> | <B>(</B> strength0 <B>)</B> </TT>

<BR><TT><A NAME="input_terminal" HREF="#Rinput_terminal">input_terminal</A> ::= scalar_expression </TT>

<BR><TT><A NAME="enable_terminal" HREF="#Renable_terminal">enable_terminal</A> ::= scalar_expression </TT>

<BR><TT><A NAME="ncontrol_terminal" HREF="#Rncontrol_terminal">ncontrol_terminal</A> ::= scalar_expression </TT>

<BR><TT><A NAME="pcontrol_terminal" HREF="#Rpcontrol_terminal">pcontrol_terminal</A> ::= scalar_expression </TT>

<BR><TT><A NAME="output_terminal" HREF="#Routput_terminal">output_terminal</A> ::= <A NAME="Rterminal_identifier" HREF="#terminal_identifier">terminal_identifier</A> | terminal_identifier [ constant_expression ] </TT>

<BR><TT><A NAME="inout_terminal" HREF="#Rinout_terminal">inout_terminal</A> ::= terminal_identifier | terminal_identifier [ constant_expression ] </TT>

<BR><TT><A NAME="n_input_gatetype" HREF="#Rn_input_gatetype">n_input_gatetype</A> ::= <B>and</B> | <B>nand</B> | <B>or</B> | <B>nor</B> | <B>xor</B> | <B>xnor</B> </TT>

<BR><TT><A NAME="n_output_gatetype" HREF="#Rn_output_gatetype">n_output_gatetype</A> ::= <B>buf</B> | <B>not</B> </TT>

<BR><TT><A NAME="enable_gatetype" HREF="#Renable_gatetype">enable_gatetype</A> ::= <B>bufif0</B> | <B>bufif1</B> | <B>notif0</B> | <B>notif1</B> </TT>

<BR><TT><A NAME="mos_switchtype" HREF="#Rmos_switchtype">mos_switchtype</A> ::= <B>nmos</B> | <B>pmos</B> | <B>rnmos</B> | <B>rpmos</B> </TT>

<BR><TT><A NAME="pass_switchtype" HREF="#Rpass_switchtype">pass_switchtype</A> ::= <B>tran</B> | <B>rtran</B> </TT>

<BR><TT><A NAME="pass_en_switchtype" HREF="#Rpass_en_switchtype">pass_en_switchtype</A> ::= <B>tranif0</B> | <B>tranif1</B> | <B>rtranif1</B> | <B>rtranif0</B> </TT>

<BR><TT><A NAME="cmos_switchtype" HREF="#Rcmos_switchtype">cmos_switchtype</A> ::= <B>cmos</B> | <B>rcmos</B> </TT>

<BR><TT> </TT>

<BR><TT> </TT>

<BR><TT> </TT>

<BR><TT><FONT COLOR=#FF0000><FONT SIZE=4><B>A.4 Module <B>and</B> generated instantiation </B></FONT></FONT></TT>

<BR><TT> </TT>

<BR><TT><A NAME="module_instantiation" HREF="#Rmodule_instantiation">module_instantiation</A> ::= </TT>

<BR><TT> module_identifier [ <A NAME="Rparameter_value_assignment" HREF="#parameter_value_assignment">parameter_value_assignment</A> ] <A NAME="Rmodule_instance" HREF="#module_instance">module_instance</A> { <B>,</B> module_instance } <B>;</B> </TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="parameter_value_assignment" HREF="#Rparameter_value_assignment">parameter_value_assignment</A> ::= <B>#</B> <B>(</B> <A NAME="Rlist_of_parameter_assignments" HREF="#list_of_parameter_assignments">list_of_parameter_assignments</A> <B>)</B> </FONT></TT>

<BR><TT> </TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="list_of_parameter_assignments" HREF="#Rlist_of_parameter_assignments">list_of_parameter_assignments</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <A NAME="Rordered_parameter_assignment" HREF="#ordered_parameter_assignment">ordered_parameter_assignment</A> { <B>,</B> ordered_parameter_assignment } | </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <A NAME="Rnamed_parameter_assignment" HREF="#named_parameter_assignment">named_parameter_assignment</A> { <B>,</B> named_parameter_assignment } </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="ordered_parameter_assignment" HREF="#Rordered_parameter_assignment">ordered_parameter_assignment</A> ::= expression </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="named_parameter_assignment" HREF="#Rnamed_parameter_assignment">named_parameter_assignment</A> ::= . parameter_identifier <B>(</B> [expression] <B>)</B> </FONT></TT>

<BR><TT> </TT>

<BR><TT><A NAME="module_instance" HREF="#Rmodule_instance">module_instance</A> ::= <A NAME="Rname_of_instance" HREF="#name_of_instance">name_of_instance</A> <B>(</B> [<A NAME="Rlist_of_module_connections" HREF="#list_of_module_connections">list_of_module_connections</A>] <B>)</B> </TT>

<BR><TT><A NAME="name_of_instance" HREF="#Rname_of_instance">name_of_instance</A> ::= <A NAME="Rmodule_instance_identifier" HREF="#module_instance_identifier">module_instance_identifier</A> <B>[</B> range <B>]</B> </TT>

<BR><TT><A NAME="list_of_module_connections" HREF="#Rlist_of_module_connections">list_of_module_connections</A> ::= </TT>

<BR><TT> <A NAME="Rordered_port_connection" HREF="#ordered_port_connection">ordered_port_connection</A> { <B>,</B> ordered_port_connection } </TT>

<BR><TT> | <A NAME="Rnamed_port_connection" HREF="#named_port_connection">named_port_connection</A> { <B>,</B> named_port_connection } </TT>

<BR><TT><A NAME="ordered_port_connection" HREF="#Rordered_port_connection">ordered_port_connection</A> ::= [ expression ] </TT>

<BR><TT><A NAME="named_port_connection" HREF="#Rnamed_port_connection">named_port_connection</A> ::= .port_identifier <B>(</B> [ expression ] <B>)</B> </TT>

<BR><TT> </TT>

<BR><TT><FONT COLOR=#FF0000>genvar_declaration ::= <B>genvar</B> <A NAME="Rlist_of_genvar_identifiers" HREF="#list_of_genvar_identifiers">list_of_genvar_identifiers</A> <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="list_of_genvar_identifiers" HREF="#Rlist_of_genvar_identifiers">list_of_genvar_identifiers</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <A NAME="Rgenvar_identifier" HREF="#genvar_identifier">genvar_identifier</A> { <B>,</B> genvar_identifier } </FONT></TT>

<BR><TT> </TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="generated_instantiation" HREF="#Rgenerated_instantiation">generated_instantiation</A> ::= <B>generate</B> { <A NAME="Rgenerate_item" HREF="#generate_item">generate_item</A> } <B>endgenerate</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="generate_item_or_null" HREF="#Rgenerate_item_or_null">generate_item_or_null</A> ::= generate_item | <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="generate_item" HREF="#Rgenerate_item">generate_item</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <A NAME="Rgenerate_conditional_statement" HREF="#generate_conditional_statement">generate_conditional_statement</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rgenerate_case_statement" HREF="#generate_case_statement">generate_case_statement</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rgenerate_loop_statement" HREF="#generate_loop_statement">generate_loop_statement</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rgenerate_block" HREF="#generate_block">generate_block</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | module_or_generate_item </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="generate_conditional_statement" HREF="#Rgenerate_conditional_statement">generate_conditional_statement</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <B>if</B> <B>(</B> <A NAME="Rgenvar_expression" HREF="#genvar_expression">genvar_expression</A> <B>)</B> generate_item_or_null [ <B>else</B> generate_item_or_null ] </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="generate_case_statement" HREF="#Rgenerate_case_statement">generate_case_statement</A> ::= <B>case</B> <B>(</B> genvar_expression <B>)</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="Rgenvar_case_item" HREF="#genvar_case_item">genvar_case_item</A> { genvar_case_item } <B>endcase</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="genvar_case_item" HREF="#Rgenvar_case_item">genvar_case_item</A> ::= genvar_expression { <B>,</B> genvar_expression } <B>:</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> generate_item_or_null | <B>default</B> [ <B>:</B> ] generate_item_or_null </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="generate_loop_statement" HREF="#Rgenerate_loop_statement">generate_loop_statement</A> ::= <B>for</B> <B>(</B> <A NAME="Rgenvar_assignment" HREF="#genvar_assignment">genvar_assignment</A> <B>;</B> genvar_expression <B>;</B> genvar_assignment <B>)</B> generate_item </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="genvar_assignment" HREF="#Rgenvar_assignment">genvar_assignment</A> ::= genvar_identifier <B>=</B> genvar_expression </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="generate_block" HREF="#Rgenerate_block">generate_block</A> ::= <B>begin</B> [ <B>:</B> <A NAME="Rgenerate_block_identifier" HREF="#generate_block_identifier">generate_block_identifier</A> ] { generate_item } <B>end</B> </FONT></TT>

<BR><TT> </TT>

<BR><TT><FONT SIZE=4><B>A.5 UDP declaration <B>and</B> instantiation </B></FONT></TT>

<BR><TT> </TT>

<BR><TT><A NAME="udp_declaration" HREF="#Rudp_declaration">udp_declaration</A> ::= </TT>

<BR><TT><FONT COLOR=#FF0000> <B>primitive</B> <A NAME="Rudp_identifier" HREF="#udp_identifier">udp_identifier</A> [ <B>(</B> <A NAME="Rudp_port_list" HREF="#udp_port_list">udp_port_list</A> <B>)</B> ] <B>;</B> </FONT></TT>

<BR><TT> <A NAME="Rudp_port_declaration" HREF="#udp_port_declaration">udp_port_declaration</A> { udp_port_declaration } </TT>

<BR><TT> <A NAME="Rudp_body" HREF="#udp_body">udp_body</A> </TT>

<BR><TT> <B>endprimitive</B> </TT>

<BR><TT><A NAME="udp_port_list" HREF="#Rudp_port_list">udp_port_list</A> ::= <A NAME="Routput_port_identifier" HREF="#output_port_identifier">output_port_identifier</A> <B>,</B> <A NAME="Rinput_port_identifier" HREF="#input_port_identifier">input_port_identifier</A> { <B>,</B> input_port_identifier } </TT>

<BR><TT><A NAME="udp_port_declaration" HREF="#Rudp_port_declaration">udp_port_declaration</A> ::= </TT>

<BR><TT><FONT COLOR=#800080> <A NAME="Rudp_output_declaration" HREF="#udp_output_declaration">udp_output_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#800080> | <A NAME="Rudp_input_declaration" HREF="#udp_input_declaration">udp_input_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#800080> | <A NAME="Rudp_reg_declaration" HREF="#udp_reg_declaration">udp_reg_declaration</A> </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="udp_output_declaration" HREF="#Rudp_output_declaration">udp_output_declaration</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#800080> <B>output</B> port_identifier <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080> | <B>output</B> <B>reg</B> port_identifier [ <B>=</B> constant_expression ] <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="udp_input_declaration" HREF="#Rudp_input_declaration">udp_input_declaration</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#800080> <B>input</B> list_of_port_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="udp_reg_declaration" HREF="#Rudp_reg_declaration">udp_reg_declaration</A> ::= <B>reg</B> register_identifier <B>;</B> </FONT></TT>

<BR><TT><A NAME="udp_body" HREF="#Rudp_body">udp_body</A> ::= <A NAME="Rcombinational_body" HREF="#combinational_body">combinational_body</A> | <A NAME="Rsequential_body" HREF="#sequential_body">sequential_body</A> </TT>

<BR><TT><A NAME="combinational_body" HREF="#Rcombinational_body">combinational_body</A> ::= <B>table</B> <A NAME="Rcombinational_entry" HREF="#combinational_entry">combinational_entry</A> { combinational_entry } <B>endtable</B> </TT>

<BR><TT><A NAME="combinational_entry" HREF="#Rcombinational_entry">combinational_entry</A> ::= <A NAME="Rlevel_input_list" HREF="#level_input_list">level_input_list</A> <B>:</B> <A NAME="Routput_symbol" HREF="#output_symbol">output_symbol</A> <B>;</B> </TT>

<BR><TT><A NAME="sequential_body" HREF="#Rsequential_body">sequential_body</A> ::= [ <A NAME="Rudp_initial_statement" HREF="#udp_initial_statement">udp_initial_statement</A> ] <B>table</B> <A NAME="Rsequential_entry" HREF="#sequential_entry">sequential_entry</A> { sequential_entry } <B>endtable</B> </TT>

<BR><TT><A NAME="udp_initial_statement" HREF="#Rudp_initial_statement">udp_initial_statement</A> ::= <B>initial</B> <A NAME="Rudp_output_port_identifier" HREF="#udp_output_port_identifier">udp_output_port_identifier</A> <B>=</B> <A NAME="Rinit_val" HREF="#init_val">init_val</A> <B>;</B> </TT>

<BR><TT><A NAME="init_val" HREF="#Rinit_val">init_val</A> ::= <B>1'b0</B> | <B>1'b1</B> | <B>1'bx</B> | <B>1'bX</B> | <B>1'B0</B> | <B>1'B1</B> | <B>1'Bx</B> | <B>1'BX</B> | <B>1</B> | <B>0</B> </TT>

<BR><TT><A NAME="sequential_entry" HREF="#Rsequential_entry">sequential_entry</A> ::= <A NAME="Rseq_input_list" HREF="#seq_input_list">seq_input_list</A> <B>:</B> <A NAME="Rcurrent_state" HREF="#current_state">current_state</A> <B>:</B> <A NAME="Rnext_state" HREF="#next_state">next_state</A> <B>;</B> </TT>

<BR><TT><A NAME="seq_input_list" HREF="#Rseq_input_list">seq_input_list</A> ::= level_input_list | <A NAME="Redge_input_list" HREF="#edge_input_list">edge_input_list</A> </TT>

<BR><TT><A NAME="level_input_list" HREF="#Rlevel_input_list">level_input_list</A> ::= <A NAME="Rlevel_symbol" HREF="#level_symbol">level_symbol</A> { level_symbol } </TT>

<BR><TT><A NAME="edge_input_list" HREF="#Redge_input_list">edge_input_list</A> ::= { level_symbol } <A NAME="Redge_indicator" HREF="#edge_indicator">edge_indicator</A> { level_symbol } </TT>

<BR><TT><A NAME="edge_indicator" HREF="#Redge_indicator">edge_indicator</A> ::= <B>(</B> level_symbol level_symbol <B>)</B> | <A NAME="Redge_symbol" HREF="#edge_symbol">edge_symbol</A> </TT>

<BR><TT><A NAME="current_state" HREF="#Rcurrent_state">current_state</A> ::= level_symbol </TT>

<BR><TT><A NAME="next_state" HREF="#Rnext_state">next_state</A> ::= output_symbol | <B>-</B> </TT>

<BR><TT><A NAME="output_symbol" HREF="#Routput_symbol">output_symbol</A> ::= <B>0</B> | <B>1</B> | <B>x</B> | <B>X</B> </TT>

<BR><TT><A NAME="level_symbol" HREF="#Rlevel_symbol">level_symbol</A> ::= <B>0</B> | <B>1</B> | <B>x</B> | <B>X</B> | <B>?</B> | <B>b</B> | <B>B</B> </TT>

<BR><TT><A NAME="edge_symbol" HREF="#Redge_symbol">edge_symbol</A> ::= <B>r</B> | <B>R</B> | <B>f</B> | <B>F</B> | <B>p</B> | <B>P</B> | <B>n</B> | <B>N</B> | * </TT>

<BR><TT> </TT>

<BR><TT><A NAME="udp_instantiation" HREF="#Rudp_instantiation">udp_instantiation</A> ::= udp_identifier [ drive_strength ] [ delay2 ] <A NAME="Rudp_instance" HREF="#udp_instance">udp_instance</A> { <B>,</B> udp_instance } <B>;</B> </TT>

<BR><TT><A NAME="udp_instance" HREF="#Rudp_instance">udp_instance</A> ::= [ <A NAME="Rname_of_udp_instance" HREF="#name_of_udp_instance">name_of_udp_instance</A> ] <B>(</B> output_port_connection <B>,</B> input_port_connection </TT>

<BR><TT> { <B>,</B> input_port_connection } <B>)</B> </TT>

<BR><TT><A NAME="name_of_udp_instance" HREF="#Rname_of_udp_instance">name_of_udp_instance</A> ::= <A NAME="Rudp_instance_identifier" HREF="#udp_instance_identifier">udp_instance_identifier</A> <B>[</B> range <B>]</B> </TT>

<BR><TT> </TT>

<BR><TT><FONT SIZE=4><B>A.6 Behavioral statements </B></FONT></TT>

<BR><TT> </TT>

<BR><TT><A NAME="continuous_assign" HREF="#Rcontinuous_assign">continuous_assign</A> ::= <B>assign</B> [drive_strength] [delay3] <A NAME="Rlist_of_net_assignments" HREF="#list_of_net_assignments">list_of_net_assignments</A> <B>;</B> </TT>

<BR><TT><A NAME="list_of_net_assignments" HREF="#Rlist_of_net_assignments">list_of_net_assignments</A> ::= <A NAME="Rnet_assignment" HREF="#net_assignment">net_assignment</A> { <B>,</B> net_assignment } </TT>

<BR><TT><A NAME="net_assignment" HREF="#Rnet_assignment">net_assignment</A> ::= <A NAME="Rnet_lvalue" HREF="#net_lvalue">net_lvalue</A> <B>=</B> expression </TT>

<BR><TT> </TT>

<BR><TT><A NAME="initial_construct" HREF="#Rinitial_construct">initial_construct</A> ::= <B>initial</B> statement </TT>

<BR><TT><A NAME="always_construct" HREF="#Ralways_construct">always_construct</A> ::= <B>always</B> statement </TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="always_combinational_construct" HREF="#Ralways_combinational_construct">always_combinational_construct</A> ::= <B>always</B> @* combinational_statement </FONT></TT>

<BR><TT> </TT>

<BR><TT><A NAME="statement" HREF="#Rstatement">statement</A> ::= </TT>

<BR><TT> <A NAME="Rblocking_assignment" HREF="#blocking_assignment">blocking_assignment</A> <B>;</B> </TT>

<BR><TT><FONT COLOR=#800080> | <A NAME="Rnon_blocking_assignment" HREF="#non_blocking_assignment">non_blocking_assignment</A> <B>;</B> </FONT></TT>

<BR><TT> | <A NAME="Rprocedural_continuous_assignments" HREF="#procedural_continuous_assignments">procedural_continuous_assignments</A> <B>;</B> </TT>

<BR><TT> | <A NAME="Rprocedural_timing_control_statement" HREF="#procedural_timing_control_statement">procedural_timing_control_statement</A> </TT>

<BR><TT> | <A NAME="Rconditional_statement" HREF="#conditional_statement">conditional_statement</A> </TT>

<BR><TT> | <A NAME="Rcase_statement" HREF="#case_statement">case_statement</A> </TT>

<BR><TT> | <A NAME="Rloop_statement" HREF="#loop_statement">loop_statement</A> </TT>

<BR><TT> | <A NAME="Rwait_statement" HREF="#wait_statement">wait_statement</A> </TT>

<BR><TT> | <A NAME="Rdisable_statement" HREF="#disable_statement">disable_statement</A> </TT>

<BR><TT> | <A NAME="Revent_trigger" HREF="#event_trigger">event_trigger</A> </TT>

<BR><TT> | <A NAME="Rseq_block" HREF="#seq_block">seq_block</A> </TT>

<BR><TT> | <A NAME="Rpar_block" HREF="#par_block">par_block</A> </TT>

<BR><TT> | <A NAME="Rtask_enable" HREF="#task_enable">task_enable</A> </TT>

<BR><TT> | <A NAME="Rsystem_task_enable" HREF="#system_task_enable">system_task_enable</A> </TT>

<BR><TT> </TT>

<BR><TT><A NAME="statement_or_null" HREF="#Rstatement_or_null">statement_or_null</A> ::= statement | <B>;</B> </TT>

<BR><TT><FONT COLOR=#800080><A NAME="blocking_assignment" HREF="#Rblocking_assignment">blocking_assignment</A> ::= <A NAME="Rreg_lvalue" HREF="#reg_lvalue">reg_lvalue</A> <B>=</B> [ <A NAME="Rdelay_or_event_control" HREF="#delay_or_event_control">delay_or_event_control</A> ] expression </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="non_blocking_assignment" HREF="#Rnon_blocking_assignment">non_blocking_assignment</A> ::= reg_lvalue <B><=</B> [ delay_or_event_control ] expression </FONT></TT>

<BR><TT><A NAME="procedural_continuous_assignments" HREF="#Rprocedural_continuous_assignments">procedural_continuous_assignments</A> ::= </TT>

<BR><TT><FONT COLOR=#800080> <B>assign</B> <A NAME="Rreg_assignment" HREF="#reg_assignment">reg_assignment</A> <B>;</B> </FONT></TT>

<BR><TT> | <B>deassign</B> reg_assignment <B>;</B> </TT>

<BR><TT> | <B>force</B> reg_assignment <B>;</B> </TT>

<BR><TT> | <B>force</B> net_assignment <B>;</B> </TT>

<BR><TT> | <B>release</B> reg_lvalue <B>;</B> </TT>

<BR><TT> | <B>release</B> net_lvalue <B>;</B> </TT>

<BR><TT><A NAME="procedural_timing_control_statement" HREF="#Rprocedural_timing_control_statement">procedural_timing_control_statement</A> ::= </TT>

<BR><TT> delay_or_event_control statement_or_null </TT>

<BR><TT> </TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="combinational_statement" HREF="#Rcombinational_statement">combinational_statement</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <A NAME="Rcombinational_blocking_assignment" HREF="#combinational_blocking_assignment">combinational_blocking_assignment</A> <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rcombinational_non_blocking_assignment" HREF="#combinational_non_blocking_assignment">combinational_non_blocking_assignment</A> <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rcombinational_procedural_timing_control_statement" HREF="#combinational_procedural_timing_control_statement">combinational_procedural_timing_control_statement</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rcombinational_conditional_statement" HREF="#combinational_conditional_statement">combinational_conditional_statement</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rcombinational_case_statement" HREF="#combinational_case_statement">combinational_case_statement</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rcombinational_loop_statement" HREF="#combinational_loop_statement">combinational_loop_statement</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | disable_statement </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rcombinational_seq_block" HREF="#combinational_seq_block">combinational_seq_block</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <A NAME="Rcombinational_task_enable" HREF="#combinational_task_enable">combinational_task_enable</A> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | system_task_enable </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="combinational_statement_or_null" HREF="#Rcombinational_statement_or_null">combinational_statement_or_null</A> ::= combinational_statement | <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="combinational_blocking_assignment" HREF="#Rcombinational_blocking_assignment">combinational_blocking_assignment</A> ::= reg_lvalue <B>=</B> [ <A NAME="Rdelay_control" HREF="#delay_control">delay_control</A> ] expression </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="combinational_non_blocking_assignment" HREF="#Rcombinational_non_blocking_assignment">combinational_non_blocking_assignment</A> ::= reg_lvalue <B><=</B> [ delay_control ] expression </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="combinational_procedural_timing_control_statement" HREF="#Rcombinational_procedural_timing_control_statement">combinational_procedural_timing_control_statement</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> delay_control combinational_statement_or_null </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="function_statement" HREF="#Rfunction_statement">function_statement</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#800080> <A NAME="Rfunction_blocking_assignment" HREF="#function_blocking_assignment">function_blocking_assignment</A> <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080> | <A NAME="Rfunction_non_blocking_assignment" HREF="#function_non_blocking_assignment">function_non_blocking_assignment</A> <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080> | <A NAME="Rfunction_conditional_statement" HREF="#function_conditional_statement">function_conditional_statement</A> </FONT></TT>

<BR><TT><FONT COLOR=#800080> | <A NAME="Rfunction_case_statement" HREF="#function_case_statement">function_case_statement</A> </FONT></TT>

<BR><TT><FONT COLOR=#800080> | <A NAME="Rfunction_loop_statement" HREF="#function_loop_statement">function_loop_statement</A> </FONT></TT>

<BR><TT><FONT COLOR=#800080> | disable_statement </FONT></TT>

<BR><TT><FONT COLOR=#800080> | combinational_seq_block </FONT></TT>

<BR><TT><FONT COLOR=#800080> | system_task_enable </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="function_blocking_assignment" HREF="#Rfunction_blocking_assignment">function_blocking_assignment</A> ::= reg_lvalue <B>=</B> expression </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="function_non_blocking_assignment" HREF="#Rfunction_non_blocking_assignment">function_non_blocking_assignment</A> ::= reg_lvalue <B><=</B> [ delay_control ] expression </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="function_statement_or_null" HREF="#Rfunction_statement_or_null">function_statement_or_null</A> ::= function_statement | <B>;</B> </FONT></TT>

<BR><TT><A NAME="delay_or_event_control" HREF="#Rdelay_or_event_control">delay_or_event_control</A> ::= </TT>

<BR><TT> delay_control </TT>

<BR><TT> | <A NAME="Revent_control" HREF="#event_control">event_control</A> </TT>

<BR><TT> | <B>repeat</B> <B>(</B> expression <B>)</B> event_control </TT>

<BR><TT><A NAME="delay_control" HREF="#Rdelay_control">delay_control</A> ::= </TT>

<BR><TT> <B>#</B> delay_value </TT>

<BR><TT> | <B>#</B> <B>(</B> <A NAME="Rmintypmax_expression" HREF="#mintypmax_expression">mintypmax_expression</A> <B>)</B> </TT>

<BR><TT><A NAME="event_control" HREF="#Revent_control">event_control</A> ::= </TT>

<BR><TT> <B>@</B> event_identifier </TT>

<BR><TT> | <B>@</B> <B>(</B> <A NAME="Revent_expression" HREF="#event_expression">event_expression</A> <B>)</B> </TT>

<BR><TT><A NAME="event_expression" HREF="#Revent_expression">event_expression</A> ::= </TT>

<BR><TT> expression </TT>

<BR><TT> | event_identifier </TT>

<BR><TT> | <B>posedge</B> expression </TT>

<BR><TT> | <B>negedge</B> expression </TT>

<BR><TT> | event_expression <B>or</B> event_expression </TT>

<BR><TT><FONT COLOR=#FF0000> | event_expression <B>,</B> event_expression </FONT></TT>

<BR><TT><A NAME="conditional_statement" HREF="#Rconditional_statement">conditional_statement</A> ::= </TT>

<BR><TT><FONT COLOR=#800080> <B>if</B> <B>(</B> expression <B>)</B> statement_or_null [ <B>else</B> statement_or_null ] </FONT></TT>

<BR><TT><A NAME="case_statement" HREF="#Rcase_statement">case_statement</A> ::= </TT>

<BR><TT><FONT COLOR=#800080> <B>case</B> <B>(</B> expression <B>)</B> <A NAME="Rcase_item" HREF="#case_item">case_item</A> [ case_item ] <B>endcase</B> </FONT></TT>

<BR><TT> | <B>casez</B> <B>(</B> expression <B>)</B> case_item [ case_item ] <B>endcase</B> </TT>

<BR><TT> | <B>casex</B> <B>(</B> expression <B>)</B> case_item [ case_item ] <B>endcase</B> </TT>

<BR><TT><A NAME="case_item" HREF="#Rcase_item">case_item</A> ::= </TT>

<BR><TT> expression { <B>,</B> expression } <B>:</B> statement_or_null </TT>

<BR><TT> | <B>default</B> [ <B>:</B> ] statement_or_null </TT>

<BR><TT><A NAME="loop_statement" HREF="#Rloop_statement">loop_statement</A> ::= </TT>

<BR><TT><FONT COLOR=#800080> <B>forever</B> statement </FONT></TT>

<BR><TT> | <B>repeat</B> <B>(</B> expression <B>)</B> statement </TT>

<BR><TT> | <B>while</B> <B>(</B> expression <B>)</B> statement </TT>

<BR><TT> | <B>for</B> <B>(</B> reg_assignment <B>;</B> expression <B>;</B> reg_assignment <B>)</B> statement </TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="combinational_conditional_statement" HREF="#Rcombinational_conditional_statement">combinational_conditional_statement</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <B>if</B> <B>(</B> expression <B>)</B> combinational_statement_or_null [ <B>else</B> combinational_statement_or_null ] </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="combinational_case_statement" HREF="#Rcombinational_case_statement">combinational_case_statement</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <B>case</B> <B>(</B> expression <B>)</B> case_item [ <A NAME="Rcombinational_case_item" HREF="#combinational_case_item">combinational_case_item</A> ] <B>endcase</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <B>casez</B> <B>(</B> expression <B>)</B> case_item [ combinational_case_item ] <B>endcase</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <B>casex</B> <B>(</B> expression <B>)</B> case_item [ combinational_case_item ] <B>endcase</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="combinational_case_item" HREF="#Rcombinational_case_item">combinational_case_item</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> expression { <B>,</B> expression } <B>:</B> combinational_statement_or_null </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <B>default</B> [ <B>:</B> ] combinational_statement_or_null </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="combinational_loop_statement" HREF="#Rcombinational_loop_statement">combinational_loop_statement</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> <B>forever</B> combinational_statement </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <B>repeat</B> <B>(</B> expression <B>)</B> combinational_statement </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <B>while</B> <B>(</B> expression <B>)</B> combinational_statement </FONT></TT>

<BR><TT><FONT COLOR=#FF0000> | <B>for</B> <B>(</B> reg_assignment <B>;</B> expression <B>;</B> reg_assignment <B>)</B> combinational_statement </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="combinational_seq_block" HREF="#Rcombinational_seq_block">combinational_seq_block</A> ::= <B>begin</B> [ <B>:</B> <A NAME="Rblock_identifier" HREF="#block_identifier">block_identifier</A> { block_item_declaration } ] { combinational_statement } <B>end</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000><A NAME="combinational_task_enable" HREF="#Rcombinational_task_enable">combinational_task_enable</A> ::= combinational_task_identifier [ <B>(</B> expression { <B>,</B> expression } <B>)</B> ] <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="function_conditional_statement" HREF="#Rfunction_conditional_statement">function_conditional_statement</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#800080> <B>if</B> <B>(</B> expression <B>)</B> function_statement_or_null [ <B>else</B> function_statement_or_null ] </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="function_case_statement" HREF="#Rfunction_case_statement">function_case_statement</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#800080> <B>case</B> <B>(</B> expression <B>)</B> case_item [ <A NAME="Rfunction_case_item" HREF="#function_case_item">function_case_item</A> ] <B>endcase</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080> | <B>casez</B> <B>(</B> expression <B>)</B> case_item [ function_case_item ] <B>endcase</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080> | <B>casex</B> <B>(</B> expression <B>)</B> case_item [ function_case_item ] <B>endcase</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="function_case_item" HREF="#Rfunction_case_item">function_case_item</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#800080> expression { <B>,</B> expression } <B>:</B> function_statement_or_null </FONT></TT>

<BR><TT><FONT COLOR=#800080> | <B>default</B> [ <B>:</B> ] function_statement_or_null </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="function_loop_statement" HREF="#Rfunction_loop_statement">function_loop_statement</A> ::= </FONT></TT>

<BR><TT><FONT COLOR=#800080> <B>forever</B> function_statement </FONT></TT>

<BR><TT><FONT COLOR=#800080> | <B>repeat</B> <B>(</B> expression <B>)</B> function_statement </FONT></TT>

<BR><TT><FONT COLOR=#800080> | <B>while</B> <B>(</B> expression <B>)</B> function_statement </FONT></TT>

<BR><TT><FONT COLOR=#800080> | <B>for</B> <B>(</B> reg_assignment <B>;</B> expression <B>;</B> reg_assignment <B>)</B> function_statement </FONT></TT>

<BR><TT><FONT COLOR=#800080>function_seq_block ::= <B>begin</B> [ <B>:</B> block_identifier { block_item_declaration } ] { function_statement } <B>end</B> </FONT></TT>

<BR><TT><A NAME="reg_assignment" HREF="#Rreg_assignment">reg_assignment</A> ::= reg_lvalue <B>=</B> expression </TT>

<BR><TT><A NAME="wait_statement" HREF="#Rwait_statement">wait_statement</A> ::= </TT>

<BR><TT><FONT COLOR=#800080> <B>wait</B> <B>(</B> expression <B>)</B> statement_or_null </FONT></TT>

<BR><TT><A NAME="event_trigger" HREF="#Revent_trigger">event_trigger</A> ::= </TT>

<BR><TT><FONT COLOR=#800080> -> event_identifier <B>;</B> </FONT></TT>

<BR><TT><A NAME="disable_statement" HREF="#Rdisable_statement">disable_statement</A> ::= </TT>

<BR><TT><FONT COLOR=#800080> <B>disable</B> task_identifier <B>;</B> </FONT></TT>

<BR><TT> | <B>disable</B> block_identifier <B>;</B> </TT>

<BR><TT><A NAME="seq_block" HREF="#Rseq_block">seq_block</A> ::= <B>begin</B> [ <B>:</B> block_identifier { block_item_declaration } ] { statement } <B>end</B> </TT>

<BR><TT><A NAME="par_block" HREF="#Rpar_block">par_block</A> ::= <B>fork</B> [ <B>:</B> block_identifier { block_item_declaration } ] { statement } <B>join</B> </TT>

<BR><TT><A NAME="task_enable" HREF="#Rtask_enable">task_enable</A> ::= task_identifier [ <B>(</B> expression { <B>,</B> expression } <B>)</B> ] <B>;</B> </TT>

<BR><TT><FONT COLOR=#800080><A NAME="system_task_enable" HREF="#Rsystem_task_enable">system_task_enable</A> ::= <A NAME="Rsystem_task_identifier" HREF="#system_task_identifier">system_task_identifier</A> [ <B>(</B> expression { <B>,</B> expression } <B>)</B> ] <B>;</B> </FONT></TT>

<BR><TT> </TT>

<BR><TT><FONT SIZE=4><B>A.7 Specify section </B></FONT></TT>

<BR><TT> </TT>

<BR><TT><A NAME="specify_block" HREF="#Rspecify_block">specify_block</A> ::= <B>specify</B> { <A NAME="Rspecify_item" HREF="#specify_item">specify_item</A> } <B>endspecify</B> <B>;</B> </TT>

<BR><TT><A NAME="specify_item" HREF="#Rspecify_item">specify_item</A> ::= </TT>

<BR><TT> <A NAME="Rspecparam_declaration" HREF="#specparam_declaration">specparam_declaration</A> </TT>

<BR><TT> | <A NAME="Rpath_declaration" HREF="#path_declaration">path_declaration</A> </TT>

<BR><TT> | <A NAME="Rsystem_timing_check" HREF="#system_timing_check">system_timing_check</A> </TT>

<BR><TT><A NAME="specparam_declaration" HREF="#Rspecparam_declaration">specparam_declaration</A> ::= <B>specparam</B> <A NAME="Rlist_of_specparam_assignments" HREF="#list_of_specparam_assignments">list_of_specparam_assignments</A> <B>;</B> </TT>

<BR><TT><A NAME="list_of_specparam_assignments" HREF="#Rlist_of_specparam_assignments">list_of_specparam_assignments</A> ::= <A NAME="Rspecparam_assignment" HREF="#specparam_assignment">specparam_assignment</A> { <B>,</B> specparam_assignment } </TT>

<BR><TT><A NAME="specparam_assignment" HREF="#Rspecparam_assignment">specparam_assignment</A> ::= </TT>

<BR><TT><FONT COLOR=#800080> <A NAME="Rspecparam_identifier" HREF="#specparam_identifier">specparam_identifier</A> <B>=</B> constant_mintypmax_expression </FONT></TT>

<BR><TT> | <A NAME="Rpulse_control_specparam" HREF="#pulse_control_specparam">pulse_control_specparam</A> </TT>

<BR><TT><A NAME="pulse_control_specparam" HREF="#Rpulse_control_specparam">pulse_control_specparam</A> ::= </TT>

<BR><TT> <B>PATHPULSE$</B> <B>=</B> <B>(</B> <A NAME="Rreject_limit_value" HREF="#reject_limit_value">reject_limit_value</A> [ <B>,</B> <A NAME="Rerror_limit_value" HREF="#error_limit_value">error_limit_value</A> ] <B>)</B> ; </TT>

<BR><TT> | <B>PATHPULSE$</B><A NAME="Rspecify_input_terminal_descriptor" HREF="#specify_input_terminal_descriptor">specify_input_terminal_descriptor</A>$<A NAME="Rspecify_output_terminal_descriptor" HREF="#specify_output_terminal_descriptor">specify_output_terminal_descriptor</A> </TT>

<BR><TT> = <B>(</B> reject_limit_value [ <B>,</B> error_limit_value ] <B>)</B> ; </TT>

<BR><TT><FONT COLOR=#800080><A NAME="error_limit_value" HREF="#Rerror_limit_value">error_limit_value</A> ::= <A NAME="Rlimit_value" HREF="#limit_value">limit_value</A> </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="reject_limit_value" HREF="#Rreject_limit_value">reject_limit_value</A> ::= limit_value </FONT></TT>

<BR><TT><A NAME="limit_value" HREF="#Rlimit_value">limit_value</A> ::= constant_mintypmax_expression </TT>

<BR><TT><A NAME="path_declaration" HREF="#Rpath_declaration">path_declaration</A> ::= </TT>

<BR><TT> <A NAME="Rsimple_path_declaration" HREF="#simple_path_declaration">simple_path_declaration</A> <B>;</B> </TT>

<BR><TT> | <A NAME="Redge_sensitive_path_declaration" HREF="#edge_sensitive_path_declaration">edge_sensitive_path_declaration</A> <B>;</B> </TT>

<BR><TT><FONT COLOR=#800080> | <A NAME="Rstate_dependent_path_declaration" HREF="#state_dependent_path_declaration">state_dependent_path_declaration</A> <B>;</B> </FONT></TT>

<BR><TT><A NAME="simple_path_declaration" HREF="#Rsimple_path_declaration">simple_path_declaration</A> ::= </TT>

<BR><TT> <A NAME="Rparallel_path_description" HREF="#parallel_path_description">parallel_path_description</A> <B>=</B> <A NAME="Rpath_delay_value" HREF="#path_delay_value">path_delay_value</A> </TT>

<BR><TT> | <A NAME="Rfull_path_description" HREF="#full_path_description">full_path_description</A> <B>=</B> path_delay_value </TT>

<BR><TT><A NAME="parallel_path_description" HREF="#Rparallel_path_description">parallel_path_description</A> ::= </TT>

<BR><TT> ( specify_input_terminal_descriptor [ <A NAME="Rpolarity_operator" HREF="#polarity_operator">polarity_operator</A> ] => specify_output_terminal_descriptor <B>)</B> </TT>

<BR><TT><A NAME="full_path_description" HREF="#Rfull_path_description">full_path_description</A> ::= </TT>

<BR><TT> ( <A NAME="Rlist_of_path_inputs" HREF="#list_of_path_inputs">list_of_path_inputs</A> [ polarity_operator ] *> <A NAME="Rlist_of_path_outputs" HREF="#list_of_path_outputs">list_of_path_outputs</A> <B>)</B> </TT>

<BR><TT><A NAME="list_of_path_inputs" HREF="#Rlist_of_path_inputs">list_of_path_inputs</A> ::= </TT>

<BR><TT> ( specify_input_terminal_descriptor { <B>,</B> specify_input_terminal_descriptor } </TT>

<BR><TT><A NAME="list_of_path_outputs" HREF="#Rlist_of_path_outputs">list_of_path_outputs</A> ::= </TT>

<BR><TT> ( specify_output_terminal_descriptor { <B>,</B> specify_output_terminal_descriptor } </TT>

<BR><TT><A NAME="specify_input_terminal_descriptor" HREF="#Rspecify_input_terminal_descriptor">specify_input_terminal_descriptor</A> ::= </TT>

<BR><TT> <A NAME="Rinput_identifier" HREF="#input_identifier">input_identifier</A> </TT>

<BR><TT> | input_identifier [ constant_expression ] </TT>

<BR><TT> | input_identifier [ msb_constant_expression <B>:</B> lsb_constant_expression ] </TT>

<BR><TT><A NAME="specify_output_terminal_descriptor" HREF="#Rspecify_output_terminal_descriptor">specify_output_terminal_descriptor</A> ::= </TT>

<BR><TT> <A NAME="Routput_identifier" HREF="#output_identifier">output_identifier</A> </TT>

<BR><TT> | output_identifier [ constant_expression ] </TT>

<BR><TT> | output_identifier [ msb_constant_expression <B>:</B> lsb_constant_expression ] </TT>

<BR><TT><A NAME="input_identifier" HREF="#Rinput_identifier">input_identifier</A> ::= input_port_identifier | <A NAME="Rinout_port_identifier" HREF="#inout_port_identifier">inout_port_identifier</A> </TT>

<BR><TT><A NAME="output_identifier" HREF="#Routput_identifier">output_identifier</A> ::= output_port_identifier | inout_port_identifier </TT>

<BR><TT><A NAME="polarity_operator" HREF="#Rpolarity_operator">polarity_operator</A> ::= <B>+</B> | <B>-</B> </TT>

<BR><TT><A NAME="path_delay_value" HREF="#Rpath_delay_value">path_delay_value</A> ::= </TT>

<BR><TT> <A NAME="Rlist_of_path_delay_expressions" HREF="#list_of_path_delay_expressions">list_of_path_delay_expressions</A> </TT>

<BR><TT> | <B>(</B> list_of_path_delay_expressions <B>)</B> </TT>

<BR><TT><A NAME="list_of_path_delay_expressions" HREF="#Rlist_of_path_delay_expressions">list_of_path_delay_expressions</A> ::= </TT>

<BR><TT> <A NAME="Rt_path_delay_expression" HREF="#t_path_delay_expression">t_path_delay_expression</A> </TT>

<BR><TT> | <A NAME="Rtrise_path_delay_expression" HREF="#trise_path_delay_expression">trise_path_delay_expression</A> <B>,</B> <A NAME="Rtfall_path_delay_expression" HREF="#tfall_path_delay_expression">tfall_path_delay_expression</A> </TT>

<BR><TT> | trise_path_delay_expression <B>,</B> tfall_path_delay_expression <B>,</B> <A NAME="Rtz_path_delay_expression" HREF="#tz_path_delay_expression">tz_path_delay_expression</A> </TT>

<BR><TT> | <A NAME="Rt01_path_delay_expression" HREF="#t01_path_delay_expression">t01_path_delay_expression</A> <B>,</B> <A NAME="Rt10_path_delay_expression" HREF="#t10_path_delay_expression">t10_path_delay_expression</A> <B>,</B> <A NAME="Rt0z_path_delay_expression" HREF="#t0z_path_delay_expression">t0z_path_delay_expression</A> <B>,</B> </TT>

<BR><TT> <A NAME="Rtz1_path_delay_expression" HREF="#tz1_path_delay_expression">tz1_path_delay_expression</A> <B>,</B> <A NAME="Rt1z_path_delay_expression" HREF="#t1z_path_delay_expression">t1z_path_delay_expression</A> <B>,</B> <A NAME="Rtz0_path_delay_expression" HREF="#tz0_path_delay_expression">tz0_path_delay_expression</A> </TT>

<BR><TT> | t01_path_delay_expression <B>,</B> t10_path_delay_expression <B>,</B> t0z_path_delay_expression <B>,</B> </TT>

<BR><TT> tz1_path_delay_expression <B>,</B> t1z_path_delay_expression <B>,</B> tz0_path_delay_expression </TT>

<BR><TT> <A NAME="Rt0x_path_delay_expression" HREF="#t0x_path_delay_expression">t0x_path_delay_expression</A> <B>,</B> <A NAME="Rtx1_path_delay_expression" HREF="#tx1_path_delay_expression">tx1_path_delay_expression</A> <B>,</B> <A NAME="Rt1x_path_delay_expression" HREF="#t1x_path_delay_expression">t1x_path_delay_expression</A> <B>,</B> </TT>

<BR><TT> <A NAME="Rtx0_path_delay_expression" HREF="#tx0_path_delay_expression">tx0_path_delay_expression</A> <B>,</B> <A NAME="Rtxz_path_delay_expression" HREF="#txz_path_delay_expression">txz_path_delay_expression</A> <B>,</B> <A NAME="Rtzx_path_delay_expression" HREF="#tzx_path_delay_expression">tzx_path_delay_expression</A> </TT>

<BR><TT><FONT COLOR=#800080><A NAME="t_path_delay_expression" HREF="#Rt_path_delay_expression">t_path_delay_expression</A> ::= <A NAME="Rpath_delay_expression" HREF="#path_delay_expression">path_delay_expression</A> </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="trise_path_delay_expression" HREF="#Rtrise_path_delay_expression">trise_path_delay_expression</A> ::= path_delay_expression </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="tfall_path_delay_expression" HREF="#Rtfall_path_delay_expression">tfall_path_delay_expression</A> ::= path_delay_expression </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="tz_path_delay_expression" HREF="#Rtz_path_delay_expression">tz_path_delay_expression</A> ::= path_delay_expression </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="t01_path_delay_expression" HREF="#Rt01_path_delay_expression">t01_path_delay_expression</A> ::= path_delay_expression </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="t10_path_delay_expression" HREF="#Rt10_path_delay_expression">t10_path_delay_expression</A> ::= path_delay_expression </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="t0z_path_delay_expression" HREF="#Rt0z_path_delay_expression">t0z_path_delay_expression</A> ::= path_delay_expression </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="tz1_path_delay_expression" HREF="#Rtz1_path_delay_expression">tz1_path_delay_expression</A> ::= path_delay_expression </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="t1z_path_delay_expression" HREF="#Rt1z_path_delay_expression">t1z_path_delay_expression</A> ::= path_delay_expression </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="tz0_path_delay_expression" HREF="#Rtz0_path_delay_expression">tz0_path_delay_expression</A> ::= path_delay_expression </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="t0x_path_delay_expression" HREF="#Rt0x_path_delay_expression">t0x_path_delay_expression</A> ::= path_delay_expression </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="tx1_path_delay_expression" HREF="#Rtx1_path_delay_expression">tx1_path_delay_expression</A> ::= path_delay_expression </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="t1x_path_delay_expression" HREF="#Rt1x_path_delay_expression">t1x_path_delay_expression</A> ::= path_delay_expression </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="tx0_path_delay_expression" HREF="#Rtx0_path_delay_expression">tx0_path_delay_expression</A> ::= path_delay_expression </FONT></TT>

<BR><TT><FONT COLOR=#800080><A NAME="txz_path_delay_expression" HREF="#Rtxz_path_delay_expression">txz_path_delay_expression</A> ::=