
h2. Model Validation


h3. Usage of AMALTHEA Model Validation

The AMALTHEA model validation can be triggered by clicking on the "Validate" button of the Amalthea editor.

!../pictures/validation/profile_selection_dialog.png!

The dialog shows a list of profiles allowing the selection of specific validations.

The validation is either applied to all elements of the model (default: folder scope) or only to the elements of the current file.

If an error is found, it is shown in the Problems view of Eclipse. A simple double click on the error will lead you to the affected elements in the AMALTHEA model. The validation distinguishes between three error types: __errors__, __warnings__ and __info__.


h3. Included Validations

h4. Amalthea Standard Validations

p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.standard.AmaltheaProfile@<br/>
**Amalthea Standard Validations**
__Standard validations for AMALTHEA models to ensure data consistency.__
* Profiles:
** @org.eclipse.app4mc.amalthea.validations.standard.BasicProfile@
** @org.eclipse.app4mc.amalthea.validations.standard.ConstraintsProfile@
** @org.eclipse.app4mc.amalthea.validations.standard.EMFProfile@
** @org.eclipse.app4mc.amalthea.validations.standard.EMFScopeProfile@
** @org.eclipse.app4mc.amalthea.validations.standard.HardwareProfile@
** @org.eclipse.app4mc.amalthea.validations.standard.MappingProfile@
** @org.eclipse.app4mc.amalthea.validations.standard.OSProfile@
** @org.eclipse.app4mc.amalthea.validations.standard.SoftwareProfile@
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.standard.BasicProfile@<br/>
**Basic Validations**
* Validations:
** AM-Basic-Counter (ERROR - Counter)
*** The offset value of a counter must not be negative
** AM-Basic-Data-Size (ERROR - DataSize)
*** Some data sizes have to fulfill the condition >0 or >=0
** AM-Basic-Frequency (ERROR - Frequency)
*** Some frequencies have to fulfill the condition >0
** AM-Basic-Quantity (ERROR - Quantity)
*** Quantity unit has to be set (_undefined_ is an error)
** AM-Basic-Time-Range (ERROR - Time)
*** Some time ranges has to fulfill the condition >0 or >=0
** AM-Basic-CustomProperty-Key (WARNING - IAnnotatable)
*** Custom property keys have to be unique
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.standard.ConstraintsProfile@<br/>
**Constraints Validations**
* Validations:
** AM-Constraints-EventChain (ERROR - AbstractEventChain)
*** Stimulus and response shall not reference the same event
*** The stimulus of the first segment has to be the same as the stimulus of the event chain
*** The stimulus of other segments have to be equal to the response of the previous segment
*** The response of the last segment has to be the same as the response of the event chain
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.standard.EMFProfile@<br/>
**Amalthea EMF Validations**
__Standard EMF validations for AMALTHEA models (generated).__
* Validations:
** AM-EMF-INTRINSIC (UNDEFINED - EObject)
*** EMF extended metadata constraints (generated)
*** AMALTHEA invariants (generated)
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.standard.EMFScopeProfile@<br/>
**Amalthea Scope Validations**
__Validations to ensure unique names in folder scope.__
* Validations:
** AM-EMF-SCOPE (ERROR - Amalthea)
*** ID has to be unique in folder scope
*** ID has to be set for objects of type IReferable
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.standard.HardwareProfile@<br/>
**Hardware Validations**
* Validations:
** AM-HW-AccessPath (ERROR - HwAccessPath)
*** HwAccessPath ranges and memory size must be consistent
*** HwAccessPath elements must be consistent
** AM-HW-Connection (ERROR - HwConnection)
*** HwConnections must refer to two HwPorts
*** HwConnections must be linked to HwPorts of the same Interface
** AM-HW-Definition (ERROR - HwDefinition)
*** Only one feature of a category can be referred
** AM-HW-Port (ERROR - HwPort)
*** A HwPort can only have one (non internal) HwConnection
** AM-HW-Structure (ERROR - HwStructure)
*** Connections must only refer to contained HwPorts
*** Inner connections always need one Initiator and one Responder HwPort
*** Delegated connections always connect HwPorts of the same type
** AM-HW-Module-Definition (WARNING - HwModule)
*** Memory definition must be set
*** ProcessingUnit definition must be set
*** ConnectionHandler definition must be set
*** Cache definition must be set
** AM-HW-Port-BitWidth (WARNING - HwPort)
*** Bitwidth should be greater than zero
** AM-HW-Port-Definition (WARNING - HwPort)
*** PortType must be set
*** PortInterface must be set
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.standard.MappingProfile@<br/>
**Mapping Validations**
* Validations:
** AM-Mapping-ISR-Scheduler (WARNING - ISR)
*** An ISR should have an allocation to an interrupt controller
** AM-Mapping-Scheduler-Allocation-Hierarchy (WARNING - SchedulerAllocation)
*** A child scheduler should only be responsible for a subset of processing units of its ancestors
** AM-Mapping-Scheduler-Allocation-Top-Level-Responsibility (WARNING - MappingModel)
*** A processing unit should have at most one top level task scheduler and one interrupt controller responsible for it
** AM-Mapping-Scheduler-ProcessingUnit (WARNING - Scheduler)
*** A top level scheduler should be responsible for at least one processing unit
** AM-Mapping-Task-Scheduler (WARNING - Task)
*** A task should have an allocation to a task scheduler
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.standard.OSProfile@<br/>
**OS Validations**
* Validations:
** AM-OS-Mandatory-Scheduling-Parameters-Set (ERROR - Scheduler)
*** Mandatory scheduling parameters must be set
** AM-OS-Scheduling-Parameter-Value-Number-Matches-Defined-Multiplicity (ERROR - Entry)
*** The number of values of the specified scheduling parameter must match the defined multiplicity in the scheduling parameter definition
** AM-OS-Scheduling-Parameter-Value-Type-Matches-Defined-Type (ERROR - Entry)
*** The type of the specified scheduling parameter must match the type defined in the scheduling parameter definition
** AM-OS-Scheduling-Parameter-Empty-Overriden-Value (WARNING - Entry)
*** There should be a value if a default value of a scheduling parameter is overridden
** AM-OS-Standard-Scheduler-Definition-Conformance (WARNING - SchedulerDefinition)
*** Standard schedulers with their parameters should be modeled as defined by the APP4MC standard scheduler library
** AM-OS-Standard-Scheduling-Parameter-Definition-Conformance (WARNING - SchedulingParameterDefinition)
*** Scheduling parameter definition that are used in a standard scheduler should conform to the parameters defined by the APP4MC standard scheduler library
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.standard.SoftwareProfile@<br/>
**Software Validations**
* Validations:
** AM-SW-CallArgument (ERROR - CallArgument)
*** The referred runnable must contain the referred parameter
** AM-SW-DataDependency (ERROR - DataDependency)
*** A data dependency can only be defined for specific types of label accesses, parameters and call arguments
*** A data dependency can only refer to specific types of parameters and call arguments
** AM-SW-Group (ERROR - Group)
*** The uninterruptible group must not contain nested groups

