Component

As part of the UUT description, its intended to describe all the sub components used as a parts list. This can then extracted as the Bill Of Materials (BoM) or just components for any FMECA type exercise. ATML Hardware descriptions have always allowed a component subcomponent structure to be defined. In most cases their original objective was to allow UUT is made out of LRU (line replaceable units) which are themselves made up of SRU (shop replaceable units). Each one of these is considered a UUT (at some level) and may have its out UUT Description.

For the ATML demonstrations the UUT is built directly from common components resistors capacitors transistors etc. Describing these components is a edge use case for the ATML hardware descriptions. What is described below will be changed in future releases of the 'dot' standards and therefore replicating its use should be considered carefully.

Walkthrough

The basic concept is we are trying to represent the following components and values with enough detail to both identify component for build and repair and allow us to describe the complete schematic, though a netlist.

Need to identify the component, give it a name and identify what type it is.

To start with every c:Component must have an ID, but an ID is only unique, and has meaning, inside the ATML description, to provide a 'permanent' name we also need to fill in the designator. We could chose only to fill in ID (the mandatory attribute), this would require any client program to use a rule to default designator to ID if not present, since this would restrict its use, a better approach would be to duplicate the information.



- <hc:Component ID="IC1">
- <c:Definition xsi:type="uut:HardwareUUT">
- <c:Identification designator="IC1">
  <c:ModelName>AD5220</c:ModelName>
  </c:Identification>
+ <hc:Interface>
  <c:Ports>
  <c:Port name="CLK">
  <c:ConnectorPins>
  <c:ConnectorPin connectorID="IC1" pinID="1" />
  </c:ConnectorPins>
  </c:Port>
  <c:Port name="U/D">
  <c:ConnectorPins>
  <c:ConnectorPin connectorID="IC1" pinID="2" />
  </c:ConnectorPins>
  </c:Port>
  <c:Port name="A1">
  <c:ConnectorPins>
  <c:ConnectorPin connectorID="IC1" pinID="3" />
  </c:ConnectorPins>
  </c:Port>
  <c:Port name="GND">
  <c:ConnectorPins>
  <c:ConnectorPin connectorID="IC1" pinID="4" />
  </c:ConnectorPins>
  </c:Port>
  <c:Port name="W1">
  <c:ConnectorPins>
  <c:ConnectorPin connectorID="IC1" pinID="5" />
  </c:ConnectorPins>
  </c:Port>
  <c:Port name="B1">
  <c:ConnectorPins>
  <c:ConnectorPin connectorID="IC1" pinID="6" />
  </c:ConnectorPins>
  </c:Port>
  <c:Port name="CS">
  <c:ConnectorPins>
  <c:ConnectorPin connectorID="IC1" pinID="7" />
  </c:ConnectorPins>
  </c:Port>
  <c:Port name="VDD">
  <c:ConnectorPins>
  <c:ConnectorPin connectorID="IC1" pinID="8" />
  </c:ConnectorPins>
  </c:Port>
  </c:Ports>
  </hc:Interface>
  </c:Definition>
  </hc:Component>


The dilemma this leaves is how to identify a component such as a 12K resistor. Initially we considered ModelNames of "12K" or "resistor, 12K". This required some parsing of the component to identify what type it was. It was also felt that there must be some 'other' standard fro identifying component parts perhaps from the CAD or drawing , but none came to light, during the demo.

The resultant solution used, is still unsatisfactory, it uses the Identification number to hold the fact its a resistor (component) and its value 12K. and since ModelName is mandatory uses a component value to identify the part e.g. 12K . If a component standard could be identified then that should be used as the ModelName. In the future we expect to create a special hardwareitem type just for components that allows us to better define these types of hardware components. In the mean time we use what we can.



- <hc:Component ID="R2">
- <c:Definition xsi:type="uut:HardwareUUT">
- <c:Identification designator="R2">
  <c:ModelName>1.2K</c:ModelName>
- <c:IdentificationNumbers>
  <c:IdentificationNumber number="resistor" type="Other" qualifier="1.2K" />
  </c:IdentificationNumbers>
  </c:Identification>
+ <hc:Interface>
  <c:Ports>
  <c:Port name="a" />
  <c:Port name="b" />
  </c:Ports>
  </hc:Interface>
  </c:Definition>
  </hc:Component>
- <hc:Component ID="R6">
- <c:Definition xsi:type="uut:HardwareUUT">
- <c:Identification designator="R6">
  <c:ModelName>100K</c:ModelName>
- <c:IdentificationNumbers>
  <c:IdentificationNumber number="resistor" type="Other" qualifier="100K" />
  </c:IdentificationNumbers>
  </c:Identification>
+ <hc:Interface>
  <c:Ports>
  <c:Port name="a" />
  <c:Port name="b" />
  </c:Ports>
  </hc:Interface>
  </c:Definition>
  </hc:Component>


Identifying the component solves half the problem, however the UUT description is also suppose to represent the schematic, or at least point to point connections. In order to do that we have to provide named ports with each of our components. In essence we can define a set of ports for any HardwareItemDescription type using its c:Interface elements. To do this each (sub)component is made a uut:HardwareUUT type and Interface ports provided.

