| Application module: Land | ISO/TS 10303-1692:2018-11(E) © ISO |
(*
ISO/TC 184/SC 4/WG 12 N9850 - ISO/TS 10303-1692 Land - EXPRESS ARM
Supersedes
ISO/TC 184/SC 4/WG 12 N9438
*)
SCHEMA Land_arm;
USE FROM
Layered_interconnect_module_design_arm;
-- ISO/TS 10303-1698
REFERENCE FROM
Support_resource_arm -- ISO/TS 10303-1800
(bag_to_set);
ENTITY Contact_size_dependent_land
SUBTYPE OF (Land);
SELF\Definition_based_product_occurrence.derived_from : Default_attachment_size_based_land_physical_template;
INVERSE
external_access_mechanism : SET[1:2] OF Land_interface_terminal FOR associated_definition;
END_ENTITY;
ENTITY Dependent_electrical_isolation_removal_component
SUBTYPE OF (Electrical_isolation_laminate_component);
SELF\Electrical_isolation_laminate_component.derived_from : Dependent_electrical_isolation_removal_template;
DERIVE
SELF\Material_removal_laminate_component.causal_item RENAMED associated_land : Land := land_get_associated_land_for_electrical_removal(SELF);
WHERE
WR1: associated_land\Definition_based_product_occurrence.derived_from :=:
SELF\Definition_based_product_occurrence.derived_from\Dependent_electrical_isolation_removal_template.associated_item;
WR2: NOT('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.MULTI_LAYER_MATERIAL_REMOVAL_LAMINATE_COMPONENT' IN TYPEOF(SELF));
WR3: associated_land\Land.functional = FALSE;
END_ENTITY;
ENTITY Dependent_thermal_isolation_removal_component
SUBTYPE OF (Thermal_isolation_removal_component);
SELF\Thermal_isolation_removal_component.derived_from : Dependent_thermal_isolation_removal_template;
DERIVE
associated_land : Land := land_get_associated_land_for_thermal_removal(SELF);
WHERE
WR1: associated_land\Definition_based_product_occurrence.derived_from :=:
SELF\Thermal_isolation_removal_component.derived_from\Dependent_thermal_isolation_removal_template.associated_item;
WR2: associated_land\Land.functional = TRUE;
END_ENTITY;
ENTITY Inter_stratum_feature_dependent_land
ABSTRACT SUPERTYPE
OF (ONEOF (Plated_passage_dependent_land,
Unsupported_passage_dependent_land))
SUBTYPE OF (Land);
SELF\Definition_based_product_occurrence.derived_from : Default_passage_based_land_physical_template;
END_ENTITY;
ENTITY Land
SUPERTYPE OF
(ONEOF (Contact_size_dependent_land,
Inter_stratum_feature_dependent_land))
SUBTYPE OF (Stratum_feature_template_component);
alternate_land_definition :
OPTIONAL
Land_physical_template;
SELF\Definition_based_product_occurrence.derived_from : Land_physical_template;
DERIVE
functional : BOOLEAN := (SIZEOF(['LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.CONDUCTOR',
'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.CONNECTED_FILLED_AREA'] *
TYPEOF(SELF\Stratum_feature_template_component.implementation_or_resident_stratum)) = 1);
INVERSE
access_mechanism : SET[0:?] OF Land_join_terminal FOR associated_definition;
WHERE
WR1: NOT(functional) OR (SIZEOF(access_mechanism) > 0);
END_ENTITY;
ENTITY Land_interface_terminal
SUBTYPE OF (Laminate_component_interface_terminal);
SELF\Component_feature.definition : Land_template_interface_terminal;
SELF\Component_feature.associated_definition : Contact_size_dependent_land;
WHERE
WR1: NOT EXISTS(SELF\Shape_element.description);
END_ENTITY;
ENTITY Land_join_terminal
SUBTYPE OF (Laminate_component_join_terminal);
SELF\Component_feature.definition : Land_template_join_terminal;
SELF\Component_feature.associated_definition : Land;
WHERE
WR1: NOT EXISTS(SELF\Shape_element.description);
END_ENTITY;
ENTITY Land_with_join_terminal
SUBTYPE OF (Land, Land_join_terminal);
DERIVE
SELF\Component_feature.associated_definition : Land_with_join_terminal := SELF;
END_ENTITY;
ENTITY Plated_passage_dependent_land
SUBTYPE OF (Inter_stratum_feature_dependent_land);
reference_plated_passage : Plated_passage;
SELF\Definition_based_product_occurrence.derived_from : Default_plated_passage_based_land_physical_template;
END_ENTITY;
ENTITY Thermal_isolation_removal_component
SUBTYPE OF (Material_removal_structured_component);
SELF\Definition_based_product_occurrence.derived_from : Thermal_isolation_removal_template;
WHERE
WR1: NOT('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.MULTI_LAYER_MATERIAL_REMOVAL_LAMINATE_COMPONENT' IN TYPEOF(SELF));
END_ENTITY;
ENTITY Unsupported_passage_dependent_land
SUBTYPE OF (Inter_stratum_feature_dependent_land);
reference_passage : Unsupported_passage;
SELF\Definition_based_product_occurrence.derived_from : Default_unsupported_passage_based_land_physical_template;
END_ENTITY;
SUBTYPE_CONSTRAINT l_laminate_component_interface_terminal_subtypes FOR Laminate_component_interface_terminal;
ONEOF (Component_termination_passage_interface_terminal,
Land_interface_terminal);
END_SUBTYPE_CONSTRAINT;
SUBTYPE_CONSTRAINT l_laminate_component_join_terminal_subtypes FOR Laminate_component_join_terminal;
ONEOF (Component_termination_passage_join_terminal,
Land_join_terminal,
Embedded_physical_component_terminal);
END_SUBTYPE_CONSTRAINT;
SUBTYPE_CONSTRAINT stratum_feature_template_component_subtypes FOR Stratum_feature_template_component;
ONEOF (Area_component,
Conductive_interconnect_element,
Land);
END_SUBTYPE_CONSTRAINT;
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.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.design_intent) BY 1;
CASE TRUE OF
('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM' IN TYPEOF(input\Material_removal_laminate_component.design_intent[i])) :
resident_stratum := input\Material_removal_laminate_component.design_intent[i];
('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE_TEMPLATE_COMPONENT' IN TYPEOF(input\Material_removal_laminate_component.design_intent[i])) :
BEGIN
resident_sftc := input\Material_removal_laminate_component.design_intent[i];
CASE TRUE OF
('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE' IN TYPEOF(resident_sftc\Stratum_feature_template_component.implementation_or_resident_stratum)) :
resident_stratum := resident_sftc\Stratum_feature_template_component.implementation_or_resident_stratum\Stratum_feature.resident_stratum;
('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM' IN TYPEOF(resident_sftc\Stratum_feature_template_component.implementation_or_resident_stratum)) :
resident_stratum := resident_sftc\Stratum_feature_template_component.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.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.first_location) AND
('LAND_ARM.LAND' IN TYPEOF(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view)) AND
(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view\Stratum_feature_template_component.resident_stratum
:=: resident_stratum))
THEN
RETURN(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.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.related_view)) AND
(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view\Stratum_feature_template_component.resident_stratum
:=: resident_stratum))
THEN
RETURN(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.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;
FUNCTION land_get_associated_land_for_thermal_removal
(input : Dependent_thermal_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;
component_mrlc : SET OF Material_removal_laminate_component := [];
component_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.RELATING_VIEW'));
first_location : Template_location_in_structured_template := assembly_relationship[1]\Structured_layout_component_sub_assembly_relationship.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 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.related_view;
END_REPEAT;
CASE TRUE OF
('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM' IN TYPEOF(component_mrlc[1]\Material_removal_laminate_component.design_intent[1])) :
resident_stratum := component_mrlc[1]\Material_removal_laminate_component.design_intent[1];
('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE_TEMPLATE_COMPONENT' IN TYPEOF(component_mrlc[1]\Material_removal_laminate_component.design_intent[1])) :
BEGIN
resident_sftc := component_mrlc[1]\Material_removal_laminate_component.design_intent[1];
CASE TRUE OF
('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE' IN TYPEOF(resident_sftc\Stratum_feature_template_component.implementation_or_resident_stratum)) :
resident_stratum := resident_sftc\Stratum_feature_template_component.implementation_or_resident_stratum\Stratum_feature.resident_stratum;
('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM' IN TYPEOF(resident_sftc\Stratum_feature_template_component.implementation_or_resident_stratum)) :
resident_stratum := resident_sftc\Stratum_feature_template_component.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.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.first_location) AND
('LAND_ARM.LAND' IN TYPEOF(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view)) AND
(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view\Stratum_feature_template_component.resident_stratum
:=: resident_stratum))
THEN
RETURN(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.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.related_view)) AND
(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view\Stratum_feature_template_component.resident_stratum
:=: resident_stratum))
THEN
RETURN(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.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;
END_SCHEMA; -- Land_arm
© ISO 2018 — All rights reserved