h4. APP4MC.sim Validations

p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.sim.App4mcSimProfile@<br/>
**APP4MC.sim Validations**
__Validations for AMALTHEA models used in a APP4MC.sim simulation.__
* Profiles:
** @org.eclipse.app4mc.amalthea.validations.sim.SimBasicProfile@
** @org.eclipse.app4mc.amalthea.validations.sim.SimHardwareProfile@
** @org.eclipse.app4mc.amalthea.validations.sim.SimMappingProfile@
** @org.eclipse.app4mc.amalthea.validations.sim.SimOsProfile@
** @org.eclipse.app4mc.amalthea.validations.sim.SimSoftwareProfile@
** @org.eclipse.app4mc.amalthea.validations.standard.AmaltheaProfile@
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.sim.SimBasicProfile@<br/>
**Basic Validations (APP4MC.sim)**
* Validations:
** Sim-Basic-Identifiers (ERROR - IReferable)
*** All names of IReferable objects must be valid C++ identifier names
** TA-Basic-ContinuousValueGaussDistribution-mean (ERROR - ContinuousValueGaussDistribution)
*** Mean must not be less than the lower bound
*** Mean must not be greater than the upper bound
** TA-Basic-DiscreteValueGaussDistribution-mean (ERROR - DiscreteValueGaussDistribution)
*** Mean must not be less than the lower bound
*** Mean must not be greater than the upper bound
** TA-Basic-TimeGaussDistribution-mean (ERROR - TimeGaussDistribution)
*** Mean must not be less than the lower bound
*** Mean must not be greater than the upper bound
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.sim.SimHardwareProfile@<br/>
**Hardware Validations (APP4MC.sim)**
* Validations:
** Inchron-HWModule-MissingClockReference (ERROR - HwModule)
*** HW Module must have 'Frequency Domain' reference
** Sim-HW-Connection (ERROR - HwConnection)
*** Either read AND write latency, or datarate, or both must be set
** Sim-HW-MemoryDefinition (INFO - MemoryDefinition)
*** Either access latency or datarate (or both) must be set
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.sim.SimMappingProfile@<br/>
**Mapping Validations (APP4MC.sim)**
* Validations:
** AM-Mapping-ISR-Scheduler (ERROR - ISR)
*** An ISR should have an allocation to an interrupt controller
** AM-Mapping-Scheduler-Allocation-Hierarchy (ERROR - SchedulerAllocation)
*** A child scheduler should only be responsible for a subset of processing units of its ancestors
** AM-Mapping-Scheduler-Allocation-Top-Level-Responsibility (ERROR - MappingModel)
*** A processing unit should have at most one top level task scheduler and one interrupt controller responsible for it
** AM-Mapping-Scheduler-ProcessingUnit (ERROR - Scheduler)
*** A top level scheduler should be responsible for at least one processing unit
** AM-Mapping-Task-Scheduler (ERROR - Task)
*** A task should have an allocation to a task scheduler
** Sim-Mapping-SchedulerAllocation (WARNING - SchedulerAllocation)
*** Executing processing unit must be set
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.sim.SimOsProfile@<br/>
**OS model Validations (APP4MC.sim)**
* Validations:
** AM-OS-Mandatory-Scheduling-Parameters-Set (ERROR - Scheduler)
*** Mandatory scheduling parameters must be set
** AM-OS-Scheduling-Parameter-Value-Number-Matches-Defined-Multiplicity (ERROR - Entry)
*** The number of values of the specified scheduling parameter must match the defined multiplicity in the scheduling parameter definition
** AM-OS-Scheduling-Parameter-Value-Type-Matches-Defined-Type (ERROR - Entry)
*** The type of the specified scheduling parameter must match the type defined in the scheduling parameter definition
** AM-OS-Standard-Scheduler-Definition-Conformance (ERROR - SchedulerDefinition)
*** Standard schedulers with their parameters should be modeled as defined by the APP4MC standard scheduler library
** AM-OS-Standard-Scheduling-Parameter-Definition-Conformance (ERROR - SchedulingParameterDefinition)
*** Scheduling parameter definition that are used in a standard scheduler should conform to the parameters defined by the APP4MC standard scheduler library
** Inchron-OS-PU-Allocation-MustBeDisjunct (INFO - OperatingSystem)
*** OS Scheduler to core mapping must be distinct
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.sim.SimSoftwareProfile@<br/>
**Software Validations (APP4MC.sim)**
* Validations:
** Sim-Software-AbstractMemoryElementIsMapped (ERROR - LabelAccess)
*** Checks if label access type is set
** Sim-Software-AbstractMemoryElementIsMapped (ERROR - Label)
*** Checks if label is mapped to a memory node
** Sim-Software-AbstractMemoryElementIsMapped (ERROR - Channel)
*** Checks if channel is mapped to a Memory
** Sim-Software-AbstractMemoryElementIsMapped (ERROR - ModeLabelAccess)
*** Checks if modeLabel access type is valid
** Sim-Software-ChannelAccessFeasibility (ERROR - ChannelAccess)
*** Checks if a channel access can be performed from certain runnable
** Sim-Software-ChannelElements (ERROR - ChannelAccess)
*** Checks if channel access's property elements is greater 0
** Sim-Software-LabelAccessFeasibility (ERROR - LabelAccess)
*** Checks if a label access can be performed from certain runnable
** Sim-Software-Process (ERROR - Process)
*** At least one stimulus must be set
** Inchron-SW-Runnable-MustHaveActivityGraph (WARNING - Runnable)
*** Runnable must have at least one ActivityGraph
** Inchron-SW-Task-MustHaveActivityGraph (WARNING - Task)
*** Task must have atleast one ActivityGraph
** Sim-Software-AbstractMemoryElementIsMapped (WARNING - ModeLabel)
*** Checks if modeLabel is mapped to a Memory
** Sim-Software-ModeLabelAccessFeasibility (WARNING - ModeLabelAccess)
*** Checks if a modeLabel access can be performed from certain runnable
** TA-Software-ModeConditionConjunctionAlwaysFalse (WARNING - ModeConditionConjunction)
** TA-Software-ModeConditionDisjunctionAlwaysTrue (WARNING - ModeConditionDisjunction)

h4. Timing Architects Validations

p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.ta.TimingArchitectsProfile@<br/>
**Timing Architects Validations**
__Validations for AMALTHEA models used in a Timing Architects Simulation.__
* Validations:
** TA-Misc-Semaphore (ERROR - Semaphore)
*** Initial value must not be negative
*** Max value must be positive
*** Max value must not be smaller than the initial value
* Profiles:
** @org.eclipse.app4mc.amalthea.validations.standard.AmaltheaProfile@
** @org.eclipse.app4mc.amalthea.validations.ta.TABasicProfile@
** @org.eclipse.app4mc.amalthea.validations.ta.TAConstraintsProfile@
** @org.eclipse.app4mc.amalthea.validations.ta.TAHardwareProfile@
** @org.eclipse.app4mc.amalthea.validations.ta.TASoftwareProfile@
** @org.eclipse.app4mc.amalthea.validations.ta.TAStimuliProfile@
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.ta.TABasicProfile@<br/>
**Basic Validations (Timing Architects)**
* Validations:
** TA-Basic-ContinuousValueGaussDistribution-mean (ERROR - ContinuousValueGaussDistribution)
*** Mean must not be less than the lower bound
*** Mean must not be greater than the upper bound
** TA-Basic-DiscreteValueGaussDistribution-mean (ERROR - DiscreteValueGaussDistribution)
*** Mean must not be less than the lower bound
*** Mean must not be greater than the upper bound
** TA-Basic-TimeGaussDistribution-mean (ERROR - TimeGaussDistribution)
*** Mean must not be less than the lower bound
*** Mean must not be greater than the upper bound
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.ta.TAConstraintsProfile@<br/>
**Constraints Validations (Timing Architects)**
* Validations:
** TA-Constraints-DataAgeTime (ERROR - DataAgeTime)
*** Maximum time must not be smaller than minimum time
** TA-Constraints-DelayConstraint (ERROR - DelayConstraint)
*** Upper bound must not be smaller than lower bound
** TA-Constraints-ECLConstraint (ERROR - EventChainLatencyConstraint)
*** Maximum must not be smaller than minimum
** TA-Constraints-EDFTaskMustHaveDeadline (ERROR - Task)
*** EDF tasks must have a deadline requirement
** TA-Constraints-RTLimitMustBePositive (ERROR - TimeRequirementLimit)
*** Response time must be positive
** TA-Constraints-RepetitionConstraint (ERROR - RepetitionConstraint)
*** Upper bound must not be smaller than lower bound
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.ta.TAHardwareProfile@<br/>
**Hardware Validations (Timing Architects)**
* Validations:
** TA-Hardware-HWFIPCMustBePositive (ERROR - HwFeature)
*** IPC (instructions per cycle) must be positive
** TA-Hardware-PUDIPCMissing (INFO - ProcessingUnitDefinition)
*** IPC (instructions per cycle) should be set, otherwise default (1.0) will be assumed
*** Only one IPC HwFeature should be specified for a processing unit definition
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.ta.TASoftwareProfile@<br/>
**Software Validations (Timing Architects)**
* Validations:
** TA-Software-RunnableCall (ERROR - RunnableCall)
** TA-Software-ServerCall (ERROR - ServerCall)
** TA-Stimuli-ArrivalCurveStimulus (ERROR - OsEvent)
** TA-Software-ModeConditionConjunctionAlwaysFalse (WARNING - ModeConditionConjunction)
** TA-Software-ModeConditionDisjunctionAlwaysTrue (WARNING - ModeConditionDisjunction)
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.ta.TAStimuliProfile@<br/>
**Stimuli Validations (Timing Architects)**
* Validations:
** TA-Stimuli-VariableRateStimulusScenario (ERROR - VariableRateStimulus)
*** Scenario must be set

h4. Inchron Validations

p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.inchron.InchronProfile@<br/>
**Inchron Validations**
__Validation for Amalthea models used in Inchron Toolsuite__
* Profiles:
** @org.eclipse.app4mc.amalthea.validations.inchron.InchronConstraintsProfile@
** @org.eclipse.app4mc.amalthea.validations.inchron.InchronHWProfile@
** @org.eclipse.app4mc.amalthea.validations.inchron.InchronOsProfile@
** @org.eclipse.app4mc.amalthea.validations.inchron.InchronSoftwareProfile@
** @org.eclipse.app4mc.amalthea.validations.inchron.InchronStimuliProfile@
** @org.eclipse.app4mc.amalthea.validations.standard.AmaltheaProfile@
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.inchron.InchronConstraintsProfile@<br/>
**Constraints Validations (INCHRON)**
* Validations:
** Inchron-Constraints-LoadRequirementMissingResource (ERROR - CPUPercentageRequirementLimit)
*** CPU load requirement must have hardware context
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.inchron.InchronHWProfile@<br/>
**Hardware Validations (INCHRON)**
* Validations:
** AM-HW-Port-BitWidth (ERROR - HwPort)
*** Bitwidth should be greater than zero
** Inchron-HW-Memory-PortTypeResponder (ERROR - Memory)
*** HW ports of memory should be of type responder
** Inchron-HW-PU-PortTypeInitiator (ERROR - ProcessingUnit)
*** HW ports of processing Unit should be of type initiator
** Inchron-HWModule-InconsistentPortWidths (ERROR - HwModule)
*** HW Module cannot have ports with unequal bitwidth
** Inchron-HWModule-MissingClockReference (ERROR - HwModule)
*** HW Module must have 'Frequency Domain' reference
* Profiles:
** @org.eclipse.app4mc.amalthea.validations.standard.HardwareProfile@
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.inchron.InchronOsProfile@<br/>
**Operating Systems Validations (INCHRON)**
* Validations:
** Inchron-OS-PU-Allocation-MustBeDisjunct (ERROR - OperatingSystem)
*** OS Scheduler to core mapping must be distinct
** Inchron-OS-Scheduler-Allocation-DifferentCPU (ERROR - Scheduler)
*** OS Task scheduler should not be allocated to more than one HwStructure
** Inchron-OS-UserSpecificSchedulerCheck (ERROR - Amalthea)
*** User specific task scheduler needs at least one task allocation
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.inchron.InchronSoftwareProfile@<br/>
**Software Validations (INCHRON)**
* Validations:
** Inchron-SW-Runnable-MustHaveActivityGraph (ERROR - Runnable)
*** Runnable must have at least one ActivityGraph
** Inchron-SW-Runnable-NotAllocated-DifferentOS (ERROR - Runnable)
*** Runnable cannot be scheduled by more than one OS
** Inchron-SW-RunnableAllocation-Present (ERROR - RunnableAllocation)
*** Runnable allocation is not supported
** Inchron-SW-Task-EnforcedMigrationCheck (ERROR - Task)
*** Invalid Enforced Migration of a task to a task Scheduler
** Inchron-SW-Task-MustHaveActivityGraph (ERROR - Task)
*** Task must have atleast one ActivityGraph
** Inchron-SW-Task-NotAllocated-DifferentSchedulers (ERROR - Task)
*** Task cannot be scheduled by more than one OS
* Profiles:
** @org.eclipse.app4mc.amalthea.validations.standard.SoftwareProfile@
p{padding: 10px; background: #fafafa; border: 1px solid #888; border-radius: 5px}. @org.eclipse.app4mc.amalthea.validations.inchron.InchronStimuliProfile@<br/>
**Stimuli Validations (INCHRON)**
* Validations:
** Inchron-Stimuli-TypeCheck (ERROR - Stimulus)
*** Unsupported stimuli types
