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

Method compileUdpInstantiation

src/DesignCompile/CompileHelper.cpp:2719–2775  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2717}
2718
2719void CompileHelper::compileUdpInstantiation(ModuleDefinition* mod,
2720 const FileContent* fC,
2721 CompileDesign* compileDesign,
2722 NodeId id,
2723 ValuedComponentI* instance) {
2724 VObjectTypeUnorderedSet insttypes = {VObjectType::paUdp_instance};
2725 UHDM::Serializer& s = compileDesign->getSerializer();
2726 std::vector<NodeId> hierInstIds = fC->sl_collect_all(id, insttypes, true);
2727 NodeId hierInstId;
2728 if (!hierInstIds.empty()) hierInstId = hierInstIds[0];
2729 NodeId udpDefId = fC->Child(id);
2730 if (!hierInstId) return;
2731 std::string_view instName;
2732 while (hierInstId) {
2733 NodeId instId = fC->sl_collect(hierInstId, VObjectType::paName_of_instance);
2734 NodeId identifierId;
2735 NodeId Net_lvalue;
2736 if (instId) {
2737 identifierId = fC->Child(instId);
2738 instName = fC->SymName(identifierId);
2739 Net_lvalue = fC->Sibling(instId);
2740 }
2741
2742 NodeId unpackedDimId;
2743 if (identifierId) unpackedDimId = fC->Sibling(identifierId);
2744 UHDM::udp* udp = s.MakeUdp();
2745 UHDM::primitive* gate = udp;
2746 if (unpackedDimId &&
2747 (fC->Type(unpackedDimId) == VObjectType::paUnpacked_dimension)) {
2748 // Vector instances
2749 int32_t size;
2750 VectorOfrange* ranges =
2751 compileRanges(mod, fC, unpackedDimId, compileDesign, Reduce::No,
2752 nullptr, instance, size, false);
2753 if (mod->getPrimitiveArrays() == nullptr) {
2754 mod->setPrimitiveArrays(s.MakePrimitive_arrayVec());
2755 }
2756 UHDM::primitive_array* gate_array = s.MakeUdp_array();
2757 VectorOfprimitive* prims = s.MakePrimitiveVec();
2758 gate_array->Primitives(prims);
2759 gate_array->Ranges(ranges);
2760 prims->push_back(gate);
2761 mod->getPrimitiveArrays()->push_back(gate_array);
2762 } else {
2763 if (mod->getPrimitives() == nullptr) {
2764 mod->setPrimitives(s.MakePrimitiveVec());
2765 }
2766 mod->getPrimitives()->push_back(gate);
2767 }
2768
2769 gate->VpiName(instName);
2770 gate->VpiDefName(fC->SymName(udpDefId));
2771 fC->populateCoreMembers(id, id, gate);
2772 writePrimTerms(mod, fC, compileDesign, Net_lvalue, gate, 0, instance);
2773 hierInstId = fC->Sibling(hierInstId);
2774 }
2775}
2776

Callers 1

collectModuleObjects_Method · 0.80

Calls 12

writePrimTermsFunction · 0.85
getPrimitiveArraysMethod · 0.80
setPrimitiveArraysMethod · 0.80
getPrimitivesMethod · 0.80
setPrimitivesMethod · 0.80
populateCoreMembersMethod · 0.80
sl_collect_allMethod · 0.45
ChildMethod · 0.45
sl_collectMethod · 0.45
SymNameMethod · 0.45
SiblingMethod · 0.45
TypeMethod · 0.45

Tested by

no test coverage detected