Support nested generate schemes.

This patch adds support for nested loops and if-else decisions in generate
statements.
This commit is contained in:
Martin Whitaker 2007-10-28 12:07:25 +00:00 committed by Stephen Williams
parent e26b9e72a2
commit 05a6e69d2d
3 changed files with 22 additions and 0 deletions

View File

@ -453,6 +453,16 @@ bool PGenerate::generate_scope_condit_(Design*des, NetScope*container, bool else
void PGenerate::elaborate_subscope_(Design*des, NetScope*scope)
{
// Scan the generated scope for nested generate schemes,
// and *generate* new scopes, which is slightly different
// from simple elaboration.
typedef list<PGenerate*>::const_iterator generate_it_t;
for (generate_it_t cur = generates.begin()
; cur != generates.end() ; cur ++ ) {
(*cur) -> generate_scope(des, scope);
}
// Scan the generated scope for gates that may create
// their own scopes.
typedef list<PGate*>::const_iterator pgate_list_it_t;

View File

@ -309,6 +309,12 @@ bool PGenerate::elaborate_sig_(Design*des, NetScope*scope) const
cur->elaborate_sig(des, scope);
}
typedef list<PGenerate*>::const_iterator generate_it_t;
for (generate_it_t cur = generates.begin()
; cur != generates.end() ; cur ++ ) {
(*cur) -> elaborate_sig(des, scope);
}
typedef list<PGate*>::const_iterator pgate_list_it_t;
for (pgate_list_it_t cur = gates.begin()
; cur != gates.end() ; cur ++) {

View File

@ -3573,6 +3573,12 @@ bool PGenerate::elaborate_(Design*des, NetScope*scope) const
for (proc_it_t cur = behaviors.begin(); cur != behaviors.end(); cur++)
(*cur)->elaborate(des, scope);
typedef list<PGenerate*>::const_iterator generate_it_t;
for (generate_it_t cur = generates.begin()
; cur != generates.end() ; cur ++ ) {
(*cur)->elaborate(des, scope);
}
return true;
}