hyperlinked BNF - 4/23

From: Adam Krolnik (adamk@cyrix.com)
Date: Thu Apr 23 1998 - 00:21:03 PDT


Too Cool!

I haven't linked the definition to a usage. Would this be useful? Would the first one be okay?

I can color the unreferenced definitions. What color should I do?

     Adam

<p>Begin forwarded message:

Date: Thu, 23 Apr 1998 13:19:11 -0500
From: adamk
To: adamk
Subject: hyperlinked 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><A NAME="source_text"></A>source_text ::= { description } </TT>

<BR><TT><A NAME="description"></A>description ::= </TT>

<BR><TT> module_declaration </TT>

<BR><TT> | udp_declaration </TT>

<BR><TT><A NAME="module_declaration"></A>module_declaration ::= </TT>

<BR><TT> module_keyword <I>module</I>_identifier [ list_of_ports ] <B>;</B> { module_item } <B>endmodule</B> </TT>

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

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

<BR><TT><A NAME="port"></A>port ::= </TT>

<BR><TT> [ port_expression ] </TT>

<BR><TT> | . <I>port</I>_identifier <B>(</B> [ port_expression ] <B>)</B> </TT>

<BR><TT><A NAME="port_expression"></A>port_expression ::= </TT>

<BR><TT> port_reference </TT>

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

<BR><TT><A NAME="port_reference"></A>port_reference ::= </TT>

<BR><TT> <I>port</I>_identifier </TT>

<BR><TT> | <I>port</I>_identifier [ constant_expression ] </TT>

<BR><TT> | <I>port</I>_identifier [ msb_constant_expression <B>:</B> lsb_constant_expression ] </TT>

<BR><TT><FONT COLOR=#0000FF>1995><A NAME="module_item"></A>module_item ::= </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> module_item_declaration </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> | parameter_override </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> | continuous_assign </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> | gate_instantiation </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> | udp_instantiation </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> | module_instantiation </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> | specify_block </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> | initial_construct </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> | always_construct </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01><A NAME="module_item"></A>module_item ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> ungeneratable_module_item_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | non_generated_module_item </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | generated_instantiation </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"></A>ungeneratable_module_item_declaration ::= </FONT></TT>

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

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

<BR><TT><FONT COLOR=#FF0000>1998 B01> | input_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | output_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | inout_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01><A NAME="non_generated_module_item"></A>non_generated_module_item ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> generatable_module_item_declaration </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="generatable_module_item_declaration"></A>generatable_module_item_declaration ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> net_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | reg_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | integer_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | real_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | time_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | realtime_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | event_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | task_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | function_declaration </FONT></TT>

<BR><TT><A NAME="module_item_declaration"></A>module_item_declaration ::= </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"></A>parameter_override ::= <B>defparam</B> list_of_param_assignments <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"></A>parameter_declaration ::= parameter list_of_param_assignments <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE??><A NAME="parameter_declaration"></A>parameter_declaration ::= parameter <B>[</B> range <B>]</B> list_of_param_assignments <B>;</B> </FONT></TT>

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

<BR><TT><FONT COLOR=#FF0000>1998 B??><A NAME="local_parameter_declaration"></A>local_parameter_declaration ::= localparam list_of_local_param_assignments <B>;</B> </FONT></TT>

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

<BR><TT><A NAME="param_assignment"></A>param_assignment ::= <I>parameter</I>_identifier <B>=</B> constant_expression </TT>

<BR><TT><FONT COLOR=#0000FF>1995><A NAME="input_declaration"></A>input_declaration ::= <B>input</B> <B>[</B> range <B>]</B> list_of_port_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995><A NAME="output_declaration"></A>output_declaration ::= <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"></A>inout_declaration ::= <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"></A>input_declaration ::= <B>input</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><A NAME="output_declaration"></A>output_declaration ::= </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> ] [ reg_type ] <B>[</B> range <B>]</B> list_of_reg_port_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B19/B09/B14><A NAME="inout_declaration"></A>inout_declaration ::= <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"></A>list_of_port_identifiers ::= <I>port</I>_identifier { <B>,</B> <I>port</I>_identifier } </TT>

<BR><TT><FONT COLOR=#FF0000>1998 B14><A NAME="list_of_reg_port_identifiers"></A>list_of_reg_port_identifiers ::= <I>port</I>_identifier [ <B>=</B> constant_expression ] { <B>,</B> <I>port</I>_identifier [ <B>=</B> constant_expression ] } </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995><A NAME="reg_declaration"></A>reg_declaration ::= <B>reg</B> <B>[</B> range <B>]</B> list_of_register_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995><A NAME="event_declaration"></A>event_declaration ::= <B>event</B> <I>event</I>_identifier { <B>,</B> <I>event</I>_identifier } <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995><A NAME="list_of_real_identifiers"></A>list_of_real_identifiers ::= <I>real</I>_identifier { <B>,</B> <I>real</I>_identifier } </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995><A NAME="list_of_register_identifiers"></A>list_of_register_identifiers ::= register_name { <B>,</B> register_name } </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995><A NAME="register_name"></A>register_name ::= </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> <I>register</I>_identifier </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> | <I>memory</I>_identifier [ upper_limit_constant_expression <B>:</B> lower_limit_constant_expression ] </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995><A NAME="range"></A>range ::= [ msb_constant_expression <B>:</B> lsb_constant_expression ] </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995><A NAME="list_of_net_identifiers"></A>list_of_net_identifiers ::= <I>net</I>_identifier { <B>,</B> <I>net</I>_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 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>1998 B02/BE??><A NAME="reg_declaration"></A>reg_declaration ::= <B>reg</B> [ <B>signed</B> | <B>unsigned</B> ] <B>[</B> range <B>]</B> list_of_regmem_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B02><A NAME="event_declaration"></A>event_declaration ::= <B>event</B> list_of_event_identifiers <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B02><A NAME="list_of_regmem_identifiers"></A>list_of_regmem_identifiers ::= register_name | memory_name { <B>,</B> register_name | memory_name } </FONT></TT>

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

