| 2717 | } |
| 2718 | |
| 2719 | void 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 |
no test coverage detected