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