From: Cliff Cummings (cliffc@sunburst)
Date: Thu Jun 04 1998 - 00:37:47 PDT
BAD MSG:
<HTML>
-Lines: 1851
Content-Type: text/plain; charset="us-ascii"
Content-Length: 196087
X-Status: $$$$
X-UID: 0000000511
Status: RO
<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><A NAME="source_text">source_text</A> ::= { <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=#0000FF>1995><A NAME="module_item" HREF="#Rmodule_item">module_item</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> <A NAME="Rmodule_item_declaration" HREF="#module_item_declaration">module_item_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <A NAME="Rparameter_override" HREF="#parameter_override">parameter_override</A> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <A NAME="Rcontinuous_assign" HREF="#continuous_assign">continuous_assign</A> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <A NAME="Rgate_instantiation" HREF="#gate_instantiation">gate_instantiation</A> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <A NAME="Rudp_instantiation" HREF="#udp_instantiation">udp_instantiation</A> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <A NAME="Rmodule_instantiation" HREF="#module_instantiation">module_instantiation</A> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <A NAME="Rspecify_block" HREF="#specify_block">specify_block</A> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <A NAME="Rinitial_construct" HREF="#initial_construct">initial_construct</A> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <A NAME="Ralways_construct" HREF="#always_construct">always_construct</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01><A NAME="module_item">module_item</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> <A NAME="Rungeneratable_module_item_declaration" HREF="#ungeneratable_module_item_declaration">ungeneratable_module_item_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Rnon_generated_module_item" HREF="#non_generated_module_item">non_generated_module_item</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Rgenerated_instantiation" HREF="#generated_instantiation">generated_instantiation</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | specify_block </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01><A NAME="ungeneratable_module_item_declaration" HREF="#Rungeneratable_module_item_declaration">ungeneratable_module_item_declaration</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> <A NAME="Rparameter_declaration" HREF="#parameter_declaration">parameter_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Rlocal_parameter_declaration" HREF="#local_parameter_declaration">local_parameter_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Rinput_declaration" HREF="#input_declaration">input_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Routput_declaration" HREF="#output_declaration">output_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Rinout_declaration" HREF="#inout_declaration">inout_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01><A NAME="non_generated_module_item" HREF="#Rnon_generated_module_item">non_generated_module_item</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> <A NAME="Rgeneratable_module_item_declaration" HREF="#generatable_module_item_declaration">generatable_module_item_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | parameter_override </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | continuous_assign </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | gate_instantiation </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | udp_instantiation </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | module_instantiation </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | initial_construct </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | always_construct </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Ralways_combinational_construct" HREF="#always_combinational_construct">always_combinational_construct</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01><A NAME="generatable_module_item_declaration" HREF="#Rgeneratable_module_item_declaration">generatable_module_item_declaration</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> <A NAME="Rnet_declaration" HREF="#net_declaration">net_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Rreg_declaration" HREF="#reg_declaration">reg_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Rinteger_declaration" HREF="#integer_declaration">integer_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Rreal_declaration" HREF="#real_declaration">real_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Rtime_declaration" HREF="#time_declaration">time_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Rrealtime_declaration" HREF="#realtime_declaration">realtime_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Revent_declaration" HREF="#event_declaration">event_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Rtask_declaration" HREF="#task_declaration">task_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Rfunction_declaration" HREF="#function_declaration">function_declaration</A> </FONT></TT>
<BR><TT><A NAME="module_item_declaration" HREF="#Rmodule_item_declaration">module_item_declaration</A> ::= </TT>
<BR><TT> parameter_declaration </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B??> | local_parameter_declaration </FONT></TT>
<BR><TT> | input_declaration </TT>
<BR><TT> | output_declaration </TT>
<BR><TT> | inout_declaration </TT>
<BR><TT> | net_declaration </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> | task_declaration </TT>
<BR><TT> | function_declaration </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=#0000FF>1995><A NAME="parameter_declaration" HREF="#Rparameter_declaration">parameter_declaration</A> ::= <B>parameter</B> list_of_param_assignments <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??><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>1998 B??><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>1998 B??><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=#0000FF>1995><A NAME="input_declaration" HREF="#Rinput_declaration">input_declaration</A> ::= <B>input</B> <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=#0000FF>1995><A NAME="output_declaration" HREF="#Routput_declaration">output_declaration</A> ::= <B>output</B> <B>[</B> range <B>]</B> list_of_port_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995><A NAME="inout_declaration" HREF="#Rinout_declaration">inout_declaration</A> ::= <B>inout</B> <B>[</B> range <B>]</B> list_of_port_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19/B09/B14><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> list_of_port_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19/B09/B14><A NAME="output_declaration" HREF="#Routput_declaration">output_declaration</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19/B09/B14> <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>1998 B19/B09/B14> | <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>1998 B19/B09/B14><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>1998 B14><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><FONT COLOR=#0000FF>1995><A NAME="reg_declaration" HREF="#Rreg_declaration">reg_declaration</A> ::= <B>reg</B> <B>[</B> range <B>]</B> <A NAME="Rlist_of_register_identifiers" HREF="#list_of_register_identifiers">list_of_register_identifiers</A> <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995><A NAME="event_declaration" HREF="#Revent_declaration">event_declaration</A> ::= <B>event</B> <A NAME="Revent_identifier" HREF="#event_identifier">event_identifier</A> { <B>,</B> event_identifier } <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995><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> { <B>,</B> real_identifier } </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995><A NAME="list_of_register_identifiers" HREF="#Rlist_of_register_identifiers">list_of_register_identifiers</A> ::= <A NAME="Rregister_name" HREF="#register_name">register_name</A> { <B>,</B> register_name } </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995><A NAME="register_name" HREF="#Rregister_name">register_name</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> <A NAME="Rregister_identifier" HREF="#register_identifier">register_identifier</A> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <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=#0000FF>1995><A NAME="range" HREF="#Rrange">range</A> ::= [ msb_constant_expression <B>:</B> lsb_constant_expression ] </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995><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> { <B>,</B> net_identifier } </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 <A NAME="Rassignment" HREF="#assignment">assignment</A> 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>1998 B02/BE??><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>1998 B02><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>1998 B02><A NAME="list_of_regmem_identifiers" HREF="#Rlist_of_regmem_identifiers">list_of_regmem_identifiers</A> ::= register_name | <A NAME="Rmemory_name" HREF="#memory_name">memory_name</A> { <B>,</B> register_name | memory_name } </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02><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>1998 B02/BE??><A NAME="memory_name" HREF="#Rmemory_name">memory_name</A> ::= memory_identifier [ upper_limit_constant_expression <B>:</B> lower_limit_constant_expression ] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02><A NAME="register_name" HREF="#Rregister_name">register_name</A> ::= register_identifier [ <A NAME="Rdimension" HREF="#dimension">dimension</A> { <B>,</B> dimension }] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02><A NAME="list_of_real_identifiers" HREF="#Rlist_of_real_identifiers">list_of_real_identifiers</A> ::= real_identifier [ dimension { <B>,</B> dimension }] { <B>,</B> real_identifier [ dimension { <B>,</B> dimension }] } </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02><A NAME="list_of_event_identifiers" HREF="#Rlist_of_event_identifiers">list_of_event_identifiers</A> ::= event_identifier [ dimension { <B>,</B> dimension }] { <B>,</B> event_identifier [ dimension { <B>,</B> dimension }] } </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02><A NAME="range" HREF="#Rrange">range</A> ::= [ msb_constant_expression <B>:</B> lsb_constant_expression ] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02><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>1998 B02><A NAME="list_of_net_identifiers" HREF="#Rlist_of_net_identifiers">list_of_net_identifiers</A> ::= net_identifier [ 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=#0000FF>1995><A NAME="net_declaration" HREF="#Rnet_declaration">net_declaration</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> net_type [ <B>vectored</B> | <B>scalared</B> ] <B>[</B> range <B>]</B> [ delay3 ] list_of_net_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <B>trireg</B> [ <B>vectored</B> | <B>scalared</B> ] [ <A NAME="Rcharge_strength" HREF="#charge_strength">charge_strength</A> ] <B>[</B> range <B>]</B> [ delay3 ] </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> list_of_net_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | net_type [ <B>vectored</B> | <B>scalared</B> ] [ <A NAME="Rdrive_strength" HREF="#drive_strength">drive_strength</A> ] <B>[</B> range <B>]</B> [ delay3 ] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19><A NAME="net_declaration" HREF="#Rnet_declaration">net_declaration</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19> net_type [ <B>vectored</B> | <B>scalared</B> ] [ <B>signed</B> | <B>unsigned</B> ] <B>[</B> range <B>]</B> [ delay3 ] list_of_net_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19> | <B>trireg</B> [ <B>vectored</B> | <B>scalared</B> ] [ <B>signed</B> | <B>unsigned</B> ] [ charge_strength ] <B>[</B> range <B>]</B> [ delay3 ] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19> list_of_net_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19> | net_type [ <B>vectored</B> | <B>scalared</B> ] [ <B>signed</B> | <B>unsigned</B> ] [ drive_strength ] <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> 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> <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=#0000FF>1995> <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><FONT COLOR=#FF0000>1998 B19> <B>function</B> [signed] [ range_or_type ] function_identifier <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>1998 B??><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>1998 B04><A NAME="recursive_function_declaration">recursive_function_declaration</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> <B>function</B> [ <B>automatic</B> ] [ range_or_type ] function_identifier <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> <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>1998 B04> statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> <B>endfunction</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04><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>1998 B04><A NAME="recursive_function_item_declaration" HREF="#Rrecursive_function_item_declaration">recursive_function_item_declaration</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> <A NAME="Rautomatic_block_item_declaration" HREF="#automatic_block_item_declaration">automatic_block_item_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | <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=#0000FF>1995> <A NAME="Rstatement_or_null" HREF="#statement_or_null">statement_or_null</A> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> statement </FONT></TT>
<BR><TT> <B>endtask</B> </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08><A NAME="combinational_task_declaration">combinational_task_declaration</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> <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>1998 B08> { task_item_declaration } </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> <A NAME="Rcombinational_statement" HREF="#combinational_statement">combinational_statement</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> <B>endtask</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>><A NAME="task_argument_declaration">task_argument_declaration</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE43><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>1998 BE43> | 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>1998 B??> | 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>1998 B04><A NAME="recursive_reentrant_task_declaration">recursive_reentrant_task_declaration</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> <B>task</B> [ <B>automatic</B> ] task_identifier <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> { <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>1998 B04> statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> <B>endtask</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04><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>1998 B04> automatic_block_item_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_input_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | <A NAME="Rautomatic_output_declaration" HREF="#automatic_output_declaration">automatic_output_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | <A NAME="Rautomatic_inout_declaration" HREF="#automatic_inout_declaration">automatic_inout_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04><A NAME="automatic_block_item_declaration" HREF="#Rautomatic_block_item_declaration">automatic_block_item_declaration</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> parameter_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | local_parameter_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | <A NAME="Rautomatic_reg_declaration" HREF="#automatic_reg_declaration">automatic_reg_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | <A NAME="Rautomatic_integer_declaration" HREF="#automatic_integer_declaration">automatic_integer_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | <A NAME="Rautomatic_time_declaration" HREF="#automatic_time_declaration">automatic_time_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | <A NAME="Rautomatic_real_declaration" HREF="#automatic_real_declaration">automatic_real_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | <A NAME="Rautomatic_realtime_declaration" HREF="#automatic_realtime_declaration">automatic_realtime_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | <A NAME="Rautomatic_event_declaration" HREF="#automatic_event_declaration">automatic_event_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04/B19><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>1998 B04/B19><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>1998 B04/B19><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>1998 B04/B19><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>1998 B04><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>1998 B04><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>1998 B04><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>1998 B04><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>1998 B04><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=#0000FF>1995> | <A NAME="Rpass_en_switchtype" HREF="#pass_en_switchtype">pass_en_switchtype</A> [delay3] pass_en_switch_instance { <B>,</B> pass_en_switch_instance } <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | pass_en_switchtype [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><FONT COLOR=#0000FF>1995><FONT SIZE=4><B>A.4 Module instantiation </B></FONT></FONT></TT>
<BR><TT> </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01><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=#0000FF>1995><A NAME="parameter_value_assignment" HREF="#Rparameter_value_assignment">parameter_value_assignment</A> ::= <B>#</B> <B>(</B> expression { <B>,</B> expression } <B>)</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B06><A NAME="parameter_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>1998 B06><A NAME="list_of_parameter_assignments" HREF="#Rlist_of_parameter_assignments">list_of_parameter_assignments</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B06> <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>1998 B06> <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>1998 B06><A NAME="ordered_parameter_assignment" HREF="#Rordered_parameter_assignment">ordered_parameter_assignment</A> ::= expression </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B06><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>1998 B01><A NAME="genvar_declaration">genvar_declaration</A> ::= <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>1998 B01><A NAME="list_of_genvar_identifiers" HREF="#Rlist_of_genvar_identifiers">list_of_genvar_identifiers</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> <A NAME="Rgenvar_identifier" HREF="#genvar_identifier">genvar_identifier</A> { <B>,</B> genvar_identifier } </FONT></TT>
<BR><TT> </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01><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>1998 B01><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>1998 B01><A NAME="generate_item" HREF="#Rgenerate_item">generate_item</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> <A NAME="Rgenerate_conditional_statement" HREF="#generate_conditional_statement">generate_conditional_statement</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Rgenerate_case_statement" HREF="#generate_case_statement">generate_case_statement</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Rgenerate_loop_statement" HREF="#generate_loop_statement">generate_loop_statement</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <A NAME="Rgenerate_block" HREF="#generate_block">generate_block</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | non_generated_module_item </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01><A NAME="generate_conditional_statement" HREF="#Rgenerate_conditional_statement">generate_conditional_statement</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> <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>1998 B01><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>1998 B01><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>1998 B01><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>1998 B01> generate_item_or_null | <B>default</B> [ <B>:</B> ] generate_item_or_null </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01><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>1998 B01><A NAME="genvar_assignment" HREF="#Rgenvar_assignment">genvar_assignment</A> ::= genvar_identifier <B>=</B> genvar_expression </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01><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=#0000FF>1995> <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> ; </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B??> <B>primitive</B> udp_identifier [ <B>(</B> udp_port_list <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=#0000FF>1995> output_declaration </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | input_declaration </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | reg_declaration </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> <A NAME="Rudp_output_declaration" HREF="#udp_output_declaration">udp_output_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <A NAME="Rudp_input_declaration" HREF="#udp_input_declaration">udp_input_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <A NAME="Rudp_reg_declaration" HREF="#udp_reg_declaration">udp_reg_declaration</A> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??><A NAME="udp_output_declaration" HREF="#Rudp_output_declaration">udp_output_declaration</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> <B>output</B> port_identifier <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <B>output</B> <B>reg</B> port_identifier [ <B>=</B> constant_expression ] <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??><A NAME="udp_input_declaration" HREF="#Rudp_input_declaration">udp_input_declaration</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> <B>input</B> list_of_port_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??><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>1998 B08><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=#0000FF>1995> | non_blocking assignment <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41> | <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=#0000FF>1995>blocking <A NAME="assignment" HREF="#Rassignment">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=#0000FF>1995>non-blocking <A NAME="assignment" HREF="#Rassignment">assignment</A> ::= reg_lvalue <B><=</B> [ delay_or_event_control ] expression </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41><A NAME="blocking_assignment" HREF="#Rblocking_assignment">blocking_assignment</A> ::= reg_lvalue <B>=</B> [ delay_or_event_control ] expression </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41><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=#0000FF>1995> | <B>assign</B> <A NAME="Rreg_assignment" HREF="#reg_assignment">reg_assignment</A> <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41> <B>assign</B> reg_assignment <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>1998 B08><A NAME="combinational_statement" HREF="#Rcombinational_statement">combinational_statement</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> <A NAME="Rcombinational_blocking_assignment" HREF="#combinational_blocking_assignment">combinational_blocking_assignment</A> <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | <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>1998 B08> | <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>1998 B08> | <A NAME="Rcombinational_conditional_statement" HREF="#combinational_conditional_statement">combinational_conditional_statement</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | <A NAME="Rcombinational_case_statement" HREF="#combinational_case_statement">combinational_case_statement</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | <A NAME="Rcombinational_loop_statement" HREF="#combinational_loop_statement">combinational_loop_statement</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | disable_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | <A NAME="Rcombinational_seq_block" HREF="#combinational_seq_block">combinational_seq_block</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | <A NAME="Rcombinational_task_enable" HREF="#combinational_task_enable">combinational_task_enable</A> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | system_task_enable </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08><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>1998 B08><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>1998 B08><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>1998 B08><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>1998 B08> delay_control combinational_statement_or_null </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??><A NAME="function_statement" HREF="#Rfunction_statement">function_statement</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> <A NAME="Rfunction_blocking_assignment" HREF="#function_blocking_assignment">function_blocking_assignment</A> <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <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>1998 BE??> | <A NAME="Rfunction_conditional_statement" HREF="#function_conditional_statement">function_conditional_statement</A> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <A NAME="Rfunction_case_statement" HREF="#function_case_statement">function_case_statement</A> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <A NAME="Rfunction_loop_statement" HREF="#function_loop_statement">function_loop_statement</A> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | disable_statement </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | combinational_seq_block </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | system_task_enable </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??><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>1998 BE??><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>1998 BE??><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>1998 B07> | 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=#0000FF>1995> | <B>if</B> <B>(</B> expression <B>)</B> statement_or_null [ <B>else</B> statement_or_null ] </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41> <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=#0000FF>1995> | <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><FONT COLOR=#800080>1998 BE41> <B>case</B> <B>(</B> expression <B>)</B> case_item [ 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=#0000FF>1995> | <B>forever</B> statement </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE10> <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>1998 B08><A NAME="combinational_conditional_statement" HREF="#Rcombinational_conditional_statement">combinational_conditional_statement</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> <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>1998 B08><A NAME="combinational_case_statement" HREF="#Rcombinational_case_statement">combinational_case_statement</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> <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>1998 B08> | <B>casez</B> <B>(</B> expression <B>)</B> case_item [ combinational_case_item ] <B>endcase</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | <B>casex</B> <B>(</B> expression <B>)</B> case_item [ combinational_case_item ] <B>endcase</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08><A NAME="combinational_case_item" HREF="#Rcombinational_case_item">combinational_case_item</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> expression { <B>,</B> expression } <B>:</B> combinational_statement_or_null </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | <B>default</B> [ <B>:</B> ] combinational_statement_or_null </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08><A NAME="combinational_loop_statement" HREF="#Rcombinational_loop_statement">combinational_loop_statement</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> <B>forever</B> combinational_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | <B>repeat</B> <B>(</B> expression <B>)</B> combinational_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | <B>while</B> <B>(</B> expression <B>)</B> combinational_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | <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>1998 B08><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>1998 B08><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>1998 BE??><A NAME="function_conditional_statement" HREF="#Rfunction_conditional_statement">function_conditional_statement</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> <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>1998 BE??><A NAME="function_case_statement" HREF="#Rfunction_case_statement">function_case_statement</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> <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>1998 BE??> | <B>casez</B> <B>(</B> expression <B>)</B> case_item [ function_case_item ] <B>endcase</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <B>casex</B> <B>(</B> expression <B>)</B> case_item [ function_case_item ] <B>endcase</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??><A NAME="function_case_item" HREF="#Rfunction_case_item">function_case_item</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> expression { <B>,</B> expression } <B>:</B> function_statement_or_null </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <B>default</B> [ <B>:</B> ] function_statement_or_null </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??><A NAME="function_loop_statement" HREF="#Rfunction_loop_statement">function_loop_statement</A> ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> <B>forever</B> function_statement </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <B>repeat</B> <B>(</B> expression <B>)</B> function_statement </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <B>while</B> <B>(</B> expression <B>)</B> function_statement </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <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>1998 BE??><A NAME="function_seq_block">function_seq_block</A> ::= <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=#0000FF>1995> | <B>wait</B> <B>(</B> expression <B>)</B> statement_or_null </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41> <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=#0000FF>1995> | -> event_identifier <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41> -> event_identifier <B>;</B> </FONT></TT>
<BR><TT><A NAME="disable_statement" HREF="#Rdisable_statement">disable_statement</A> ::= </TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <B>disable</B> task_identifier <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41> <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=#0000FF>1995><A NAME="system_task_enable" HREF="#Rsystem_task_enable">system_task_enable</A> ::= <A NAME="Rsystem_task_name" HREF="#system_task_name">system_task_name</A> [ <B>(</B> expression { <B>,</B> expression } <B>)</B> ] <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995><A NAME="system_task_name" HREF="#Rsystem_task_name">system_task_name</A> ::= $<A NAME="Ridentifier" HREF="#identifier">identifier</A> Note: The $ may <B>not</B> be followed by <B>a</B> space. </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE49><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=#0000FF>1995> <A NAME="Rspecparam_identifier" HREF="#specparam_identifier">specparam_identifier</A> <B>=</B> constant_expression </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE29> specparam_identifier <B>=</B> constant_mintypmax_expression </FONT></TT>
&l