MCPcopy Create free account
hub / github.com/chipsalliance/Surelog / elaborateModule_

Method elaborateModule_

src/DesignCompile/DesignElaboration.cpp:552–585  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

550}
551
552bool DesignElaboration::elaborateModule_(std::string_view moduleName,
553 const FileContent* fC,
554 bool onlyTopLevel) {
555 const FileContent::NameIdMap& nameIds = fC->getObjectLookup();
556 const std::string_view libName = fC->getLibrary()->getName();
557 Config* config = getInstConfig(moduleName);
558 if (config == nullptr) config = getCellConfig(moduleName);
559 Design* design = m_compileDesign->getCompiler()->getDesign();
560 if (!m_moduleInstFactory) m_moduleInstFactory = new ModuleInstanceFactory();
561 for (const auto& nameId : nameIds) {
562 if ((fC->Type(nameId.second) == VObjectType::paModule_declaration) &&
563 (moduleName == StrCat(libName, "@", nameId.first))) {
564 DesignComponent* def = design->getComponentDefinition(moduleName);
565 if (onlyTopLevel) {
566 ModuleInstance* instance = m_moduleInstFactory->newModuleInstance(
567 def, fC, nameId.second, nullptr, moduleName, moduleName);
568 design->addTopLevelModuleInstance(instance);
569 } else {
570 ModuleInstance* instance = design->findInstance(moduleName);
571 for (uint32_t i = 0; i < def->getFileContents().size(); i++) {
572 std::vector<ModuleInstance*> parentSubInstances;
573 NodeId id = def->getNodeIds()[i];
574 elaborateInstance_(def->getFileContents()[i], id, InvalidNodeId,
575 m_moduleInstFactory, instance, config,
576 parentSubInstances);
577 if (instance)
578 bindAllInstances_(instance, m_moduleInstFactory, config);
579 }
580 }
581 break;
582 }
583 }
584 return true;
585}
586
587void DesignElaboration::recurseInstanceLoop_(
588 std::vector<int32_t>& from, std::vector<int32_t>& to,

Callers

nothing calls this directly

Calls 10

StrCatFunction · 0.85
getDesignMethod · 0.80
newModuleInstanceMethod · 0.80
findInstanceMethod · 0.80
getNameMethod · 0.45
getLibraryMethod · 0.45
getCompilerMethod · 0.45
TypeMethod · 0.45

Tested by

no test coverage detected