Associate signals with scopes rather than entities
This commit is contained in:
parent
43c671cb5c
commit
44aa8a6b91
|
|
@ -41,12 +41,12 @@ static vhdl_var_ref *translate_signal(ivl_expr_t e)
|
|||
{
|
||||
ivl_signal_t sig = ivl_expr_signal(e);
|
||||
|
||||
const vhdl_entity *ent = find_entity_for_signal(sig);
|
||||
assert(ent);
|
||||
const vhdl_scope *scope = find_scope_for_signal(sig);
|
||||
assert(scope);
|
||||
|
||||
const char *renamed = get_renamed_signal(sig).c_str();
|
||||
|
||||
const vhdl_decl *decl = ent->get_arch()->get_scope()->get_decl(strip_var(renamed));
|
||||
const vhdl_decl *decl = scope->get_decl(strip_var(renamed));
|
||||
assert(decl);
|
||||
|
||||
vhdl_type *type = new vhdl_type(*decl->get_type());
|
||||
|
|
|
|||
|
|
@ -141,7 +141,7 @@ static void declare_signals(vhdl_entity *ent, ivl_scope_t scope)
|
|||
else
|
||||
sig_type = vhdl_type::nunsigned(width);
|
||||
|
||||
remember_signal(sig, ent);
|
||||
remember_signal(sig, ent->get_arch()->get_scope());
|
||||
|
||||
// Make sure the signal name conforms to VHDL naming rules
|
||||
std::string name(ivl_signal_basename(sig));
|
||||
|
|
@ -381,8 +381,11 @@ int draw_function(ivl_scope_t scope, ivl_scope_t parent)
|
|||
|
||||
vhdl_function *func = new vhdl_function(funcname, vhdl_type::std_logic());
|
||||
|
||||
ent->get_arch()->get_scope()->add_decl(func);
|
||||
int nports = ivl_scope_ports(scope);
|
||||
std::cout << "function has " << nports << " ports" << std::endl;
|
||||
|
||||
|
||||
ent->get_arch()->get_scope()->add_decl(func);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,8 +38,8 @@
|
|||
* defined.
|
||||
*/
|
||||
struct signal_defn_t {
|
||||
std::string renamed; // The name of the VHDL signal
|
||||
const vhdl_entity *ent; // The entity where it is defined
|
||||
std::string renamed; // The name of the VHDL signal
|
||||
const vhdl_scope *scope; // The scope where it is defined
|
||||
};
|
||||
|
||||
typedef std::map<ivl_signal_t, signal_defn_t> signal_defn_map_t;
|
||||
|
|
@ -93,11 +93,11 @@ void remember_entity(vhdl_entity* ent)
|
|||
/*
|
||||
* Remeber the association of signal to entity.
|
||||
*/
|
||||
void remember_signal(ivl_signal_t sig, const vhdl_entity *ent)
|
||||
void remember_signal(ivl_signal_t sig, const vhdl_scope *scope)
|
||||
{
|
||||
assert(g_known_signals.find(sig) == g_known_signals.end());
|
||||
|
||||
signal_defn_t defn = { ivl_signal_basename(sig), ent };
|
||||
signal_defn_t defn = { ivl_signal_basename(sig), scope };
|
||||
g_known_signals[sig] = defn;
|
||||
}
|
||||
|
||||
|
|
@ -111,11 +111,11 @@ void rename_signal(ivl_signal_t sig, const std::string &renamed)
|
|||
g_known_signals[sig].renamed = renamed;
|
||||
}
|
||||
|
||||
const vhdl_entity *find_entity_for_signal(ivl_signal_t sig)
|
||||
const vhdl_scope *find_scope_for_signal(ivl_signal_t sig)
|
||||
{
|
||||
assert(g_known_signals.find(sig) != g_known_signals.end());
|
||||
|
||||
return g_known_signals[sig].ent;
|
||||
return g_known_signals[sig].scope;
|
||||
}
|
||||
|
||||
const std::string &get_renamed_signal(ivl_signal_t sig)
|
||||
|
|
|
|||
|
|
@ -27,9 +27,9 @@ vhdl_entity *get_active_entity();
|
|||
|
||||
vhdl_var_ref *nexus_to_var_ref(vhdl_scope *arch_scope, ivl_nexus_t nexus);
|
||||
|
||||
void remember_signal(ivl_signal_t sig, const vhdl_entity *ent);
|
||||
void remember_signal(ivl_signal_t sig, const vhdl_scope *scope);
|
||||
void rename_signal(ivl_signal_t sig, const std::string &renamed);
|
||||
const vhdl_entity *find_entity_for_signal(ivl_signal_t sig);
|
||||
const vhdl_scope *find_scope_for_signal(ivl_signal_t sig);
|
||||
const std::string &get_renamed_signal(ivl_signal_t sig);
|
||||
|
||||
void blocking_assign_to(vhdl_procedural *proc, ivl_signal_t sig);
|
||||
|
|
|
|||
Loading…
Reference in New Issue