Add support for named events in packages.

This commit is contained in:
Martin Whitaker 2019-09-28 21:00:17 +01:00
parent 1e26a808ad
commit b0142a6406
4 changed files with 17 additions and 2 deletions

View File

@ -725,6 +725,7 @@ bool PPackage::elaborate_scope(Design*des, NetScope*scope)
elaborate_scope_classes(des, scope, classes_lexical); elaborate_scope_classes(des, scope, classes_lexical);
elaborate_scope_funcs(des, scope, funcs); elaborate_scope_funcs(des, scope, funcs);
elaborate_scope_tasks(des, scope, tasks); elaborate_scope_tasks(des, scope, tasks);
elaborate_scope_events_(des, scope, events);
return true; return true;
} }

View File

@ -1056,6 +1056,9 @@ data_declaration /* IEEE1800-2005: A.2.1.3 */
} }
pform_makewire(@2, 0, str_strength, $3, NetNet::IMPLICIT_REG, data_type); pform_makewire(@2, 0, str_strength, $3, NetNet::IMPLICIT_REG, data_type);
} }
| attribute_list_opt K_event event_variable_list ';'
{ if ($3) pform_make_events($3, @2.text, @2.first_line);
}
; ;
data_type /* IEEE1800-2005: A.2.2.1 */ data_type /* IEEE1800-2005: A.2.2.1 */
@ -3174,7 +3177,8 @@ clocking_event_opt /* */
event_control /* A.K.A. clocking_event */ event_control /* A.K.A. clocking_event */
: '@' hierarchy_identifier : '@' hierarchy_identifier
{ PEIdent*tmpi = new PEIdent(*$2); { PEIdent*tmpi = pform_new_ident(@2, *$2);
FILE_NAME(tmpi, @2);
PEEvent*tmpe = new PEEvent(PEEvent::ANYEDGE, tmpi); PEEvent*tmpe = new PEEvent(PEEvent::ANYEDGE, tmpi);
PEventStatement*tmps = new PEventStatement(tmpe); PEventStatement*tmps = new PEventStatement(tmpe);
FILE_NAME(tmps, @1); FILE_NAME(tmps, @1);
@ -6403,7 +6407,7 @@ statement_item /* This is roughly statement_item in the LRM */
$$ = tmp; $$ = tmp;
} }
| K_TRIGGER hierarchy_identifier ';' | K_TRIGGER hierarchy_identifier ';'
{ PTrigger*tmp = new PTrigger(*$2); { PTrigger*tmp = pform_new_trigger(@2, *$2);
FILE_NAME(tmp, @1); FILE_NAME(tmp, @1);
delete $2; delete $2;
$$ = tmp; $$ = tmp;

View File

@ -730,6 +730,14 @@ PEIdent* pform_new_ident(const struct vlltype&loc, const pform_name_t&name)
return new PEIdent(name); return new PEIdent(name);
} }
PTrigger* pform_new_trigger(const struct vlltype&loc, const pform_name_t&name)
{
if (gn_system_verilog() && name.size() == 1)
check_potential_imports(loc, name.back().name);
return new PTrigger(name);
}
PGenerate* pform_parent_generate(void) PGenerate* pform_parent_generate(void)
{ {
return pform_cur_generate; return pform_cur_generate;

View File

@ -248,6 +248,8 @@ extern void pform_add_modport_port(const struct vlltype&loc,
*/ */
extern PEIdent* pform_new_ident(const struct vlltype&loc, const pform_name_t&name); extern PEIdent* pform_new_ident(const struct vlltype&loc, const pform_name_t&name);
extern PTrigger* pform_new_trigger(const struct vlltype&loc, const pform_name_t&name);
/* /*
* Enter/exit name scopes. The push_scope function pushes the scope * Enter/exit name scopes. The push_scope function pushes the scope
* name string onto the scope hierarchy. The pop pulls it off and * name string onto the scope hierarchy. The pop pulls it off and