FUNCTION land_get_associated_land_for_thermal_removal
(input : dependent_thermal_isolation_removal_component_armx) : land_armx;
LOCAL assembly_relationships_for_associated_structure : SET OF Structured_layout_component_sub_assembly_relationship_armx := []; assembly_relationship : SET OF Structured_layout_component_sub_assembly_relationship_armx := bag_to_set(USEDIN(input, 'LAYERED_INTERCONNECT_MODULE_DESIGN_XIM.STRUCTURED_LAYOUT_COMPONENT_SUB_ASSEMBLY_RELATIONSHIP_ARMX.RELATED_VIEW')); associated_structure : Structured_layout_component_armx; component_mrlc : SET OF Material_removal_laminate_component_armx := []; component_relationship : SET OF Structured_layout_component_sub_assembly_relationship_armx := bag_to_set(USEDIN(input, 'LAYERED_INTERCONNECT_MODULE_DESIGN_XIM.STRUCTURED_LAYOUT_COMPONENT_SUB_ASSEMBLY_RELATIONSHIP_ARMX.RELATING_VIEW')); first_location : Template_location_in_structured_template := assembly_relationship[1]\Structured_layout_component_sub_assembly_relationship_armx.first_location; resident_stratum : stratum_armx; resident_sftc : Stratum_feature_template_component_armx; END_LOCAL; --determine resident_stratum; --critical TO just USE resident stratum AS the individual isolation features might be against different stratum features (different power areas). REPEAT i := 1 TO SIZEOF(component_relationship) BY 1; component_mrlc := component_mrlc + component_relationship[i]\Structured_layout_component_sub_assembly_relationship_armx.related_view; END_REPEAT; CASE TRUE OF ('LAYERED_INTERCONNECT_MODULE_DESIGN_XIM.STRATUM_ARMX' IN TYPEOF(component_mrlc[1]\Material_removal_laminate_component_armx.design_intent[1])) : resident_stratum := component_mrlc[1]\Material_removal_laminate_component_armx.design_intent[1]; ('LAYERED_INTERCONNECT_MODULE_DESIGN_XIM.STRATUM_FEATURE_TEMPLATE_COMPONENT_ARMX' IN TYPEOF(component_mrlc[1]\Material_removal_laminate_component_armx.design_intent[1])) : BEGIN resident_sftc := component_mrlc[1]\Material_removal_laminate_component_armx.design_intent[1]; CASE TRUE OF ('LAYERED_INTERCONNECT_MODULE_DESIGN_XIM.STRATUM_FEATURE_ARMX' IN TYPEOF(resident_sftc\Stratum_feature_template_component_armx.implementation_or_resident_stratum)) : resident_stratum := resident_sftc\Stratum_feature_template_component_armx.implementation_or_resident_stratum\Stratum_feature_armx.resident_stratum; ('LAYERED_INTERCONNECT_MODULE_DESIGN_XIM.STRATUM_ARMX' IN TYPEOF(resident_sftc\Stratum_feature_template_component_armx.implementation_or_resident_stratum)) : resident_stratum := resident_sftc\Stratum_feature_template_component_armx.implementation_or_resident_stratum; OTHERWISE : RETURN(?); END_CASE; END; OTHERWISE : RETURN(?); END_CASE; --determine first_location; --if there is more than one assembly_relationship RETURN UNKNOWN; IF SIZEOF(assembly_relationship) <> 1 THEN RETURN(?); END_IF; --determine associated_land; --associated land is on same stratum; associated_structure := assembly_relationship[1]\Structured_layout_component_sub_assembly_relationship_armx.relating_view; assembly_relationships_for_associated_structure := bag_to_set(USEDIN(associated_structure, 'LAYERED_INTERCONNECT_MODULE_DESIGN_XIM.STRUCTURED_LAYOUT_COMPONENT_SUB_ASSEMBLY_RELATIONSHIP_ARMX.RELATING_VIEW')) - assembly_relationship; --this assembly relationship is excluded since we are querying FOR other relationships CASE TRUE OF ('LAYERED_INTERCONNECT_MODULE_DESIGN_XIM.FOOTPRINT_OCCURRENCE_ARMX' IN TYPEOF(associated_structure)) : --if part OF footprint THEN associated_land has same first_location; BEGIN REPEAT i := 1 TO SIZEOF(assembly_relationships_for_associated_structure) BY 1; IF ((first_location :=: assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship_armx.first_location) AND ('LAND_XIM.LAND_ARMX' IN TYPEOF(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship_armx.related_view)) AND (assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship_armx.related_view\Stratum_feature_template_component_armx.resident_stratum :=: resident_stratum)) THEN RETURN(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship_armx.related_view); END_IF; END_REPEAT; --if no land is found RETURN UNKNOWN. RETURN(?); END; ('LAYERED_INTERCONNECT_MODULE_DESIGN_XIM.PADSTACK_OCCURRENCE_ARMX' IN TYPEOF(associated_structure)) : BEGIN REPEAT i := 1 TO SIZEOF(assembly_relationships_for_associated_structure) BY 1; IF (('LAND_XIM.LAND_ARMX' IN TYPEOF(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship_armx.related_view)) AND (assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship_armx.related_view\Stratum_feature_template_component_armx.resident_stratum :=: resident_stratum)) THEN RETURN(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship_armx.related_view); END_IF; END_REPEAT; --if no land is found RETURN UNKNOWN. RETURN(?); END; OTHERWISE : --if no land is found RETURN UNKNOWN. RETURN(?); END_CASE; END_FUNCTION; -- land_get_associated_land_for_thermal_removal
|