<BR><TT><FONT COLOR=#FF0000>1998 B02/BE??><A NAME="memory_name"></A>memory_name ::= <I>memory</I>_identifier [ upper_limit_constant_expression <B>:</B> lower_limit_constant_expression ] </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B02><A NAME="register_name"></A>register_name ::= <I>register</I>_identifier [ dimension { <B>,</B> dimension }] </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B02><A NAME="list_of_real_identifiers"></A>list_of_real_identifiers ::= <I>real</I>_identifier [ dimension { <B>,</B> dimension }] { <B>,</B> <I>real</I>_identifier [ dimension { <B>,</B> dimension }] } </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B02><A NAME="list_of_event_identifiers"></A>list_of_event_identifiers ::= <I>event</I>_identifier [ dimension { <B>,</B> dimension }] { <B>,</B> <I>event</I>_identifier [ dimension { <B>,</B> dimension }] } </FONT></TT>

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

<BR><TT><FONT COLOR=#FF0000>1998 B02><A NAME="dimension"></A>dimension ::= [ dimension_constant_expression <B>:</B> dimension_constant_expression ] </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B02><A NAME="list_of_net_identifiers"></A>list_of_net_identifiers ::= <I>net</I>_identifier [ dimension { <B>,</B> dimension }] { <B>,</B> <I>net</I>_identifier [ dimension { <B>,</B> dimension }] } </FONT></TT>

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

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

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

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

<BR><TT><FONT COLOR=#0000FF>1995><A NAME="net_declaration"></A>net_declaration ::= </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> ] [ charge_strength ] <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> ] [ drive_strength ] <B>[</B> range <B>]</B> [ delay3 ] </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B19><A NAME="net_declaration"></A>net_declaration ::= </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> list_of_net_decl_assignments <B>;</B> </TT>

<BR><TT><A NAME="net_type"></A>net_type ::= <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"></A>drive_strength ::= </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"></A>strength0 ::= <B>supply0</B> | <B>strong0</B> | <B>pull0</B> | <B>weak0</B> </TT>

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

<BR><TT><A NAME="charge_strength"></A>charge_strength ::= <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"></A>delay3 ::= <B>#</B> delay_value | <B>#</B> (delay_value [ <B>,</B> delay_value [ <B>,</B> delay_value ] ] <B>)</B> </TT>

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

<BR><TT><A NAME="delay_value"></A>delay_value ::= unsigned_number | <I>parameter</I>_identifier | constant_mintypmax_expression </TT>

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

<BR><TT><A NAME="net_decl_assignment"></A>net_decl_assignment ::= <I>net</I>_identifier <B>=</B> expression </TT>

<BR><TT><A NAME="function_declaration"></A>function_declaration ::= </TT>

<BR><TT><FONT COLOR=#0000FF>1995> <B>function</B> [signed] [ range_or_type ] <I>function</I>_identifier <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B19> <B>function</B> [signed] [ range_or_type ] <I>function</I>_identifier <B>;</B> </FONT></TT>

<BR><TT> function_item_declaration { function_item_declaration } </TT>

<BR><TT> statement </TT>

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

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

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

<BR><TT><A NAME="function_item_declaration"></A>function_item_declaration ::= </TT>

<BR><TT> block_item_declaration </TT>

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

<BR><TT><FONT COLOR=#FF0000>1998 B04><A NAME="recursive_function_declaration"></A>recursive_function_declaration ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B04> <B>function</B> [ <B>automatic</B> ] [ range_or_type ] <I>function</I>_identifier <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B04> recursive_function_item_declaration { 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"></A>range_or_type ::= 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"></A>recursive_function_item_declaration ::= </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><A NAME="task_declaration"></A>task_declaration ::= </TT>

<BR><TT> <B>task</B> <I>task</I>_identifier <B>;</B> </TT>

<BR><TT> { task_item_declaration } </TT>

<BR><TT><FONT COLOR=#0000FF>1995> statement_or_null </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"></A>combinational_task_declaration ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B08> <B>task</B> combinational_task_identifier <B>;</B> </FONT></TT>

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

<BR><TT><FONT COLOR=#FF0000>1998 B08> combinational_statement </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"></A>task_argument_declaration ::= </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE43><A NAME="task_item_declaration"></A>task_item_declaration ::= </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"></A>block_item_declaration ::= </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"></A>recursive_reentrant_task_declaration ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B04> task [ <B>automatic</B> ] <I>task</I>_identifier <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B04> { recursive_reentrant_task_item_declaration } </FONT></TT>

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

