textual-notation-of-model/packages/architecture/sdv_platform_stack.sysml

1 view(s) · 104 declared member(s) Jump to source ↓

view sdvPlatformStackStructureViewsource ↓

ViewpointselectedPhysicalStructureViewpoint (PhysicalStructureDefinitionViewpoint)
ConcernphysicalStructureConcern
RenderasTreeDiagram
ExposesDE4SDV_SDVPlatformStack::*
Sourcetextual-notation-of-model/packages/architecture/sdv_platform_stack.sysml:672
diagram-sdvPlatformStackStructureView.svg
«view» sdvPlatformStackStructureView expose DE4SDV_SDVPlatformStack::* «comment» ────────────────────────────────────────── Stack layer definitions ────────────────────────────────────────── Each layer is an abstract part def. Concrete realizations specialize these defs and appear as variants in the variation section below. «part def» SDVPlatformStack doc Complete layered architecture of a software-defined vehicle computing platform. A configured member product selects one realization from each variation, subject to compatibility constraints. parts vehicleApplication : VehicleApplicationLayer middleware : MiddlewareLayer applicationMiddlewareAdapter : ApplicationMiddlewareAdapterLayer osPlatform : OSPlatformLayer hypervisor : HypervisorLayer hardware : HardwareLayer features Inter-layer boundary interfaces. Each boundary is a bidirectional interface between adjacent layers. The contracts at these boundaries are what DE4SDV models; the concrete realizations either conform or don't. «comment» ────────────────────────────────────────── Layer abstractions ────────────────────────────────────────── Each layer def declares the boundary ports it exposes to adjacent layers. Internal structure is deliberately not modeled. «part def» VehicleApplicationLayer doc Vehicle domain-specific application layer. Provides domain-specific applications such as ADAS (perception, planning, control), body, chassis, powertrain, IVI, telematics, connectivity, and diagnostics. Candidate realizations shown: Autoware, Openpilot, Apollo Auto (ADAS domain). Domain-specific application stacks typically ship their own internal middleware (ROS 2, Cyber RT, custom) for ADAS-internal communication. The boundary port to the vehicle-level middleware handles vehicle signal access, diagnostics, and lifecycle coordination. ports middlewarePort : ApplicationAdapterPort «part def» ApplicationMiddlewareAdapterLayer doc Adapter between domain-specific application stacks and vehicle-level middleware. Each application stack ships its own internal communication (e.g. Autoware uses ROS 2/DDS); the vehicle-level middleware uses a different communication paradigm (e.g. S-CORE uses LoLa, Android SDV uses VSIDL service bundles, AUTOSAR uses SOME/IP). The adapter translates between these. ports applicationPort : ApplicationAdapterPort middlewarePort : MiddlewareAdapterPort «part def» MiddlewareLayer doc Vehicle-level middleware / runtime platform. Provides IPC, lifecycle management, service discovery, diagnostics, persistency, and timing orchestration for vehicle applications running on the same compute domain. Candidate realizations: Eclipse S-CORE, Android SDV, AUTOSAR Adaptive (ARA). Note: AGL is a full platform (OS + IVI + app framework), not a middleware layer. It is modeled at the OS platform layer. ports applicationPort : MiddlewareAdapterPort osPort : MiddlewareOSPort «part def» OSPlatformLayer doc Operating system / platform layer. Provides scheduling, memory management, driver support, and POSIX or Android framework services. Candidate realizations: Linux (AGL, generic), Android HLOS, QNX, AUTOSAR Adaptive platform. ports middlewarePort : MiddlewareOSPort hypervisorPort : OSHypervisorPort «part def» HypervisorLayer doc Virtualization / hypervisor layer. Provides partition isolation for mixed-criticality systems where multiple OS domains share the same SoC. Optional: single-domain architectures do not use a hypervisor. The variation below includes a "none" variant for this case. Candidate realizations: QNX QVM, ACRN, KVM (Linux). ports guestPort : OSHypervisorPort hypervisorPort : HardwareHypervisorPort «part def» HardwareLayer doc Physical compute hardware: SoC, MCU, sensors, actuators. DE4SDV does not model physics, thermodynamics, or mechanics at this layer — only the compute platform boundary that the software stack executes on. Candidate realizations: Qualcomm, NVIDIA, Renesas, NXP, etc. This layer is deliberately abstract; concrete hardware modeling is out of scope for the SDV platform stack slice. ports hypervisorPort : HardwareHypervisorPort «comment» ────────────────────────────────────────── Boundary interface definitions ────────────────────────────────────────── Each interface def declares the contract surface between two adjacent layers. These are abstract contracts; specific timing, safety, and security properties will be added in the reference-contract-packages increment. «port def» ApplicationMiddlewarePort doc Port type for the Vehicle Application ↔ Middleware boundary. Carries vehicle signal access, diagnostics, lifecycle coordination, and service-binding interactions. items vehicleSignals diagnosticCommands lifecycleEvents serviceRequests «interface def» ApplicationMiddlewareInterface doc Contract between the vehicle application layer and the vehicle-level middleware. The application stack expects signal access, timing-aware scheduling, and fault containment from the middleware. The middleware expects the application stack to register as a managed application with defined lifecycle hooks. ends adasSide : ApplicationMiddlewarePort middlewareSide : ApplicationMiddlewarePort «port def» ApplicationAdapterPort doc Port type for the Vehicle Application ↔ Adapter boundary. Carries application-native communication (e.g. ROS 2 topics for Autoware). items applicationNativeMessages applicationLifecycleEvents «port def» MiddlewareAdapterPort doc Port type for the Adapter ↔ Middleware boundary. Carries middleware-native communication (e.g. LoLa for S-CORE, VSIDL for Android SDV, SOME/IP for AUTOSAR). items middlewareNativeMessages middlewareLifecycleEvents «interface def» ApplicationAdapterInterface doc Contract between the vehicle application layer and the adapter. The application stack publishes/subscribes in its native protocol; the adapter translates. ends applicationSide : ApplicationAdapterPort adapterSide : ApplicationAdapterPort «interface def» AdapterMiddlewareInterface doc Contract between the adapter and the vehicle-level middleware. The adapter translates application-native messages to middleware-native service calls/signals. ends adapterSide : MiddlewareAdapterPort middlewareSide : MiddlewareAdapterPort «port def» MiddlewareOSPort doc Port type for the Middleware ↔ OS boundary. Carries scheduling requests, memory allocation, power management, and watchdog/timeout interactions. items schedulingRequests memoryAllocation powerManagement watchdogSignals «interface def» MiddlewareOSInterface doc Contract between the middleware runtime and the operating system. The middleware expects preemptive scheduling, memory isolation, deterministic timing support, and driver access from the OS. The OS expects the middleware to respect resource limits and scheduling policies. ends middlewareSide : MiddlewareOSPort osSide : MiddlewareOSPort «port def» OSHypervisorPort doc Port type for the OS ↔ Hypervisor boundary. Carries partition configuration, inter-VM communication, resource allocation, and isolation properties. items partitionConfig interVMCommunication resourceAllocation «interface def» OSHypervisorInterface doc Contract between an OS domain and the hypervisor. The OS expects CPU/memory/I/O allocation, partition isolation, and inter-VM communication channels from the hypervisor. The hypervisor expects the OS to operate within its allocated partition. ends osSide : OSHypervisorPort hypervisorSide : OSHypervisorPort «port def» HardwareHypervisorPort doc Port type for the Hypervisor ↔ Hardware boundary. Carries hardware resource access, interrupt routing, and platform initialization. items hardwareResources interruptRouting «interface def» HardwareHypervisorInterface doc Contract between the hypervisor and the physical compute hardware. The hypervisor expects access to CPU cores, memory regions, interrupt controllers, and I/O devices. This is the lowest software-visible boundary; below it is hardware only. ends hypervisorSide : HardwareHypervisorPort hardwareSide : HardwareHypervisorPort «comment» ────────────────────────────────────────── Candidate realizations — vehicle application layer (ADAS domain shown) ────────────────────────────────────────── «part def» AutowareStack :> VehicleApplicationLayer doc Autoware (Autoware Foundation). Open-source autonomous driving stack based on ROS 2. License: Apache 2.0. Status: candidate realization — no assumption of conformance to DE4SDV boundary contracts without evidence. ports ^middlewarePort : ApplicationAdapterPort «part def» OpenpilotStack :> VehicleApplicationLayer doc Openpilot (comma.ai). Open-source driver assistance system (L2). Ships its own internal middleware; the boundary port captures vehicle-level integration only. License: MIT / comma.ai custom. Status: candidate realization. ports ^middlewarePort : ApplicationAdapterPort «part def» ApolloStack :> VehicleApplicationLayer doc Apollo Auto (Baidu). Open-source autonomous driving stack using Cyber RT as internal middleware. License: Apache 2.0. Status: candidate realization. ports ^middlewarePort : ApplicationAdapterPort «comment» ────────────────────────────────────────── Candidate realizations — application-middleware adapter layer ────────────────────────────────────────── «part def» AutowareToSCOREAdapter :> ApplicationMiddlewareAdapterLayer doc Adapts Autoware ROS 2 topics to Eclipse S-CORE LoLa IPC. ports ^applicationPort : ApplicationAdapterPort ^middlewarePort : MiddlewareAdapterPort «part def» AutowareToAAOSSDVAdapter :> ApplicationMiddlewareAdapterLayer doc Candidate boundary between Autoware ROS 2 and AAOS SDV service interfaces. A configured product may select a direct VSIDL-to-ROS 2 realization or a separately justified brokered realization. This definition does not claim generated bindings, transport, deployment, runtime behavior, or interoperability evidence. ports ^applicationPort : ApplicationAdapterPort ^middlewarePort : MiddlewareAdapterPort «part def» AutowareToAUTOSARAdapter :> ApplicationMiddlewareAdapterLayer doc Adapts Autoware ROS 2 topics to AUTOSAR Adaptive SOME/IP services. ports ^applicationPort : ApplicationAdapterPort ^middlewarePort : MiddlewareAdapterPort «part def» OpenpilotToSCOREAdapter :> ApplicationMiddlewareAdapterLayer doc Adapts Openpilot internal communication to S-CORE LoLa. ports ^applicationPort : ApplicationAdapterPort ^middlewarePort : MiddlewareAdapterPort «part def» ApolloToSCOREAdapter :> ApplicationMiddlewareAdapterLayer doc Adapts Apollo Cyber RT to S-CORE LoLa. ports ^applicationPort : ApplicationAdapterPort ^middlewarePort : MiddlewareAdapterPort «comment» ────────────────────────────────────────── Candidate realizations — Middleware layer ────────────────────────────────────────── «part def» EclipseSCORE :> MiddlewareLayer doc Eclipse S-CORE (Safe Open Vehicle Core). Open-source automotive middleware (C++ / Rust). Modules: communication (LoLa), orchestration, persistency, time, lifecycle, diagnostics, baselibs. Targets: Linux, QNX. Not designed for Android HLOS. License: Apache 2.0. Status: candidate realization. S-CORE maintainers have not been engaged on SysML v2 model integration. ports ^applicationPort : MiddlewareAdapterPort ^osPort : MiddlewareOSPort «part def» AndroidSDVMiddleware :> MiddlewareLayer doc Android SDV (Google / AOSP). Headless, native Android-derived platform for distributed vehicle services. Runs as a VM on a hypervisor. Excludes JVM, Java services, Android applications, and GUI functionality. Internal structure modeled in: textual-notation-of-model/packages/architecture/aaos_sdv_middleware_boundary.sysml (DE4SDV_AAOSSDVMiddlewareBoundary package). Key elements: Orchestrator, Service Lifecycle Manager, Health Monitor, Update Manager, VSIDL/Middleware, Service Discovery, RPC, Data Tunnel, SOME/IP interoperability, Automotive Services (Diagnostics, Configuration, Calibration, Vehicle Power Mode, User Profile). Runs on Android HLOS, Linux, and as QNX QVM guest. License: Apache 2.0 (AOSP). Status: candidate realization. Upstream AAOS SDV maintainers have not been engaged on DE4SDV model integration (GAP-MW-005). ports ^applicationPort : MiddlewareAdapterPort ^osPort : MiddlewareOSPort «part def» AUTOSARAdaptive :> MiddlewareLayer doc AUTOSAR Adaptive Platform (ARA). Automotive middleware standard with functional safety focus (ASIL). This entry is a placeholder for the standard interface contract, not a specific open-source implementation. License: varies by implementation. Status: candidate realization — interface contract only. ports ^applicationPort : MiddlewareAdapterPort ^osPort : MiddlewareOSPort «comment» ────────────────────────────────────────── Candidate realizations — OS platform layer ────────────────────────────────────────── «part def» LinuxPlatform :> OSPlatformLayer doc Generic Linux platform (POSIX, preemptive scheduling). Includes AGL and custom Linux distributions. License: GPL (kernel) + Apache 2.0 / varies (user space). Status: candidate realization. ports ^middlewarePort : MiddlewareOSPort ^hypervisorPort : OSHypervisorPort «part def» AndroidHLOS :> OSPlatformLayer doc Android High-Level OS (Google / AOSP). Linux kernel (GKI) + Android framework. License: Apache 2.0 (AOSP) + GPL (kernel). Status: candidate realization. ports ^middlewarePort : MiddlewareOSPort ^hypervisorPort : OSHypervisorPort «part def» QNXPlatform :> OSPlatformLayer doc QNX Neutrino RTOS (BlackBerry / QNX). Real-time POSIX OS, ASIL-D certified. License: commercial (not open-source). Status: candidate realization — included for mixed-criticality architectures; acknowledged as non-OSS. ports ^middlewarePort : MiddlewareOSPort ^hypervisorPort : OSHypervisorPort «comment» ────────────────────────────────────────── Candidate realizations — Hypervisor layer ────────────────────────────────────────── «part def» QNXQVM :> HypervisorLayer doc QNX Virtual Machine (QVM) hypervisor. Host for mixed-criticality: QNX + Linux + Android guests. License: commercial (QNX). Status: candidate realization. ports ^guestPort : OSHypervisorPort ^hypervisorPort : HardwareHypervisorPort «part def» ACRNHypervisor :> HypervisorLayer doc ACRN (Project ACRN, Linux Foundation). Open-source hypervisor for automotive and IoT. Supports Linux and Android guests. License: BSD-2-Clause. Status: candidate realization. ports ^guestPort : OSHypervisorPort ^hypervisorPort : HardwareHypervisorPort «part def» KVMHypervisor :> HypervisorLayer doc KVM (Kernel-based Virtual Machine, Linux). Open-source virtualization in the Linux kernel. License: GPL / LGPL. Status: candidate realization. ports ^guestPort : OSHypervisorPort ^hypervisorPort : HardwareHypervisorPort «comment» ────────────────────────────────────────── Compatibility constraints ────────────────────────────────────────── These constraints encode which combinations of layer realizations are architecturally valid. They are the product-line decision rules that enable trade-off analysis. Constraint bodies are documented as doc comments in this increment. Future increments may formalize them as require constraint bodies when validation confirms the SysML v2 constraint expression syntax. «constraint def» MiddlewareOSCompatibility doc Middleware ↔ OS compatibility. Valid combinations: Eclipse S-CORE ↔ Linux, QNX (not Android HLOS) Android SDV ↔ Linux, Android HLOS, QNX (as QVM guest) AUTOSAR Adaptive ↔ Linux, QNX Invalid: Eclipse S-CORE ↔ Android HLOS (architecturally incompatible) «constraint def» HypervisorOSCompatibility doc Hypervisor ↔ OS compatibility. Valid combinations: QNX QVM ↔ QNX (native), Linux, Android, AGL (all as guests) ACRN ↔ Linux, Android, AGL (all as guests; not QNX) KVM ↔ Linux, AGL (guests; QNX guest support varies) none ↔ any single OS (no virtualization) Invalid: ACRN ↔ QNX (not supported) KVM ↔ QNX (community-only, not production) «constraint def» ApplicationMiddlewareCoexistence doc Application ↔ Middleware coexistence. Domain-specific application stacks (e.g. Autoware, Openpilot, Apollo for ADAS) each ship their own internal communication middleware. They coexist with the vehicle-level middleware (S-CORE, Android SDV, AUTOSAR Adaptive) as separate layers — not as alternatives at the same layer. The application stack handles domain-internal pipelines (e.g. ADAS perception→planning→control). The vehicle middleware handles vehicle signal access, diagnostics, lifecycle, and inter-domain communication. No invalid combination exists at this boundary in principle, but integration effort varies significantly: Autoware + S-CORE: ROS 2 IPC must bridge to LoLa IPC Openpilot + anything: custom device model, limited integration Apollo + anything: Cyber RT must bridge to external middleware «constraint def» ApplicationMiddlewareAdapterCompatibility doc Adapter compatibility across application and middleware selections. The adapter variation must match both the selected application stack and the selected vehicle-level middleware. The adapter is present only when a non-none vehicle middleware is selected; when middleware = none, the adapter is also none and the application↔adapter and adapter↔middleware boundaries are absent. Intended pairings: Autoware ↔ AutowareToSCOREAdapter ↔ EclipseSCORE Autoware ↔ AutowareToAAOSSDVAdapter ↔ AndroidSDVMiddleware Autoware ↔ AutowareToAUTOSARAdapter ↔ AUTOSARAdaptive Openpilot ↔ OpenpilotToSCOREAdapter ↔ EclipseSCORE Apollo ↔ ApolloToSCOREAdapter ↔ EclipseSCORE «constraint def» AGLPlatformScope doc AGL (Automotive Grade Linux) scope note. AGL is a full platform (OS + IVI framework + app framework + compositor), not just an OS kernel. When AGL is selected as the OS platform variant, it includes its own application framework and does not simultaneously run S-CORE or Android SDV middleware — AGL is an alternative to that combination, not a layer beside it. This is a modeling note, not a hard constraint. AGL could coexist with a domain application stack on a separate compute domain via a hypervisor, but not on the same domain as S-CORE. «comment» ────────────────────────────────────────── Configured member product base ────────────────────────────────────────── ConfiguredSDVVariant is the abstract base for configured member products. Concrete configured variants are generated from Bill-of-Features YAML by the PLE configurator (tools/configure_variant.py), not hand-written here. See: model-based-product-line-engineering/feature-models/sdv_product_line.yaml model-based-product-line-engineering/feature-configurations/ model-based-product-line-engineering/product-models/ «part def» ConfiguredSDVVariant :> SDVPlatformStack doc A configured member product of the SDV product line. Selects one variant from each variation, subject to compatibility constraints. Concrete configured variants are generated from Bill-of-Features by the PLE configurator (tools/configure_variant.py). «concern» physicalStructureConcern : PhysicalStructureConcern subject ref stakeholders systemsEngineer : SystemsEngineer reviewer : OpenSourceReviewer require constraints ^doc Reviewer question: What physical hardware, software, and mechanical elements make up the candidate system, and in which internal roles are they used?

