diff --git a/src/DesignCompile/CompileExpression.cpp b/src/DesignCompile/CompileExpression.cpp index 30b929d882..4bf62897df 100644 --- a/src/DesignCompile/CompileExpression.cpp +++ b/src/DesignCompile/CompileExpression.cpp @@ -1269,6 +1269,7 @@ UHDM::any *CompileHelper::compileSelectExpression( ref_obj *r2 = s.MakeRef_obj(); r2->VpiName(fC->SymName(Bit_select)); r2->VpiFullName(fC->SymName(Bit_select)); + r2->VpiParent(path); elems->push_back(r2); hname.append(".").append(fC->SymName(Bit_select)); } @@ -1797,6 +1798,7 @@ UHDM::any *CompileHelper::compileExpression( NodeId Identifier = fC->Sibling(child); ref_obj *ref = s.MakeRef_obj(); ref->VpiName(fC->SymName(Identifier)); + ref->VpiParent(pexpr); fC->populateCoreMembers(Identifier, Identifier, ref); result = ref; break; @@ -2927,6 +2929,7 @@ UHDM::any *CompileHelper::compileExpression( "::", fC->SymName(Class_scope_name)); ref_obj *ref = s.MakeRef_obj(); ref->VpiName(name); + ref->VpiParent(pexpr); fC->populateCoreMembers(child, child, ref); result = ref; break; @@ -3686,6 +3689,7 @@ UHDM::any *CompileHelper::compilePartSelectRange( UHDM::ref_obj *ref = s.MakeRef_obj(); ref->VpiName(name); ref->VpiDefName(name); + ref->VpiParent(pexpr); part_select->VpiParent(ref); } part_select->VpiConstantSelect(true); @@ -3795,6 +3799,7 @@ UHDM::any *CompileHelper::compilePartSelectRange( UHDM::ref_obj *ref = s.MakeRef_obj(); ref->VpiName(name); ref->VpiDefName(name); + ref->VpiParent(pexpr); part_select->VpiParent(ref); } part_select->VpiConstantSelect(true); @@ -4547,11 +4552,13 @@ UHDM::any *CompileHelper::compileComplexFuncCall( elems->push_back(ref); ref->VpiName("$root"); ref->VpiFullName("$root"); + ref->VpiParent(path); std::string name = StrCat("$root.", fC->SymName(nameId)); ref = s.MakeRef_obj(); elems->push_back(ref); ref->VpiName(fC->SymName(nameId)); ref->VpiFullName(fC->SymName(nameId)); + ref->VpiParent(path); nameId = fC->Sibling(nameId); while (nameId) { if (fC->Type(nameId) == VObjectType::slStringConst) { @@ -4560,6 +4567,7 @@ UHDM::any *CompileHelper::compileComplexFuncCall( elems->push_back(ref); ref->VpiName(fC->SymName(nameId)); ref->VpiFullName(fC->SymName(nameId)); + ref->VpiParent(path); } else if (fC->Type(nameId) == VObjectType::slConstant_expression) { NodeId Constant_expresion = fC->Child(nameId); if (Constant_expresion) { @@ -4670,6 +4678,7 @@ UHDM::any *CompileHelper::compileComplexFuncCall( nameId = fC->Child(Method); } r->VpiName(fC->SymName(nameId)); + r->VpiParent(path); fullName.append(".").append(fC->SymName(nameId)); elems->push_back(r); Method = fC->Sibling(Method); @@ -4992,6 +5001,7 @@ UHDM::any *CompileHelper::compileComplexFuncCall( bit_select *select = s.MakeBit_select(); elems->push_back(select); ref_obj *ref = s.MakeRef_obj(); + ref->VpiName(tmpName); ref->VpiParent(path); if (!tmpName.empty()) select->VpiParent(ref); select->VpiIndex(index); @@ -5007,6 +5017,7 @@ UHDM::any *CompileHelper::compileComplexFuncCall( elems->push_back(ref); ref->VpiName(tmpName); ref->VpiFullName(tmpName); + ref->VpiParent(path); fC->populateCoreMembers(name, name, ref); } tmpName.clear(); @@ -5223,6 +5234,7 @@ UHDM::any *CompileHelper::compileComplexFuncCall( ref_obj *ref = s.MakeRef_obj(); ref->VpiName(the_name); ref->VpiFullName(the_name); + ref->VpiParent(pexpr); result = ref; } return result; diff --git a/src/DesignCompile/CompileHelper.cpp b/src/DesignCompile/CompileHelper.cpp index d28819bab8..3ed73c26f5 100644 --- a/src/DesignCompile/CompileHelper.cpp +++ b/src/DesignCompile/CompileHelper.cpp @@ -2726,11 +2726,12 @@ UHDM::atomic_stmt* CompileHelper::compileProceduralTimingControlStmt( NodeId IntConst = fC->Child(Delay_control); const std::string_view value = fC->SymName(IntConst); UHDM::delay_control* dc = s.MakeDelay_control(); - if (value[0] == '#') + if (value[0] == '#') { dc->VpiDelay(value); - else { + } else { ref_obj* ref = s.MakeRef_obj(); ref->VpiName(value); + ref->VpiParent(pstmt); dc->Delay(ref); } fC->populateCoreMembers(Delay_control, Delay_control, dc); @@ -3705,6 +3706,7 @@ UHDM::any* CompileHelper::compileTfCall(DesignComponent* component, fcall->VpiName(mname); ref_obj* prefix = s.MakeRef_obj(); prefix->VpiName(name); + prefix->VpiParent(fcall); fC->populateCoreMembers(dollar_or_string, dollar_or_string, prefix); fcall->Prefix(prefix); call = fcall; diff --git a/src/DesignCompile/CompileType.cpp b/src/DesignCompile/CompileType.cpp index 7f0286e691..9ae07df05a 100644 --- a/src/DesignCompile/CompileType.cpp +++ b/src/DesignCompile/CompileType.cpp @@ -238,6 +238,7 @@ UHDM::any* CompileHelper::compileVariable( std::string fullName(fC->SymName(variable)); ref_obj* obj = s.MakeRef_obj(); obj->VpiName(fullName); + obj->VpiParent(path); elems->push_back(obj); while (fC->Type(Packed_dimension) == VObjectType::slStringConst) { ref_obj* obj = s.MakeRef_obj(); @@ -1551,6 +1552,7 @@ UHDM::typespec* CompileHelper::compileTypespec( path->Path_elems(s.MakeAnyVec()); ref_obj* ref = s.MakeRef_obj(); ref->VpiName(typeName); + ref->VpiParent(path); path->Path_elems()->push_back(ref); } if (path) {