<BR><TT><FONT COLOR=#FF0000>1998 B04> endtask </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B04><A NAME="recursive_reentrant_task_item_declaration"></A>recursive_reentrant_task_item_declaration ::= </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> | automatic_output_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_inout_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B04><A NAME="automatic_block_item_declaration"></A>automatic_block_item_declaration ::= </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> | automatic_reg_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_integer_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_time_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_real_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_realtime_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_event_declaration </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B04/B19><A NAME="automatic_input_declaration"></A>automatic_input_declaration ::= <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"></A>automatic_output_declaration ::= <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"></A>automatic_inout_declaration ::= <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"></A>automatic_reg_declaration ::= <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"></A>automatic_integer_declaration ::= <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"></A>automatic_time_declaration ::= <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"></A>automatic_real_declaration ::= <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"></A>automatic_realtime_declaration ::= <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"></A>automatic_event_declaration ::= <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"></A>gate_instantiation ::= </TT>

<BR><TT> n_input_gatetype [drive_strength] [delay2] n_input_gate_instance { <B>,</B> n_input_gate_instance } <B>;</B> </TT>

<BR><TT> | n_output_gatetype [drive_strength] [delay2] n_output_gate_instance { <B>,</B> n_output_gate_instance } <B>;</B> </TT>

<BR><TT> | enable_gatetype [drive_strength] [delay3] enable_gate_instance { <B>,</B> enable_gate_instance } <B>;</B> </TT>

<BR><TT> | mos_switchtype [delay3] mos_switch_instance { <B>,</B> mos_switch_instance } <B>;</B> </TT>

<BR><TT> | pass_switchtype pass_switch_instance { <B>,</B> pass_switch_instance } <B>;</B> </TT>

<BR><TT><FONT COLOR=#0000FF>1995> | pass_en_switchtype [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] pass_enable_switch_instance { <B>,</B> pass_enable_switch_instance } <B>;</B> </FONT></TT>

<BR><TT> | cmos_switchtype [delay3] cmos_switch_instance { <B>,</B> cmos_switch_instance } <B>;</B> </TT>

<BR><TT> | <B>pullup</B> [pullup_strength] pull_gate_instance { <B>,</B> pull_gate_instance } <B>;</B> </TT>

<BR><TT> | <B>pulldown</B> [pulldown_strength] pull_gate_instance { <B>,</B> pull_gate_instance } <B>;</B> </TT>

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

