ERTS 2020 Toulouse, 30 Jan 2020
- P. Dissaux
Ellidiss Technologies, 24, quai de la douane, 29200 Brest, France
LAMP: A new model processing language for AADL
Ellidiss
Technologies
w w w . e l l i d i s s . c o m
Ellidiss Technologies w w w . e l l i d i s s . c o m Ellidiss - - PowerPoint PPT Presentation
LAMP: A new model processing language for AADL ERTS 2020 Toulouse, 30 Jan 2020 P. Dissaux Ellidiss Technologies, 24, quai de la douane, 29200 Brest, France Ellidiss Technologies w w w . e l l i d i s s . c o m Ellidiss Technologies Model
Ellidiss Technologies, 24, quai de la douane, 29200 Brest, France
Technologies
w w w . e l l i d i s s . c o m
Technologies
w w w . e l l i d i s s . c o m
Technologies
w w w . e l l i d i s s . c o m
(Declarative predicates, Boolean logics, unification and backtracking)
Technologies
w w w . e l l i d i s s . c o m
Technologies
w w w . e l l i d i s s . c o m
<xsd:schema ... > <xsd:complexType name="SPEC-OBJECT"> ... <xsd:attribute name="DESC" type="xsd:string" use="optional"/> <xsd:attribute name="IDENTIFIER" type="xsd:ID" use="required"/> <xsd:attribute name="LAST-CHANGE" type="xsd:dateTime" use="required"/> <xsd:attribute name="LONG-NAME" type="xsd:string" use="optional"/> </xsd:complexType> ... </xsd:schema>
Technologies
w w w . e l l i d i s s . c o m
Technologies
w w w . e l l i d i s s . c o m
Technologies
w w w . e l l i d i s s . c o m
Technologies
w w w . e l l i d i s s . c o m
– Describes Systems with Hardware and Software components – Formal static and run-time semantics (real-time) – Textual and graphical notations
– AADL 1.0 (AS 5506) 2004 – AADL 2.0 (AS 5506A) 2009 – AADL 2.1 (AS 5506B) 2012 – AADL 2.2 (AS 5506C) 2017 – AADL 3.0 : in preparation
– Annex A: ARINC 653 Interface (AS 5506/1A) 2015 – Annex B: Data Modelling (AS 5506/2) 2011 – Annex C: Code Generation Annex (AS 5506/1A) 2015 – Annex D: Behavior Annex (AS 5506/3) 2017 – Annex E: Error Model Annex v2 (AS 5506/1A) 2015
– https://www.sae.org/standards/content/as5506c – http://www.openaadl.org
Technologies
w w w . e l l i d i s s . c o m
Technologies
w w w . e l l i d i s s . c o m
Technologies
w w w . e l l i d i s s . c o m
prolog byte code prolog source code uses
Technologies
w w w . e l l i d i s s . c o m
Technologies
w w w . e l l i d i s s . c o m
package Ellidiss::LAMP::Declarative public annex LAMP {** getClassFeatures(Class,Name,Categ,FClass) :- … getClassSubcomponents(Class,Name,Categ,SClass) :- … getLocalProperties(Class,Name,Val,Owner) :- … … **}; end Ellidiss::LAMP::Declarative; package Ellidiss::LAMP::Instance public annex LAMP {** getRoot(Class) :- getInstances(Id,Categ,Class) :- … /* components */ getInstances(Id,Categ,Class) :- … /* features */ getProperties(Id,Class,Prop,Val) :- … … **}; end Ellidiss::LAMP::Instance;
returns all the features of a classifier (component type and ancestors) returns all the subcomponents
implementation and ancestors) returns all the properties of a classifier (comp. type and impl. and ancestors.) returns the root classifier (component implementation) returns all the component instances returns all the feature instances returns all the properties for the given instance element
Technologies
w w w . e l l i d i s s . c o m
package Ellidiss::LAMP::BA2 public annex LAMP {** getBAVariables(Class,Name,VClass,Value) :- … getBAStates(Class,Name,Initial,Complete,Final):- … getBADispatch(Class,Condition) :- … getBAComputation(Class,Duration) :- … … **}; end Ellidiss::LAMP::BA2; package Ellidiss::LAMP::EMV2 public annex LAMP {** getErrorTypes(Class,Name,Ancestor) :- … getErrorStates(Class,Name,TypeSet,Kind) :- … … **}; end Ellidiss::LAMP::EMV2;
returns all the BA variables of a classifier returns all the BA states of a classifier returns all the BA dispatch conditions of a classifier returns all the BA computation actions of a classifier returns all the known error types from within a classifier returns all the error states of a classifier
Technologies
w w w . e l l i d i s s . c o m
package Ellidiss::LAMP::Analysis public annex LAMP {** getResponseTime(Id,Duration) :- … getPortValue(Id,Tick,Value) :- … … **}; end Ellidiss::LAMP::Analysis;
returns the computed response time of a thread returns the computed response time of a thread
Technologies
w w w . e l l i d i s s . c o m
PACKAGE p PUBLIC SYSTEM IMPLEMENTATION s.i SUBCOMPONENTS a : PROCESS a.i; c : PROCESSOR c; PROPERTIES ACTUAL_PROCESSOR_BINDING => (REFERENCE(c)) APPLIES TO a; SCHEDULING_PROTOCOL => (RMS) APPLIES TO c; ANNEX LAMP {** write('hello!'), nl, getInstances(X,'THREAD',C), checkPeriod(X,C), checkWCET(X,C), checkDeadline(X,C), checkOverflow(X,C) **}; END s.i; … ANNEX LAMP {** checkPeriod(Id,Class) :- … checkWCET(Id,Class) :- … checkDeadline(Id,Class) :- … checkOverflow(Id,Class) :- … **}; END p;
Technologies
w w w . e l l i d i s s . c o m
THREAD t FEATURES i : IN DATA PORT d;
PROPERTIES DISPATCH_PROTOCOL => Periodic; PERIOD => 15ms; DEADLINE => 8ms; COMPUTE_EXECUTION_TIME => 2ms..2ms; ANNEX Behavior_Specification {** VARIABLES v : d; STATES s : INITIAL COMPLETE FINAL STATE; TRANSITIONS t : s -[ON DISPATCH]-> s { rand!(v); computation(10ms); o := v }; **}; END t; ANNEX LAMP {** checkPeriod(Id,Class) :- getProperties(Id,Class,'DISPATCH_PROTOCOL','PERIODIC'), not(getProperties(Id,Class,'PERIOD',_)), write('periodic thread '), write(Id), write(' has no period'), nl, fail. checkPeriod(_,_). **}
Technologies
w w w . e l l i d i s s . c o m
THREAD t FEATURES i : IN DATA PORT d;
PROPERTIES DISPATCH_PROTOCOL => Periodic; PERIOD => 15ms; DEADLINE => 8ms; COMPUTE_EXECUTION_TIME => 2ms..2ms; ANNEX Behavior_Specification {** VARIABLES v : d; STATES s : INITIAL COMPLETE FINAL STATE; TRANSITIONS t : s -[ON DISPATCH]-> s { rand!(v); computation(10ms); o := v }; **}; END t; ANNEX LAMP {** checkWCET(Id,Class) :- getProperties(Id,Class,'COMPUTE_EXECUTION_TIME',W), getMinMax(W,_,M), getBAComputation(Class,V), timeToInt(M,A), timeToInt(V,B), A \= B, write('WCET inconsistency for thread '), write(Id), nl, write('( '), write(A), write(' != '), write(B), write(' )'), nl, fail. checkWCET(_,_). **}
Technologies
w w w . e l l i d i s s . c o m
THREAD t FEATURES i : IN DATA PORT d;
PROPERTIES DISPATCH_PROTOCOL => Periodic; PERIOD => 15ms; DEADLINE => 8ms; COMPUTE_EXECUTION_TIME => 2ms..2ms; ANNEX Behavior_Specification {** VARIABLES v : d; STATES s : INITIAL COMPLETE FINAL STATE; TRANSITIONS t : s -[ON DISPATCH]-> s { rand!(v); computation(10ms); o := v }; **};
END t;
ANNEX LAMP {** checkDeadline(Id,Class) :- getProperties(Id,Class,'DEADLINE',D), timeToInt(D,A), strToNum(A,B), getResponseTime(Id,R), strToNum(R,C), C > B, write('deadline missed for thread '), write(Id), nl, write('( '), write(C), write(' > '), write(B), write(' )'), nl, fail. checkDeadline(Id,Class). **}
Technologies
w w w . e l l i d i s s . c o m
THREAD t FEATURES i : IN DATA PORT d;
PROPERTIES DISPATCH_PROTOCOL => Periodic; PERIOD => 15ms; DEADLINE => 8ms; COMPUTE_EXECUTION_TIME => 2ms..2ms; LAMPExample2_Prop::MAX_VALUE => 80 APPLIES TO o; ANNEX Behavior_Specification {** VARIABLES v : d; STATES s : INITIAL COMPLETE FINAL STATE; TRANSITIONS t : s -[ON DISPATCH]-> s { rand!(v); computation(10ms); o := v }; **}; END t; ANNEX LAMP {** checkOverflow(Id,Class) :- concat(Id,'.o',F), getProperties(F,Class,'LAMPExample2_Prop::MAX_VALUE',M), getPortValue(F,T,V), strToNum(V,W), strToNum(M,N), W > N, , write('overflow of out data port '), write(F), sp, write(' at tick '), write(T), nl, write('( '), write(W), write(' > '), write(80), write(' )'), nl, fail. checkOverflow(Id,Class). **}
Technologies
w w w . e l l i d i s s . c o m
PROCESS a FEATURES i : IN DATA PORT d;
END a; PROCESS IMPLEMENTATION a.i SUBCOMPONENTS t1 : THREAD t; t2 : THREAD t; t3 : THREAD t; CONNECTIONS x : PORT i -> t1.i; y : PORT t1.o -> o; END a.i;
Technologies
w w w . e l l i d i s s . c o m
Technologies
w w w . e l l i d i s s . c o m