aboutsummaryrefslogblamecommitdiff
path: root/src/browse.cc
blob: e151bc2ed9741d3556b66f215281b2317c422c93 (plain) (tree)
1
2
                  
                      







































































                                                                                
#include <systemc>
#include "utils/log.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;
}