Hover a model element for details open raw SVG.

Source

1/*2 * DE4SDV SDV platform stack architecture model slice.3 *4 * This package models the layered architecture of a software-defined vehicle5 * as a product-line variation structure. It defines the stack layers, their6 * boundary interfaces, and the variation points where configurable choices7 * select between open-source realizations.8 *9 * Scope of this slice:10 *   - Stack layer definitions (vehicle applications, middleware, OS, hypervisor, hardware)11 *   - Boundary interface definitions between adjacent layers12 *   - Variation points with candidate variant realizations, inlined13 *     as structural variation points on the stack's layer parts14 *   - Compatibility constraints between layers15 *16 * Out of scope for this slice:17 *   - Internal architecture of any specific OSS project (Autoware, S-CORE, etc.)18 *   - Allocation of functional responsibilities to execution platforms19 *   - Timing/safety/security property binding to specific stacks20 *   - Compliance or type-approval claims21 *   - Physical/mechanical domain modeling22 *23 * Conventions:24 *   - Layer definitions use `part def` with doc annotations25 *   - Boundary interfaces use `interface def` with directional ports26 *   - Variability uses native SysML v2 `variation` / `variant` notation27 *   - Candidate realizations are `part def` specializations of layer defs,28 *     marked as candidates with doc-only provenance (no compliance claim)29 *   - Compatibility constraints use `constraint def`30 *   - File uses a flat top-level package name (DE4SDV_SDVPlatformStack)31 *     to avoid cross-file sibling-package import issues in SysIDE32 */3334package DE4SDV_SDVPlatformStack {35  private import SAF_Viewpoints::*;36  private import DE4SDV_Stakeholders::*;37  private import Views::*;383940  /* ──────────────────────────────────────────41   * Stack layer definitions42   * ──────────────────────────────────────────43   * Each layer is an abstract part def. Concrete realizations44   * specialize these defs and appear as variants in the variation45   * section below.46   */4748  part def SDVPlatformStack {49    doc /*50     * Complete layered architecture of a software-defined vehicle51     * computing platform. A configured member product selects one52     * realization from each variation, subject to compatibility53     * constraints.54     */5556    variation part vehicleApplication : VehicleApplicationLayer {57      /* ADAS domain candidates shown; other domain applications (body,58       * chassis, telematics, IVI) to be added in domain-specific increments. */59      variant part autoware : AutowareStack;60      variant part openpilot : OpenpilotStack;61      variant part apollo : ApolloStack;62    }6364    variation part middleware : MiddlewareLayer {65      variant part eclipseSCORE : EclipseSCORE;66      variant part androidSDV : AndroidSDVMiddleware;67      variant part autosarAdaptive : AUTOSARAdaptive;68      variant part none[0]; /* single-domain architecture, no vehicle-level middleware */69    }7071    variation part applicationMiddlewareAdapter : ApplicationMiddlewareAdapterLayer {72      variant part autowareToSCORE : AutowareToSCOREAdapter;73      variant part autowareToAAOSSDV : AutowareToAAOSSDVAdapter;74      variant part autowareToAUTOSAR : AutowareToAUTOSARAdapter;75      variant part openpilotToSCORE : OpenpilotToSCOREAdapter;76      variant part apolloToSCORE : ApolloToSCOREAdapter;77      variant part none[0]; /* no adapter when no vehicle-level middleware */78    }7980    variation part osPlatform : OSPlatformLayer {81      variant part linux : LinuxPlatform;82      variant part android : AndroidHLOS;83      variant part qnx : QNXPlatform;84    }8586    variation part hypervisor : HypervisorLayer {87      variant part qvm : QNXQVM;88      variant part acrn : ACRNHypervisor;89      variant part kvm : KVMHypervisor;90      variant part none[0]; /* single-domain architecture, no hypervisor */91    }9293    part hardware : HardwareLayer;9495    /*96     * Inter-layer boundary interfaces.97     * Each boundary is a bidirectional interface between adjacent layers.98     * The contracts at these boundaries are what DE4SDV models; the99     * concrete realizations either conform or don't.100     */101    interface applicationMiddlewareBoundary : ApplicationAdapterInterface102      connect vehicleApplication.middlewarePort to applicationMiddlewareAdapter.applicationPort;103104    interface adapterMiddlewareBoundary : AdapterMiddlewareInterface105      connect applicationMiddlewareAdapter.middlewarePort to middleware.applicationPort;106107    interface middlewareOSBoundary : MiddlewareOSInterface108      connect middleware.osPort to osPlatform.middlewarePort;109110    interface osHypervisorBoundary : OSHypervisorInterface111      connect osPlatform.hypervisorPort to hypervisor.guestPort;112113    interface hypervisorHardwareBoundary : HardwareHypervisorInterface114      connect hypervisor.hypervisorPort to hardware.hypervisorPort;115  }116117  /* ──────────────────────────────────────────118   * Layer abstractions119   * ──────────────────────────────────────────120   * Each layer def declares the boundary ports it exposes to adjacent121   * layers. Internal structure is deliberately not modeled.122   */123124  part def VehicleApplicationLayer {125    doc /*126     * Vehicle domain-specific application layer.127     * Provides domain-specific applications such as ADAS (perception,128     * planning, control), body, chassis, powertrain, IVI, telematics,129     * connectivity, and diagnostics.130     *131     * Candidate realizations shown: Autoware, Openpilot, Apollo Auto (ADAS domain).132     * Domain-specific application stacks typically ship their own internal middleware133     * (ROS 2, Cyber RT, custom) for ADAS-internal communication.134     * The boundary port to the vehicle-level middleware handles135     * vehicle signal access, diagnostics, and lifecycle coordination.136     */137138    port middlewarePort : ApplicationAdapterPort;139  }140141  part def ApplicationMiddlewareAdapterLayer {142    doc /*143     * Adapter between domain-specific application stacks and vehicle-level middleware.144     * Each application stack ships its own internal communication (e.g. Autoware uses ROS 2/DDS);145     * the vehicle-level middleware uses a different communication paradigm (e.g. S-CORE uses LoLa,146     * Android SDV uses VSIDL service bundles, AUTOSAR uses SOME/IP). The adapter translates147     * between these.148     */149150    port applicationPort : ApplicationAdapterPort;151    port middlewarePort : MiddlewareAdapterPort;152  }153154  part def MiddlewareLayer {155    doc /*156     * Vehicle-level middleware / runtime platform.157     * Provides IPC, lifecycle management, service discovery,158     * diagnostics, persistency, and timing orchestration for159     * vehicle applications running on the same compute domain.160     *161     * Candidate realizations: Eclipse S-CORE, Android SDV,162     * AUTOSAR Adaptive (ARA).163     *164     * Note: AGL is a full platform (OS + IVI + app framework),165     * not a middleware layer. It is modeled at the OS platform layer.166     */167168    port applicationPort : MiddlewareAdapterPort;169    port osPort : MiddlewareOSPort;170  }171172  part def OSPlatformLayer {173    doc /*174     * Operating system / platform layer.175     * Provides scheduling, memory management, driver support,176     * and POSIX or Android framework services.177     *178     * Candidate realizations: Linux (AGL, generic), Android HLOS,179     * QNX, AUTOSAR Adaptive platform.180     */181182    port middlewarePort : MiddlewareOSPort;183    port hypervisorPort : OSHypervisorPort;184  }185186  part def HypervisorLayer {187    doc /*188     * Virtualization / hypervisor layer.189     * Provides partition isolation for mixed-criticality systems190     * where multiple OS domains share the same SoC.191     *192     * Optional: single-domain architectures do not use a hypervisor.193     * The variation below includes a "none" variant for this case.194     *195     * Candidate realizations: QNX QVM, ACRN, KVM (Linux).196     */197198    port guestPort : OSHypervisorPort;199    port hypervisorPort : HardwareHypervisorPort;200  }201202  part def HardwareLayer {203    doc /*204     * Physical compute hardware: SoC, MCU, sensors, actuators.205     * DE4SDV does not model physics, thermodynamics, or mechanics206     * at this layer — only the compute platform boundary that207     * the software stack executes on.208     *209     * Candidate realizations: Qualcomm, NVIDIA, Renesas, NXP, etc.210     * This layer is deliberately abstract; concrete hardware modeling211     * is out of scope for the SDV platform stack slice.212     */213214    port hypervisorPort : HardwareHypervisorPort;215  }216217  /* ──────────────────────────────────────────218   * Boundary interface definitions219   * ──────────────────────────────────────────220   * Each interface def declares the contract surface between221   * two adjacent layers. These are abstract contracts; specific222   * timing, safety, and security properties will be added in223   * the reference-contract-packages increment.224   */225226  port def ApplicationMiddlewarePort {227    doc /*228     * Port type for the Vehicle Application ↔ Middleware boundary.229     * Carries vehicle signal access, diagnostics, lifecycle230     * coordination, and service-binding interactions.231     */232    inout item vehicleSignals;233    inout item diagnosticCommands;234    inout item lifecycleEvents;235    inout item serviceRequests;236  }237238  interface def ApplicationMiddlewareInterface {239    doc /*240     * Contract between the vehicle application layer and the241     * vehicle-level middleware. The application stack expects signal242     * access, timing-aware scheduling, and fault containment243     * from the middleware. The middleware expects the application244     * stack to register as a managed application with defined245     * lifecycle hooks.246     */247    end adasSide : ApplicationMiddlewarePort;248    end middlewareSide : ApplicationMiddlewarePort;249  }250251  port def ApplicationAdapterPort {252    doc /*253     * Port type for the Vehicle Application ↔ Adapter boundary.254     * Carries application-native communication (e.g. ROS 2 topics for Autoware).255     */256    inout item applicationNativeMessages;257    inout item applicationLifecycleEvents;258  }259260  port def MiddlewareAdapterPort {261    doc /*262     * Port type for the Adapter ↔ Middleware boundary.263     * Carries middleware-native communication (e.g. LoLa for S-CORE, VSIDL for Android SDV, SOME/IP for AUTOSAR).264     */265    inout item middlewareNativeMessages;266    inout item middlewareLifecycleEvents;267  }268269  interface def ApplicationAdapterInterface {270    doc /*271     * Contract between the vehicle application layer and the adapter. The application stack publishes/subscribes in its native protocol; the adapter translates.272     */273    end applicationSide : ApplicationAdapterPort;274    end adapterSide : ApplicationAdapterPort;275  }276277  interface def AdapterMiddlewareInterface {278    doc /*279     * Contract between the adapter and the vehicle-level middleware. The adapter translates application-native messages to middleware-native service calls/signals.280     */281    end adapterSide : MiddlewareAdapterPort;282    end middlewareSide : MiddlewareAdapterPort;283  }284285  port def MiddlewareOSPort {286    doc /*287     * Port type for the Middleware ↔ OS boundary.288     * Carries scheduling requests, memory allocation,289     * power management, and watchdog/timeout interactions.290     */291    inout item schedulingRequests;292    inout item memoryAllocation;293    inout item powerManagement;294    inout item watchdogSignals;295  }296297  interface def MiddlewareOSInterface {298    doc /*299     * Contract between the middleware runtime and the300     * operating system. The middleware expects preemptive301     * scheduling, memory isolation, deterministic timing302     * support, and driver access from the OS. The OS expects303     * the middleware to respect resource limits and304     * scheduling policies.305     */306    end middlewareSide : MiddlewareOSPort;307    end osSide : MiddlewareOSPort;308  }309310  port def OSHypervisorPort {311    doc /*312     * Port type for the OS ↔ Hypervisor boundary.313     * Carries partition configuration, inter-VM communication,314     * resource allocation, and isolation properties.315     */316    inout item partitionConfig;317    inout item interVMCommunication;318    inout item resourceAllocation;319  }320321  interface def OSHypervisorInterface {322    doc /*323     * Contract between an OS domain and the hypervisor.324     * The OS expects CPU/memory/I/O allocation, partition325     * isolation, and inter-VM communication channels from326     * the hypervisor. The hypervisor expects the OS to327     * operate within its allocated partition.328     */329    end osSide : OSHypervisorPort;330    end hypervisorSide : OSHypervisorPort;331  }332333  port def HardwareHypervisorPort {334    doc /*335     * Port type for the Hypervisor ↔ Hardware boundary.336     * Carries hardware resource access, interrupt routing,337     * and platform initialization.338     */339    inout item hardwareResources;340    inout item interruptRouting;341  }342343  interface def HardwareHypervisorInterface {344    doc /*345     * Contract between the hypervisor and the physical346     * compute hardware. The hypervisor expects access to347     * CPU cores, memory regions, interrupt controllers,348     * and I/O devices. This is the lowest software-visible349     * boundary; below it is hardware only.350     */351    end hypervisorSide : HardwareHypervisorPort;352    end hardwareSide : HardwareHypervisorPort;353  }354355  /* ──────────────────────────────────────────356   * Candidate realizations — vehicle application layer (ADAS domain shown)357   * ────────────────────────────────────────── */358  part def AutowareStack :> VehicleApplicationLayer {359    doc /*360     * Autoware (Autoware Foundation).361     * Open-source autonomous driving stack based on ROS 2.362     * License: Apache 2.0.363     * Status: candidate realization — no assumption of364     * conformance to DE4SDV boundary contracts without365     * evidence.366     */367  }368369  part def OpenpilotStack :> VehicleApplicationLayer {370    doc /*371     * Openpilot (comma.ai).372     * Open-source driver assistance system (L2).373     * Ships its own internal middleware; the boundary port374     * captures vehicle-level integration only.375     * License: MIT / comma.ai custom.376     * Status: candidate realization.377     */378  }379380  part def ApolloStack :> VehicleApplicationLayer {381    doc /*382     * Apollo Auto (Baidu).383     * Open-source autonomous driving stack using Cyber RT384     * as internal middleware.385     * License: Apache 2.0.386     * Status: candidate realization.387     */388  }389390  /* ──────────────────────────────────────────391   * Candidate realizations — application-middleware adapter layer392   * ────────────────────────────────────────── */393  part def AutowareToSCOREAdapter :> ApplicationMiddlewareAdapterLayer {394    doc /*395     * Adapts Autoware ROS 2 topics to Eclipse S-CORE LoLa IPC.396     */397  }398399  part def AutowareToAAOSSDVAdapter :> ApplicationMiddlewareAdapterLayer {400    doc /*401     * Candidate boundary between Autoware ROS 2 and AAOS SDV service402     * interfaces. A configured product may select a direct VSIDL-to-ROS 2403     * realization or a separately justified brokered realization. This404     * definition does not claim generated bindings, transport, deployment,405     * runtime behavior, or interoperability evidence.406     */407  }408409  part def AutowareToAUTOSARAdapter :> ApplicationMiddlewareAdapterLayer {410    doc /*411     * Adapts Autoware ROS 2 topics to AUTOSAR Adaptive SOME/IP services.412     */413  }414415  part def OpenpilotToSCOREAdapter :> ApplicationMiddlewareAdapterLayer {416    doc /*417     * Adapts Openpilot internal communication to S-CORE LoLa.418     */419  }420421  part def ApolloToSCOREAdapter :> ApplicationMiddlewareAdapterLayer {422    doc /*423     * Adapts Apollo Cyber RT to S-CORE LoLa.424     */425  }426427  /* ──────────────────────────────────────────428   * Candidate realizations — Middleware layer429   * ────────────────────────────────────────── */430  part def EclipseSCORE :> MiddlewareLayer {431    doc /*432     * Eclipse S-CORE (Safe Open Vehicle Core).433     * Open-source automotive middleware (C++ / Rust).434     * Modules: communication (LoLa), orchestration, persistency,435     * time, lifecycle, diagnostics, baselibs.436     * Targets: Linux, QNX. Not designed for Android HLOS.437     * License: Apache 2.0.438     * Status: candidate realization. S-CORE maintainers have439     * not been engaged on SysML v2 model integration.440     */441  }442443  part def AndroidSDVMiddleware :> MiddlewareLayer {444    doc /*445     * Android SDV (Google / AOSP).446     * Headless, native Android-derived platform for distributed vehicle447     * services. Runs as a VM on a hypervisor. Excludes JVM, Java services,448     * Android applications, and GUI functionality.449     *450     * Internal structure modeled in:451     *   textual-notation-of-model/packages/architecture/aaos_sdv_middleware_boundary.sysml452     * (DE4SDV_AAOSSDVMiddlewareBoundary package).453     *454     * Key elements: Orchestrator, Service Lifecycle Manager, Health Monitor,455     * Update Manager, VSIDL/Middleware, Service Discovery, RPC, Data Tunnel,456     * SOME/IP interoperability, Automotive Services (Diagnostics, Configuration,457     * Calibration, Vehicle Power Mode, User Profile).458     *459     * Runs on Android HLOS, Linux, and as QNX QVM guest.460     * License: Apache 2.0 (AOSP).461     * Status: candidate realization. Upstream AAOS SDV maintainers have462     * not been engaged on DE4SDV model integration (GAP-MW-005).463     */464  }465466  part def AUTOSARAdaptive :> MiddlewareLayer {467    doc /*468     * AUTOSAR Adaptive Platform (ARA).469     * Automotive middleware standard with functional safety470     * focus (ASIL).471     * This entry is a placeholder for the standard interface472     * contract, not a specific open-source implementation.473     * License: varies by implementation.474     * Status: candidate realization — interface contract only.475     */476  }477478  /* ──────────────────────────────────────────479   * Candidate realizations — OS platform layer480   * ────────────────────────────────────────── */481  part def LinuxPlatform :> OSPlatformLayer {482    doc /*483     * Generic Linux platform (POSIX, preemptive scheduling).484     * Includes AGL and custom Linux distributions.485     * License: GPL (kernel) + Apache 2.0 / varies (user space).486     * Status: candidate realization.487     */488  }489490  part def AndroidHLOS :> OSPlatformLayer {491    doc /*492     * Android High-Level OS (Google / AOSP).493     * Linux kernel (GKI) + Android framework.494     * License: Apache 2.0 (AOSP) + GPL (kernel).495     * Status: candidate realization.496     */497  }498499  part def QNXPlatform :> OSPlatformLayer {500    doc /*501     * QNX Neutrino RTOS (BlackBerry / QNX).502     * Real-time POSIX OS, ASIL-D certified.503     * License: commercial (not open-source).504     * Status: candidate realization — included for mixed-criticality505     * architectures; acknowledged as non-OSS.506     */507  }508509  /* ──────────────────────────────────────────510   * Candidate realizations — Hypervisor layer511   * ────────────────────────────────────────── */512  part def QNXQVM :> HypervisorLayer {513    doc /*514     * QNX Virtual Machine (QVM) hypervisor.515     * Host for mixed-criticality: QNX + Linux + Android guests.516     * License: commercial (QNX).517     * Status: candidate realization.518     */519  }520521  part def ACRNHypervisor :> HypervisorLayer {522    doc /*523     * ACRN (Project ACRN, Linux Foundation).524     * Open-source hypervisor for automotive and IoT.525     * Supports Linux and Android guests.526     * License: BSD-2-Clause.527     * Status: candidate realization.528     */529  }530531  part def KVMHypervisor :> HypervisorLayer {532    doc /*533     * KVM (Kernel-based Virtual Machine, Linux).534     * Open-source virtualization in the Linux kernel.535     * License: GPL / LGPL.536     * Status: candidate realization.537     */538  }539540  /* ──────────────────────────────────────────541   * Compatibility constraints542   * ──────────────────────────────────────────543   * These constraints encode which combinations of layer544   * realizations are architecturally valid. They are the545   * product-line decision rules that enable trade-off analysis.546   *547   * Constraint bodies are documented as doc comments in this548   * increment. Future increments may formalize them as549   * require constraint bodies when validation confirms the550   * SysML v2 constraint expression syntax.551   */552553  constraint def MiddlewareOSCompatibility {554    doc /*555     * Middleware ↔ OS compatibility.556     *557     * Valid combinations:558     *   Eclipse S-CORE  ↔ Linux, QNX (not Android HLOS)559     *   Android SDV     ↔ Linux, Android HLOS, QNX (as QVM guest)560     *   AUTOSAR Adaptive ↔ Linux, QNX561     *562     * Invalid:563     *   Eclipse S-CORE ↔ Android HLOS (architecturally incompatible)564     */565  }566567  constraint def HypervisorOSCompatibility {568    doc /*569     * Hypervisor ↔ OS compatibility.570     *571     * Valid combinations:572     *   QNX QVM  ↔ QNX (native), Linux, Android, AGL (all as guests)573     *   ACRN     ↔ Linux, Android, AGL (all as guests; not QNX)574     *   KVM      ↔ Linux, AGL (guests; QNX guest support varies)575     *   none     ↔ any single OS (no virtualization)576     *577     * Invalid:578     *   ACRN ↔ QNX (not supported)579     *   KVM ↔ QNX (community-only, not production)580     */581  }582583  constraint def ApplicationMiddlewareCoexistence {584    doc /*585     * Application ↔ Middleware coexistence.586     *587     * Domain-specific application stacks (e.g. Autoware, Openpilot, Apollo for ADAS) each588     * ship their own internal communication middleware. They589     * coexist with the vehicle-level middleware (S-CORE, Android SDV,590     * AUTOSAR Adaptive) as separate layers — not as alternatives591     * at the same layer.592     *593     * The application stack handles domain-internal pipelines594     * (e.g. ADAS perception→planning→control).595     * The vehicle middleware handles vehicle signal access,596     * diagnostics, lifecycle, and inter-domain communication.597     *598     * No invalid combination exists at this boundary in principle,599     * but integration effort varies significantly:600     *   Autoware + S-CORE: ROS 2 IPC must bridge to LoLa IPC601     *   Openpilot + anything: custom device model, limited integration602     *   Apollo + anything: Cyber RT must bridge to external middleware603     */604  }605606  constraint def ApplicationMiddlewareAdapterCompatibility {607    doc /*608     * Adapter compatibility across application and middleware selections.609     *610     * The adapter variation must match both the selected application stack611     * and the selected vehicle-level middleware. The adapter is present only612     * when a non-none vehicle middleware is selected; when middleware = none,613     * the adapter is also none and the application↔adapter and adapter↔middleware614     * boundaries are absent.615     *616     * Intended pairings:617     *   Autoware ↔ AutowareToSCOREAdapter ↔ EclipseSCORE618     *   Autoware ↔ AutowareToAAOSSDVAdapter ↔ AndroidSDVMiddleware619     *   Autoware ↔ AutowareToAUTOSARAdapter ↔ AUTOSARAdaptive620     *   Openpilot ↔ OpenpilotToSCOREAdapter ↔ EclipseSCORE621     *   Apollo ↔ ApolloToSCOREAdapter ↔ EclipseSCORE622     */623  }624625  constraint def AGLPlatformScope {626    doc /*627     * AGL (Automotive Grade Linux) scope note.628     *629     * AGL is a full platform (OS + IVI framework + app framework +630     * compositor), not just an OS kernel. When AGL is selected as631     * the OS platform variant, it includes its own application632     * framework and does not simultaneously run S-CORE or633     * Android SDV middleware — AGL is an alternative to that634     * combination, not a layer beside it.635     *636     * This is a modeling note, not a hard constraint. AGL could637     * coexist with a domain application stack on a separate compute domain638     * via a hypervisor, but not on the same domain as S-CORE.639     */640  }641642  /* ──────────────────────────────────────────643   * Configured member product base644   * ──────────────────────────────────────────645   * ConfiguredSDVVariant is the abstract base for configured member646   * products. Concrete configured variants are generated from647   * Bill-of-Features YAML by the PLE configurator648   * (tools/configure_variant.py), not hand-written here.649   *650   * See:651   *   model-based-product-line-engineering/feature-models/sdv_product_line.yaml652   *   model-based-product-line-engineering/feature-configurations/653   *   model-based-product-line-engineering/product-models/654   */655  part def ConfiguredSDVVariant :> SDVPlatformStack {656    doc /*657     * A configured member product of the SDV product line.658     * Selects one variant from each variation, subject to659     * compatibility constraints.660     *661     * Concrete configured variants are generated from Bill-of-Features662     * by the PLE configurator (tools/configure_variant.py).663     */664  }665666  concern physicalStructureConcern : PhysicalStructureConcern {667    subject;668    stakeholder systemsEngineer : SystemsEngineer;669    stakeholder reviewer : OpenSourceReviewer;670  }671672  view sdvPlatformStackStructureView {673    viewpoint selectedPhysicalStructureViewpoint : PhysicalStructureDefinitionViewpoint {674      frame physicalStructureConcern;675    }676677    expose DE4SDV_SDVPlatformStack::*;678    render asTreeDiagram;679  }680}681