DO-297 IMA Architecture and Acceptance (avionics/ima/do297)
Use when the task is integrated modular avionics (IMA) architecture and
acceptance planning for civil avionics in the spirit of DO-297: identify
the platform modules, partitions, and shared resources, allocate
applications to partitions with CPU, memory, and I/O budgets, check for
resource contention, map integrity and availability requirements, and lay
out module acceptance and incremental certification evidence. The module
is data-driven: you supply the module resources and the application list
with integrity and availability requirements, and the functions allocate
applications to partitions, compute partition and module budgets, flag
over-subscription, and generate deterministic acceptance criteria.
This leaf covers the IMA integration and acceptance process. It is
different from avionics/ima/ima-partitioning, which sizes the ARINC 653
partition schedule, major frame, and inter-partition communication ports.
Domain quick reference
- DO-297 (proprietary RTCA guidance; name and paraphrase only here)
describes the IMA development and integration approach: a platform of
modules hosts multiple applications in isolated partitions, acceptance
evidence is gathered at module and application level, and incremental
certification lets an accepted module or application be reused with
reduced re-verification.
- Platform elements: modules (line replaceable units that host
partitions), applications (functions hosted inside partitions), and
shared resources (CPU time, memory, I/O ports, buses, power).
- Allocation rule: each application runs in exactly one partition, one or
more partitions share a module, and every partition budget must fit
inside the module resources in every dimension.
- Contention: when the summed demand of the hosted applications exceeds a
module budget dimension (CPU, memory, or I/O), the platform is
over-subscribed and the offending application must be flagged.
- Integrity levels: derived from failure-condition severity
(catastrophic maps to level A, hazardous to B, major to C, minor to D,
no effect to E), consistent with the DO-178C software level approach
(referenced only; see standards-map.yaml).
- Availability classes: class 1 functions must remain available on
demand, class 2 permits loss of function with a warning, class 3
permits loss of function without a warning.
- Module acceptance: evidence that the module hosts its allocated
applications within resource budgets and preserves failure containment
between partitions. Incremental certification records the accepted
module configuration so later applications reuse it with limited
re-acceptance.
IMA architecture model
- Module: name, cpu_units, memory_bytes, io_ports.
- Application: name, integrity (A-E), availability (1-3), cpu_units,
memory_bytes, io_ports.
- Partition: hosts one or more applications; the partition budget is the
sum of the demands of the applications it hosts.
- Module totals: sum of the demands of every partition on the module.
- Acceptance criteria: deterministic statements covering platform
definition, module acceptance testing, resource usage verification,
failure containment, availability demonstration, and incremental
certification credit.
Workflow
- Identify the platform: list the modules with their CPU, memory, and
I/O budgets.
- Identify the applications with their integrity and availability
requirements; map failure-condition severity to integrity level.
- Allocate applications to partitions (one partition per application by
default, or group applications into shared partitions).
- Compute the partition budgets and the module totals; check every
dimension against the module budget.
- Run the contention check: any dimension over budget flags the
over-budget application for re-allocation or module upgrade.
- Generate the module acceptance criteria for the incremental
certification record.
- Lay out the development assurance steps per integrity level.
Worked example
A module has 100 CPU units, 1,000,000 bytes of memory, and 16 I/O ports.
Three applications are hosted:
- FMS: integrity A, availability class 1, 40 CPU, 400,000 bytes, 6 ports.
- ADIRU: integrity B, availability class 1, 30 CPU, 300,000 bytes, 4 ports.
- Display: integrity C, availability class 2, 20 CPU, 200,000 bytes, 3 ports.
Module totals: 40 + 30 + 20 = 90 CPU, 900,000 bytes, 13 ports. Every
dimension fits with slack 10 CPU, 100,000 bytes, 3 ports, so the
allocation is accepted with no contention. If FMS grows to 60 CPU units
the total becomes 110 CPU against a budget of 100, the contention check
flags FMS as the over-budget application, and the module must either drop
the growth or move an application to another module.
Pitfalls
- Checking applications against the module budget one at a time: the
contention check sums the demand of every hosted application per
dimension - FMS at 40 CPU fits alone, but with ADIRU and Display the
module total is 90, and FMS growing to 60 pushes the total to 110
against the 100 CPU budget, flagging FMS as the over-budget
application.
- Verifying only one resource dimension: the module budget must hold
in CPU, memory, and I/O ports at once - an allocation that fits 90
of 100 CPU units can still bust the 16-port I/O budget, so every
dimension needs its own total-versus-budget check.
- Double-counting partition demand: the module total is the sum of the
partition budgets, and each partition budget is the sum of the
applications it hosts - an application grouped into a shared
partition must not also be counted at the module level on its own.
- Confusing integrity with availability: integrity levels A-E come
from failure-condition severity (catastrophic to A, hazardous to B,
major to C), while availability classes 1-3 say whether loss of
function is permitted and whether it warns - a class 1 display is
not automatically level A, and a level D function can still demand
class 1 availability.
- Treating module acceptance as a one-time certificate: incremental
certification records the accepted module configuration so later
applications reuse it with limited re-acceptance - a changed module
(an application moving in or a budget growing) changes the accepted
configuration and re-opens the acceptance evidence.
- Routing software-lifecycle questions here: DO-297 is the platform
integration and acceptance frame (name and paraphrase only - the
text is proprietary RTCA guidance); per-application software
assurance belongs to the DO-178C leaves and partition scheduling to
avionics/ima/ima-partitioning.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_do297.py
1---2name: do2973description: Use when scoping an IMA platform, planning module acceptance, or laying out development assurance steps for an integrated modular avionics system. Plan the integrated modular avionics (IMA) platform architecture in the spirit of DO-297: identify the IMA modules, application partitions, and shared resources, allocate applications to partitions with CPU, memory, and I/O budgets, and check the allocation for resource contention against integrity and availability requirements. Produce the module and application allocation plan, the resource budget table, and the module acceptance criteria that support incremental certification of the platform. Trigger: integrated modular avionics, IMA architecture, module acceptance, incremental certification, partition allocation, resource budget.4license: Apache-2.05---67# DO-297 IMA Architecture and Acceptance (avionics/ima/do297)89Use when the task is integrated modular avionics (IMA) architecture and10acceptance planning for civil avionics in the spirit of DO-297: identify11the platform modules, partitions, and shared resources, allocate12applications to partitions with CPU, memory, and I/O budgets, check for13resource contention, map integrity and availability requirements, and lay14out module acceptance and incremental certification evidence. The module15is data-driven: you supply the module resources and the application list16with integrity and availability requirements, and the functions allocate17applications to partitions, compute partition and module budgets, flag18over-subscription, and generate deterministic acceptance criteria.1920This leaf covers the IMA integration and acceptance process. It is21different from avionics/ima/ima-partitioning, which sizes the ARINC 65322partition schedule, major frame, and inter-partition communication ports.2324## Domain quick reference2526- DO-297 (proprietary RTCA guidance; name and paraphrase only here)27 describes the IMA development and integration approach: a platform of28 modules hosts multiple applications in isolated partitions, acceptance29 evidence is gathered at module and application level, and incremental30 certification lets an accepted module or application be reused with31 reduced re-verification.32- Platform elements: modules (line replaceable units that host33 partitions), applications (functions hosted inside partitions), and34 shared resources (CPU time, memory, I/O ports, buses, power).35- Allocation rule: each application runs in exactly one partition, one or36 more partitions share a module, and every partition budget must fit37 inside the module resources in every dimension.38- Contention: when the summed demand of the hosted applications exceeds a39 module budget dimension (CPU, memory, or I/O), the platform is40 over-subscribed and the offending application must be flagged.41- Integrity levels: derived from failure-condition severity42 (catastrophic maps to level A, hazardous to B, major to C, minor to D,43 no effect to E), consistent with the DO-178C software level approach44 (referenced only; see standards-map.yaml).45- Availability classes: class 1 functions must remain available on46 demand, class 2 permits loss of function with a warning, class 347 permits loss of function without a warning.48- Module acceptance: evidence that the module hosts its allocated49 applications within resource budgets and preserves failure containment50 between partitions. Incremental certification records the accepted51 module configuration so later applications reuse it with limited52 re-acceptance.5354## IMA architecture model5556- Module: name, cpu_units, memory_bytes, io_ports.57- Application: name, integrity (A-E), availability (1-3), cpu_units,58 memory_bytes, io_ports.59- Partition: hosts one or more applications; the partition budget is the60 sum of the demands of the applications it hosts.61- Module totals: sum of the demands of every partition on the module.62- Acceptance criteria: deterministic statements covering platform63 definition, module acceptance testing, resource usage verification,64 failure containment, availability demonstration, and incremental65 certification credit.6667## Workflow68691. Identify the platform: list the modules with their CPU, memory, and70 I/O budgets.712. Identify the applications with their integrity and availability72 requirements; map failure-condition severity to integrity level.733. Allocate applications to partitions (one partition per application by74 default, or group applications into shared partitions).754. Compute the partition budgets and the module totals; check every76 dimension against the module budget.775. Run the contention check: any dimension over budget flags the78 over-budget application for re-allocation or module upgrade.796. Generate the module acceptance criteria for the incremental80 certification record.817. Lay out the development assurance steps per integrity level.8283## Worked example8485A module has 100 CPU units, 1,000,000 bytes of memory, and 16 I/O ports.86Three applications are hosted:8788- FMS: integrity A, availability class 1, 40 CPU, 400,000 bytes, 6 ports.89- ADIRU: integrity B, availability class 1, 30 CPU, 300,000 bytes, 4 ports.90- Display: integrity C, availability class 2, 20 CPU, 200,000 bytes, 3 ports.9192Module totals: 40 + 30 + 20 = 90 CPU, 900,000 bytes, 13 ports. Every93dimension fits with slack 10 CPU, 100,000 bytes, 3 ports, so the94allocation is accepted with no contention. If FMS grows to 60 CPU units95the total becomes 110 CPU against a budget of 100, the contention check96flags FMS as the over-budget application, and the module must either drop97the growth or move an application to another module.9899## Pitfalls100101- Checking applications against the module budget one at a time: the102 contention check sums the demand of every hosted application per103 dimension - FMS at 40 CPU fits alone, but with ADIRU and Display the104 module total is 90, and FMS growing to 60 pushes the total to 110105 against the 100 CPU budget, flagging FMS as the over-budget106 application.107- Verifying only one resource dimension: the module budget must hold108 in CPU, memory, and I/O ports at once - an allocation that fits 90109 of 100 CPU units can still bust the 16-port I/O budget, so every110 dimension needs its own total-versus-budget check.111- Double-counting partition demand: the module total is the sum of the112 partition budgets, and each partition budget is the sum of the113 applications it hosts - an application grouped into a shared114 partition must not also be counted at the module level on its own.115- Confusing integrity with availability: integrity levels A-E come116 from failure-condition severity (catastrophic to A, hazardous to B,117 major to C), while availability classes 1-3 say whether loss of118 function is permitted and whether it warns - a class 1 display is119 not automatically level A, and a level D function can still demand120 class 1 availability.121- Treating module acceptance as a one-time certificate: incremental122 certification records the accepted module configuration so later123 applications reuse it with limited re-acceptance - a changed module124 (an application moving in or a budget growing) changes the accepted125 configuration and re-opens the acceptance evidence.126- Routing software-lifecycle questions here: DO-297 is the platform127 integration and acceptance frame (name and paraphrase only - the128 text is proprietary RTCA guidance); per-application software129 assurance belongs to the DO-178C leaves and partition scheduling to130 avionics/ima/ima-partitioning.131132## Behavior contract (gate 3)133134Run the deterministic contract test (stdlib unittest, offline):135136 python3 scripts/test_do297.py