aboutsummaryrefslogtreecommitdiff
path: root/src/browse.cc
diff options
context:
space:
mode:
authorJohannes Stoelp <johannes.stoelp@gmail.com>2023-08-27 21:18:53 +0200
committerJohannes Stoelp <johannes.stoelp@gmail.com>2023-08-27 21:18:53 +0200
commitf396fab26611d6107e223a6a3f41c9dff3e2ee9e (patch)
treed1b22fd265f883404d7e484b7f7c460367a136be /src/browse.cc
parent7a0f884c6b11db6a59cfafce7b53158ad59a365e (diff)
downloadsysc-playground-f396fab26611d6107e223a6a3f41c9dff3e2ee9e.tar.gz
sysc-playground-f396fab26611d6107e223a6a3f41c9dff3e2ee9e.zip
move sources into src/ subdir
Diffstat (limited to 'src/browse.cc')
-rw-r--r--src/browse.cc74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/browse.cc b/src/browse.cc
new file mode 100644
index 0000000..afc132e
--- /dev/null
+++ b/src/browse.cc
@@ -0,0 +1,74 @@
+#include <systemc>
+#include "utils.h"
+
+using sc_core::sc_module;
+using sc_core::sc_module_name;
+using sc_core::sc_object;
+
+struct leaf_a : public sc_module {
+ explicit leaf_a(sc_module_name nm) : sc_module(nm) {}
+};
+
+struct leaf_b : public sc_module {
+ explicit leaf_b(sc_module_name nm) : sc_module(nm) {}
+};
+
+struct processor : public sc_module {
+ explicit processor(sc_module_name nm) : sc_module(nm), m_a("a"), m_b("b") {}
+
+ leaf_a m_a;
+ leaf_b m_b;
+};
+
+struct memory : public sc_module {
+ explicit memory(sc_module_name nm) : sc_module(nm), m_a("a") {}
+
+ leaf_a m_a;
+};
+
+struct soc : public sc_module {
+ explicit soc(sc_module_name nm)
+ : sc_module(nm),
+ m_mem0{"mem0"},
+ m_mem1{"mem1"},
+ m_mem2{"mem2"},
+ m_mem3{"mem3"},
+ m_proc0{"proc0"},
+ m_proc1{"proc1"} {}
+
+ memory m_mem0, m_mem1, m_mem2, m_mem3;
+ processor m_proc0, m_proc1;
+};
+
+// -- WALKER -------------------------------------------------------------------
+
+void walk(const std::vector<sc_object*>& objs, unsigned indent = 0) {
+ for (const auto* obj : objs) {
+ if (indent) {
+ printf("%*c", indent, ' ');
+ }
+ printf("BASENAME=" YELLOW "%s" RESET " NAME=" MAGENTA "%s" RESET
+ " HAS_PARENT=%d\n",
+ obj->basename(), obj->name(), obj->get_parent_object() != nullptr);
+
+ walk(obj->get_child_objects(), indent + 2);
+ }
+}
+
+// -- SC_MAIN ------------------------------------------------------------------
+
+extern "C" int sc_main(int, char*[]) {
+ soc s("soc");
+
+ walk(sc_core::sc_get_top_level_objects());
+
+ const auto* obj = sc_core::sc_find_object("soc.mem0");
+ if (obj != nullptr) {
+ puts(obj->name());
+ }
+
+ std::cout << sc_core::sc_hierarchical_name_exists("soc") << std::endl;
+ std::cout << sc_core::sc_hierarchical_name_exists(obj, "a") << std::endl;
+
+ return 0;
+}