FUNCTION land_get_associated_land_for_electrical_removal
(input : dependent_electrical_isolation_removal_component) : land;
LOCAL assembly_relationships_for_associated_structure : SET OF Structured_layout_component_sub_assembly_relationship := []; assembly_relationship : SET OF Structured_layout_component_sub_assembly_relationship := bag_to_set(USEDIN(input, 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRUCTURED_LAYOUT_COMPONENT_SUB_ASSEMBLY_RELATIONSHIP.RELATED_VIEW')); associated_structure : Structured_layout_component; first_location : Template_location_in_structured_template := assembly_relationship[1]\Structured_layout_component_sub_assembly_relationship_armx.first_location; resident_stratum : stratum; resident_sftc : Stratum_feature_template_component; END_LOCAL; --determine resident_stratum; --critical TO just USE resident stratum AS the individual design intents might be against different stratum features (different power areas). --address the multiple design intents here --use the last stratum found REPEAT i := 1 TO SIZEOF(input\Material_removal_laminate_component_armx.design_intent) BY 1; CASE TRUE OF ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM' IN TYPEOF(input\Material_removal_laminate_component_armx.design_intent[i])) : resident_stratum := input\Material_removal_laminate_component_armx.design_intent[i]; ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE_TEMPLATE_COMPONENT' IN TYPEOF(input\Material_removal_laminate_component_armx.design_intent[i])) : BEGIN resident_sftc := input\Material_removal_laminate_component_armx.design_intent[i]; CASE TRUE OF ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE' 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_ARM.STRATUM' 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; END_REPEAT; --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_ARM.STRUCTURED_LAYOUT_COMPONENT_SUB_ASSEMBLY_RELATIONSHIP.RELATING_VIEW')) - assembly_relationship; --this assembly relationship is excluded since we are querying FOR other relationships CASE TRUE OF ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.FOOTPRINT_OCCURRENCE' 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_ARM.LAND' 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_ARM.PADSTACK_OCCURRENCE' IN TYPEOF(associated_structure)) : BEGIN REPEAT i := 1 TO SIZEOF(assembly_relationships_for_associated_structure) BY 1; IF (('LAND_ARM.LAND' 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_electrical_removal
|