[sv-bc] Generate with multiple begins

From: Wilson Snyder <wsnyder@wsnyder.org>
Date: Sun Jan 09 2011 - 18:24:47 PST

Hello all,

I have a user that sent me the following case which seems to
work on several simulators, but I don't see that nested
begin/ends are legal in generates according to the 2009
grammar. Is this an oversight in the grammar, or intended
to fail? Can someone clarify please? Thanks!

   module t;
      generate
         if (1) begin : g1
            begin : g2
               initial $display("Hello");
            end
            begin : g3
               initial $display("World");
            end
         end
      endgenerate
   endmodule

My reading of the grammar is thus:

  loop_generate_construct ::=
        FOR '(' ... ')' generate_block

  generate_block ::=
        generate_item
        | [ generate_block_identifier ':' ] BEGIN [ ':' generate_block_identifier ]
        { generate_item }
        yEND [ ':' generate_block_identifier ]

  generate_item ::=
        module_or_generate_item
        | interface_or_generate_item
        | checker_or_generate_item

  None of these three _item's have a path back to
  generate_block without hitting another generate
  if/case/for.

Looking at it from the bottom up, the only relevant rules which use the
begin/end keywords are seq_block and generate_block.

   generate_block called from
        loop_generate_construct,
        if_generate_construct,
        case_generate_item

   seq_block called from
        statement_item

We're not in a statement, so begin must be preceeded by
loop/if/case; there's no direct path from generate_item
(etc).

Thanks

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Sun Jan 9 18:25:17 2011

This archive was generated by hypermail 2.1.8 : Sun Jan 09 2011 - 18:26:04 PST