From 173622e9e82b7c2b1c6f8146056661b2a6577735 Mon Sep 17 00:00:00 2001 From: Johannes Stoelp Date: Wed, 26 Jul 2023 00:05:14 +0200 Subject: add some initial playground examples + scripts to build --- browse.cc | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 browse.cc (limited to 'browse.cc') diff --git a/browse.cc b/browse.cc new file mode 100644 index 0000000..afc132e --- /dev/null +++ b/browse.cc @@ -0,0 +1,74 @@ +#include +#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& 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; +} -- cgit v1.2.3