Add support for package scope resolution for named events.
This commit is contained in:
parent
12fe4f2bf3
commit
c5c264400e
4
PExpr.h
4
PExpr.h
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef IVL_PExpr_H
|
#ifndef IVL_PExpr_H
|
||||||
#define IVL_PExpr_H
|
#define IVL_PExpr_H
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998-2016 Stephen Williams <steve@icarus.com>
|
* Copyright (c) 1998-2019 Stephen Williams <steve@icarus.com>
|
||||||
* Copyright CERN 2013 / Stephen Williams (steve@icarus.com)
|
* Copyright CERN 2013 / Stephen Williams (steve@icarus.com)
|
||||||
*
|
*
|
||||||
* This source code is free software; you can redistribute it
|
* This source code is free software; you can redistribute it
|
||||||
|
|
@ -379,6 +379,8 @@ class PEIdent : public PExpr {
|
||||||
|
|
||||||
virtual bool is_collapsible_net(Design*des, NetScope*scope) const;
|
virtual bool is_collapsible_net(Design*des, NetScope*scope) const;
|
||||||
|
|
||||||
|
const PPackage* package() const { return package_; }
|
||||||
|
|
||||||
const pform_name_t& path() const { return path_; }
|
const pform_name_t& path() const { return path_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
|
|
@ -416,8 +416,8 @@ PReturn::~PReturn()
|
||||||
delete expr_;
|
delete expr_;
|
||||||
}
|
}
|
||||||
|
|
||||||
PTrigger::PTrigger(const pform_name_t&e)
|
PTrigger::PTrigger(PPackage*pkg, const pform_name_t&e)
|
||||||
: event_(e)
|
: package_(pkg), event_(e)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -563,13 +563,14 @@ class PReturn : public Statement {
|
||||||
class PTrigger : public Statement {
|
class PTrigger : public Statement {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit PTrigger(const pform_name_t&ev);
|
explicit PTrigger(PPackage*pkg, const pform_name_t&ev);
|
||||||
~PTrigger();
|
~PTrigger();
|
||||||
|
|
||||||
virtual NetProc* elaborate(Design*des, NetScope*scope) const;
|
virtual NetProc* elaborate(Design*des, NetScope*scope) const;
|
||||||
virtual void dump(ostream&out, unsigned ind) const;
|
virtual void dump(ostream&out, unsigned ind) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
PPackage*package_;
|
||||||
pform_name_t event_;
|
pform_name_t event_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
16
elaborate.cc
16
elaborate.cc
|
|
@ -4310,7 +4310,13 @@ cerr << endl;
|
||||||
const NetExpr*par = 0;
|
const NetExpr*par = 0;
|
||||||
NetEvent* eve = 0;
|
NetEvent* eve = 0;
|
||||||
|
|
||||||
NetScope*found_in = symbol_search(this, des, scope,
|
NetScope*use_scope = scope;
|
||||||
|
if (id->package()) {
|
||||||
|
use_scope = des->find_package(id->package()->pscope_name());
|
||||||
|
ivl_assert(*this, use_scope);
|
||||||
|
}
|
||||||
|
|
||||||
|
NetScope*found_in = symbol_search(this, des, use_scope,
|
||||||
id->path(),
|
id->path(),
|
||||||
sig, par, eve);
|
sig, par, eve);
|
||||||
|
|
||||||
|
|
@ -5337,11 +5343,17 @@ NetProc* PTrigger::elaborate(Design*des, NetScope*scope) const
|
||||||
{
|
{
|
||||||
assert(scope);
|
assert(scope);
|
||||||
|
|
||||||
|
NetScope*use_scope = scope;
|
||||||
|
if (package_) {
|
||||||
|
use_scope = des->find_package(package_->pscope_name());
|
||||||
|
ivl_assert(*this, use_scope);
|
||||||
|
}
|
||||||
|
|
||||||
NetNet* sig = 0;
|
NetNet* sig = 0;
|
||||||
const NetExpr*par = 0;
|
const NetExpr*par = 0;
|
||||||
NetEvent* eve = 0;
|
NetEvent* eve = 0;
|
||||||
|
|
||||||
NetScope*found_in = symbol_search(this, des, scope, event_,
|
NetScope*found_in = symbol_search(this, des, use_scope, event_,
|
||||||
sig, par, eve);
|
sig, par, eve);
|
||||||
|
|
||||||
if (found_in == 0) {
|
if (found_in == 0) {
|
||||||
|
|
|
||||||
18
parse.y
18
parse.y
|
|
@ -6412,12 +6412,18 @@ statement_item /* This is roughly statement_item in the LRM */
|
||||||
FILE_NAME(tmp, @1);
|
FILE_NAME(tmp, @1);
|
||||||
$$ = tmp;
|
$$ = tmp;
|
||||||
}
|
}
|
||||||
| K_TRIGGER hierarchy_identifier ';'
|
| K_TRIGGER hierarchy_identifier ';'
|
||||||
{ PTrigger*tmp = pform_new_trigger(@2, *$2);
|
{ PTrigger*tmp = pform_new_trigger(@2, 0, *$2);
|
||||||
FILE_NAME(tmp, @1);
|
FILE_NAME(tmp, @1);
|
||||||
delete $2;
|
delete $2;
|
||||||
$$ = tmp;
|
$$ = tmp;
|
||||||
}
|
}
|
||||||
|
| K_TRIGGER PACKAGE_IDENTIFIER K_SCOPE_RES hierarchy_identifier
|
||||||
|
{ PTrigger*tmp = pform_new_trigger(@4, $2, *$4);
|
||||||
|
FILE_NAME(tmp, @1);
|
||||||
|
delete $4;
|
||||||
|
$$ = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
| procedural_assertion_statement { $$ = $1; }
|
| procedural_assertion_statement { $$ = $1; }
|
||||||
|
|
||||||
|
|
|
||||||
9
pform.cc
9
pform.cc
|
|
@ -728,12 +728,15 @@ 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)
|
PTrigger* pform_new_trigger(const struct vlltype&loc, PPackage*pkg,
|
||||||
|
const pform_name_t&name)
|
||||||
{
|
{
|
||||||
if (gn_system_verilog() && name.size() == 1)
|
if (gn_system_verilog() && pkg == 0 && name.size() == 1)
|
||||||
check_potential_imports(loc, name.back().name);
|
check_potential_imports(loc, name.back().name);
|
||||||
|
|
||||||
return new PTrigger(name);
|
PTrigger*tmp = new PTrigger(pkg, name);
|
||||||
|
FILE_NAME(tmp, loc);
|
||||||
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
PGenerate* pform_parent_generate(void)
|
PGenerate* pform_parent_generate(void)
|
||||||
|
|
|
||||||
3
pform.h
3
pform.h
|
|
@ -248,7 +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);
|
extern PTrigger* pform_new_trigger(const struct vlltype&loc, PPackage*pkg,
|
||||||
|
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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue