From: Adam Krolnik (krolnik@lsil.com)
Date: Fri Aug 17 2001 - 15:32:47 PDT
Thanks Stefen and Stuart;
<p>Enjoy all;
If you see poor formatting or cuts in the words, I missed fixing the
formatting that the mailers put in.
<p> Adam Krolnik
Verification Mgr.
LSI Logic Corp.
Plano TX. 75074
<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">
<TT> Annex <B>A</B> Copyright 2000 IEEE. All rights reserved. 775 </TT>
<TT> This is an unapproved IEEE Standards Draft, subject to change. </TT>
<TT> A.1 Source text </TT>
<TT> A.1.1 Library source text </TT>
<TT><A NAME="library_text">library_text</A> ::= { <A NAME="Rlibrary_descriptions" HREF="#library_descriptions">library_descriptions</A> } </TT>
<TT><A NAME="library_descriptions" HREF="#Rlibrary_descriptions">library_descriptions</A> ::= </TT>
<TT> <A NAME="Rlibrary_declaration" HREF="#library_declaration">library_declaration</A> </TT>
<TT> | <A NAME="Rinclude_statement" HREF="#include_statement">include_statement</A> </TT>
<TT> | <A NAME="Rconfig_declaration" HREF="#config_declaration">config_declaration</A> </TT>
<TT><A NAME="library_declaration" HREF="#Rlibrary_declaration">library_declaration</A> ::= </TT>
<TT> <B>library</B> <A NAME="Rlibrary_identifier" HREF="#library_identifier">library_identifier</A> <A NAME="Rfile_path_spec" HREF="#file_path_spec">file_path_spec</A> [ { <B>,</B> file_path_spec } ] </TT>
<TT> [ <B>-incdir</B> file_path_spec [ { <B>,</B> file_path_spec } ] <B>;</B> </TT>
<TT><A NAME="file_path_spec" HREF="#Rfile_path_spec">file_path_spec</A> ::= file_path </TT>
<TT><A NAME="include_statement" HREF="#Rinclude_statement">include_statement</A> ::= <B>include</B> <file_path_spec> <B>;</B> </TT>
<TT> A.1.2 Configuration source text </TT>
<TT> <A NAME="config_declaration" HREF="#Rconfig_declaration">config_declaration</A> ::= </TT>
<TT> <B>config</B> <A NAME="Rconfig_identifier" HREF="#config_identifier">config_identifier</A> <B>;</B> </TT>
<TT> <A NAME="Rdesign_statement" HREF="#design_statement">design_statement</A> </TT>
<TT> {<A NAME="Rconfig_rule_statement" HREF="#config_rule_statement">config_rule_statement</A>} </TT>
<TT> <B>endconfig</B> </TT>
<TT><A NAME="design_statement" HREF="#Rdesign_statement">design_statement</A> ::= <B>design</B> { [library_identifier.]<A NAME="Rcell_identifier" HREF="#cell_identifier">cell_identifier</A> } <B>;</B> </TT>
<TT><A NAME="config_rule_statement" HREF="#Rconfig_rule_statement">config_rule_statement</A> ::= </TT>
<TT> <A NAME="Rdefault_clause" HREF="#default_clause">default_clause</A> <A NAME="Rliblist_clause" HREF="#liblist_clause">liblist_clause</A> </TT>
<TT> | <A NAME="Rinst_clause" HREF="#inst_clause">inst_clause</A> liblist_clause </TT>
<TT> | inst_clause <A NAME="Ruse_clause" HREF="#use_clause">use_clause</A> </TT>
<TT> | <A NAME="Rcell_clause" HREF="#cell_clause">cell_clause</A> liblist_clause </TT>
<TT> | cell_clause use_clause </TT>
<TT><A NAME="default_clause" HREF="#Rdefault_clause">default_clause</A> ::= <B>default</B> </TT>
<TT><A NAME="inst_clause" HREF="#Rinst_clause">inst_clause</A> ::= <B>instance</B> <A NAME="Rinst_name" HREF="#inst_name">inst_name</A> </TT>
<TT><A NAME="inst_name" HREF="#Rinst_name">inst_name</A> ::= <A NAME="Rtopmodule_identifier" HREF="#topmodule_identifier">topmodule_identifier</A>{.<A NAME="Rinstance_identifier" HREF="#instance_identifier">instance_identifier</A>} </TT>
<TT><A NAME="cell_clause" HREF="#Rcell_clause">cell_clause</A> ::= <B>cell</B> [ library_identifier.]cell_identifier </TT>
<TT><A NAME="liblist_clause" HREF="#Rliblist_clause">liblist_clause</A> ::= <B>liblist</B> [{library_identifier}] </TT>
<TT><A NAME="use_clause" HREF="#Ruse_clause">use_clause</A> ::= <B>use</B> [library_identifier.]cell_identifier[:config] </TT>
<TT> A.1.3 Module <B>and</B> <B>primitive</B> source text </TT>
<TT> <A NAME="source_text">source_text</A> ::= { <A NAME="Rdescription" HREF="#description">description</A> } </TT>
<TT><A NAME="description" HREF="#Rdescription">description</A> ::= </TT>
<TT> <A NAME="Rmodule_declaration" HREF="#module_declaration">module_declaration</A> </TT>
<TT> | <A NAME="Rudp_declaration" HREF="#udp_declaration">udp_declaration</A> </TT>
<TT><A NAME="module_declaration" HREF="#Rmodule_declaration">module_declaration</A> ::= </TT>
<TT> { <A NAME="Rattribute_instance" HREF="#attribute_instance">attribute_instance</A> } <A NAME="Rmodule_keyword" HREF="#module_keyword">module_keyword</A> <A NAME="Rmodule_identifier" HREF="#module_identifier">module_identifier</A> [ </TT>
<TT> <A NAME="Rmodule_parameter_port_list" HREF="#module_parameter_port_list">module_parameter_port_list</A> ] </TT>
<TT> [ <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> } </TT>
<TT> <B>endmodule</B> </TT>
<TT> | { attribute_instance } module_keyword module_identifier [ </TT>
<TT> module_parameter_port_list ] </TT>
<TT> [ <A NAME="Rlist_of_port_declarations" HREF="#list_of_port_declarations">list_of_port_declarations</A> ] <B>;</B> { <A NAME="Rnon_port_module_item" HREF="#non_port_module_item">non_port_module_item</A> } </TT>
<TT> <B>endmodule</B> </TT>
<TT><A NAME="module_keyword" HREF="#Rmodule_keyword">module_keyword</A> ::= <B>module</B> | <B>macromodule</B> </TT>
<TT> A.1.4 Module parameters <B>and</B> ports </TT>
<TT> <A NAME="module_parameter_port_list" HREF="#Rmodule_parameter_port_list">module_parameter_port_list</A> ::= <B>#</B> <B>(</B> <A NAME="Rparameter_declaration" HREF="#parameter_declaration">parameter_declaration</A> { <B>,</B> </TT>
<TT> parameter_declaration } <B>)</B> </TT>
<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>
<TT><A NAME="list_of_port_declarations" HREF="#Rlist_of_port_declarations">list_of_port_declarations</A> ::= </TT>
<TT> <B>(</B> <A NAME="Rport_declaration" HREF="#port_declaration">port_declaration</A> { <B>,</B> port_declaration } <B>)</B> </TT>
<TT> | <B>(</B> ) </TT>
<TT><A NAME="port" HREF="#Rport">port</A> ::= </TT>
<TT> [ <A NAME="Rport_expression" HREF="#port_expression">port_expression</A> ] </TT>
<TT> | . <A NAME="Rport_identifier" HREF="#port_identifier">port_identifier</A> <B>(</B> [ port_expression ] <B>)</B> </TT>
<TT><A NAME="port_expression" HREF="#Rport_expression">port_expression</A> ::= </TT>
<TT> <A NAME="Rport_reference" HREF="#port_reference">port_reference</A> </TT>
<TT> | { port_reference { <B>,</B> port_reference } } </TT>
<TT><A NAME="port_reference" HREF="#Rport_reference">port_reference</A> ::= </TT>
<TT> port_identifier </TT>
<TT> | port_identifier [ <A NAME="Rconstant_expression" HREF="#constant_expression">constant_expression</A> ] </TT>
<TT> | port_identifier [ <A NAME="Rrange_expression" HREF="#range_expression">range_expression</A> ] </TT>
<TT><A NAME="port_declaration" HREF="#Rport_declaration">port_declaration</A> ::= </TT>
<TT> {attribute_instance} <A NAME="Rinout_declaration" HREF="#inout_declaration">inout_declaration</A> </TT>
<TT> | {attribute_instance} <A NAME="Rinput_declaration" HREF="#input_declaration">input_declaration</A> </TT>
<TT> | {attribute_instance} <A NAME="Routput_declaration" HREF="#output_declaration">output_declaration</A> </TT>
<TT> A.1.5 Module items </TT>
<TT> <A NAME="module_item" HREF="#Rmodule_item">module_item</A> ::= </TT>
<TT> <A NAME="Rmodule_or_generate_item" HREF="#module_or_generate_item">module_or_generate_item</A> </TT>
<TT> | port_declaration <B>;</B> </TT>
<TT> | { attribute_instance } <A NAME="Rgenerated_instantiation" HREF="#generated_instantiation">generated_instantiation</A> </TT>
<TT> | { attribute_instance } <A NAME="Rlocal_parameter_declaration" HREF="#local_parameter_declaration">local_parameter_declaration</A> </TT>
<TT> | { attribute_instance } parameter_declaration </TT>
<TT> | { attribute_instance } <A NAME="Rspecify_block" HREF="#specify_block">specify_block</A> </TT>
<TT> | { attribute_instance } <A NAME="Rspecparam_declaration" HREF="#specparam_declaration">specparam_declaration</A> </TT>
<TT> <A NAME="module_or_generate_item" HREF="#Rmodule_or_generate_item">module_or_generate_item</A> ::= </TT>
<TT> { attribute_instance } <A NAME="Rmodule_or_generate_item_declaration" HREF="#module_or_generate_item_declaration">module_or_generate_item_declaration</A> </TT>
<TT> | { attribute_instance } <A NAME="Rparameter_override" HREF="#parameter_override">parameter_override</A> </TT>
<TT> | { attribute_instance } <A NAME="Rcontinuous_assign" HREF="#continuous_assign">continuous_assign</A> </TT>
<TT> | { attribute_instance } <A NAME="Rgate_instantiation" HREF="#gate_instantiation">gate_instantiation</A> </TT>
<TT> | { attribute_instance } <A NAME="Rudp_instantiation" HREF="#udp_instantiation">udp_instantiation</A> </TT>
<TT> | { attribute_instance } <A NAME="Rmodule_instantiation" HREF="#module_instantiation">module_instantiation</A> </TT>
<TT> | { attribute_instance } <A NAME="Rinitial_construct" HREF="#initial_construct">initial_construct</A> </TT>
<TT> | { attribute_instance } <A NAME="Ralways_construct" HREF="#always_construct">always_construct</A> </TT>
<TT><A NAME="module_or_generate_item_declaration" HREF="#Rmodule_or_generate_item_declaration">module_or_generate_item_declaration</A> ::= </TT>
<TT> <A NAME="Rnet_declaration" HREF="#net_declaration">net_declaration</A> </TT>
<TT> | <A NAME="Rreg_declaration" HREF="#reg_declaration">reg_declaration</A> </TT>
<TT> | <A NAME="Rinteger_declaration" HREF="#integer_declaration">integer_declaration</A> </TT>
<TT> | <A NAME="Rreal_declaration" HREF="#real_declaration">real_declaration</A> </TT>
<TT> | <A NAME="Rtime_declaration" HREF="#time_declaration">time_declaration</A> </TT>
<TT> | <A NAME="Rrealtime_declaration" HREF="#realtime_declaration">realtime_declaration</A> </TT>
<TT> | <A NAME="Revent_declaration" HREF="#event_declaration">event_declaration</A> </TT>
<TT> | <A NAME="Rgenvar_declaration" HREF="#genvar_declaration">genvar_declaration</A> </TT>
<TT> | <A NAME="Rtask_declaration" HREF="#task_declaration">task_declaration</A> </TT>
<TT> | <A NAME="Rfunction_declaration" HREF="#function_declaration">function_declaration</A> </TT>
<TT><A NAME="non_port_module_item" HREF="#Rnon_port_module_item">non_port_module_item</A> ::= </TT>
<TT> { attribute_instance } generated_instantiation </TT>
<TT> | { attribute_instance } local_parameter_declaration </TT>
<TT> | { attribute_instance } module_or_generate_item </TT>
<TT> | { attribute_instance } parameter_declaration </TT>
<TT> | { attribute_instance } specify_block </TT>
<TT> | { attribute_instance } specparam_declaration </TT>
<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>
<TT> A.2 Declarations </TT>
<TT> A.2.1 Declaration types </TT>
<TT> A.2.1.1 Module <B>parameter</B> declarations </TT>
<TT> <A NAME="local_parameter_declaration" HREF="#Rlocal_parameter_declaration">local_parameter_declaration</A> ::= </TT>
<TT> <B>localparam</B> [ <B>signed</B> ] <B>[</B> <A NAME="Rrange" HREF="#range">range</A> <B>]</B> list_of_param_assignments <B>;</B> </TT>
<TT> | <B>localparam</B> <B>integer</B> list_of_param_assignments <B>;</B> </TT>
<TT> | <B>localparam</B> <B>real</B> list_of_param_assignments <B>;</B> </TT>
<TT> | <B>localparam</B> <B>realtime</B> list_of_param_assignments <B>;</B> </TT>
<TT> | <B>localparam</B> <B>time</B> list_of_param_assignments <B>;</B> </TT>
<TT><A NAME="parameter_declaration" HREF="#Rparameter_declaration">parameter_declaration</A> ::= </TT>
<TT> <B>parameter</B> [ <B>signed</B> ] <B>[</B> range <B>]</B> list_of_param_assignments <B>;</B> </TT>
<TT> | <B>parameter</B> <B>integer</B> list_of_param_assignments <B>;</B> </TT>
<TT> | <B>parameter</B> <B>real</B> list_of_param_assignments <B>;</B> </TT>
<TT> | <B>parameter</B> <B>realtime</B> list_of_param_assignments <B>;</B> </TT>
<TT> | <B>parameter</B> <B>time</B> list_of_param_assignments <B>;</B> </TT>
<TT><A NAME="specparam_declaration" HREF="#Rspecparam_declaration">specparam_declaration</A> ::= <B>specparam</B> <B>[</B> range <B>]</B> <A NAME="Rlist_of_specparam_assignments" HREF="#list_of_specparam_assignments">list_of_specparam_assignments</A> </TT>
<TT> A.2.1.2 Port declarations </TT>
<TT> <A NAME="inout_declaration" HREF="#Rinout_declaration">inout_declaration</A> ::= <B>inout</B> [ <A NAME="Rnet_type" HREF="#net_type">net_type</A> ] [ <B>signed</B> ] <B>[</B> range <B>]</B> </TT>
<TT> <A NAME="Rlist_of_port_identifiers" HREF="#list_of_port_identifiers">list_of_port_identifiers</A> </TT>
<TT><A NAME="input_declaration" HREF="#Rinput_declaration">input_declaration</A> ::= <B>input</B> [ net_type ] [ <B>signed</B> ] <B>[</B> range <B>]</B> </TT>
<TT> list_of_port_identifiers </TT>
<TT><A NAME="output_declaration" HREF="#Routput_declaration">output_declaration</A> ::= </TT>
<TT> <B>output</B> [ net_type ] [ <B>signed</B> ] <B>[</B> range <B>]</B> </TT>
<TT> list_of_port_identifiers </TT>
<TT> | <B>output</B> [ <B>reg</B> ] [ <B>signed</B> ] <B>[</B> range <B>]</B> </TT>
<TT> list_of_port_identifiers </TT>
<TT> | <B>output</B> <B>reg</B> [ <B>signed</B> ] <B>[</B> range <B>]</B> </TT>
<TT> <A NAME="Rlist_of_variable_port_identifiers" HREF="#list_of_variable_port_identifiers">list_of_variable_port_identifiers</A> </TT>
<TT> | <B>output</B> [ <A NAME="Routput_variable_type" HREF="#output_variable_type">output_variable_type</A> ] </TT>
<TT> list_of_port_identifiers </TT>
<TT> | <B>output</B> output_variable_type </TT>
<TT> list_of_variable_port_identifiers </TT>
<TT> A.2.1.3 Type declarations </TT>
<TT> <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> </TT>
<TT><A NAME="genvar_declaration" HREF="#Rgenvar_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> </TT>
<TT><A NAME="integer_declaration" HREF="#Rinteger_declaration">integer_declaration</A> ::= <B>integer</B> <A NAME="Rlist_of_variable_identifiers" HREF="#list_of_variable_identifiers">list_of_variable_identifiers</A> <B>;</B> </TT>
<TT><A NAME="net_declaration" HREF="#Rnet_declaration">net_declaration</A> ::= </TT>
<TT> net_type [ <B>signed</B> ] </TT>
<TT> [ <A NAME="Rdelay3" HREF="#delay3">delay3</A> ] <A NAME="Rlist_of_net_identifiers" HREF="#list_of_net_identifiers">list_of_net_identifiers</A> <B>;</B> </TT>
<TT> | net_type [ <A NAME="Rdrive_strength" HREF="#drive_strength">drive_strength</A> ] [ <B>signed</B> ] </TT>
<TT> [ delay3 ] <A NAME="Rlist_of_net_decl_assignments" HREF="#list_of_net_decl_assignments">list_of_net_decl_assignments</A> <B>;</B> </TT>
<TT> | net_type [ <B>vectored</B> | <B>scalared</B> ] [ <B>signed</B> ] </TT>
<TT> range [ delay3 ] list_of_net_identifiers <B>;</B> </TT>
<TT> | net_type [ drive_strength ] [ <B>vectored</B> | <B>scalared</B> ] [ <B>signed</B> ] </TT>
<TT> range [ delay3 ] list_of_net_decl_assignments <B>;</B> </TT>
<TT> | <B>trireg</B> [ <A NAME="Rcharge_strength" HREF="#charge_strength">charge_strength</A> ] [ <B>signed</B> ] </TT>
<TT> [ delay3 ] list_of_net_identifiers <B>;</B> </TT>
<TT> | <B>trireg</B> [ drive_strength ] [ <B>signed</B> ] </TT>
<TT> [ delay3 ] list_of_net_decl_assignments <B>;</B> </TT>
<TT> | <B>trireg</B> [ charge_strength ] [ <B>vectored</B> | <B>scalared</B> ] [ <B>signed</B> ] </TT>
<TT> range [ delay3 ] list_of_net_identifiers <B>;</B> </TT>
<TT> | <B>trireg</B> [ drive_strength ] [ <B>vectored</B> | <B>scalared</B> ] [ <B>signed</B> ] </TT>
<TT> range [ delay3 ] list_of_net_decl_assignments <B>;</B> </TT>
<TT><A NAME="real_declaration" HREF="#Rreal_declaration">real_declaration</A> ::= <B>real</B> <A NAME="Rlist_of_real_identifiers" HREF="#list_of_real_identifiers">list_of_real_identifiers</A> <B>;</B> </TT>
<TT><A NAME="realtime_declaration" HREF="#Rrealtime_declaration">realtime_declaration</A> ::= <B>realtime</B> list_of_real_identifiers <B>;</B> </TT>
<TT><A NAME="reg_declaration" HREF="#Rreg_declaration">reg_declaration</A> ::= <B>reg</B> [ <B>signed</B> ] <B>[</B> range <B>]</B> </TT>
<TT> list_of_variable_identifiers <B>;</B> </TT>
<TT><A NAME="time_declaration" HREF="#Rtime_declaration">time_declaration</A> ::= <B>time</B> list_of_variable_identifiers <B>;</B> </TT>
<TT> A.2.2 Declaration data types </TT>
<TT> A.2.2.1 Net <B>and</B> variable types </TT>
<TT> <A NAME="net_type" HREF="#Rnet_type">net_type</A> ::= </TT>
<TT> <B>supply0</B> | <B>supply1</B> </TT>
<TT> | <B>tri</B> | <B>triand</B> | <B>trior</B> | <B>tri0</B> | <B>tri1</B> </TT>
<TT> | <B>wire</B> | <B>wand</B> | <B>wor</B> </TT>
<TT><A NAME="output_variable_type" HREF="#Routput_variable_type">output_variable_type</A> ::= <B>integer</B> | <B>time</B> </TT>
<TT><A NAME="real_type" HREF="#Rreal_type">real_type</A> ::= </TT>
<TT> <A NAME="Rreal_identifier" HREF="#real_identifier">real_identifier</A> [ <B>=</B> constant_expression ] </TT>
<TT> | real_identifier <A NAME="Rdimension" HREF="#dimension">dimension</A> { dimension } </TT>
<TT><A NAME="variable_type" HREF="#Rvariable_type">variable_type</A> ::= </TT>
<TT> <A NAME="Rvariable_identifier" HREF="#variable_identifier">variable_identifier</A> [ <B>=</B> constant_expression ] </TT>
<TT> | variable_identifier dimension { dimension } </TT>
<TT> A.2.2.2 Strengths </TT>
<TT> <A NAME="drive_strength" HREF="#Rdrive_strength">drive_strength</A> ::= </TT>
<TT> <B>(</B> <A NAME="Rstrength0" HREF="#strength0">strength0</A> <B>,</B> <A NAME="Rstrength1" HREF="#strength1">strength1</A> <B>)</B> </TT>
<TT> | <B>(</B> strength1 <B>,</B> strength0 <B>)</B> </TT>
<TT> | <B>(</B> strength0 <B>,</B> <B>highz1</B> <B>)</B> </TT>
<TT> | <B>(</B> strength1 <B>,</B> <B>highz0</B> <B>)</B> </TT>
<TT> | <B>(</B> <B>highz0</B> <B>,</B> strength1 <B>)</B> </TT>
<TT> | <B>(</B> <B>highz1</B> <B>,</B> strength0 <B>)</B> </TT>
<TT><A NAME="strength0" HREF="#Rstrength0">strength0</A> ::= <B>supply0</B> | <B>strong0</B> | <B>pull0</B> | <B>weak0</B> </TT>
<TT><A NAME="strength1" HREF="#Rstrength1">strength1</A> ::= <B>supply1</B> | <B>strong1</B> | <B>pull1</B> | <B>weak1</B> </TT>
<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>
<TT> A.2.2.3 Delays </TT>
<TT> <A NAME="delay3" HREF="#Rdelay3">delay3</A> ::= <B>#</B> <A NAME="Rdelay_value" HREF="#delay_value">delay_value</A> | <B>#</B> <B>(</B> delay_value [ <B>,</B> delay_value [ <B>,</B> delay_value ] ] <B>)</B> </TT>
<TT><A NAME="delay2" HREF="#Rdelay2">delay2</A> ::= <B>#</B> delay_value | <B>#</B> <B>(</B> delay_value [ <B>,</B> delay_value ] <B>)</B> </TT>
<TT><A NAME="delay_value" HREF="#Rdelay_value">delay_value</A> ::= </TT>
<TT> unsigned_number </TT>
<TT> | <A NAME="Rparameter_identifier" HREF="#parameter_identifier">parameter_identifier</A> </TT>
<TT> | <A NAME="Rspecparam_identifier" HREF="#specparam_identifier">specparam_identifier</A> </TT>
<TT> | <A NAME="Rmintypmax_expression" HREF="#mintypmax_expression">mintypmax_expression</A> </TT>
<TT> A.2.3 Declaration lists </TT>
<TT> <A NAME="list_of_event_identifiers" HREF="#Rlist_of_event_identifiers">list_of_event_identifiers</A> ::= <A NAME="Revent_identifier" HREF="#event_identifier">event_identifier</A> [ dimension { dimension }] </TT>
<TT> { <B>,</B> event_identifier [ dimension { dimension }] } </TT>
<TT><A NAME="list_of_genvar_identifiers" HREF="#Rlist_of_genvar_identifiers">list_of_genvar_identifiers</A> ::= <A NAME="Rgenvar_identifier" HREF="#genvar_identifier">genvar_identifier</A> { <B>,</B> genvar_identifier } </TT>
<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>
<TT><A NAME="list_of_net_identifiers" HREF="#Rlist_of_net_identifiers">list_of_net_identifiers</A> ::= <A NAME="Rnet_identifier" HREF="#net_identifier">net_identifier</A> [ dimension { dimension }] </TT>
<TT> { <B>,</B> net_identifier [ dimension { dimension }] } </TT>
<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>
<TT><A NAME="list_of_port_identifiers" HREF="#Rlist_of_port_identifiers">list_of_port_identifiers</A> ::= port_identifier { <B>,</B> port_identifier } </TT>
<TT><A NAME="list_of_real_identifiers" HREF="#Rlist_of_real_identifiers">list_of_real_identifiers</A> ::= real_type { <B>,</B> real_type } </TT>
<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> </TT>
<TT> specparam_assignment } </TT>
<TT><A NAME="list_of_variable_identifiers" HREF="#Rlist_of_variable_identifiers">list_of_variable_identifiers</A> ::= variable_type { <B>,</B> variable_type } </TT>
<TT><A NAME="list_of_variable_port_identifiers" HREF="#Rlist_of_variable_port_identifiers">list_of_variable_port_identifiers</A> ::= port_identifier [ <B>=</B> constant_expression ] </TT>
<TT> { <B>,</B> port_identifier [ <B>=</B> constant_expression ] } </TT>
<TT> A.2.4 Declaration assignments </TT>
<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>
<TT><A NAME="param_assignment" HREF="#Rparam_assignment">param_assignment</A> ::= parameter_identifier <B>=</B> constant_expression </TT>
<TT><A NAME="specparam_assignment" HREF="#Rspecparam_assignment">specparam_assignment</A> ::= </TT>
<TT> specparam_identifier <B>=</B> <A NAME="Rconstant_mintypmax_expression" HREF="#constant_mintypmax_expression">constant_mintypmax_expression</A> </TT>
<TT> | <A NAME="Rpulse_control_specparam" HREF="#pulse_control_specparam">pulse_control_specparam</A> </TT>
<TT><A NAME="pulse_control_specparam" HREF="#Rpulse_control_specparam">pulse_control_specparam</A> ::= </TT>
<TT> <B>PATHPULSE$</B> <B>=</B> <B>(</B> <A NAME="Rreject_limit_value" HREF="#reject_limit_value">reject_limit_value</A> [ <B>,</B> <A NAME="Rerror_limit_value" HREF="#error_limit_value">error_limit_value</A> ] <B>)</B> ; </TT>
<TT> | </TT>
<TT> <B>PATHPULSE$</B><A NAME="Rspecify_input_terminal_descriptor" HREF="#specify_input_terminal_descriptor">specify_input_terminal_descriptor</A>$<A NAME="Rspecify_output_terminal_descriptor" HREF="#specify_output_terminal_descriptor">specify_output_terminal_descriptor</A> </TT>
<TT> <B>=</B> <B>(</B> reject_limit_value [ <B>,</B> error_limit_value ] <B>)</B> ; </TT>
<TT><A NAME="error_limit_value" HREF="#Rerror_limit_value">error_limit_value</A> ::= <A NAME="Rlimit_value" HREF="#limit_value">limit_value</A> </TT>
<TT><A NAME="reject_limit_value" HREF="#Rreject_limit_value">reject_limit_value</A> ::= limit_value </TT>
<TT><A NAME="limit_value" HREF="#Rlimit_value">limit_value</A> ::= constant_mintypmax_expression </TT>
<TT> A.2.5 Declaration ranges </TT>
<TT> <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 ] </TT>
<TT><A NAME="range" HREF="#Rrange">range</A> ::= [ <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>
<TT> A.2.6 Function declarations </TT>
<TT> <A NAME="function_declaration" HREF="#Rfunction_declaration">function_declaration</A> ::= </TT>
<TT> <B>function</B> [ <B>automatic</B> ] [ <B>signed</B> ] [ <A NAME="Rrange_or_type" HREF="#range_or_type">range_or_type</A> ] </TT>
<TT> <A NAME="Rfunction_identifier" HREF="#function_identifier">function_identifier</A> <B>;</B> </TT>
<TT> <A NAME="Rfunction_item_declaration" HREF="#function_item_declaration">function_item_declaration</A> { function_item_declaration } </TT>
<TT> <A NAME="Rfunction_statement" HREF="#function_statement">function_statement</A> </TT>
<TT> <B>endfunction</B> </TT>
<TT> | <B>function</B> [ <B>automatic</B> ] [ <B>signed</B> ] [ range_or_type ] </TT>
<TT> function_identifier <B>(</B> <A NAME="Rfunction_port_list" HREF="#function_port_list">function_port_list</A> <B>)</B> ; </TT>
<TT> <A NAME="Rblock_item_declaration" HREF="#block_item_declaration">block_item_declaration</A> { block_item_declaration } </TT>
<TT> function_statement </TT>
<TT> <B>endfunction</B> </TT>
<TT><A NAME="function_item_declaration" HREF="#Rfunction_item_declaration">function_item_declaration</A> ::= </TT>
<TT> block_item_declaration </TT>
<TT> | input_declaration <B>;</B> </TT>
<TT><A NAME="function_port_list" HREF="#Rfunction_port_list">function_port_list</A> ::= { attribute_instance } input_declaration { <B>,</B> { </TT>
<TT> attribute_instance } input_declaration } </TT>
<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>
<TT> A.2.7 Task declarations </TT>
<TT> <A NAME="task_declaration" HREF="#Rtask_declaration">task_declaration</A> ::= </TT>
<TT> <B>task</B> [ <B>automatic</B> ] <A NAME="Rtask_identifier" HREF="#task_identifier">task_identifier</A> <B>;</B> </TT>
<TT> { <A NAME="Rtask_item_declaration" HREF="#task_item_declaration">task_item_declaration</A> } </TT>
<TT> <A NAME="Rstatement" HREF="#statement">statement</A> </TT>
<TT> <B>endtask</B> </TT>
<TT> | <B>task</B> [ <B>automatic</B> ] task_identifier <B>(</B> <A NAME="Rtask_port_list" HREF="#task_port_list">task_port_list</A> <B>)</B> ; </TT>
<TT> { block_item_declaration } </TT>
<TT> statement </TT>
<TT> <B>endtask</B> </TT>
<TT><A NAME="task_item_declaration" HREF="#Rtask_item_declaration">task_item_declaration</A> ::= </TT>
<TT> block_item_declaration </TT>
<TT> | { attribute_instance } input_declaration <B>;</B> </TT>
<TT> | { attribute_instance } output_declaration <B>;</B> </TT>
<TT> | { attribute_instance } inout_declaration <B>;</B> </TT>
<TT><A NAME="task_port_list" HREF="#Rtask_port_list">task_port_list</A> ::= <A NAME="Rtask_port_item" HREF="#task_port_item">task_port_item</A> { <B>,</B> task_port_item } </TT>
<TT><A NAME="task_port_item" HREF="#Rtask_port_item">task_port_item</A> ::= </TT>
<TT> { attribute_instance } input_declaration </TT>
<TT> | { attribute_instance } output_declaration </TT>
<TT> | { attribute_instance } inout_declaration </TT>
<TT> A.2.8 Block item declarations </TT>
<TT> <A NAME="block_item_declaration" HREF="#Rblock_item_declaration">block_item_declaration</A> ::= </TT>
<TT> { attribute_instance } <A NAME="Rblock_reg_declaration" HREF="#block_reg_declaration">block_reg_declaration</A> </TT>
<TT> | { attribute_instance } event_declaration </TT>
<TT> | { attribute_instance } integer_declaration </TT>
<TT> | { attribute_instance } local_parameter_declaration </TT>
<TT> | { attribute_instance } parameter_declaration </TT>
<TT> | { attribute_instance } real_declaration </TT>
<TT> | { attribute_instance } realtime_declaration </TT>
<TT> | { attribute_instance } time_declaration </TT>
<TT><A NAME="block_reg_declaration" HREF="#Rblock_reg_declaration">block_reg_declaration</A> ::= <B>reg</B> [ <B>signed</B> ] <B>[</B> range <B>]</B> </TT>
<TT> <A NAME="Rlist_of_block_variable_identifiers" HREF="#list_of_block_variable_identifiers">list_of_block_variable_identifiers</A> <B>;</B> </TT>
<TT><A NAME="list_of_block_variable_identifiers" HREF="#Rlist_of_block_variable_identifiers">list_of_block_variable_identifiers</A> ::= </TT>
<TT> <A NAME="Rblock_variable_type" HREF="#block_variable_type">block_variable_type</A> { <B>,</B> block_variable_type } </TT>
<TT><A NAME="block_variable_type" HREF="#Rblock_variable_type">block_variable_type</A> ::= </TT>
<TT> variable_identifier </TT>
<TT> | variable_identifier dimension { dimension } </TT>
<TT> A.3 Primitive instances </TT>
<TT> A.3.1 Primitive instantiation <B>and</B> instances </TT>
<TT> <A NAME="gate_instantiation" HREF="#Rgate_instantiation">gate_instantiation</A> ::= </TT>
<TT> <A NAME="Rcmos_switchtype" HREF="#cmos_switchtype">cmos_switchtype</A> [delay3] </TT>
<TT> <A NAME="Rcmos_switch_instance" HREF="#cmos_switch_instance">cmos_switch_instance</A> { <B>,</B> cmos_switch_instance } <B>;</B> </TT>
<TT> | <A NAME="Renable_gatetype" HREF="#enable_gatetype">enable_gatetype</A> [drive_strength] [delay3] </TT>
<TT> <A NAME="Renable_gate_instance" HREF="#enable_gate_instance">enable_gate_instance</A> { <B>,</B> enable_gate_instance } <B>;</B> </TT>
<TT> | <A NAME="Rmos_switchtype" HREF="#mos_switchtype">mos_switchtype</A> [delay3] </TT>
<TT> <A NAME="Rmos_switch_instance" HREF="#mos_switch_instance">mos_switch_instance</A> { <B>,</B> mos_switch_instance } <B>;</B> </TT>
<TT> | <A NAME="Rn_input_gatetype" HREF="#n_input_gatetype">n_input_gatetype</A> [drive_strength] [delay2] </TT>
<TT> <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>
<TT> | <A NAME="Rn_output_gatetype" HREF="#n_output_gatetype">n_output_gatetype</A> [drive_strength] [delay2] </TT>
<TT> <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>
<TT> | <A NAME="Rpass_en_switchtype" HREF="#pass_en_switchtype">pass_en_switchtype</A> [delay2] </TT>
<TT> <A NAME="Rpass_enable_switch_instance" HREF="#pass_enable_switch_instance">pass_enable_switch_instance</A> { <B>,</B> pass_enable_switch_instance } <B>;</B> </TT>
<TT> | <A NAME="Rpass_switchtype" HREF="#pass_switchtype">pass_switchtype</A> </TT>
<TT> <A NAME="Rpass_switch_instance" HREF="#pass_switch_instance">pass_switch_instance</A> { <B>,</B> pass_switch_instance } <B>;</B> </TT>
<TT> | <B>pulldown</B> [<A NAME="Rpulldown_strength" HREF="#pulldown_strength">pulldown_strength</A>] </TT>
<TT> <A NAME="Rpull_gate_instance" HREF="#pull_gate_instance">pull_gate_instance</A> { <B>,</B> pull_gate_instance } <B>;</B> </TT>
<TT> | <B>pullup</B> [<A NAME="Rpullup_strength" HREF="#pullup_strength">pullup_strength</A>] </TT>
<TT> pull_gate_instance { <B>,</B> pull_gate_instance } <B>;</B> </TT>
<TT><A NAME="cmos_switch_instance" HREF="#Rcmos_switch_instance">cmos_switch_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> </TT>
<TT> <A NAME="Rinput_terminal" HREF="#input_terminal">input_terminal</A> <B>,</B> </TT>
<TT> <A NAME="Rncontrol_terminal" HREF="#ncontrol_terminal">ncontrol_terminal</A> <B>,</B> <A NAME="Rpcontrol_terminal" HREF="#pcontrol_terminal">pcontrol_terminal</A> <B>)</B> </TT>
<TT><A NAME="enable_gate_instance" HREF="#Renable_gate_instance">enable_gate_instance</A> ::= [ name_of_gate_instance ] <B>(</B> output_terminal <B>,</B> </TT>
<TT> input_terminal <B>,</B> <A NAME="Renable_terminal" HREF="#enable_terminal">enable_terminal</A> <B>)</B> </TT>
<TT><A NAME="mos_switch_instance" HREF="#Rmos_switch_instance">mos_switch_instance</A> ::= [ name_of_gate_instance ] <B>(</B> output_terminal <B>,</B> </TT>
<TT> input_terminal <B>,</B> enable_terminal <B>)</B> </TT>
<TT><A NAME="n_input_gate_instance" HREF="#Rn_input_gate_instance">n_input_gate_instance</A> ::= [ name_of_gate_instance ] <B>(</B> output_terminal <B>,</B> </TT>
<TT> input_terminal { <B>,</B> input_terminal } <B>)</B> </TT>
<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> </TT>
<TT> output_terminal } <B>,</B> input_terminal <B>)</B> </TT>
<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> </TT>
<TT> inout_terminal <B>)</B> </TT>
<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 </TT>
<TT> <B>,</B> inout_terminal <B>,</B> enable_terminal <B>)</B> </TT>
<TT><A NAME="pull_gate_instance" HREF="#Rpull_gate_instance">pull_gate_instance</A> ::= [ name_of_gate_instance ] <B>(</B> output_terminal <B>)</B> </TT>
<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> <B>[</B> range <B>]</B> </TT>
<TT> A.3.2 Primitive strengths </TT>
<TT> <A NAME="pulldown_strength" HREF="#Rpulldown_strength">pulldown_strength</A> ::= </TT>
<TT> <B>(</B> strength0 <B>,</B> strength1 <B>)</B> </TT>
<TT> | <B>(</B> strength1 <B>,</B> strength0 <B>)</B> </TT>
<TT> | <B>(</B> strength0 <B>)</B> </TT>
<TT><A NAME="pullup_strength" HREF="#Rpullup_strength">pullup_strength</A> ::= </TT>
<TT> <B>(</B> strength0 <B>,</B> strength1 <B>)</B> </TT>
<TT> | <B>(</B> strength1 <B>,</B> strength0 <B>)</B> </TT>
<TT> | <B>(</B> strength1 <B>)</B> </TT>
<TT> A.3.3 Primitive terminals </TT>
<TT> <A NAME="enable_terminal" HREF="#Renable_terminal">enable_terminal</A> ::= expression </TT>
<TT><A NAME="inout_terminal" HREF="#Rinout_terminal">inout_terminal</A> ::= <A NAME="Rnet_lvalue" HREF="#net_lvalue">net_lvalue</A> </TT>
<TT><A NAME="input_terminal" HREF="#Rinput_terminal">input_terminal</A> ::= expression </TT>
<TT><A NAME="ncontrol_terminal" HREF="#Rncontrol_terminal">ncontrol_terminal</A> ::= expression </TT>
<TT><A NAME="output_terminal" HREF="#Routput_terminal">output_terminal</A> ::= net_lvalue </TT>
<TT><A NAME="pcontrol_terminal" HREF="#Rpcontrol_terminal">pcontrol_terminal</A> ::= expression </TT>
<TT> A.3.4 Primitive gate <B>and</B> switch types </TT>
<TT> <A NAME="cmos_switchtype" HREF="#Rcmos_switchtype">cmos_switchtype</A> ::= <B>cmos</B> | <B>rcmos</B> </TT>
<TT><A NAME="enable_gatetype" HREF="#Renable_gatetype">enable_gatetype</A> ::= <B>bufif0</B> | <B>bufif1</B> | <B>notif0</B> | <B>notif1</B> </TT>
<TT><A NAME="mos_switchtype" HREF="#Rmos_switchtype">mos_switchtype</A> ::= <B>nmos</B> | <B>pmos</B> | <B>rnmos</B> | <B>rpmos</B> </TT>
<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>
<TT><A NAME="n_output_gatetype" HREF="#Rn_output_gatetype">n_output_gatetype</A> ::= <B>buf</B> | <B>not</B> </TT>
<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>
<TT><A NAME="pass_switchtype" HREF="#Rpass_switchtype">pass_switchtype</A> ::= <B>tran</B> | <B>rtran</B> </TT>
<TT> <FONT SIZE=4><B>A.4 Module <B>and</B> generated instantiation </B></FONT></TT>
<TT> <FONT SIZE=4><B>A.4.1 Module instantiation </B></FONT></TT>
<TT> <A NAME="module_instantiation" HREF="#Rmodule_instantiation">module_instantiation</A> ::= </TT>
<TT> module_identifier [ <A NAME="Rparameter_value_assignment" HREF="#parameter_value_assignment">parameter_value_assignment</A> ] </TT>
<TT> <A NAME="Rmodule_instance" HREF="#module_instance">module_instance</A> { <B>,</B> module_instance } <B>;</B> </TT>
<TT><A NAME="parameter_value_assignment" HREF="#Rparameter_value_assignment">parameter_value_assignment</A> ::= <B>#</B> <B>(</B> <A NAME="Rlist_of_parameter_assignments" HREF="#list_of_parameter_assignments">list_of_parameter_assignments</A> <B>)</B> </TT>
<TT><A NAME="list_of_parameter_assignments" HREF="#Rlist_of_parameter_assignments">list_of_parameter_assignments</A> ::= </TT>
<TT> <A NAME="Rordered_parameter_assignment" HREF="#ordered_parameter_assignment">ordered_parameter_assignment</A> { <B>,</B> ordered_parameter_assignment } | </TT>
<TT> <A NAME="Rnamed_parameter_assignment" HREF="#named_parameter_assignment">named_parameter_assignment</A> { <B>,</B> named_parameter_assignment } </TT>
<TT><A NAME="ordered_parameter_assignment" HREF="#Rordered_parameter_assignment">ordered_parameter_assignment</A> ::= expression </TT>
<TT><A NAME="named_parameter_assignment" HREF="#Rnamed_parameter_assignment">named_parameter_assignment</A> ::= . parameter_identifier <B>(</B> [ expression ] <B>)</B> </TT>
<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_port_connections" HREF="#list_of_port_connections">list_of_port_connections</A> ] <B>)</B> </TT>
<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>
<TT><A NAME="list_of_port_connections" HREF="#Rlist_of_port_connections">list_of_port_connections</A> ::= </TT>
<TT> <A NAME="Rordered_port_connection" HREF="#ordered_port_connection">ordered_port_connection</A> { <B>,</B> ordered_port_connection } </TT>
<TT> | <A NAME="Rnamed_port_connection" HREF="#named_port_connection">named_port_connection</A> { <B>,</B> named_port_connection } </TT>
<TT><A NAME="ordered_port_connection" HREF="#Rordered_port_connection">ordered_port_connection</A> ::= { attribute_instance } [ expression ] </TT>
<TT><A NAME="named_port_connection" HREF="#Rnamed_port_connection">named_port_connection</A> ::= { attribute_instance } .port_identifier <B>(</B> [ </TT>
<TT> expression ] <B>)</B> </TT>
<TT> <FONT SIZE=4><B>A.4.2 Generated instantiation </B></FONT></TT>
<TT> <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> </TT>
<TT><A NAME="generate_item_or_null" HREF="#Rgenerate_item_or_null">generate_item_or_null</A> ::= generate_item | <B>;</B> </TT>
<TT><A NAME="generate_item" HREF="#Rgenerate_item">generate_item</A> ::= </TT>
<TT> <A NAME="Rgenerate_conditional_statement" HREF="#generate_conditional_statement">generate_conditional_statement</A> </TT>
<TT> | <A NAME="Rgenerate_case_statement" HREF="#generate_case_statement">generate_case_statement</A> </TT>
<TT> | <A NAME="Rgenerate_loop_statement" HREF="#generate_loop_statement">generate_loop_statement</A> </TT>
<TT> | <A NAME="Rgenerate_block" HREF="#generate_block">generate_block</A> </TT>
<TT> | module_or_generate_item </TT>
<TT><A NAME="generate_conditional_statement" HREF="#Rgenerate_conditional_statement">generate_conditional_statement</A> ::= </TT>
<TT> <B>if</B> <B>(</B> constant_expression <B>)</B> generate_item_or_null [ <B>else</B> generate_item_or_null ] </TT>
<TT><A NAME="generate_case_statement" HREF="#Rgenerate_case_statement">generate_case_statement</A> ::= <B>case</B> <B>(</B> constant_expression <B>)</B> </TT>
<TT> <A NAME="Rgenvar_case_item" HREF="#genvar_case_item">genvar_case_item</A> { genvar_case_item } <B>endcase</B> </TT>
<TT><A NAME="genvar_case_item" HREF="#Rgenvar_case_item">genvar_case_item</A> ::= constant_expression { <B>,</B> constant_expression } <B>:</B> </TT>
<TT> generate_item_or_null | <B>default</B> [ <B>:</B> ] generate_item_or_null </TT>
<TT><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> constant_expression <B>;</B> </TT>
<TT> genvar_assignment <B>)</B> </TT>
<TT> <B>begin</B> <B>:</B> <A NAME="Rgenerate_block_identifier" HREF="#generate_block_identifier">generate_block_identifier</A> { generate_item } <B>end</B> </TT>
<TT><A NAME="genvar_assignment" HREF="#Rgenvar_assignment">genvar_assignment</A> ::= genvar_identifier <B>=</B> constant_expression </TT>
<TT><A NAME="generate_block" HREF="#Rgenerate_block">generate_block</A> ::= <B>begin</B> [ <B>:</B> generate_block_identifier ] { generate_item } <B>end</B> </TT>
<TT> A.5 UDP declaration <B>and</B> instantiation </TT>
<TT> A.5.1 UDP declaration </TT>
<TT> <A NAME="udp_declaration" HREF="#Rudp_declaration">udp_declaration</A> ::= </TT>
<TT> { attribute_instance } <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> ; </TT>
<TT> <A NAME="Rudp_port_declaration" HREF="#udp_port_declaration">udp_port_declaration</A> { udp_port_declaration } </TT>
<TT> <A NAME="Rudp_body" HREF="#udp_body">udp_body</A> </TT>
<TT> <B>endprimitive</B> </TT>
<TT> | { attribute_instance } <B>primitive</B> udp_identifier <B>(</B> </TT>
<TT> <A NAME="Rudp_declaration_port_list" HREF="#udp_declaration_port_list">udp_declaration_port_list</A> <B>)</B> ; </TT>
<TT> udp_body </TT>
<TT> <B>endprimitive</B> </TT>
<TT> A.5.2 UDP ports </TT>
<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> </TT>
<TT> input_port_identifier } </TT>
<TT><A NAME="udp_declaration_port_list" HREF="#Rudp_declaration_port_list">udp_declaration_port_list</A> ::= </TT>
<TT> <A NAME="Rudp_output_declaration" HREF="#udp_output_declaration">udp_output_declaration</A> <B>,</B> <A NAME="Rudp_input_declaration" HREF="#udp_input_declaration">udp_input_declaration</A> { <B>,</B> udp_input_declaration } </TT>
<TT><A NAME="udp_port_declaration" HREF="#Rudp_port_declaration">udp_port_declaration</A> ::= </TT>
<TT> udp_output_declaration <B>;</B> </TT>
<TT> | udp_input_declaration <B>;</B> </TT>
<TT> | <A NAME="Rudp_reg_declaration" HREF="#udp_reg_declaration">udp_reg_declaration</A> <B>;</B> </TT>
<TT><A NAME="udp_output_declaration" HREF="#Rudp_output_declaration">udp_output_declaration</A> ::= </TT>
<TT> { attribute_instance } <B>output</B> port_identifier </TT>
<TT> | { attribute_instance } <B>output</B> <B>reg</B> port_identifier [ <B>=</B> constant_expression ] </TT>
<TT><A NAME="udp_input_declaration" HREF="#Rudp_input_declaration">udp_input_declaration</A> ::= { attribute_instance } <B>input</B> list_of_port_identifiers </TT>
<TT><A NAME="udp_reg_declaration" HREF="#Rudp_reg_declaration">udp_reg_declaration</A> ::= { attribute_instance } <B>reg</B> variable_identifier </TT>
<TT> A.5.3 UDP body </TT>
<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>
<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>
<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>
<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> { </TT>
<TT> sequential_entry } <B>endtable</B> </TT>
<TT><A NAME="udp_initial_statement" HREF="#Rudp_initial_statement">udp_initial_statement</A> ::= <B>initial</B> output_port_identifier <B>=</B> <A NAME="Rinit_val" HREF="#init_val">init_val</A> <B>;</B> </TT>
<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>
<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>
<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>
<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>
<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>
<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>
<TT><A NAME="current_state" HREF="#Rcurrent_state">current_state</A> ::= level_symbol </TT>
<TT><A NAME="next_state" HREF="#Rnext_state">next_state</A> ::= output_symbol | <B>-</B> </TT>
<TT><A NAME="output_symbol" HREF="#Routput_symbol">output_symbol</A> ::= <B>0</B> | <B>1</B> | <B>x</B> | <B>X</B> </TT>
<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>
<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>
<TT> A.5.4 UDP instantiation </TT>
<TT> <A NAME="udp_instantiation" HREF="#Rudp_instantiation">udp_instantiation</A> ::= udp_identifier [ drive_strength ] [ delay2 ] </TT>
<TT> <A NAME="Rudp_instance" HREF="#udp_instance">udp_instance</A> { <B>,</B> udp_instance } <B>;</B> </TT>
<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_terminal <B>,</B> input_terminal </TT>
<TT> { <B>,</B> input_terminal } <B>)</B> </TT>
<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>
<TT> A.6 Behavioral statements </TT>
<TT> A.6.1 Continuous assignment statements </TT>
<TT> <A NAME="continuous_assign" HREF="#Rcontinuous_assign">continuous_assign</A> ::= <B>assign</B> [ drive_strength ] [ delay3 ] </TT>
<TT> <A NAME="Rlist_of_net_assignments" HREF="#list_of_net_assignments">list_of_net_assignments</A> <B>;</B> </TT>
<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>
<TT><A NAME="net_assignment" HREF="#Rnet_assignment">net_assignment</A> ::= net_lvalue <B>=</B> expression </TT>
<TT> A.6.2 Procedural blocks <B>and</B> assignments </TT>
<TT> <A NAME="initial_construct" HREF="#Rinitial_construct">initial_construct</A> ::= <B>initial</B> statement </TT>
<TT><A NAME="always_construct" HREF="#Ralways_construct">always_construct</A> ::= <B>always</B> statement </TT>
<TT><A NAME="blocking_assignment" HREF="#Rblocking_assignment">blocking_assignment</A> ::= <A NAME="Rvariable_lvalue" HREF="#variable_lvalue">variable_lvalue</A> <B>=</B> [ <A NAME="Rdelay_or_event_control" HREF="#delay_or_event_control">delay_or_event_control</A> ] expression </TT>
<TT><A NAME="nonblocking_assignment" HREF="#Rnonblocking_assignment">nonblocking_assignment</A> ::= variable_lvalue <B><=</B> [ delay_or_event_control ] </TT>
<TT> expression </TT>
<TT><A NAME="procedural_continuous_assignments" HREF="#Rprocedural_continuous_assignments">procedural_continuous_assignments</A> ::= </TT>
<TT> <B>assign</B> <A NAME="Rvariable_assignment" HREF="#variable_assignment">variable_assignment</A> </TT>
<TT> | <B>deassign</B> variable_lvalue </TT>
<TT> | <B>force</B> variable_assignment </TT>
<TT> | <B>force</B> net_assignment </TT>
<TT> | <B>release</B> variable_lvalue </TT>
<TT> | <B>release</B> net_lvalue </TT>
<TT><A NAME="function_blocking_assignment" HREF="#Rfunction_blocking_assignment">function_blocking_assignment</A> ::= variable_lvalue <B>=</B> expression </TT>
<TT><A NAME="function_statement_or_null" HREF="#Rfunction_statement_or_null">function_statement_or_null</A> ::= </TT>
<TT> function_statement </TT>
<TT> | { attribute_instance } <B>;</B> </TT>
<TT> A.6.3 Parallel <B>and</B> sequential blocks </TT>
<TT> <A NAME="function_seq_block" HREF="#Rfunction_seq_block">function_seq_block</A> ::= <B>begin</B> [ <B>:</B> <A NAME="Rblock_identifier" HREF="#block_identifier">block_identifier</A> </TT>
<TT> { block_item_declaration } ] { function_statement } <B>end</B> </TT>
<TT><A NAME="variable_assignment" HREF="#Rvariable_assignment">variable_assignment</A> ::= variable_lvalue <B>=</B> expression </TT>
<TT><A NAME="par_block" HREF="#Rpar_block">par_block</A> ::= <B>fork</B> [ <B>:</B> block_identifier </TT>
<TT> { block_item_declaration } ] { statement } <B>join</B> </TT>
<TT><A NAME="seq_block" HREF="#Rseq_block">seq_block</A> ::= <B>begin</B> [ <B>:</B> block_identifier </TT>
<TT> { block_item_declaration } ] { statement } <B>end</B> </TT>
<TT> A.6.4 Statements </TT>
<TT> <A NAME="statement" HREF="#Rstatement">statement</A> ::= </TT>
<TT> { attribute_instance } blocking_assignment <B>;</B> </TT>
<TT> | { attribute_instance } <A NAME="Rcase_statement" HREF="#case_statement">case_statement</A> </TT>
<TT> | { attribute_instance } <A NAME="Rconditional_statement" HREF="#conditional_statement">conditional_statement</A> </TT>
<TT> | { attribute_instance } <A NAME="Rdisable_statement" HREF="#disable_statement">disable_statement</A> </TT>
<TT> | { attribute_instance } <A NAME="Revent_trigger" HREF="#event_trigger">event_trigger</A> </TT>
<TT> | { attribute_instance } <A NAME="Rloop_statement" HREF="#loop_statement">loop_statement</A> </TT>
<TT> | { attribute_instance } nonblocking_assignment <B>;</B> </TT>
<TT> | { attribute_instance } par_block </TT>
<TT> | { attribute_instance } procedural_continuous_assignments <B>;</B> </TT>
<TT> | { attribute_instance } <A NAME="Rprocedural_timing_control_statement" HREF="#procedural_timing_control_statement">procedural_timing_control_statement</A> </TT>
<TT> | { attribute_instance } seq_block </TT>
<TT> | { attribute_instance } <A NAME="Rsystem_task_enable" HREF="#system_task_enable">system_task_enable</A> </TT>
<TT> | { attribute_instance } <A NAME="Rtask_enable" HREF="#task_enable">task_enable</A> </TT>
<TT> | { attribute_instance } <A NAME="Rwait_statement" HREF="#wait_statement">wait_statement</A> </TT>
<TT><A NAME="statement_or_null" HREF="#Rstatement_or_null">statement_or_null</A> ::= </TT>
<TT> statement </TT>
<TT> | { attribute_instance } <B>;</B> </TT>
<TT><A NAME="function_statement" HREF="#Rfunction_statement">function_statement</A> ::= </TT>
<TT> { attribute_instance } function_blocking_assignment <B>;</B> </TT>
<TT> | { attribute_instance } <A NAME="Rfunction_case_statement" HREF="#function_case_statement">function_case_statement</A> </TT>
<TT> | { attribute_instance } <A NAME="Rfunction_conditional_statement" HREF="#function_conditional_statement">function_conditional_statement</A> </TT>
<TT> | { attribute_instance } <A NAME="Rfunction_loop_statement" HREF="#function_loop_statement">function_loop_statement</A> </TT>
<TT> | { attribute_instance } function_seq_block </TT>
<TT> | { attribute_instance } disable_statement </TT>
<TT> | { attribute_instance } system_task_enable </TT>
<TT> A.6.5 Timing control statements </TT>
<TT> <A NAME="delay_control" HREF="#Rdelay_control">delay_control</A> ::= </TT>
<TT> <B>#</B> delay_value </TT>
<TT> | <B>#</B> <B>(</B> mintypmax_expression <B>)</B> </TT>
<TT><A NAME="delay_or_event_control" HREF="#Rdelay_or_event_control">delay_or_event_control</A> ::= </TT>
<TT> delay_control </TT>
<TT> | <A NAME="Revent_control" HREF="#event_control">event_control</A> </TT>
<TT> | <B>repeat</B> <B>(</B> expression <B>)</B> event_control </TT>
<TT><A NAME="disable_statement" HREF="#Rdisable_statement">disable_statement</A> ::= </TT>
<TT> <B>disable</B> <A NAME="Rhierarchical_task_identifier" HREF="#hierarchical_task_identifier">hierarchical_task_identifier</A> <B>;</B> </TT>
<TT> | <B>disable</B> <A NAME="Rhierarchical_block_identifier" HREF="#hierarchical_block_identifier">hierarchical_block_identifier</A> <B>;</B> </TT>
<TT><A NAME="event_control" HREF="#Revent_control">event_control</A> ::= </TT>
<TT> <B>@</B> event_identifier </TT>
<TT> | <B>@</B> <B>(</B> <A NAME="Revent_expression" HREF="#event_expression">event_expression</A> <B>)</B> </TT>
<TT> | @* </TT>
<TT> | <B>@</B> (*) </TT>
<TT><A NAME="event_trigger" HREF="#Revent_trigger">event_trigger</A> ::= </TT>
<TT> -> <A NAME="Rhierarchical_event_identifier" HREF="#hierarchical_event_identifier">hierarchical_event_identifier</A> <B>;</B> </TT>
<TT><A NAME="event_expression" HREF="#Revent_expression">event_expression</A> ::= </TT>
<TT> expression </TT>
<TT> | <A NAME="Rhierarchical_identifier" HREF="#hierarchical_identifier">hierarchical_identifier</A> </TT>
<TT> | <B>posedge</B> expression </TT>
<TT> | <B>negedge</B> expression </TT>
<TT> | event_expression <B>or</B> event_expression </TT>
<TT> | event_expression <B>,</B> event_expression </TT>
<TT><A NAME="procedural_timing_control_statement" HREF="#Rprocedural_timing_control_statement">procedural_timing_control_statement</A> ::= </TT>
<TT> delay_or_event_control statement_or_null </TT>
<TT><A NAME="wait_statement" HREF="#Rwait_statement">wait_statement</A> ::= </TT>
<TT> <B>wait</B> <B>(</B> expression <B>)</B> statement_or_null </TT>
<TT> A.6.6 Conditional statements </TT>
<TT> <A NAME="conditional_statement" HREF="#Rconditional_statement">conditional_statement</A> ::= </TT>
<TT> <B>if</B> <B>(</B> expression <B>)</B> </TT>
<TT> statement_or_null [ <B>else</B> statement_or_null ] </TT>
<TT> | <A NAME="Rif_else_if_statement" HREF="#if_else_if_statement">if_else_if_statement</A> </TT>
<TT><A NAME="if_else_if_statement" HREF="#Rif_else_if_statement">if_else_if_statement</A> ::= </TT>
<TT> <B>if</B> <B>(</B> expression <B>)</B> statement_or_null </TT>
<TT> { <B>else</B> <B>if</B> <B>(</B> expression <B>)</B> statement_or_null } </TT>
<TT> [ <B>else</B> statement_or_null ] </TT>
<TT><A NAME="function_conditional_statement" HREF="#Rfunction_conditional_statement">function_conditional_statement</A> ::= </TT>
<TT> <B>if</B> <B>(</B> expression <B>)</B> function_statement_or_null </TT>
<TT> [ <B>else</B> function_statement_or_null ] </TT>
<TT> | <A NAME="Rfunction_if_else_if_statement" HREF="#function_if_else_if_statement">function_if_else_if_statement</A> </TT>
<TT><A NAME="function_if_else_if_statement" HREF="#Rfunction_if_else_if_statement">function_if_else_if_statement</A> ::= </TT>
<TT> <B>if</B> <B>(</B> expression <B>)</B> function_statement_or_null </TT>
<TT> { <B>else</B> <B>if</B> <B>(</B> expression <B>)</B> function_statement_or_null } </TT>
<TT> [ <B>else</B> function_statement_or_null ] </TT>
<TT> A.6.7 Case statements </TT>
<TT> <A NAME="case_statement" HREF="#Rcase_statement">case_statement</A> ::= </TT>
<TT> <B>case</B> <B>(</B> expression <B>)</B> </TT>
<TT> <A NAME="Rcase_item" HREF="#case_item">case_item</A> { case_item } <B>endcase</B> </TT>
<TT> | <B>casez</B> <B>(</B> expression <B>)</B> </TT>
<TT> case_item { case_item } <B>endcase</B> </TT>
<TT> | <B>casex</B> <B>(</B> expression <B>)</B> </TT>
<TT> case_item { case_item } <B>endcase</B> </TT>
<TT><A NAME="case_item" HREF="#Rcase_item">case_item</A> ::= </TT>
<TT> expression { <B>,</B> expression } <B>:</B> statement_or_null </TT>
<TT> | <B>default</B> [ <B>:</B> ] statement_or_null </TT>
<TT><A NAME="function_case_statement" HREF="#Rfunction_case_statement">function_case_statement</A> ::= </TT>
<TT> <B>case</B> <B>(</B> expression <B>)</B> </TT>
<TT> <A NAME="Rfunction_case_item" HREF="#function_case_item">function_case_item</A> { function_case_item } <B>endcase</B> </TT>
<TT> | <B>casez</B> <B>(</B> expression <B>)</B> </TT>
<TT> function_case_item { function_case_item } <B>endcase</B> </TT>
<TT> | <B>casex</B> <B>(</B> expression <B>)</B> </TT>
<TT> function_case_item { function_case_item } <B>endcase</B> </TT>
<TT><A NAME="function_case_item" HREF="#Rfunction_case_item">function_case_item</A> ::= </TT>
<TT> expression { <B>,</B> expression } <B>:</B> function_statement_or_null </TT>
<TT> | <B>default</B> [ <B>:</B> ] function_statement_or_null </TT>
<TT> A.6.8 Looping statements </TT>
<TT> <A NAME="function_loop_statement" HREF="#Rfunction_loop_statement">function_loop_statement</A> ::= </TT>
<TT> <B>forever</B> function_statement </TT>
<TT> | <B>repeat</B> <B>(</B> expression <B>)</B> function_statement </TT>
<TT> | <B>while</B> <B>(</B> expression <B>)</B> function_statement </TT>
<TT> | <B>for</B> <B>(</B> variable_assignment <B>;</B> expression <B>;</B> variable_assignment <B>)</B> </TT>
<TT> function_statement </TT>
<TT><A NAME="loop_statement" HREF="#Rloop_statement">loop_statement</A> ::= </TT>
<TT> <B>forever</B> statement </TT>
<TT> | <B>repeat</B> <B>(</B> expression <B>)</B> statement </TT>
<TT> | <B>while</B> <B>(</B> expression <B>)</B> statement </TT>
<TT> | <B>for</B> <B>(</B> variable_assignment <B>;</B> expression <B>;</B> variable_assignment <B>)</B> </TT>
<TT> statement </TT>
<TT> A.6.9 Task enable statements </TT>
<TT> <A NAME="system_task_enable" HREF="#Rsystem_task_enable">system_task_enable</A> ::= system_task_identifier [ <B>(</B> expression { <B>,</B> expression </TT>
<TT> } <B>)</B> ] <B>;</B> </TT>
<TT><A NAME="task_enable" HREF="#Rtask_enable">task_enable</A> ::= hierarchical_task_identifier [ <B>(</B> expression { <B>,</B> expression </TT>
<TT> } <B>)</B> ] <B>;</B> </TT>
<TT> A.7 Specify section </TT>
<TT> A.7.1 Specify block declaration </TT>
<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> </TT>
<TT><A NAME="specify_item" HREF="#Rspecify_item">specify_item</A> ::= </TT>
<TT> specparam_declaration </TT>
<TT> | <A NAME="Rpulsestyle_declaration" HREF="#pulsestyle_declaration">pulsestyle_declaration</A> </TT>
<TT> | <A NAME="Rshowcancelled_declaration" HREF="#showcancelled_declaration">showcancelled_declaration</A> </TT>
<TT> | <A NAME="Rpath_declaration" HREF="#path_declaration">path_declaration</A> </TT>
<TT> | <A NAME="Rsystem_timing_check" HREF="#system_timing_check">system_timing_check</A> </TT>
<TT><A NAME="pulsestyle_declaration" HREF="#Rpulsestyle_declaration">pulsestyle_declaration</A> ::= </TT>
<TT> pulsestyle_onevent <A NAME="Rlist_of_path_outputs" HREF="#list_of_path_outputs">list_of_path_outputs</A> <B>;</B> </TT>
<TT> | pulsestyle_ondetect list_of_path_outputs <B>;</B> </TT>
<TT><A NAME="showcancelled_declaration" HREF="#Rshowcancelled_declaration">showcancelled_declaration</A> ::= </TT>
<TT> showcancelled list_of_path_outputs <B>;</B> </TT>
<TT> | noshowcancelled list_of_path_outputs <B>;</B> </TT>
<TT> A.7.2 Specify path declarations </TT>
<TT> <A NAME="path_declaration" HREF="#Rpath_declaration">path_declaration</A> ::= </TT>
<TT> <A NAME="Rsimple_path_declaration" HREF="#simple_path_declaration">simple_path_declaration</A> <B>;</B> </TT>
<TT> | <A NAME="Redge_sensitive_path_declaration" HREF="#edge_sensitive_path_declaration">edge_sensitive_path_declaration</A> <B>;</B> </TT>
<TT> | <A NAME="Rstate_dependent_path_declaration" HREF="#state_dependent_path_declaration">state_dependent_path_declaration</A> <B>;</B> </TT>
<TT><A NAME="simple_path_declaration" HREF="#Rsimple_path_declaration">simple_path_declaration</A> ::= </TT>
<TT> <A NAME="Rparallel_path_description" HREF="#parallel_path_description">parallel_path_description</A> <B>=</B> <A NAME="Rpath_delay_value" HREF="#path_delay_value">path_delay_value</A> </TT>
<TT> | <A NAME="Rfull_path_description" HREF="#full_path_description">full_path_description</A> <B>=</B> path_delay_value </TT>
<TT><A NAME="parallel_path_description" HREF="#Rparallel_path_description">parallel_path_description</A> ::= </TT>
<TT> <B>(</B> specify_input_terminal_descriptor [ <A NAME="Rpolarity_operator" HREF="#polarity_operator">polarity_operator</A> ] => </TT>
<TT> specify_output_terminal_descriptor <B>)</B> </TT>
<TT><A NAME="full_path_description" HREF="#Rfull_path_description">full_path_description</A> ::= </TT>
<TT> <B>(</B> <A NAME="Rlist_of_path_inputs" HREF="#list_of_path_inputs">list_of_path_inputs</A> [ polarity_operator ] *> list_of_path_outputs <B>)</B> </TT>
<TT><A NAME="list_of_path_inputs" HREF="#Rlist_of_path_inputs">list_of_path_inputs</A> ::= </TT>
<TT> specify_input_terminal_descriptor { <B>,</B> specify_input_terminal_descriptor } </TT>
<TT><A NAME="list_of_path_outputs" HREF="#Rlist_of_path_outputs">list_of_path_outputs</A> ::= </TT>
<TT> specify_output_terminal_descriptor { <B>,</B> specify_output_terminal_descriptor } </TT>
<TT> </TT>
<TT> A.7.3 Specify block terminals </TT>
<TT> </TT>
<TT> <A NAME="specify_input_terminal_descriptor" HREF="#Rspecify_input_terminal_descriptor">specify_input_terminal_descriptor</A> ::= </TT>
<TT> <A NAME="Rinput_identifier" HREF="#input_identifier">input_identifier</A> </TT>
<TT> | input_identifier [ constant_expression ] </TT>
<TT> | input_identifier [ range_expression ] </TT>
<TT><A NAME="specify_output_terminal_descriptor" HREF="#Rspecify_output_terminal_descriptor">specify_output_terminal_descriptor</A> ::= </TT>
<TT> <A NAME="Routput_identifier" HREF="#output_identifier">output_identifier</A> </TT>
<TT> | output_identifier [ constant_expression ] </TT>
<TT> | output_identifier [ range_expression ] </TT>
<TT><A NAME="input_identifier" HREF="#Rinput_identifier">input_identifier</A> ::= input_port_identifier | <A NAME="Rinout_port_identifier" HREF="#inout_port_identifier">inout_port_identifier</A> </TT>
<TT><A NAME="output_identifier" HREF="#Routput_identifier">output_identifier</A> ::= output_port_identifier | inout_port_identifier </TT>
<TT> A.7.4 Specify path delays </TT>
<TT> <A NAME="path_delay_value" HREF="#Rpath_delay_value">path_delay_value</A> ::= </TT>
<TT> <A NAME="Rlist_of_path_delay_expressions" HREF="#list_of_path_delay_expressions">list_of_path_delay_expressions</A> </TT>
<TT> | <B>(</B> list_of_path_delay_expressions <B>)</B> </TT>
<TT><A NAME="list_of_path_delay_expressions" HREF="#Rlist_of_path_delay_expressions">list_of_path_delay_expressions</A> ::= </TT>
<TT> <A NAME="Rt_path_delay_expression" HREF="#t_path_delay_expression">t_path_delay_expression</A> </TT>
<TT> | <A NAME="Rtrise_path_delay_expression" HREF="#trise_path_delay_expression">trise_path_delay_expression</A> <B>,</B> <A NAME="Rtfall_path_delay_expression" HREF="#tfall_path_delay_expression">tfall_path_delay_expression</A> </TT>
<TT> | trise_path_delay_expression <B>,</B> tfall_path_delay_expression <B>,</B> </TT>
<TT> <A NAME="Rtz_path_delay_expression" HREF="#tz_path_delay_expression">tz_path_delay_expression</A> </TT>
<TT> | <A NAME="Rt01_path_delay_expression" HREF="#t01_path_delay_expression">t01_path_delay_expression</A> <B>,</B> <A NAME="Rt10_path_delay_expression" HREF="#t10_path_delay_expression">t10_path_delay_expression</A> <B>,</B> </TT>
<TT> <A NAME="Rt0z_path_delay_expression" HREF="#t0z_path_delay_expression">t0z_path_delay_expression</A> <B>,</B> </TT>
<TT> <A NAME="Rtz1_path_delay_expression" HREF="#tz1_path_delay_expression">tz1_path_delay_expression</A> <B>,</B> <A NAME="Rt1z_path_delay_expression" HREF="#t1z_path_delay_expression">t1z_path_delay_expression</A> <B>,</B> </TT>
<TT> <A NAME="Rtz0_path_delay_expression" HREF="#tz0_path_delay_expression">tz0_path_delay_expression</A> </TT>
<TT> | t01_path_delay_expression <B>,</B> t10_path_delay_expression <B>,</B> </TT>
<TT> t0z_path_delay_expression <B>,</B> </TT>
<TT> tz1_path_delay_expression <B>,</B> t1z_path_delay_expression <B>,</B> </TT>
<TT> tz0_path_delay_expression </TT>
<TT> <A NAME="Rt0x_path_delay_expression" HREF="#t0x_path_delay_expression">t0x_path_delay_expression</A> <B>,</B> <A NAME="Rtx1_path_delay_expression" HREF="#tx1_path_delay_expression">tx1_path_delay_expression</A> <B>,</B> </TT>
<TT> <A NAME="Rt1x_path_delay_expression" HREF="#t1x_path_delay_expression">t1x_path_delay_expression</A> <B>,</B> </TT>
<TT> <A NAME="Rtx0_path_delay_expression" HREF="#tx0_path_delay_expression">tx0_path_delay_expression</A> <B>,</B> <A NAME="Rtxz_path_delay_expression" HREF="#txz_path_delay_expression">txz_path_delay_expression</A> <B>,</B> </TT>
<TT> <A NAME="Rtzx_path_delay_expression" HREF="#tzx_path_delay_expression">tzx_path_delay_expression</A> </TT>
<TT><A NAME="t_path_delay_expression" HREF="#Rt_path_delay_expression">t_path_delay_expression</A> ::= <A NAME="Rpath_delay_expression" HREF="#path_delay_expression">path_delay_expression</A> </TT>
<TT><A NAME="trise_path_delay_expression" HREF="#Rtrise_path_delay_expression">trise_path_delay_expression</A> ::= path_delay_expression </TT>
<TT><A NAME="tfall_path_delay_expression" HREF="#Rtfall_path_delay_expression">tfall_path_delay_expression</A> ::= path_delay_expression </TT>
<TT><A NAME="tz_path_delay_expression" HREF="#Rtz_path_delay_expression">tz_path_delay_expression</A> ::= path_delay_expression </TT>
<TT><A NAME="t01_path_delay_expression" HREF="#Rt01_path_delay_expression">t01_path_delay_expression</A> ::= path_delay_expression </TT>
<TT><A NAME="t10_path_delay_expression" HREF="#Rt10_path_delay_expression">t10_path_delay_expression</A> ::= path_delay_expression </TT>
<TT><A NAME="t0z_path_delay_expression" HREF="#Rt0z_path_delay_expression">t0z_path_delay_expression</A> ::= path_delay_expression </TT>
<TT><A NAME="tz1_path_delay_expression" HREF="#Rtz1_path_delay_expression">tz1_path_delay_expression</A> ::= path_delay_expression </TT>
<TT><A NAME="t1z_path_delay_expression" HREF="#Rt1z_path_delay_expression">t1z_path_delay_expression</A> ::= path_delay_expression </TT>
<TT><A NAME="tz0_path_delay_expression" HREF="#Rtz0_path_delay_expression">tz0_path_delay_expression</A> ::= path_delay_expression </TT>
<TT><A NAME="t0x_path_delay_expression" HREF="#Rt0x_path_delay_expression">t0x_path_delay_expression</A> ::= path_delay_expression </TT>
<TT><A NAME="tx1_path_delay_expression" HREF="#Rtx1_path_delay_expression">tx1_path_delay_expression</A> ::= path_delay_expression </TT>
<TT><A NAME="t1x_path_delay_expression" HREF="#Rt1x_path_delay_expression">t1x_path_delay_expression</A> ::= path_delay_expression </TT>
<TT><A NAME="tx0_path_delay_expression" HREF="#Rtx0_path_delay_expression">tx0_path_delay_expression</A> ::= path_delay_expression </TT>
<TT><A NAME="txz_path_delay_expression" HREF="#Rtxz_path_delay_expression">txz_path_delay_expression</A> ::= path_delay_expression </TT>
<TT><A NAME="tzx_path_delay_expression" HREF="#Rtzx_path_delay_expression">tzx_path_delay_expression</A> ::= path_delay_expression </TT>
<TT><A NAME="path_delay_expression" HREF="#Rpath_delay_expression">path_delay_expression</A> ::= constant_mintypmax_expression </TT>
<TT><A NAME="edge_sensitive_path_declaration" HREF="#Redge_sensitive_path_declaration">edge_sensitive_path_declaration</A> ::= </TT>
<TT> <A NAME="Rparallel_edge_sensitive_path_description" HREF="#parallel_edge_sensitive_path_description">parallel_edge_sensitive_path_description</A> <B>=</B> path_delay_value </TT>
<TT> | <A NAME="Rfull_edge_sensitive_path_description" HREF="#full_edge_sensitive_path_description">full_edge_sensitive_path_description</A> <B>=</B> path_delay_value </TT>
<TT><A NAME="parallel_edge_sensitive_path_description" HREF="#Rparallel_edge_sensitive_path_description">parallel_edge_sensitive_path_description</A> ::= </TT>
<TT> <B>(</B> [ <A NAME="Redge_identifier" HREF="#edge_identifier">edge_identifier</A> ] specify_input_terminal_descriptor => </TT>
<TT> specify_output_terminal_descriptor [ polarity_operator ] <B>:</B> </TT>
<TT> <A NAME="Rdata_source_expression" HREF="#data_source_expression">data_source_expression</A> <B>)</B> </TT>
<TT><A NAME="full_edge_sensitive_path_description" HREF="#Rfull_edge_sensitive_path_description">full_edge_sensitive_path_description</A> ::= </TT>
<TT> <B>(</B> [ edge_identifier ] list_of_path_inputs *> </TT>
<TT> list_of_path_outputs [ polarity_operator ] <B>:</B> data_source_expression <B>)</B> </TT>
<TT><A NAME="data_source_expression" HREF="#Rdata_source_expression">data_source_expression</A> ::= expression </TT>
<TT><A NAME="edge_identifier" HREF="#Redge_identifier">edge_identifier</A> ::= <B>posedge</B> | <B>negedge</B> </TT>
<TT><A NAME="state_dependent_path_declaration" HREF="#Rstate_dependent_path_declaration">state_dependent_path_declaration</A> ::= </TT>
<TT> <B>if</B> <B>(</B> <A NAME="Rmodule_path_expression" HREF="#module_path_expression">module_path_expression</A> <B>)</B> simple_path_declaration </TT>
<TT> | <B>if</B> <B>(</B> module_path_expression <B>)</B> edge_sensitive_path_declaration </TT>
<TT> | <B>ifnone</B> simple_path_declaration </TT>
<TT><A NAME="polarity_operator" HREF="#Rpolarity_operator">polarity_operator</A> ::= <B>+</B> | <B>-</B> </TT>
<TT> A.7.5 System timing checks </TT>
<TT> A.7.5.1 System timing check commands </TT>
<TT> <A NAME="system_timing_check" HREF="#Rsystem_timing_check">system_timing_check</A> ::= </TT>
<TT> $<A NAME="Rsetup_timing_check" HREF="#setup_timing_check">setup_timing_check</A> </TT>
<TT> | <B>$hold</B> <A NAME="R_timing_check" HREF="#_timing_check">_timing_check</A> </TT>
<TT> | $<A NAME="Rsetuphold_timing_check" HREF="#setuphold_timing_check">setuphold_timing_check</A> </TT>
<TT> | $<A NAME="Rrecovery_timing_check" HREF="#recovery_timing_check">recovery_timing_check</A> </TT>
<TT> | $<A NAME="Rremoval_timing_check" HREF="#removal_timing_check">removal_timing_check</A> </TT>
<TT> | $<A NAME="Rrecrem_timing_check" HREF="#recrem_timing_check">recrem_timing_check</A> </TT>
<TT> | $<A NAME="Rskew_timing_check" HREF="#skew_timing_check">skew_timing_check</A> </TT>
<TT> | $<A NAME="Rtimeskew_timing_check" HREF="#timeskew_timing_check">timeskew_timing_check</A> </TT>
<TT> | $<A NAME="Rfullskew_timing_check" HREF="#fullskew_timing_check">fullskew_timing_check</A> </TT>
<TT> | $<A NAME="Rperiod_timing_check" HREF="#period_timing_check">period_timing_check</A> </TT>
<TT> | $<A NAME="Rwidth_timing_check" HREF="#width_timing_check">width_timing_check</A> </TT>
<TT> | $<A NAME="Rnochange_timing_check" HREF="#nochange_timing_check">nochange_timing_check</A> </TT>
<TT>$<A NAME="setup_timing_check" HREF="#Rsetup_timing_check">setup_timing_check</A> ::= </TT>
<TT> <B>$setup</B> <B>(</B> <A NAME="Rdata_event" HREF="#data_event">data_event</A> <B>,</B> <A NAME="Rreference_event" HREF="#reference_event">reference_event</A> <B>,</B> <A NAME="Rtiming_check_limit" HREF="#timing_check_limit">timing_check_limit</A> [ <B>,</B> [ <A NAME="Rnotify_reg" HREF="#notify_reg">notify_reg</A>] ] <B>)</B> ; </TT>
<TT>$hold <A NAME="_timing_check" HREF="#R_timing_check">_timing_check</A> ::= </TT>
<TT> <B>$hold</B> <B>(</B> reference_event <B>,</B> data_event <B>,</B> timing_check_limit [ <B>,</B> [ notify_reg ] ] <B>)</B> ; </TT>
<TT>$<A NAME="setuphold_timing_check" HREF="#Rsetuphold_timing_check">setuphold_timing_check</A> ::= </TT>
<TT> <B>$setuphold</B> <B>(</B> reference_event <B>,</B> data_event <B>,</B> timing_check_limit <B>,</B> </TT>
<TT> timing_check_limit </TT>
<TT> [ <B>,</B> [ notify_reg ] [ <B>,</B> [ <A NAME="Rstamptime_condition" HREF="#stamptime_condition">stamptime_condition</A> ] [ <B>,</B> [ <A NAME="Rchecktime_condition" HREF="#checktime_condition">checktime_condition</A> ] </TT>
<TT> [ <B>,</B> [ <A NAME="Rdelayed_reference" HREF="#delayed_reference">delayed_reference</A> ] [ <B>,</B> [ <A NAME="Rdelayed_data" HREF="#delayed_data">delayed_data</A> ] ] ] ] ] ] <B>)</B> ; </TT>
<TT>$<A NAME="recovery_timing_check" HREF="#Rrecovery_timing_check">recovery_timing_check</A> ::= </TT>
<TT> <B>$recovery</B> <B>(</B> reference_event <B>,</B> data_event <B>,</B> timing_check_limit [ <B>,</B> [ </TT>
<TT> notify_reg ] ] <B>)</B> ; </TT>
<TT>$<A NAME="removal_timing_check" HREF="#Rremoval_timing_check">removal_timing_check</A> ::= </TT>
<TT> $removal <B>(</B> reference_event <B>,</B> data_event <B>,</B> timing_check_limit [ <B>,</B> [ </TT>
<TT> notify_reg ] ] <B>)</B> ; </TT>
<TT>$<A NAME="recrem_timing_check" HREF="#Rrecrem_timing_check">recrem_timing_check</A> ::= </TT>
<TT> $recrem <B>(</B> reference_event <B>,</B> data_event <B>,</B> timing_check_limit <B>,</B> </TT>
<TT> timing_check_limit </TT>
<TT> [ <B>,</B> [ notify_reg ] [ <B>,</B> [ stamptime_condition ] [ <B>,</B> [ checktime_condition ] </TT>
<TT> [ <B>,</B> [ delayed_reference ] [ <B>,</B> [ delayed_data ] ] ] ] ] ] <B>)</B> ; </TT>
<TT>$<A NAME="skew_timing_check" HREF="#Rskew_timing_check">skew_timing_check</A> ::= </TT>
<TT> <B>$skew</B> <B>(</B> reference_event <B>,</B> data_event <B>,</B> timing_check_limit [ <B>,</B> [ notify_reg ] ] <B>)</B> ; </TT>
<TT>$<A NAME="timeskew_timing_check" HREF="#Rtimeskew_timing_check">timeskew_timing_check</A> ::= </TT>
<TT> $timeskew <B>(</B> reference_event <B>,</B> data_event <B>,</B> timing_check_limit </TT>
<TT> [ <B>,</B> [ notify_reg ] [ <B>,</B> [ <A NAME="Revent_based_flag" HREF="#event_based_flag">event_based_flag</A> ] [ <B>,</B> [ <A NAME="Rremain_active_flag" HREF="#remain_active_flag">remain_active_flag</A> ] ] ] ] <B>)</B> ; </TT>
<TT>$<A NAME="fullskew_timing_check" HREF="#Rfullskew_timing_check">fullskew_timing_check</A> ::= </TT>
<TT> $fullskew <B>(</B> reference_event <B>,</B> data_event <B>,</B> timing_check_limit <B>,</B> </TT>
<TT> timing_check_limit </TT>
<TT> [ <B>,</B> [ notify_reg ] [ <B>,</B> [ event_based_flag ] [ <B>,</B> [ remain_active_flag ] ] ] ] <B>)</B> ; </TT>
<TT>$<A NAME="period_timing_check" HREF="#Rperiod_timing_check">period_timing_check</A> ::= </TT>
<TT> <B>$period</B> <B>(</B> <A NAME="Rcontrolled_reference_event" HREF="#controlled_reference_event">controlled_reference_event</A> <B>,</B> timing_check_limit [ <B>,</B> [ notify_reg ] ] <B>)</B> ; </TT>
<TT>$<A NAME="width_timing_check" HREF="#Rwidth_timing_check">width_timing_check</A> ::= </TT>
<TT> <B>$width</B> <B>(</B> controlled_reference_event <B>,</B> timing_check_limit <B>,</B> </TT>
<TT> <A NAME="Rthreshold" HREF="#threshold">threshold</A> [ <B>,</B> [ notify_reg ] ] <B>)</B> ; </TT>
<TT>$<A NAME="nochange_timing_check" HREF="#Rnochange_timing_check">nochange_timing_check</A> ::= </TT>
<TT> <B>$nochange</B> <B>(</B> reference_event <B>,</B> data_event <B>,</B> <A NAME="Rstart_edge_offset" HREF="#start_edge_offset">start_edge_offset</A> <B>,</B> </TT>
<TT> <A NAME="Rend_edge_offset" HREF="#end_edge_offset">end_edge_offset</A> [ <B>,</B> [ notify_reg ] ] <B>)</B> ; </TT>
<TT> A.7.5.2 System timing check command arguments </TT>
<TT> <A NAME="checktime_condition" HREF="#Rchecktime_condition">checktime_condition</A> ::= mintypmax_expression </TT>
<TT><A NAME="controlled_reference_event" HREF="#Rcontrolled_reference_event">controlled_reference_event</A> ::= <A NAME="Rcontrolled_timing_check_event" HREF="#controlled_timing_check_event">controlled_timing_check_event</A> </TT>
<TT><A NAME="data_event" HREF="#Rdata_event">data_event</A> ::= <A NAME="Rtiming_check_event" HREF="#timing_check_event">timing_check_event</A> </TT>
<TT><A NAME="delayed_data" HREF="#Rdelayed_data">delayed_data</A> ::= </TT>
<TT> <A NAME="Rterminal_identifier" HREF="#terminal_identifier">terminal_identifier</A> </TT>
<TT> | terminal_identifier [ constant_mintypmax_expression ] </TT>
<TT><A NAME="delayed_reference" HREF="#Rdelayed_reference">delayed_reference</A> ::= </TT>
<TT> terminal_identifier </TT>
<TT> | terminal_identifier [ constant_mintypmax_expression ] </TT>
<TT><A NAME="end_edge_offset" HREF="#Rend_edge_offset">end_edge_offset</A> ::= mintypmax_expression </TT>
<TT><A NAME="event_based_flag" HREF="#Revent_based_flag">event_based_flag</A> ::= constant_expression </TT>
<TT><A NAME="notify_reg" HREF="#Rnotify_reg">notify_reg</A> ::= variable_identifier </TT>
<TT><A NAME="reference_event" HREF="#Rreference_event">reference_event</A> ::= timing_check_event </TT>
<TT><A NAME="remain_active_flag" HREF="#Rremain_active_flag">remain_active_flag</A> ::= constant_mintypmax_expression </TT>
<TT><A NAME="stamptime_condition" HREF="#Rstamptime_condition">stamptime_condition</A> ::= mintypmax_expression </TT>
<TT><A NAME="start_edge_offset" HREF="#Rstart_edge_offset">start_edge_offset</A> ::= mintypmax_expression </TT>
<TT><A NAME="threshold" HREF="#Rthreshold">threshold</A> ::=constant_expression </TT>
<TT><A NAME="timing_check_limit" HREF="#Rtiming_check_limit">timing_check_limit</A> ::= expression </TT>
<TT> A.7.5.3 System timing check <B>event</B> definitions </TT>
<TT> <A NAME="timing_check_event" HREF="#Rtiming_check_event">timing_check_event</A> ::= </TT>
<TT> [<A NAME="Rtiming_check_event_control" HREF="#timing_check_event_control">timing_check_event_control</A>] <A NAME="Rspecify_terminal_descriptor" HREF="#specify_terminal_descriptor">specify_terminal_descriptor</A> [ <B>&&&</B> </TT>
<TT> <A NAME="Rtiming_check_condition" HREF="#timing_check_condition">timing_check_condition</A> ] </TT>
<TT><A NAME="controlled_timing_check_event" HREF="#Rcontrolled_timing_check_event">controlled_timing_check_event</A> ::= </TT>
<TT> timing_check_event_control specify_terminal_descriptor [ <B>&&&</B> </TT>
<TT> timing_check_condition ] </TT>
<TT><A NAME="timing_check_event_control" HREF="#Rtiming_check_event_control">timing_check_event_control</A> ::= </TT>
<TT> <B>posedge</B> </TT>
<TT> | <B>negedge</B> </TT>
<TT> | <A NAME="Redge_control_specifier" HREF="#edge_control_specifier">edge_control_specifier</A> </TT>
<TT><A NAME="specify_terminal_descriptor" HREF="#Rspecify_terminal_descriptor">specify_terminal_descriptor</A> ::= </TT>
<TT> specify_input_terminal_descriptor </TT>
<TT> | specify_output_terminal_descriptor </TT>
<TT><A NAME="edge_control_specifier" HREF="#Redge_control_specifier">edge_control_specifier</A> ::= <B>edge</B> [ edge_descriptor [ <B>,</B> edge_descriptor ] ] </TT>
<TT> edge_descriptor <B>1</B> ::= </TT>
<TT> <B>01</B> </TT>
<TT> | <B>10</B> </TT>
<TT> | <A NAME="Rz_or_x" HREF="#z_or_x">z_or_x</A> <A NAME="Rzero_or_one" HREF="#zero_or_one">zero_or_one</A> </TT>
<TT> | zero_or_one z_or_x </TT>
<TT><A NAME="zero_or_one" HREF="#Rzero_or_one">zero_or_one</A> ::= <B>0</B> | <B>1</B> </TT>
<TT><A NAME="z_or_x" HREF="#Rz_or_x">z_or_x</A> ::= <B>x</B> | <B>X</B> | <B>z</B> | <B>Z</B> </TT>
<TT><A NAME="timing_check_condition" HREF="#Rtiming_check_condition">timing_check_condition</A> ::= </TT>
<TT> <A NAME="Rscalar_timing_check_condition" HREF="#scalar_timing_check_condition">scalar_timing_check_condition</A> </TT>
<TT> | <B>(</B> scalar_timing_check_condition <B>)</B> </TT>
<TT><A NAME="scalar_timing_check_condition" HREF="#Rscalar_timing_check_condition">scalar_timing_check_condition</A> ::= </TT>
<TT> expression </TT>
<TT> | <B>~</B> expression </TT>
<TT> | expression <B>==</B> <A NAME="Rscalar_constant" HREF="#scalar_constant">scalar_constant</A> </TT>
<TT> | expression <B>===</B> scalar_constant </TT>
<TT> | expression <B>!=</B> scalar_constant </TT>
<TT> | expression <B>!==</B> scalar_constant </TT>
<TT><A NAME="scalar_constant" HREF="#Rscalar_constant">scalar_constant</A> ::= </TT>
<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>
<TT> A.8 Expressions </TT>
<TT> A.8.1 Concatenations </TT>
<TT> <A NAME="concatenation" HREF="#Rconcatenation">concatenation</A> ::= { expression { <B>,</B> expression } } </TT>
<TT><A NAME="constant_concatenation" HREF="#Rconstant_concatenation">constant_concatenation</A> ::= { constant_expression { <B>,</B> constant_expression } } </TT>
<TT><A NAME="constant_multiple_concatenation" HREF="#Rconstant_multiple_concatenation">constant_multiple_concatenation</A> ::= { constant_expression </TT>
<TT> constant_concatenation } </TT>
<TT><A NAME="module_path_concatenation" HREF="#Rmodule_path_concatenation">module_path_concatenation</A> ::= { module_path_expression { <B>,</B> </TT>
<TT> module_path_expression } } </TT>
<TT><A NAME="module_path_multiple_concatenation" HREF="#Rmodule_path_multiple_concatenation">module_path_multiple_concatenation</A> ::= { constant_expression </TT>
<TT> module_path_concatenation } </TT>
<TT><A NAME="multiple_concatenation" HREF="#Rmultiple_concatenation">multiple_concatenation</A> ::= { constant_expression concatenation } </TT>
<TT><A NAME="net_concatenation" HREF="#Rnet_concatenation">net_concatenation</A> ::= { <A NAME="Rnet_concatenation_value" HREF="#net_concatenation_value">net_concatenation_value</A> { <B>,</B> net_concatenation_value } } </TT>
<TT><A NAME="net_concatenation_value" HREF="#Rnet_concatenation_value">net_concatenation_value</A> ::= </TT>
<TT> <A NAME="Rhierarchical_net_identifier" HREF="#hierarchical_net_identifier">hierarchical_net_identifier</A> </TT>
<TT> | hierarchical_net_identifier [ expression ] { [ expression ] } </TT>
<TT> | hierarchical_net_identifier [ expression ] { [ expression ] } [ </TT>
<TT> range_expression ] </TT>
<TT> | hierarchical_net_identifier [ range_expression ] </TT>
<TT> | net_concatenation </TT>
<TT><A NAME="variable_concatenation" HREF="#Rvariable_concatenation">variable_concatenation</A> ::= { <A NAME="Rvariable_concatenation_value" HREF="#variable_concatenation_value">variable_concatenation_value</A> { <B>,</B> </TT>
<TT> variable_concatenation_value } } </TT>
<TT><A NAME="variable_concatenation_value" HREF="#Rvariable_concatenation_value">variable_concatenation_value</A> ::= </TT>
<TT> <A NAME="Rhierarchical_variable_identifier" HREF="#hierarchical_variable_identifier">hierarchical_variable_identifier</A> </TT&