From 44aa8a6b9187347da727ff7963f5cb6f6c86b14b Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Wed, 25 Jun 2008 18:12:57 +0100 Subject: [PATCH] Associate signals with scopes rather than entities --- tgt-vhdl/expr.cc | 6 +++--- tgt-vhdl/scope.cc | 7 +++++-- tgt-vhdl/vhdl.cc | 12 ++++++------ tgt-vhdl/vhdl_target.h | 4 ++-- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/tgt-vhdl/expr.cc b/tgt-vhdl/expr.cc index 75d94147f..485c18206 100644 --- a/tgt-vhdl/expr.cc +++ b/tgt-vhdl/expr.cc @@ -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()); diff --git a/tgt-vhdl/scope.cc b/tgt-vhdl/scope.cc index 049ab1141..e07715a22 100644 --- a/tgt-vhdl/scope.cc +++ b/tgt-vhdl/scope.cc @@ -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; } diff --git a/tgt-vhdl/vhdl.cc b/tgt-vhdl/vhdl.cc index 29ea76106..670c928ae 100644 --- a/tgt-vhdl/vhdl.cc +++ b/tgt-vhdl/vhdl.cc @@ -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 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) diff --git a/tgt-vhdl/vhdl_target.h b/tgt-vhdl/vhdl_target.h index 686b560e4..4e8109a1d 100644 --- a/tgt-vhdl/vhdl_target.h +++ b/tgt-vhdl/vhdl_target.h @@ -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);