systemc: Add an sc_gen_unique_name namespace to processes as well.
authorGabe Black <gabeblack@google.com>
Thu, 4 Oct 2018 00:08:15 +0000 (17:08 -0700)
committerGabe Black <gabeblack@google.com>
Tue, 16 Oct 2018 00:50:35 +0000 (00:50 +0000)
The standard says that there are namespaces for each module, and
one global namespace. Accellera also has namespaces for each process,
which shows up in the test output.

Change-Id: I4c8c5cecd5fb685d7bab521d9ae131aef23a6ab4
Reviewed-on: https://gem5-review.googlesource.com/c/13291
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/systemc/core/process.hh
src/systemc/core/sc_module.cc

index 85a7a27a88513297ca0f35b2fafb4d2c1ca841f5..9bddbdd041d85932222ed5d47d2a9a97525cc716 100644 (file)
@@ -36,6 +36,7 @@
 
 #include "base/fiber.hh"
 #include "systemc/core/list.hh"
+#include "systemc/core/module.hh"
 #include "systemc/core/object.hh"
 #include "systemc/core/sched_event.hh"
 #include "systemc/core/sensitivity.hh"
@@ -131,6 +132,8 @@ class Process : public ::sc_core::sc_process_b, public ListNode
 
     void waitCount(int count) { _waitCount = count; }
 
+    const char *uniqueName(const char *seed) { return nameGen.gen(seed); }
+
   protected:
     void timeout();
 
@@ -191,6 +194,8 @@ class Process : public ::sc_core::sc_process_b, public ListNode
     std::unique_ptr<::sc_core::sc_report> _lastReport;
 
     std::vector<::sc_core::sc_join *> joinWaiters;
+
+    UniqueNameGen nameGen;
 };
 
 } // namespace sc_gem5
index 1c3b54b985bbb64d54bdc7d95f57db4a02c93ee4..fe4b5cdb6b36be02a717c134da7ce0832a38e56e 100644 (file)
@@ -799,8 +799,12 @@ const char *
 sc_gen_unique_name(const char *seed)
 {
     auto mod = sc_gem5::pickParentModule();
-    return mod ? mod->uniqueName(seed) :
-        ::sc_gem5::nameGen.gen(seed);
+    if (mod)
+        return mod->uniqueName(seed);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    if (p)
+        return p->uniqueName(seed);
+    return ::sc_gem5::nameGen.gen(seed);
 }
 
 bool