<BR><TT><A NAME="n_output_gate_instance"></A>n_output_gate_instance ::= [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"></A>enable_gate_instance ::= [name_of_gate_instance] <B>(</B> output_terminal <B>,</B> input_terminal <B>,</B> enable_terminal <B>)</B> </TT>

<BR><TT><A NAME="mos_switch_instance"></A>mos_switch_instance ::= [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"></A>pass_switch_instance ::= [name_of_gate_instance] <B>(</B> inout_terminal <B>,</B> inout_terminal <B>)</B> </TT>

<BR><TT><A NAME="pass_enable_switch_instance"></A>pass_enable_switch_instance ::= [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"></A>cmos_switch_instance ::= [name_of_gate_instance] <B>(</B> output_terminal <B>,</B> input_terminal <B>,</B> </TT>

<BR><TT> ncontrol_terminal <B>,</B> pcontrol_terminal) </TT>

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

<BR><TT><A NAME="name_of_gate_instance"></A>name_of_gate_instance ::= gate_instance_identifier [range] </TT>

<BR><TT><A NAME="pullup_strength"></A>pullup_strength ::= </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"></A>pulldown_strength ::= </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"></A>input_terminal ::= scalar_expression </TT>

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

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

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

<BR><TT><A NAME="output_terminal"></A>output_terminal ::= <I>terminal</I>_identifier | <I>terminal</I>_identifier [ constant_expression ] </TT>

<BR><TT><A NAME="inout_terminal"></A>inout_terminal ::= <I>terminal</I>_identifier | <I>terminal</I>_identifier [ constant_expression ] </TT>

<BR><TT><A NAME="n_input_gatetype"></A>n_input_gatetype ::= <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"></A>n_output_gatetype ::= <B>buf</B> | <B>not</B> </TT>

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

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

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

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

<BR><TT><A NAME="cmos_switchtype"></A>cmos_switchtype ::= <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"></A>module_instantiation ::= </TT>

<BR><TT> <I>module</I>_identifier [ parameter_value_assignment ] module_instance { <B>,</B> module_instance } <B>;</B> </TT>

<BR><TT><FONT COLOR=#0000FF>1995><A NAME="parameter_value_assignment"></A>parameter_value_assignment ::= <B>#</B> <B>(</B> expression { <B>,</B> expression } <B>)</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B06><A NAME="parameter_value_assignment"></A>parameter_value_assignment ::= <B>#</B> <B>(</B> list_of_parameter_assignments <B>)</B> </FONT></TT>

<BR><TT> </TT>

<BR><TT><FONT COLOR=#FF0000>1998 B06><A NAME="list_of_parameter_assignments"></A>list_of_parameter_assignments ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B06> ordered_parameter_assignment { <B>,</B> ordered_parameter_assignment } | </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B06> named_parameter_assignment { <B>,</B> named_parameter_assignment } </FONT></TT>

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

<BR><TT><FONT COLOR=#FF0000>1998 B06><A NAME="named_parameter_assignment"></A>named_parameter_assignment ::= . <I>parameter</I>_identifier <B>(</B> [expression] <B>)</B> </FONT></TT>

<BR><TT> </TT>

<BR><TT><A NAME="module_instance"></A>module_instance ::= name_of_instance <B>(</B> [list_of_module_connections] <B>)</B> </TT>

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

<BR><TT><A NAME="list_of_module_connections"></A>list_of_module_connections ::= </TT>

<BR><TT> ordered_port_connection { <B>,</B> ordered_port_connection } </TT>

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

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

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

<BR><TT> </TT>

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

<BR><TT><FONT COLOR=#FF0000>1998 B01><A NAME="list_of_genvar_identifiers"></A>list_of_genvar_identifiers ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> genvar_identifier { <B>,</B> <I>genvar</I>_identifier } </FONT></TT>

<BR><TT> </TT>

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

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

<BR><TT><FONT COLOR=#FF0000>1998 B01><A NAME="generate_item"></A>generate_item ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> generate_conditional_statement </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | generate_case_statement </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | generate_loop_statement </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | generate_block </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"></A>generate_conditional_statement ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> <B>if</B> <B>(</B> genvar_expression <B>)</B> generate_item_or_null [ else generate_item_or_null ] </FONT></TT>

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

<BR><TT><FONT COLOR=#FF0000>1998 B01>genvar_case_item { genvar_case_item } <B>endcase</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01><A NAME="genvar_case_item"></A>genvar_case_item ::= 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"></A>generate_loop_statement ::= <B>for</B> <B>(</B> genvar_assignment <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"></A>genvar_assignment ::= <I>genvar</I>_identifier <B>=</B> genvar_expression </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01><A NAME="generate_block"></A>generate_block ::= <B>begin</B> [ <B>:</B> generate_block_identifier ] { 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"></A>udp_declaration ::= </TT>

<BR><TT><FONT COLOR=#0000FF>1995> primitive <I>udp</I>_identifier <B>(</B> udp_port_list <B>)</B> ; </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B??> primitive <I>udp</I>_identifier [ <B>(</B> udp_port_list <B>)</B> ] <B>;</B> </FONT></TT>

<BR><TT> udp_port_declaration { udp_port_declaration } </TT>

<BR><TT> udp_body </TT>

<BR><TT> endprimitive </TT>

<BR><TT><A NAME="udp_port_list"></A>udp_port_list ::= output_port_identifier <B>,</B> input_port_identifier { <B>,</B> input_port_identifier } </TT>

<BR><TT><A NAME="udp_port_declaration"></A>udp_port_declaration ::= </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??> udp_output_declaration </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE??> | udp_input_declaration </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE??> | udp_reg_declaration </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE??><A NAME="udp_output_declaration"></A>udp_output_declaration ::= </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE??> <B>output</B> <I>port</I>_identifier <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE??> | <B>output</B> <B>reg</B> <I>port</I>_identifier [ <B>=</B> constant_expression ] <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE??><A NAME="udp_input_declaration"></A>udp_input_declaration ::= </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"></A>udp_reg_declaration ::= <B>reg</B> <I>register</I>_identifier <B>;</B> </FONT></TT>

<BR><TT><A NAME="udp_body"></A>udp_body ::= combinational_body | sequential_body </TT>

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

<BR><TT><A NAME="combinational_entry"></A>combinational_entry ::= level_input_list <B>:</B> output_symbol <B>;</B> </TT>

<BR><TT><A NAME="sequential_body"></A>sequential_body ::= [ udp_initial statement ] <B>table</B> sequential_entry { sequential_entry } <B>endtable</B> </TT>

<BR><TT>udp_initial <A NAME="statement"></A>statement ::= <B>initial</B> udp_output_port_identifier <B>=</B> init_val <B>;</B> </TT>

<BR><TT><A NAME="init_val"></A>init_val ::= <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"></A>sequential_entry ::= seq_input_list <B>:</B> current_state <B>:</B> next state <B>;</B> </TT>

<BR><TT><A NAME="seq_input_list"></A>seq_input_list ::= level_input_list | edge_input_list </TT>

<BR><TT><A NAME="level_input_list"></A>level_input_list ::= level_symbol { level_symbol } </TT>

<BR><TT><A NAME="edge_input_list"></A>edge_input_list ::= { level_symbol } edge_indicator { level_symbol } </TT>

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

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

<BR><TT>next <A NAME="state"></A>state ::= output_symbol | <B>-</B> </TT>

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

<BR><TT><A NAME="level_symbol"></A>level_symbol ::= <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"></A>edge_symbol ::= <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"></A>udp_instantiation ::= <I>udp</I>_identifier [ drive_strength ] [ delay2 ] udp_instance { <B>,</B> udp_instance } <B>;</B> </TT>

<BR><TT><A NAME="udp_instance"></A>udp_instance ::= [ name_of_udp_instance ] <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"></A>name_of_udp_instance ::= udp_instance_identifier <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"></A>continuous_assign ::= <B>assign</B> [drive_strength] [delay3] list_of_net_assignments <B>;</B> </TT>

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

<BR><TT><A NAME="net_assignment"></A>net_assignment ::= net_lvalue <B>=</B> expression </TT>

<BR><TT> </TT>

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

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

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

<BR><TT> </TT>

<BR><TT><A NAME="statement"></A>statement ::= </TT>

<BR><TT> blocking_assignment <B>;</B> </TT>

<BR><TT><FONT COLOR=#0000FF>1995> | non_blocking assignment <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE41> | non_blocking_assignment <B>;</B> </FONT></TT>

<BR><TT> | procedural_continuous_assignments <B>;</B> </TT>

<BR><TT> | procedural_timing_control_statement </TT>

<BR><TT> | conditional_statement </TT>

<BR><TT> | case_statement </TT>

<BR><TT> | loop_statement </TT>

<BR><TT> | wait_statement </TT>

<BR><TT> | disable_statement </TT>

<BR><TT> | event_trigger </TT>

<BR><TT> | seq_block </TT>

<BR><TT> | par_block </TT>

<BR><TT> | task_enable </TT>

<BR><TT> | system_task_enable </TT>

<BR><TT> </TT>

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

<BR><TT><FONT COLOR=#0000FF>1995>blocking <A NAME="assignment"></A>assignment ::= reg_lvalue <B>=</B> [ delay_or_event_control ] expression </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995>non-blocking <A NAME="assignment"></A>assignment ::= reg_lvalue <B><=</B> [ delay_or_event_control ] expression </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE41><A NAME="blocking_assignment"></A>blocking_assignment ::= reg_lvalue <B>=</B> [ delay_or_event_control ] expression </FONT></TT>

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

<BR><TT><A NAME="procedural_continuous_assignments"></A>procedural_continuous_assignments ::= </TT>

<BR><TT><FONT COLOR=#0000FF>1995> | <B>assign</B> reg_assignment <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"></A>procedural_timing_control_statement ::= </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"></A>combinational_statement ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B08> combinational_blocking_assignment <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B08> | combinational_non_blocking_assignment <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B08> | combinational_procedural_timing_control_statement </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B08> | combinational_conditional_statement </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B08> | combinational_case_statement </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B08> | combinational_loop_statement </FONT></TT>

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

<BR><TT><FONT COLOR=#FF0000>1998 B08> | combinational_seq_block </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B08> | combinational_task_enable </FONT></TT>

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

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

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

<BR><TT><FONT COLOR=#FF0000>1998 B08><A NAME="combinational_procedural_timing_control_statement"></A>combinational_procedural_timing_control_statement ::= </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"></A>function_statement ::= </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE??> function_blocking_assignment <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE??> | function_non_blocking_assignment <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE??> | function_conditional_statement </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE??> | function_case_statement </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE??> | function_loop_statement </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"></A>function_blocking_assignment ::= reg_lvalue <B>=</B> expression </FONT></TT>

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

<BR><TT><FONT COLOR=#800080>1998 BE??><A NAME="function_statement_or_null"></A>function_statement_or_null ::= function_statement | <B>;</B> </FONT></TT>

<BR><TT><A NAME="delay_or_event_control"></A>delay_or_event_control ::= </TT>

<BR><TT> delay_control </TT>

<BR><TT> | event_control </TT>

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

<BR><TT><A NAME="delay_control"></A>delay_control ::= </TT>

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

<BR><TT> | <B>#</B> <B>(</B> mintypmax_expression <B>)</B> </TT>

<BR><TT><A NAME="event_control"></A>event_control ::= </TT>

<BR><TT> <B>@</B> <I>event</I>_identifier </TT>

<BR><TT> | <B>@</B> <B>(</B> event_expression <B>)</B> </TT>

<BR><TT><A NAME="event_expression"></A>event_expression ::= </TT>

<BR><TT> expression </TT>

<BR><TT> | <I>event</I>_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"></A>conditional_statement ::= </TT>

<BR><TT><FONT COLOR=#0000FF>1995> | <B>if</B> <B>(</B> expression <B>)</B> statement_or_null [ else statement_or_null ] </FONT></TT>

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

<BR><TT><A NAME="case_statement"></A>case_statement ::= </TT>

<BR><TT><FONT COLOR=#0000FF>1995> | <B>case</B> <B>(</B> expression <B>)</B> case_item [ 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"></A>case_item ::= </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"></A>loop_statement ::= </TT>

<BR><TT><FONT COLOR=#0000FF>1995> | forever statement </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE10> forever 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"></A>combinational_conditional_statement ::= </FONT></TT>

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

<BR><TT><FONT COLOR=#FF0000>1998 B08><A NAME="combinational_case_statement"></A>combinational_case_statement ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B08> <B>case</B> <B>(</B> expression <B>)</B> case_item [ combinational_case_item ] <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"></A>combinational_case_item ::= </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"></A>combinational_loop_statement ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B08> forever 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"></A>combinational_seq_block ::= <B>begin</B> [ <B>:</B> <I>block</I>_identifier { block_item_declaration } ] { combinational_statement } <B>end</B> </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B08><A NAME="combinational_task_enable"></A>combinational_task_enable ::= 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"></A>function_conditional_statement ::= </FONT></TT>

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

<BR><TT><FONT COLOR=#800080>1998 BE??><A NAME="function_case_statement"></A>function_case_statement ::= </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE??> <B>case</B> <B>(</B> expression <B>)</B> case_item [ function_case_item ] <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"></A>function_case_item ::= </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"></A>function_loop_statement ::= </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE??> forever 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"></A>function_seq_block ::= <B>begin</B> [ <B>:</B> <I>block</I>_identifier { block_item_declaration } ] { function_statement } <B>end</B> </FONT></TT>

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

<BR><TT><A NAME="wait_statement"></A>wait_statement ::= </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"></A>event_trigger ::= </TT>

<BR><TT><FONT COLOR=#0000FF>1995> | -> <I>event</I>_identifier <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE41> -> <I>event</I>_identifier <B>;</B> </FONT></TT>

<BR><TT><A NAME="disable_statement"></A>disable_statement ::= </TT>

<BR><TT><FONT COLOR=#0000FF>1995> | <B>disable</B> <I>task</I>_identifier <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE41> <B>disable</B> <I>task</I>_identifier <B>;</B> </FONT></TT>

<BR><TT> | <B>disable</B> <I>block</I>_identifier <B>;</B> </TT>

<BR><TT><A NAME="seq_block"></A>seq_block ::= <B>begin</B> [ <B>:</B> <I>block</I>_identifier { block_item_declaration } ] { statement } <B>end</B> </TT>

<BR><TT><A NAME="par_block"></A>par_block ::= <B>fork</B> [ <B>:</B> <I>block</I>_identifier { block_item_declaration } ] { statement } <B>join</B> </TT>

<BR><TT><A NAME="task_enable"></A>task_enable ::= <I>task</I>_identifier [ <B>(</B> expression { <B>,</B> expression } <B>)</B> ] <B>;</B> </TT>

<BR><TT><FONT COLOR=#0000FF>1995><A NAME="system_task_enable"></A>system_task_enable ::= system_task_name [ <B>(</B> expression { <B>,</B> expression } <B>)</B> ] <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995><A NAME="system_task_name"></A>system_task_name ::= $identifier 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"></A>system_task_enable ::= system_task_function_name [ <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"></A>specify_block ::= <B>specify</B> { specify_item } <B>endspecify</B> <B>;</B> </TT>

<BR><TT><A NAME="specify_item"></A>specify_item ::= </TT>

<BR><TT> specparam_declaration </TT>

<BR><TT> | path_declaration </TT>

<BR><TT> | system_timing_check </TT>

<BR><TT><A NAME="specparam_declaration"></A>specparam_declaration ::= <B>specparam</B> list_of_specparam_assignments <B>;</B> </TT>

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

<BR><TT><A NAME="specparam_assignment"></A>specparam_assignment ::= </TT>

<BR><TT><FONT COLOR=#0000FF>1995> <I>specparam</I>_identifier <B>=</B> constant_expression </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE29> <I>specparam</I>_identifier <B>=</B> constant_mintypmax_expression </FONT></TT>

<BR><TT> | pulse_control_specparam </TT>

<BR><TT><A NAME="pulse_control_specparam"></A>pulse_control_specparam ::= </TT>

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

<BR><TT> | PATHPULSE$specify_input_terminal_descriptor$specify_output_terminal_descriptor </TT>

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

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

<BR><TT><A NAME="path_declaration"></A>path_declaration ::= </TT>

<BR><TT> simple_path_declaration <B>;</B> </TT>

<BR><TT> | edge_sensitive_path_declaration <B>;</B> </TT>

<BR><TT><FONT COLOR=#0000FF>1995> | state-dependent_path_declaration <B>;</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE41> | state_dependent_path_declaration <B>;</B> </FONT></TT>

<BR><TT><A NAME="simple_path_declaration"></A>simple_path_declaration ::= </TT>

<BR><TT> parallel_path_description <B>=</B> path_delay_value </TT>

<BR><TT> | full_path_description <B>=</B> path_delay_value </TT>

<BR><TT><A NAME="parallel_path_description"></A>parallel_path_description ::= </TT>

<BR><TT> ( specify_input_terminal_descriptor [ polarity_operator ] => specify_output_terminal_descriptor <B>)</B> </TT>

<BR><TT>full_path_description </TT>

<BR><TT> ( list_of_path_inputs [ polarity_operator ] *> list_of_path_outputs <B>)</B> </TT>

<BR><TT><A NAME="list_of_path_inputs"></A>list_of_path_inputs ::= </TT>

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

<BR><TT><A NAME="list_of_path_outputs"></A>list_of_path_outputs ::= </TT>

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

<BR><TT><A NAME="specify_input_terminal_descriptor"></A>specify_input_terminal_descriptor ::= </TT>

<BR><TT> <I>input</I>_identifier </TT>

<BR><TT> | <I>input</I>_identifier [ constant_expression ] </TT>

<BR><TT> | <I>input</I>_identifier [ msb_constant_expression <B>:</B> lsb_constant_expression ] </TT>

<BR><TT><A NAME="specify_output_terminal_descriptor"></A>specify_output_terminal_descriptor ::= </TT>

<BR><TT> <I>output</I>_identifier </TT>

<BR><TT> | <I>output</I>_identifier [ constant_expression ] </TT>

<BR><TT> | <I>output</I>_identifier [ msb_constant_expression <B>:</B> lsb_constant_expression ] </TT>

<BR><TT><A NAME="input_identifier"></A>input_identifier ::= input_port_identifier | inout_port_identifier </TT>

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

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

<BR><TT><A NAME="path_delay_value"></A>path_delay_value ::= </TT>

<BR><TT> list_of_path_delay_expressions </TT>

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

<BR><TT><A NAME="list_of_path_delay_expressions"></A>list_of_path_delay_expressions ::= </TT>

<BR><TT> t_path_delay_expression </TT>

<BR><TT> | trise_path_delay_expression <B>,</B> tfall_path_delay_expression </TT>

<BR><TT> | trise_path_delay_expression <B>,</B> tfall_path_delay_expression <B>,</B> tz_path_delay_expression </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> | 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> t0x_path_delay_expression <B>,</B> tx1_path_delay_expression <B>,</B> t1x_path_delay_expression <B>,</B> </TT>

<BR><TT> tx0_path_delay_expression <B>,</B> txz_path_delay_expression <B>,</B> tzx_path_delay_expression </TT>

<BR><TT><A NAME="path_delay_expression"></A>path_delay_expression ::= constant_mintypmax_expression </TT>

<BR><TT><A NAME="edge_sensitive_path_declaration"></A>edge_sensitive_path_declaration ::= </TT>

<BR><TT> parallel_edge_sensitive_path_description <B>=</B> path_delay_value </TT>

<BR><TT> | full_edge_sensitive_path_description <B>=</B> path_delay_value </TT>

<BR><TT><A NAME="parallel_edge_sensitive_path_description"></A>parallel_edge_sensitive_path_description ::= </TT>

<BR><TT> <B>(</B> [ <I>edge</I>_identifier ] specify_input_terminal_descriptor => </TT>

<BR><TT><FONT COLOR=#0000FF>1995> specify_output_terminal_descriptor [ polarity_operator ] <B>:</B> data_source_expression <B>)</B> ) </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE??> specify_output_terminal_descriptor [ polarity_operator ] <B>:</B> data_source_expression <B>)</B> </FONT></TT>

<BR><TT><A NAME="full_edge_sensitive_path_description"></A>full_edge_sensitive_path_description ::= </TT>

<BR><TT> <B>(</B> [ <I>edge</I>_identifier ] list_of_path_inputs *> </TT>

<BR><TT><FONT COLOR=#0000FF>1995> list_of_path_inputs [ polarity_operator ] <B>:</B> data_source_expression <B>)</B> ) </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE??> list_of_path_inputs [ polarity_operator ] <B>:</B> data_source_expression <B>)</B> </FONT></TT>

<BR><TT><A NAME="data_source_expression"></A>data_source_expression ::= expression </TT>

<BR><TT><A NAME="edge_identifier"></A>edge_identifier ::= <B>posedge</B> | <B>negedge</B> </TT>

<BR><TT><A NAME="state_dependent_path_declaration"></A>state_dependent_path_declaration ::= </TT>

<BR><TT> <B>if</B> <B>(</B> conditional_expression <B>)</B> simple_path_declaration </TT>

<BR><TT> | <B>if</B> <B>(</B> conditional_expression <B>)</B> edge_sensitive_path_declaration </TT>

<BR><TT> | <B>ifnone</B> simple_path_declaration </TT>

<BR><TT> </TT>

<BR><TT><A NAME="system_timing_check"></A>system_timing_check ::= </TT>

<BR><TT> $setup <B>(</B> timing_check_event <B>,</B> timing_check_event <B>,</B> timing_check_limit [ <B>,</B> notify_register ] <B>)</B> ; </TT>

<BR><TT> | $hold <B>(</B> timing_check_event <B>,</B> timing_check_event <B>,</B> timing_check_limit [ <B>,</B> notify_register ] <B>)</B> ; </TT>

<BR><TT> | $period <B>(</B> controlled_timing_check_event <B>,</B> timing_check_limit [ <B>,</B> notify_register ] <B>)</B> ; </TT>

<BR><TT> | $width <B>(</B> controlled_timing_check_event <B>,</B> timing_check_limit <B>,</B> </TT>

<BR><TT> constant_expression [ <B>,</B> notify_register ] <B>)</B> ; </TT>

<BR><TT> | $skew <B>(</B> timing_check_event <B>,</B> timing_check_event <B>,</B> timing_check_limit [ <B>,</B> notify_register ] <B>)</B> ; </TT>

<BR><TT> | $recovery <B>(</B> controlled_timing_check_event <B>,</B> timing_check_event <B>,</B> </TT>

<BR><TT> timing_check_limit [ <B>,</B> notify_register ] <B>)</B> ; </TT>

<BR><TT> | $setuphold <B>(</B> timing_check_event <B>,</B> timing_check_event <B>,</B> timing_check_limit <B>,</B> </TT>

<BR><TT> timing_check_limit [ <B>,</B> notify_register ] <B>)</B> ; </TT>

<BR><TT><FONT COLOR=#800080>1998 BE02> | $nochange <B>(</B> reference_event <B>,</B> data_event <B>,</B> start_edge_offset <B>,</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE02> end_edge_offset [ <B>,</B> notify_register ] <B>)</B> ; </FONT></TT>

<BR><TT><A NAME="timing_check_event"></A>timing_check_event ::= </TT>

<BR><TT> [timing_check_event_control] specify_terminal_descriptor [ &&& timing_check_condition ] </TT>

<BR><TT><A NAME="specify_terminal_descriptor"></A>specify_terminal_descriptor ::= </TT>

<BR><TT> specify_input_terminal_descriptor </TT>

<BR><TT> | specify_output_terminal_descriptor </TT>

<BR><TT><A NAME="controlled_timing_check_event"></A>controlled_timing_check_event ::= </TT>

<BR><TT> timing_check_event_control specify_terminal_descriptor [ &&& timing_check_condition ] </TT>

<BR><TT><A NAME="timing_check_event_control"></A>timing_check_event_control ::= </TT>

<BR><TT> <B>posedge</B> </TT>

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

<BR><TT> | edge_control_specifier </TT>

<BR><TT><A NAME="edge_control_specifier"></A>edge_control_specifier ::= <B>edge</B> [ edge_descriptor [ <B>,</B> edge_descriptor ] ] </TT>

<BR><TT><FONT COLOR=#0000FF>1995><A NAME="edge_descriptor"></A>edge_descriptor ::= </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> <B>01</B> </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> | <B>10</B> </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> | <B>0x</B> </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> | <B>x1</B> </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> | <B>1x</B> </FONT></TT>

<BR><TT><FONT COLOR=#0000FF>1995> | <B>x0</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE27><A NAME="edge_descriptor1"></A>edge_descriptor1 ::= </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE27> <B>01</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE27> | <B>10</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE27> | z_or_x zero_or_one </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE27> | zero_or_one z_or_x </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE27><A NAME="zero_or_one"></A>zero_or_one ::= <B>0</B> | <B>1</B> </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE27><A NAME="z_or_x"></A>z_or_x ::= <B>x</B> | <B>X</B> | <B>z</B> | <B>Z</B> </FONT></TT>

<BR><TT> </TT>

<BR><TT><A NAME="timing_check_condition"></A>timing_check_condition ::= </TT>

<BR><TT> scalar_timing_check_condition </TT>

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

<BR><TT><A NAME="scalar_timing_check_condition"></A>scalar_timing_check_condition ::= </TT>

<BR><TT> expression </TT>

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

<BR><TT> | expression <B>==</B> scalar_constant </TT>

<BR><TT> | expression <B>===</B> scalar_constant </TT>

<BR><TT> | expression <B>!=</B> scalar_constant </TT>

<BR><TT><FONT COLOR=#800080>1998 BE07> | expression <B>!==</B> scalar_constant </FONT></TT>

<BR><TT><A NAME="timing_check_limit"></A>timing_check_limit ::= expression </TT>

<BR><TT><A NAME="scalar_constant"></A>scalar_constant ::= </TT>

<BR><TT> <B>1'b0</B> | <B>1'b1</B> | <B>1'B0</B> | <B>1'B1</B> | <B>'b0</B> | <B>'b1</B> | <B>'B0</B> | <B>'B1</B> | <B>1</B> | <B>0</B> </TT>

<BR><TT><A NAME="notify_register"></A>notify_register ::= <I>register</I>_identifier </TT>

<BR><TT> </TT>

<BR><TT><FONT COLOR=#800080>1998 BE27>NOTES </FONT></TT>

<BR><TT><FONT COLOR=#800080>1998 BE27>1- Embedded spaces are illegal </FONT></TT>

<BR><TT> </TT>

<BR><TT><FONT SIZE=4><B>A.8 Expressions </B></FONT></TT>

<BR><TT> </TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01><A NAME="genvar_expression"></A>genvar_expression ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> genvar_primary </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | unary_operator genvar_primary </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | genvar_expression binary_operator genvar_expression </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | genvar_expression <B>?</B> genvar_expression <B>:</B> genvar_expression </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | string </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01><A NAME="genvar_primary"></A>genvar_primary ::= </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> constant_primary </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | <I>genvar</I>_identifier </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | <I>genvar</I>_identifier [ genvar_expression ] </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | <I>genvar</I>_identifier [ msb_constant_expression <B>:</B> lsb_constant_expression ] </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | genvar_concatenation | genvar_multiple_concatenation </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01> | genvar_function_call </FONT></TT>

<BR><TT><FONT COLOR=#FF0000>1998 B01><A NAME="genvar_function_call"></A>genvar_function_call ::= genvar_function_identifier <B>(</B> genvar_expression { <B>,</B> genvar_expression } <B>)</B> </FONT></TT>

<BR><TT> </TT>

<BR><TT><A NAME="net_lvalue"></A>net_lvalue ::= </TT>

<