In the UUT description the names of the ports on components are almost irrelevant, although this is true where the ports represent symmetrical components, e.g. a resistor or capacitor can be inserted anyway around, however for asynchronous components e.g. NPN or switch the Ports and pins have to be matched.

Note: In the example a universal matching between port and pins was not achieved, the best we did was be port name e.g. in/out switch and e,b,c for NPN transistor



- <hc:Component ID="R2">
- <c:Definition xsi:type="uut:HardwareUUT">
+ <c:Identification designator="R2">
  <c:ModelName>1.2K</c:ModelName>
  <c:IdentificationNumbers>
  <c:IdentificationNumber number="resistor" type="Other" qualifier="1.2K" />
  </c:IdentificationNumbers>
  </c:Identification>
- <hc:Interface>
- <c:Ports>
  <c:Port name="a" />
  <c:Port name="b" />
  </c:Ports>
  </hc:Interface>
  </c:Definition>
  </hc:Component>
- <hc:Component ID="C1">
- <c:Definition xsi:type="uut:HardwareUUT">
+ <c:Identification designator="C1">
  <c:ModelName>10uF</c:ModelName>
  <c:IdentificationNumbers>
  <c:IdentificationNumber number="capacitor" type="Other" qualifier="10uF" />
  </c:IdentificationNumbers>
  </c:Identification>
- <hc:Interface>
- <c:Ports>
  <c:Port name="a" />
  <c:Port name="b" />
  </c:Ports>
  </hc:Interface>
  </c:Definition>
  </hc:Component>
- <hc:Component ID="JP1">
- <c:Definition xsi:type="uut:HardwareUUT">
+ <c:Identification designator="JP1">
  <c:ModelName>JUMPER</c:ModelName>
  <c:IdentificationNumbers>
  <c:IdentificationNumber number="jumper" type="Other" qualifier="2" />
  </c:IdentificationNumbers>
  </c:Identification>
- <hc:Interface>
- <c:Ports>
  <c:Port name="1" />
  <c:Port name="2" />
  </c:Ports>
  </hc:Interface>
  </c:Definition>
  </hc:Component>
- <hc:Component ID="Q1">
- <c:Definition xsi:type="uut:HardwareUUT">
+ <c:Identification designator="Q1">
  <c:ModelName>NPN</c:ModelName>
  <c:IdentificationNumbers>
  <c:IdentificationNumber number="transistor" type="Other" qualifier="NPN" />
  </c:IdentificationNumbers>
  </c:Identification>
- <hc:Interface>
- <c:Ports>
  <c:Port name="b" />
  <c:Port name="c" />
  <c:Port name="e" />
  </c:Ports>
  </hc:Interface>
  </c:Definition>
  </hc:Component>
- <hc:Component ID="K1">
- <c:Definition xsi:type="uut:HardwareUUT">
+ <c:Identification designator="K1">
  <c:ModelName>SW</c:ModelName>
  <c:IdentificationNumbers>
  <c:IdentificationNumber number="switch" type="Other" qualifier="2" />
  </c:IdentificationNumbers>
  </c:Identification>
- <hc:Interface>
- <c:Ports>
  <c:Port name="in" />
  <c:Port name="out" />
  </c:Ports>
  </hc:Interface>
  </c:Definition>
  </hc:Component>
- <hc:Component ID="VB">
- <c:Definition xsi:type="uut:HardwareUUT">
+ <c:Identification designator="VB">
  <c:ModelName>TP</c:ModelName>
  <c:IdentificationNumbers>
  <c:IdentificationNumber number="testpoint" type="Other" qualifier="1" />
  </c:IdentificationNumbers>
  </c:Identification>
- <hc:Interface>
- <c:Ports>
  <c:Port name="tp" />
  </c:Ports>
  </hc:Interface>
  </c:Definition>
  </hc:Component>


This identification problem only exists for basic components, if we consider the IC components, here there model already defines there associated pins, every IC has a pin numbering system. In this case we mealy identify a Port for each pin, with a specific connectorID and pinID. In the example It uses a connectorID the same as the component ID which has the effect of defining a corresponding connector.



- <hc:Component ID="IC2">
- <c:Definition xsi:type="uut:HardwareUUT">
- <c:Identification designator="IC2">
  <c:ModelName>BA30BC0T</c:ModelName>
  </c:Identification>
- <hc:Interface>
- <c:Ports>
- <c:Port name="Vin">
- <c:ConnectorPins>
  <c:ConnectorPin connectorID="IC2" pinID="1" />
  </c:ConnectorPins>
  </c:Port>
- <c:Port name="GND">
- <c:ConnectorPins>
  <c:ConnectorPin connectorID="IC2" pinID="2" />
  </c:ConnectorPins>
  </c:Port>
- <c:Port name="Vout">
- <c:ConnectorPins>
  <c:ConnectorPin connectorID="IC2" pinID="3" />
  </c:ConnectorPins>
  </c:Port>
  </c:Ports>
  </hc:Interface>
  </c:Definition>
  </hc:Component>