Skills
Innexis Ae Model Xml
Skill
innexis-ae-model-xml. Author the Innexis Architect Explorer analysis model (the AR-PACKAGE XML the AE engine consumes) - its AUTOSAR-shaped schema, the HW-SW-MAPPING element that actually answers "can this electronics carry this software", the hard architecture limits, and the mapping from Teamcenter/Cameo system elements. Use when generating or hand-editing an AE .xml, sizing an AE architecture, or planning a TC-to-AE transform.
The file the AE engine validates and simulates. Schema at
D:\Innexis_AE\SystemExplorer\config\XSD_Schema\AE_XSD_schema.xsd ("Ae XSD Schema Version 2"),
188 elements, 254 complex types, no namespace. A 135-page generated reference is at
SystemExplorer\docs\InnexisArchitectExplorerXSDSchema_app.pdf, but the XSD itself is far more
compact to read.
It is an AUTOSAR-shaped schema with Siemens hardware extensions. Single root AR-PACKAGE.
Document order is a fixed xs:sequence
AR-PACKAGE
└── ELEMENTS (maxOccurs unbounded)
├── Simulation-Time value + unit {s|ms|us|ns}
├── SENDER-RECEIVER-INTERFACE* the data contracts
├── APPLICATION-SW-COMPONENT-TYPE* SWCs: PORTS + INTERNAL-BEHAVIORS
├── SWC-CUSTOM-BEHAVIOR* operation sequences, custom C hooks
├── PRE-BUILT-APPLICATION* <PATH DEST="..."> to a real ELF
├── Network-Topology InterECU_communication: CAN-BUS / Eth-Switch
├── ECUs{1,100} → SoCs → AXI/Ethernet/UCIe, Chiplet*, CPU_Cluster, Generic_Hardware*
├── HW-SW-MAPPING* the allocation
└── Analysis which analyses to enable, per SoC
Emit them in that order or schema validation fails.
References are name paths, and names ARE the identity
There are no UUIDs in this file. Everything is a DEST attribute holding a path built from
<SHORT-NAME name="..."/> values:
/SRI_1/RandomData_1
/SWC_0/default/Runnable_Entity_1
/ECU_0/SOC_0/Chiplet_0/CPU_0
⇒ For any generator, name uniqueness and stability is a correctness requirement, not a tidiness one. Two elements sharing a short name silently produce a model that validates and means something else.
The three parts that matter
Software is a real task model
<APPLICATION-SW-COMPONENT-TYPE>
<SHORT-NAME name="SWC_0"/>
<PORTS><P-PORT-PROTOTYPE><SHORT-NAME name="CP_2"/>
<PROVIDED-INTERFACE-TREF DEST="/SRI_1"/></P-PORT-PROTOTYPE></PORTS>
<INTERNAL-BEHAVIORS><SWC-INTERNAL-BEHAVIOR>
<SHORT-NAME name="default"/>
<RUNNABLES><RUNNABLE-ENTITY>
<SHORT-NAME name="Runnable_Entity_1"/>
<DATA-WRITE-ACCESS><VARIABLE-ACCESS>
<SHORT-NAME name="FOP_1"/>
<ACCESSED-VARIABLE><AUTOSAR-VARIABLE-IREF>
<PORT-PROTOTYPE-REF DEST="/SWC_0/CP_2"/>
<TARGET-DATA-PROTOTYPE-REF DEST="/SRI_1/RandomData_1"/>
</AUTOSAR-VARIABLE-IREF></ACCESSED-VARIABLE>
</VARIABLE-ACCESS></DATA-WRITE-ACCESS>
</RUNNABLE-ENTITY></RUNNABLES>
<EVENTS><TIMING-EVENT>
<SHORT-NAME name="TimingEvent_1"/>
<START-ON-EVENT-REF DEST="/SWC_0/default/Runnable_Entity_1"/>
<PERIOD value="100" unit="ms"/>
</TIMING-EVENT></EVENTS>
</SWC-INTERNAL-BEHAVIOR></INTERNAL-BEHAVIORS>
</APPLICATION-SW-COMPONENT-TYPE>
A runnable is triggered by a TIMING-EVENT (with PERIOD) or a DATA-RECEIVED-EVENT. That is
enough to schedule. Without a trigger there is nothing to analyse.
Interface payloads are typed Array-of-uint8 No_Of_Bytes="n" or Array-of-float No_Of_Elements="n",
each either Random-Values-generated (optionally with a Data-Range min/max) or
Fixed-values-generated Default-Value. For Generic_Hardware, the schema documents that only
Array-of-uint8 should be used, with random data in range 0..255.
Hardware is parameterised to the core
CPU_Cluster carries an Operating-System (Nucleus_RTOS, or Linux with
Buildroot_File_System / Ubuntu_File_System) and a family:
- ARMV7:
CortexM7 - ARMV8:
CortexA53,CortexA57,CortexA72,CortexR52 - ARMV9 (AFM):
AFM-CortexA510,AFM-CortexA710,AFM-CortexA720
with CoresPerCluster and Frequency. Interconnect is AXI-BUS (width, frequency),
ETHERNET-INTERFACE, and UCIe-INTERFACE with a full D2D_Configuration (LINK_WIDTH,
LINK_FREQUENCY, PROTOCOL_CONV_LATENCY, CHIPLET_LINK_LATENCY, LOGICAL_IF_DELAY,
PHYSICAL_IF_DELAY). Generic_Hardware models an accelerator with its own operation sequence
including NN primitives (CONVOLUTION, TRANSPOSED-CONVOLUTION, MAX-POOL, AVG-POOL,
BATCH-NORMALIZATION, LOG-SOFTMAX, HARDMAX) plus POWER-PARAMETERS.
HW-SW-MAPPING is the question
<HW-SW-MAPPING ClusterRef="/ECU_0/SOC_0/Chiplet_0/CPU_0">
<Core-Runnable-Mapping CoreId="0" RunnableRef="/SWC_0/default/Runnable_Entity_1"
Load="1000" Priority="7"/>
</HW-SW-MAPPING>
Also Core-PrebuiltApplication-Mapping and Cluster-PrebuiltApplication-Mapping for real binaries.
What Load and Priority actually are (read the schema, do not assume)
EXERCISED, from the XSD annotations. Both attributes are use="required".
| Attribute | Type | Schema documentation |
|---|---|---|
Load |
xs:unsignedInt |
"The number of CPU cycles used as synthetic load" |
Priority |
xs:unsignedByte, 1..99 |
(no documentation) |
⚠ The schema carries two differently-cased elements: Core-Runnable-Mapping (line 1440, under
AeHwSwMappingType, the one the tutorials use) and Core-runnable-Mapping (line 840, under
AeCpuCore, attributes DEST/Load/priority lowercase). Do not mix them up.
⇒ Load is cycles, not a percentage or a utilisation. AE is a synthetic-load scheduling
simulator unless you feed it a real binary through PRE-BUILT-APPLICATION. The fidelity of any
answer it gives is exactly the fidelity of the cycle counts you supplied.
Sourcing them correctly
Cycles are an implementation property of compiled code on a target ISA. They are correctly absent from Teamcenter system elements; that is not a gap to paper over. Sources in fidelity order:
- Measured from real code, via
PRE-BUILT-APPLICATIONwith a real ELF. Highest fidelity. ⚠ On this installation that route validates only on Linux clusters (established by the jpo-f35 stage7-innexis-vsi work). - Authored as an explicit engineering parameter in Teamcenter, unit
cycles, on the function, human-owned and versioned. Seetc-parameters-units. - A stated WCET or budget figure, labelled as such.
⇒ A generator must have NO DEFAULT for Load. If the cycle count is absent, refuse to emit that
mapping and name the runnable. The corpus is the argument: all 42 Core-Runnable-Mapping entries
across all 11 shipped tutorials use Load="1000". One value, everywhere. A default does not stay a
default; it becomes the number everyone quotes.
Priority is derivable defensibly by rate-monotonic assignment from the PERIOD already in the
model: shorter period, more urgent. Optimal for fixed-priority scheduling of independent periodic
tasks, and you can state exactly what you did.
⚠⚠ UNRESOLVED: which direction is more urgent? 1..99 matches the Linux RT convention (higher =
more urgent), but Nucleus RTOS, the OS in most tutorials, conventionally uses lower = more urgent.
The shipped corpus does not disambiguate: 41 mappings use Priority="7", exactly one uses "6",
and that single mixed case (Real_Workload_Simulation_and_Analysis_using_LTTng, two runnables on
one core at 6 and 7) states no intent. Getting this backwards inverts every scheduling result while
still validating and still producing plausible numbers. Settle it by experiment before trusting a
rate-monotonic assignment: one core, two runnables, equal periods, cycle counts that
over-subscribe the core, then read which one starves in analyze.
Network topology binds software interfaces to a physical bus, which is the other half:
<Network-Topology><InterECU_communication>
<CAN-BUS CAN-FD="true">
<SHORT-NAME name="CanBus_0"/><BaudRate value="500000"/>
<INTERFACE-TREF DEST="/SRI_1"/><INTERFACE-TREF DEST="/SRI_0"/>
</CAN-BUS>
</InterECU_communication></Network-Topology>
Hard limits to size against
From the Release Notes (documented, not measured):
- Overall system up to 90 SoCs per the manual. ⚠ The XSD annotation says 100, and both
ECUsandSoCscarrymaxOccurs="100". The manual and the schema disagree; use 90. - SoC: up to 4 chiplets; each chiplet up to 32 Generic_Hardware and a single CPU cluster.
- CPU cluster: up to 8 cores.
- Nucleus: max 64 runnables per CPU cluster per chiplet.
- Chiplet/SoC numbering must start at 0 and be contiguous.
- Linux forces CPU frequency to 1 GHz.
- Nucleus analysis is not available on AFM CPUs; AFM cores are not supported by Low Level Exploration.
- M7 and R52 cannot do inter-chiplet communication.
- A SoC with more than 12 cores may cause simulation errors on a Windows host.
Mapping Teamcenter / Cameo system elements to this
| Source | AE XML |
|---|---|
| logical block / system element (software) | APPLICATION-SW-COMPONENT-TYPE |
| function allocated to a block | RUNNABLE-ENTITY + TIMING-EVENT period from its rate |
| signal / interface | SENDER-RECEIVER-INTERFACE + VARIABLE-DATA-PROTOTYPE |
| port on a block | P-PORT-PROTOTYPE / R-PORT-PROTOTYPE |
| physical/EE item (ECU, board) | ECUs / SoCs |
| processor part + attributes | CPU_Cluster + family / CoresPerCluster / Frequency |
| bus from the E/E architecture | Network-Topology / CAN-BUS / Eth-Switch |
| software-to-hardware allocation | HW-SW-MAPPING / Core-Runnable-Mapping |
Three gaps that are not "electronics detail" and will not come from a TC publish:
- Trigger semantics and rate per runnable. Without it nothing schedules.
- Payload size per interface (
No_Of_Bytes/No_Of_Elements). LoadandPriority.
(1) and (2) belong upstream in Cameo, but note the Cameo→TC connector carries a fixed property set, so extra SysML detail may not survive the publish. The realistic route is a post-publish enrichment pass writing them as TC parameters. (3) is a budget number someone owns.
The Capella side of the same data
The AE model is also stored inside the .capella file as kitalpha viewpoint extensions:
<ownedExtensions xsi:type="AeAnalysis:RunnableEntity" id="...">
<events xsi:type="AeAnalysis:TimingEvent" id="..." .../>
Full set observed: ECU, Soc, Chiplet, CpuCluster, CpuCore, RunnableEntity, TimingEvent,
DataReceivedEvent, DataAccess, CoreRunnableMapping, SwcPartialMapping,
DirectPortConnection, RandomData, SWAnalysis, HWAnalysis.
⇒ The .xml is a projection of the Capella model, not an independent input. Write the .xml
if you only want analysis; write the .capella if a human must open and extend it. See
capella-headless-authoring.
Worked examples that ship
SystemExplorer\Tutorials\ has 11 complete projects. Most useful:
| Tutorial | Shows |
|---|---|
Simple_Example |
smallest complete model, 8 runnables on a 4-core A53 |
Inter-ECU_Communication_via_CAN_FD |
CAN FD at 500 kbaud, bus utilisation and latency |
Real_Workload_Simulation_and_Analysis_using_LTTng |
ships a real operations.elf; PRE-BUILT-APPLICATION route |
Chiplet-Based_SoC_Model_for_Sensor_Fusion_and_AI_Workflows |
custom silicon + NN operators |
⚠ Simple_Example/readme.txt claims "2 clusters, 2 cores each". The XML has one cluster of 4
(CortexA53 CoresPerCluster="4", CoreIds 0-3). Trust the XML, not the readme.
Related
innexis-ae-headlessto runvalidateas the acceptance gate for anything generated here.capella-headless-authoringfor the Capella-side authoring route.
Generated from skills/innexis-ae-model-xml/SKILL.md in the tc-automation-skills library, which is the canonical copy and also serves as the agent skill set for Teamcenter work.