Home

DOL-Critical

Publications

Downloads

Contact

 
 

DOL-Critical is a framework that enables the automatic mapping of mixed-criticality real-time applications onto multiprocessor platforms. The considered applications may include tasks with (i) up to three criticality levels (DAL-B, DAL-C, DAL-D as defined by the DO-178B standard for avionics), (ii) different activation patterns (periodic, pseudo-periodic, aperiodic, periodic with modes), (iii) different communication patterns (asynchronous communication through mailboxes and blackboards), and (iv) precedence constraints. The target platforms are assumed homogeneous, featuring computation cores with access to shared memory resources, e.g., resembling the architecture of a computation cluster of the Kalray MPPA-256 ® platform.

The DOL-Critical framework consists of three parts:

  • DOL-Critical Application Programming Interface: DOL-Critical defines a set of computation and communication routines that enable the programming of parallel mixed-criticality applications. Using these routines, application programmers can write programs without having detailed knowledge about the underlying architecture. Furthermore, the DOL-Critical API provides guidelines for structuring the computation into phases (according to the superblock model) and for defining alternative computations for different execution modes.

  • DOL-Critical Functional Simulation: To provide programmers a possibility to test their applications and detect functional inconsistencies at an early stage, a functional simulation framework has been developed.

  • DOL-Critical Mapping Optimization: The goal of the DOL-Critical mapping optimization is to compute a (set of) optimal mapping(s) of a mixed-criticality application onto a multi-core platform. As a first step, XML based specification formats have been defined that allow to describe the application and the architecture at an abstract level. The timing properties of the application when executed on the target architecture are also specified then. Mapping is optimized under a time-triggered and synchronization-based scheduling policy (flexible TTS). During design space exploration, potential mappings are evaluated by considering also inter-task interferences, e.g., the contention upon accessing shared memory resources and its effect on the response time of the parallel applications.


The analysis and design methods used within DOL-Critical are described in the respective scientific publications, see Publications, and CERTAINTY project deliverable D5.1 Interference Analysis and Isolation Mechanisms Report.

DOL-Critical Package
The DOL-Critical package (available upon request) includes the following files. Refer to the Installation Guide section below for instructions on how to set up DOL-Critical on your computer.

  • dolc.jar archive and compile scripts for the DOL-Critical functional simulation and mapping optimization
  • Third-party Java libraries used by DOL-Critical
  • Example applications (source code and specification in XML format)
  • Example architectures in XML format
  • Documentation of DOL-Critical toolchain, API, and XML schema semantics.

DOL-Critical Documentation
The following documents describe the DOL-Critical programming API, XML schema semantics (application, architecture, mapping), and the general tool chain.


Installation Guide
This section provides a guide how to set up DOL-Critical. This guide leads through the necessary steps, starting from the download of the DOL-Critical framework to the execution of an example application using the DOL-Critical functional simulator and mapping optimizer (the example is described in detail in the Getting Started section).

The DOL-Critical framework runs under 64-bit UNIX/Linux as well as Microsoft Windows (using Cygwin). The current version has been tested under Ubuntu Linux 12.04, Debian 7, and Windows 8 with Cygwin 1.7.23 (all 64-bit versions).

The requirements on both platforms are:

  • C/C++ environment (g++ version 4.3 or greater)
  • Java environment (JDK version 7)
  • Build environment: make, Ant (version 1.7.0 or greater, download Ant)

Once the above mentioned environments are in place, do the following to install the framework.

  1. Save the DOL-Critical package dolc_ethz.zip in a directory of your choice.
  2. Uncompress its contents:
    $ unzip dolc_ethz.zip
    $ cd dolc_ethz
  3. Use ant to generate the src/dolc.properties file based on the settings as well as to set up the build directory structure build/bin/main and copy all necessary resources to it:
    $ ant -f build_zip.xml all

    The output (under Linux) should look similar to the following one:

    Buildfile: /home/user/dolc_ethz/build_zip.xml

    showantversion:
    [echo] Use Apache Ant(TM) version 1.8.2 compiled on December 3 2011.

    showjavaversion:
    [echo] Use Java version 1.7.0_51 (required version: 1.7.0 or higher).

    config:
    [echo] Create new dolc.properties file.
    [copy] Copying 1 file to /home/user/dolc_ethz/bin
    [jar] Updating jar: /home/user/dolc_ethz/bin/dolc.jar

    compile:
    [echo] Create build directory tree.
    [mkdir] Created dir: /home/user/dolc_ethz/build
    [mkdir] Created dir: /home/user/dolc_ethz/build/bin
    [mkdir] Created dir: /home/user/dolc_ethz/build/bin/main
    [mkdir] Created dir: /home/user/dolc_ethz/build/bin/main/schema
    [copy] Copying 15 files to /home/user/dolc_ethz/build/bin/main/schema
    [unzip] Expanding: /home/user/dolc_ethz/bin/dolc.jar into /home/user/dolc_ethz/build/bin/main
    [copy] Copying 1 file to /home/user/dolc_ethz/build/bin/main

    all:

    BUILD SUCCESSFUL
    Total time: 1 second

Installation is now complete. We are ready to run the first example in the automated DOL-Critical tool chain!

Getting Started - Demo Example
This section introduces an example application which is to be mapped onto a dual-core platform. We show step-by-step how to perform functional simulation for the application and then, mapping optimization onto the target platform using the automated DOL-Critical tool chain.

The considered application is depicted below. It consists of six periodic real-time tasks with periods equal to 100 ms or 200 ms, as annotated in the figure. Tasks periodic1 - periodic4 are classified as DAL-C with respect to their safety criticality, while tasks periodic5, periodic6 are classified as DAL-B. Inter-task communication is achieved through four mailboxes: AnemoBaro (token size: 28 bytes, capacity: 2 tokens), GPS (token size: 76 bytes, capacity: 2 tokens), IRS_HYB (token size: 76 bytes, capacity: 2 tokens), Doppler (token size: 36 bytes, capacity: 2 tokens), and one blackboard: Sensors (token size: 340 bytes, capacity: 1 token). An ingoing edge from a communication buffer (mailbox or blackboard) to a task implies that the task reads data from this buffer at the beginning of its execution. Respectively, an outgoing edge from a task to a communication buffer implies that the task writes data to the buffer upon completing its computation (before end of execution). Additionally, we assume a precedence constraint among tasks periodic2 - periodic3 - periodic4. That is, in every period [0,100] ms, [100,200] ms, [200,300] ms, ..., task periodic2 must be executed before periodic3, which in turn must be executed before periodic4. The XML specification for this application is given here (it can be found in dolc_ethz/examples/exampleDemo/exampleDemo-DOLC.xml).

Example mixed-criticality application

The functionality of the tasks is defined by the C/DOL-Critical code, which can be found under dolc_ethz/examples/exampleDemo/dolc-src/. Upon activation, tasks periodic1 - periodic4 write their activation sequence number to the respective mailbox (1 token each). Task periodic5 reads out from the mailboxes and writes the number of tokens it managed to read to the Sensors blackboard. Finally, task periodic6 reads the data from the blackboard.

The target architecture features 2 processing cores at 1 Mhz, which can access a shared single-port memory through a local bus. Arbitration on the bus is based on a round-robin policy and every time a core is granted access to the memory, the access has a bounded latency of 10 us. Accesses are non-preemptive. The XML specification for this architecture is given here (it can be found in dolc_ethz/examples/arch/archDemo.xml).
Example architecture

If DOL-Critical is already installed, we follow step-by-step the next instructions to perform functional simulation of the example application and optimize its mapping and scheduling onto the considered architecture.

  1. Change to directory build/bin/main:
    $ cd build/bin/main/
  2. Run the example exampleDemo using the provided ant build file runexample.xml. runexample.xml will trigger initially the C code generation, compilation, and execution of the specified application on the local functional simulator. The simulator neglects the criticality levels, execution times, and precedence constraints of the application tasks (but considers their activation patterns), as its main purpose is to identify any inconsistencies w.r.t. to the DOL-Critical API and / or logical mistakes, early at the design phase.

    To enable also mapping optimization under the time-triggered and synchronization-based (TTS) scheduling policy, we need to specify the dimensions, i.e., the period and frame lengths, of the TTS scheduling cycle. For this example, we assume a cycle with period 200 ms, consisting of four equally-sized (50 ms) frames. These parameters are given as argument when executing runexample.xml. The same holds for the location where the architecture XML specification is stored (under dolc_ethz/examples/arch/ ):
    $ ant -f runexample.xml -Dnumber=Demo -Dplatformfile="archDemo.xml" -Dschedcycle=0.2 -Dframelength=0.05
    Note that if the schedcycle and framelength properties are not defined, then mapping optimization will not be triggered.

    The output should look then similar to the following one:

    Buildfile: /home/user/dolc_ethz/build/bin/main/runexample.xml

    showversion:

    showantversion:
    [echo] Use Apache Ant(TM) version 1.8.2 compiled on December 3 2011.

    showjavaversion:
    [echo] Use Java version 1.7.0_51 (required version: 1.7.0 or higher).

    showjavacversion:
    [echo] Use Java version 1.7.0_51 (required version: 1.7.0 or higher).

    runexample:

    prepareDolc:
    [echo] Create directory exampleDemo.
    [echo] Create directory /home/user/dolc_ethz/build/bin/main/exampleDemo.
    [echo] Copy C source files.
    [mkdir] Created dir: /home/user/dolc_ethz/build/bin/main/exampleDemo/dolc-src
    [copy] Copying 12 files to /home/user/dolc_ethz/build/bin/main/exampleDemo/dolc-src
    [copy] Copying 1 file to /home/user/dolc_ethz/build/bin/main/exampleDemo
    [mkdir] Created dir: /home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src/app1/src

    dolc:
    [copy] Copying 6 files to /home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src/app1/src
    [copy] Copying 1 file to /home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src

    flattenFsm:
    [copy] Copying 1 file to /home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src

    flattenPN:
    [echo] Create flattened XML /home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src/app1/pn_flattened.xml.
    [java] ................................................................................................
    [javac] Compiling 1 source file to /home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src/app1

    dalPreparation:
    [echo] Run DAL Preparation.
    [java] Read finite state machine from XML file
    [java] -- full filename: file:/home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src/exampleDemo_flattened.xml
    [java] Read process network from XML file
    [java] -- full filename: file:/home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src/app1/pn_flattened.xml
    [java] -- Process network model from XML [Finished]
    [java]
    [java] -- Finite state machine model from XML [Finished]
    [java]
    [java] Read architecture from XML file
    [java] -- full filename: file:/home/user/dolc_ethz/examples/arch/archDemo.xml
    [java] -- Architecture model from XML [Finished]
    [java]
    [java] Generating Preparation package:
    [java] -- Consistency check:
    [java] APPL: Checking resource name ...
    [java] APPL: Checking channel ports ...
    [java] APPL: Checking channel connection ...
    [java] APPL: Checking Process connection ...
    [java] ARCH: Checking resource name ...
    [java] ARCH: Checking network simulators ...
    [java] -- Consistency check [Finished]
    [java]
    [java] -- Generation [Finished]
    [java]

    dalFunctionalController:
    [echo] Run Functional Controller Synthesis.
    [java] Read finite state machine from XML file
    [java] -- full filename: file:/home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src/exampleDemo_flattened.xml
    [java] Read process network from XML file
    [java] -- full filename: file:/home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src/app1/pn_flattened.xml
    [java] -- Process network model from XML [Finished]
    [java]
    [java] -- Finite state machine model from XML [Finished]
    [java]
    [java] Generating Functional Controller package:
    [java] -- Generation [Finished]
    [java]

    dal:
    [echo] Run DAL.
    [java] Read architecture from XML file
    [java] -- full filename: file:/home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src/controller/platform.xml
    [java] -- Architecture model from XML [Finished]
    [java]
    [java] Read process network from XML file
    [java] -- full filename: file:/home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src/controller/APP1/processnetwork.xml
    [java] -- Process network model from XML [Finished]
    [java]
    [java] Read process network from XML file
    [java] -- full filename: file:/home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src/controller/Controller/processnetwork.xml
    [java] -- Process network model from XML [Finished]
    [java]
    [java] Read mapping from XML file
    [java] -- full filename: file:/home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src/controller/mapping.xml
    [java] -- Mapping from XML [Finished]
    [java]
    [java] Generating SingleLinux-package:
    [java] Created directory singlelinux/tmp/util
    [java] Created directory singlelinux/tmp/include
    [java] Created directory singlelinux/tmp/util
    [java] Created directory singlelinux/tmp/include
    [java] -- Generation [Finished]
    [java]

    execute:
    [echo] Make singlelinux application.
    [exec] g++ -c -g -fPIC -DLINUX -Wall -Iinclude util/channel.cpp -o util/channel.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -Iinclude util/checutil/channel.cpp -o util/checkpoint.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -Iinclude util/controllerHelperGeneric.cpp -o util/controllerHelperGeneric.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -Iinclude util/controllerHelperSpecific.cpp -o util/controllerHelperSpecific.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -Iinclude util/faultSimulator.cpp -o util/faultSimulator.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -Iinclude util/Fifo.cpp -o util/Fifo.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -Iinclude util/InnerProcessorFifo.cpp -o util/InnerProcessorFifo.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -Iinclude util/setupHelperGeneric.cpp -o util/setupHelperGeneric.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -Iinclude util/setupHelperSpecific.cpp -o util/setupHelperSpecific.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -Iinclude util/sleep.cpp -o util/sleep.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -Iinclude util/Timer.cpp -o util/Timer.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -Iinclude util/videoHelper.cpp -o util/videoHelper.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -Iinclude main.cpp -o main.o
    [exec] g++ -pthread -lm *.o util/*.o -o main -ldl
    [exec] cd app/APP1; make DAL_TESTING=
    [exec] make[1]: Entering directory `/home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src/singlelinux/app/APP1'
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include dolc.c -o dolc.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic1.c -o periodic1.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic2.c -o periodic2.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic3.c -o periodic3.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic4.c -o periodic4.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic5.c -o periodic5.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic6.c -o periodic6.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include dolcsched/dolcsched.c -o dolcsched/dolcsched.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include dolcsched/wrap_process.c -o dolcsched/wrap_process.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic1Cntr/periodic1Cntr.c -o periodic1Cntr/periodic1Cntr.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic1Cntr/wrap_process.c -o periodic1Cntr/wrap_process.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic2Cntr/periodic2Cntr.c -o periodic2Cntr/periodic2Cntr.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic2Cntr/wrap_process.c -o periodic2Cntr/wrap_process.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic3Cntr/periodic3Cntr.c -o periodic3Cntr/periodic3Cntr.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic3Cntr/wrap_process.c -o periodic3Cntr/wrap_process.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic4Cntr/periodic4Cntr.c -o periodic4Cntr/periodic4Cntr.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic4Cntr/wrap_process.c -o periodic4Cntr/wrap_process.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic5Cntr/periodic5Cntr.c -o periodic5Cntr/periodic5Cntr.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic5Cntr/wrap_process.c -o periodic5Cntr/wrap_process.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic6Cntr/periodic6Cntr.c -o periodic6Cntr/periodic6Cntr.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include periodic6Cntr/wrap_process.c -o periodic6Cntr/wrap_process.o
    [exec] g++ -pthread -shared -Wl,-soname,libperiodic6Cntr.so -o libperiodic6Cntr.so ../../util/*.o periodic6Cntr/*.o *.o
    [exec] mv libperiodic6Cntr.so "../../lib/APP1/libperiodic6Cntr.so"
    [exec] g++ -pthread -shared -Wl,-soname,libperiodic5Cntr.so -o libperiodic5Cntr.so ../../util/*.o periodic5Cntr/*.o *.o
    [exec] mv libperiodic5Cntr.so "../../lib/APP1/libperiodic5Cntr.so"
    [exec] g++ -pthread -shared -Wl,-soname,libperiodic3Cntr.so -o libperiodic3Cntr.so ../../util/*.o periodic3Cntr/*.o *.o
    [exec] mv libperiodic3Cntr.so "../../lib/APP1/libperiodic3Cntr.so"
    [exec] g++ -pthread -shared -Wl,-soname,libdolcsched.so -o libdolcsched.so ../../util/*.o dolcsched/*.o *.o
    [exec] mv libdolcsched.so "../../lib/APP1/libdolcsched.so"
    [exec] g++ -pthread -shared -Wl,-soname,libperiodic4Cntr.so -o libperiodic4Cntr.so ../../util/*.o periodic4Cntr/*.o *.o
    [exec] mv libperiodic4Cntr.so "../../lib/APP1/libperiodic4Cntr.so"
    [exec] g++ -pthread -shared -Wl,-soname,libperiodic1Cntr.so -o libperiodic1Cntr.so ../../util/*.o periodic1Cntr/*.o *.o
    [exec] mv libperiodic1Cntr.so "../../lib/APP1/libperiodic1Cntr.so"
    [exec] g++ -pthread -shared -Wl,-soname,libperiodic2Cntr.so -o libperiodic2Cntr.so ../../util/*.o periodic2Cntr/*.o *.o
    [exec] mv libperiodic2Cntr.so "../../lib/APP1/libperiodic2Cntr.so"
    [exec] make[1]: Leaving directory `/home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src/singlelinux/app/APP1'
    [exec] cd app/Controller; make DAL_TESTING=
    [exec] make[1]: Entering directory `/home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src/singlelinux/app/Controller'
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include APP1_machine.c -o APP1_machine.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include masterhelper.c -o masterhelper.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include message.c -o message.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include master/master.c -o master/master.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include master/wrap_process.c -o master/wrap_process.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include slave/slave.c -o slave/slave.o
    [exec] g++ -c -g -fPIC -DLINUX -Wall -I. -I../../include slave/wrap_process.c -o slave/wrap_process.o
    [exec] g++ -pthread -shared -Wl,-soname,libslave.so -o libslave.so ../../util/*.o slave/*.o *.o
    [exec] mv libslave.so "../../lib/Controller/libslave.so"
    [exec] g++ -pthread -shared -Wl,-soname,libmaster.so -o libmaster.so ../../util/*.o master/*.o *.o
    [exec] mv libmaster.so "../../lib/Controller/libmaster.so"
    [exec] make[1]: Leaving directory '/home/user/dolc_ethz/build/bin/main/exampleDemo/dal-src/singlelinux/app/Controller'

    [echo] Run singlelinux application.
    [concat] periodic5 Cntr: register next activation at 0
    [concat] periodic6 Cntr: register next activation at 0
    [concat] periodic1 Cntr: register next activation at 0
    [concat] periodic2 Cntr: register next activation at 0
    [concat] periodic3 Cntr: register next activation at 0
    [concat] periodic5 Cntr: fire at time 0
    [concat] Periodic 5: Activated with index 0, no new data available from periodic1
    [concat] Periodic 5: Activated with index 0, no new data available from periodic2
    [concat] Periodic 5: Activated with index 0, no new data available from periodic1
    [concat] Periodic 5: Activated with index 0, no new data available from periodic4
    [concat] Periodic 5: Activated with index 0, sent data 0
    [concat] periodic5 Cntr: register next activation at 200
    [concat] periodic6 Cntr: fire at time 0
    [concat] Periodic 6: Activated with index 0, read data: 0
    [concat] periodic6 Cntr: register next activation at 200
    [concat] periodic1 Cntr: fire at time 0
    [concat] Periodic 1: Activated with index 0, sent data 0
    [concat] periodic1 Cntr: register next activation at 100
    [concat] periodic2 Cntr: fire at time 0
    [concat] Periodic 2: Activated with index 0, sent data 0
    [concat] periodic2 Cntr: register next activation at 100
    [concat] periodic3 Cntr: fire at time 0
    [concat] Periodic 3: Activated with index 0, sent data 0
    [concat] periodic3 Cntr: register next activation at 100
    [concat] periodic4 Cntr: register next activation at 0
    [concat] periodic4 Cntr: fire at time 0
    [concat] Periodic 4: Activated with index 0, sent data 0
    [concat] periodic1 Cntr: fire at time 100
    [concat] Periodic 1: Activated with index 1, sent data 1
    [concat] periodic1 Cntr: register next activation at 200
    [concat] periodic2 Cntr: fire at time 100
    [concat] Periodic 2: Activated with index 1, sent data 1
    [concat] periodic2 Cntr: register next activation at 200
    [concat] periodic4 Cntr: register next activation at 100
    [concat] periodic3 Cntr: fire at time 100
    [concat] Periodic 3: Activated with index 1, sent data 1
    [concat] periodic3 Cntr: register next activation at 200
    [concat] periodic4 Cntr: fire at time 100
    [concat] Periodic 4: Activated with index 1, sent data 1
    [concat] periodic5 Cntr: fire at time 200
    [concat] Periodic 5: Activated with index 1, read data from periodic1: 0
    [concat] Periodic 5: Activated with index 1, read data from periodic2: 0
    [concat] Periodic 5: Activated with index 1, read data from periodic3: 0
    [concat] Periodic 5: Activated with index 1, read data from periodic4: 0
    [concat] Periodic 5: Activated with index 1, sent data 4
    [concat] periodic5 Cntr: register next activation at 400
    [concat] periodic6 Cntr: fire at time 200
    [concat] Periodic 6: Activated with index 1, read data: 4
    [concat] periodic6 Cntr: register next activation at 400
    [concat] periodic1 Cntr: fire at time 200
    [concat] Periodic 1: Activated with index 2, sent data 2
    [concat] periodic1 Cntr: register next activation at 300
    [concat] periodic2 Cntr: fire at time 200
    [concat] Periodic 2: Activated with index 2, sent data 2
    [concat] periodic2 Cntr: register next activation at 300
    [concat] periodic4 Cntr: register next activation at 200
    [concat] periodic3 Cntr: fire at time 200
    [concat] Periodic 3: Activated with index 2, sent data 2
    [concat] periodic3 Cntr: register next activation at 300
    [concat] periodic4 Cntr: fire at time 200
    [concat] Periodic 4: Activated with index 2, sent data 2
    [concat] periodic1 Cntr: fire at time 300
    [concat] Periodic 1: Activated with index 3, sent data 3
    [concat] periodic1 Cntr: register next activation at 400
    [concat] periodic2 Cntr: fire at time 300
    [concat] Periodic 2: Activated with index 3, sent data 3
    [concat] periodic2 Cntr: register next activation at 400
    [concat] periodic4 Cntr: register next activation at 300
    [concat] periodic3 Cntr: fire at time 300
    [concat] Periodic 3: Activated with index 3, sent data 3
    [concat] periodic3 Cntr: register next activation at 400
    [concat] periodic4 Cntr: fire at time 300
    [concat] Periodic 4: Activated with index 3, sent data 3
    [concat] periodic5 Cntr: fire at time 400
    [concat] Periodic 5: Activated with index 2, read data from periodic1: 1
    [concat] Periodic 5: Activated with index 2, read data from periodic2: 1
    [concat] Periodic 5: Activated with index 2, read data from periodic3: 1
    [concat] Periodic 5: Activated with index 2, read data from periodic4: 1
    [concat] Periodic 5: Activated with index 2, sent data 4
    [concat] periodic5 Cntr: register next activation at 600
    [concat] periodic6 Cntr: fire at time 400
    [concat] Periodic 6: Activated with index 2, read data: 4
    [concat] periodic6 Cntr: register next activation at 600
    [concat] periodic1 Cntr: fire at time 400
    [concat] Periodic 1: Activated with index 4, sent data 4
    [concat] periodic1 Cntr: register next activation at 500
    [concat] periodic2 Cntr: fire at time 400
    [concat] Periodic 2: Activated with index 4, sent data 4
    [concat] periodic2 Cntr: register next activation at 500
    [concat] periodic4 Cntr: register next activation at 400
    [concat] periodic3 Cntr: fire at time 400
    [concat] Periodic 3: Activated with index 4, sent data 4
    [concat] periodic3 Cntr: register next activation at 500
    [concat] periodic4 Cntr: fire at time 400
    [concat] Periodic 4: Activated with index 4, sent data 4
    [concat] periodic1 Cntr: fire at time 500
    [concat] Periodic 1: Activated with index 5, sent data 5
    [concat] periodic1 Cntr: register next activation at 600
    [concat] periodic2 Cntr: fire at time 500
    [concat] Periodic 2: Activated with index 5, sent data 5
    [concat] periodic2 Cntr: register next activation at 600
    [concat] periodic4 Cntr: register next activation at 500
    [concat] periodic3 Cntr: fire at time 500
    [concat] Periodic 3: Activated with index 5, sent data 5
    [concat] periodic3 Cntr: register next activation at 600
    [concat] periodic4 Cntr: fire at time 500
    [concat] Periodic 4: Activated with index 5, sent data 5
    [concat] periodic5 Cntr: fire at time 600
    [concat] Periodic 5: Activated with index 3, read data from periodic1: 2
    [concat] Periodic 5: Activated with index 3, read data from periodic2: 2
    [concat] Periodic 5: Activated with index 3, read data from periodic3: 2
    [concat] Periodic 5: Activated with index 3, read data from periodic4: 2
    [concat] Periodic 5: Activated with index 3, sent data 4
    [concat] periodic5 Cntr: register next activation at 800
    [concat] periodic6 Cntr: fire at time 600
    [concat] Periodic 6: Activated with index 3, read data: 4
    [concat] periodic6 Cntr: register next activation at 800
    [concat] periodic1 Cntr: fire at time 600
    [concat] Periodic 1: Activated with index 6, sent data 6
    [concat] periodic1 Cntr: register next activation at 700
    [concat] periodic2 Cntr: fire at time 600
    [concat] Periodic 2: Activated with index 6, sent data 6
    [concat] periodic2 Cntr: register next activation at 700
    [concat] periodic4 Cntr: register next activation at 600
    [concat] periodic3 Cntr: fire at time 600
    [concat] Periodic 3: Activated with index 6, sent data 6
    [concat] periodic3 Cntr: register next activation at 700
    [concat] periodic4 Cntr: fire at time 600
    [concat] Periodic 4: Activated with index 6, sent data 6
    [concat] periodic1 Cntr: fire at time 700
    [concat] Periodic 1: Activated with index 7, sent data 7
    [concat] periodic1 Cntr: register next activation at 800
    [concat] periodic2 Cntr: fire at time 700
    [concat] Periodic 2: Activated with index 7, sent data 7
    [concat] periodic2 Cntr: register next activation at 800
    [concat] periodic4 Cntr: register next activation at 700
    [concat] periodic3 Cntr: fire at time 700
    [concat] Periodic 3: Activated with index 7, sent data 7
    [concat] periodic3 Cntr: register next activation at 800
    [concat] periodic4 Cntr: fire at time 700
    [concat] Periodic 4: Activated with index 7, sent data 7
    [concat] periodic5 Cntr: fire at time 800
    [concat] Periodic 5: Activated with index 4, read data from periodic1: 3
    [concat] Periodic 5: Activated with index 4, read data from periodic2: 3
    [concat] Periodic 5: Activated with index 4, read data from periodic3: 3
    [concat] Periodic 5: Activated with index 4, read data from periodic4: 3
    [concat] Periodic 5: Activated with index 4, sent data 4
    [concat] periodic5 Cntr: register next activation at 1000
    [concat] periodic6 Cntr: fire at time 800
    [concat] Periodic 6: Activated with index 4, read data: 4
    [concat] periodic6 Cntr: register next activation at 1000
    [concat] periodic1 Cntr: fire at time 800
    [concat] Periodic 1: Activated with index 8, sent data 8
    [concat] periodic1 Cntr: register next activation at 900
    [concat] periodic2 Cntr: fire at time 800
    [concat] Periodic 2: Activated with index 8, sent data 8
    [concat] periodic2 Cntr: register next activation at 900
    [concat] periodic4 Cntr: register next activation at 800
    [concat] periodic3 Cntr: fire at time 800
    [concat] Periodic 3: Activated with index 8, sent data 8
    [concat] periodic3 Cntr: register next activation at 900
    [concat] periodic4 Cntr: fire at time 800
    [concat] Periodic 4: Activated with index 8, sent data 8
    [concat] periodic1 Cntr: fire at time 900
    [concat] Periodic 1: Activated with index 9, sent data 9
    [concat] periodic1 Cntr: register next activation at 1000
    [concat] periodic2 Cntr: fire at time 900
    [concat] Periodic 2: Activated with index 9, sent data 9
    [concat] periodic2 Cntr: register next activation at 1000
    [concat] periodic4 Cntr: register next activation at 900
    [concat] periodic3 Cntr: fire at time 900
    [concat] Periodic 3: Activated with index 9, sent data 9
    [concat] periodic3 Cntr: register next activation at 1000
    [concat] periodic4 Cntr: fire at time 900
    [concat] Periodic 4: Activated with index 9, sent data 9
    [concat] periodic5 Cntr: fire at time 1000
    [concat] Periodic 5: Activated with index 5, read data from periodic1: 4
    [concat] Periodic 5: Activated with index 5, read data from periodic2: 4
    [concat] Periodic 5: Activated with index 5, read data from periodic3: 4
    [concat] Periodic 5: Activated with index 5, read data from periodic4: 4
    [concat] Periodic 5: Activated with index 5, sent data 4
    [concat] periodic5 Cntr: register next activation at 1200
    [concat] periodic6 Cntr: fire at time 1000
    [concat] Periodic 6: Activated with index 5, read data: 4
    [concat] periodic6 Cntr: register next activation at 1200
    [concat] periodic1 Cntr: fire at time 1000
    [concat] Periodic 1: Activated with index 10, sent data 10
    [concat] periodic1 Cntr: register next activation at 1100
    [concat] periodic2 Cntr: fire at time 1000
    [concat] Periodic 2: Activated with index 10, sent data 10
    [concat] periodic2 Cntr: register next activation at 1100
    [concat] periodic4 Cntr: register next activation at 1000
    [concat] periodic3 Cntr: fire at time 1000
    [concat] Periodic 3: Activated with index 10, sent data 10
    [concat] periodic3 Cntr: register next activation at 1100
    [concat] periodic4 Cntr: fire at time 1000
    [concat] Periodic 4: Activated with index 10, sent data 10
    [concat] periodic1 Cntr: fire at time 1100
    [concat] Periodic 1: Activated with index 11, sent data 11
    [concat] periodic1 Cntr: register next activation at 1200
    [concat] periodic2 Cntr: fire at time 1100
    [concat] Periodic 2: Activated with index 11, sent data 11
    [concat] periodic2 Cntr: register next activation at 1200
    [concat] periodic4 Cntr: register next activation at 1100
    [concat] periodic3 Cntr: fire at time 1100
    [concat] Periodic 3: Activated with index 11, sent data 11
    [concat] periodic3 Cntr: register next activation at 1200
    [concat] periodic4 Cntr: fire at time 1100
    [concat] Periodic 4: Activated with index 11, sent data 11
    [concat] periodic5 Cntr: fire at time 1200
    [concat] Periodic 5: Activated with index 6, read data from periodic1: 5
    [concat] Periodic 5: Activated with index 6, read data from periodic2: 5
    [concat] Periodic 5: Activated with index 6, read data from periodic3: 5
    [concat] Periodic 5: Activated with index 6, read data from periodic4: 5
    [concat] Periodic 5: Activated with index 6, sent data 4
    [concat] periodic5 Cntr: register next activation at 1400
    [concat] periodic6 Cntr: fire at time 1200
    [concat] Periodic 6: Activated with index 6, read data: 4
    [concat] periodic6 Cntr: register next activation at 1400
    [concat] periodic1 Cntr: fire at time 1200
    [concat] Periodic 1: Activated with index 12, sent data 12
    [concat] periodic1 Cntr: register next activation at 1300
    [concat] periodic2 Cntr: fire at time 1200
    [concat] Periodic 2: Activated with index 12, sent data 12
    [concat] periodic2 Cntr: register next activation at 1300
    [concat] periodic4 Cntr: register next activation at 1200
    [concat] periodic3 Cntr: fire at time 1200
    [concat] Periodic 3: Activated with index 12, sent data 12
    [concat] periodic3 Cntr: register next activation at 1300
    [concat] periodic4 Cntr: fire at time 1200
    [concat] Periodic 4: Activated with index 12, sent data 12
    [concat] periodic1 Cntr: fire at time 1300
    [concat] Periodic 1: Activated with index 13, sent data 13
    [concat] periodic1 Cntr: register next activation at 1400
    [concat] periodic2 Cntr: fire at time 1300
    [concat] Periodic 2: Activated with index 13, sent data 13
    [concat] periodic2 Cntr: register next activation at 1400
    [concat] periodic4 Cntr: register next activation at 1300
    [concat] periodic3 Cntr: fire at time 1300
    [concat] Periodic 3: Activated with index 13, sent data 13
    [concat] periodic3 Cntr: register next activation at 1400
    [concat] periodic4 Cntr: fire at time 1300
    [concat] Periodic 4: Activated with index 13, sent data 13
    [concat] periodic5 Cntr: fire at time 1400
    [concat] Periodic 5: Activated with index 7, read data from periodic1: 6
    [concat] Periodic 5: Activated with index 7, read data from periodic2: 6
    [concat] Periodic 5: Activated with index 7, read data from periodic3: 6
    [concat] Periodic 5: Activated with index 7, read data from periodic4: 6
    [concat] Periodic 5: Activated with index 7, sent data 4
    [concat] periodic5 Cntr: register next activation at 1600
    [concat] periodic6 Cntr: fire at time 1400
    [concat] Periodic 6: Activated with index 7, read data: 4
    [concat] periodic6 Cntr: register next activation at 1600
    [concat] periodic1 Cntr: fire at time 1400
    [concat] Periodic 1: Activated with index 14, sent data 14
    [concat] periodic1 Cntr: register next activation at 1500
    [concat] periodic2 Cntr: fire at time 1400
    [concat] Periodic 2: Activated with index 14, sent data 14
    [concat] periodic2 Cntr: register next activation at 1500
    [concat] periodic4 Cntr: register next activation at 1400
    [concat] periodic3 Cntr: fire at time 1400
    [concat] Periodic 3: Activated with index 14, sent data 14
    [concat] periodic3 Cntr: register next activation at 1500
    [concat] periodic4 Cntr: fire at time 1400
    [concat] Periodic 4: Activated with index 14, sent data 14
    [concat] periodic1 Cntr: fire at time 1500
    [concat] Periodic 1: Activated with index 15, sent data 15
    [concat] periodic1 Cntr: register next activation at 1600
    [concat] periodic2 Cntr: fire at time 1500
    [concat] Periodic 2: Activated with index 15, sent data 15
    [concat] periodic2 Cntr: register next activation at 1600
    [concat] periodic4 Cntr: register next activation at 1500
    [concat] periodic3 Cntr: fire at time 1500
    [concat] Periodic 3: Activated with index 15, sent data 15
    [concat] periodic3 Cntr: register next activation at 1600
    [concat] periodic4 Cntr: fire at time 1500
    [concat] Periodic 4: Activated with index 15, sent data 15
    [concat] periodic5 Cntr: fire at time 1600
    [concat] Periodic 5: Activated with index 8, read data from periodic1: 7
    [concat] Periodic 5: Activated with index 8, read data from periodic2: 7
    [concat] Periodic 5: Activated with index 8, read data from periodic3: 7
    [concat] Periodic 5: Activated with index 8, read data from periodic4: 7
    [concat] Periodic 5: Activated with index 8, sent data 4
    [concat] periodic5 Cntr: register next activation at 1800
    [concat] periodic6 Cntr: fire at time 1600
    [concat] Periodic 6: Activated with index 8, read data: 4
    [concat] periodic6 Cntr: register next activation at 1800
    [concat] periodic1 Cntr: fire at time 1600
    [concat] Periodic 1: Activated with index 16, sent data 16
    [concat] periodic1 Cntr: register next activation at 1700
    [concat] periodic2 Cntr: fire at time 1600
    [concat] Periodic 2: Activated with index 16, sent data 16
    [concat] periodic2 Cntr: register next activation at 1700
    [concat] periodic4 Cntr: register next activation at 1600
    [concat] periodic3 Cntr: fire at time 1600
    [concat] Periodic 3: Activated with index 16, sent data 16
    [concat] periodic3 Cntr: register next activation at 1700
    [concat] periodic4 Cntr: fire at time 1600
    [concat] Periodic 4: Activated with index 16, sent data 16
    [concat] periodic1 Cntr: fire at time 1700
    [concat] Periodic 1: Activated with index 17, sent data 17
    [concat] periodic1 Cntr: register next activation at 1800
    [concat] periodic2 Cntr: fire at time 1700
    [concat] Periodic 2: Activated with index 17, sent data 17
    [concat] periodic2 Cntr: register next activation at 1800
    [concat] periodic4 Cntr: register next activation at 1700
    [concat] periodic3 Cntr: fire at time 1700
    [concat] Periodic 3: Activated with index 17, sent data 17
    [concat] periodic3 Cntr: register next activation at 1800
    [concat] periodic4 Cntr: fire at time 1700
    [concat] Periodic 4: Activated with index 17, sent data 17
    [concat] periodic5 Cntr: fire at time 1800
    [concat] Periodic 5: Activated with index 9, read data from periodic1: 8
    [concat] Periodic 5: Activated with index 9, read data from periodic2: 8
    [concat] Periodic 5: Activated with index 9, read data from periodic3: 8
    [concat] Periodic 5: Activated with index 9, read data from periodic4: 8
    [concat] Periodic 5: Activated with index 9, sent data 4
    [concat] periodic5 Cntr: register next activation at 2000
    [concat] periodic6 Cntr: fire at time 1800
    [concat] Periodic 6: Activated with index 9, read data: 4
    [concat] periodic6 Cntr: register next activation at 2000
    [concat] periodic1 Cntr: fire at time 1800
    [concat] Periodic 1: Activated with index 18, sent data 18
    [concat] periodic1 Cntr: register next activation at 1900
    [concat] periodic2 Cntr: fire at time 1800
    [concat] Periodic 2: Activated with index 18, sent data 18
    [concat] periodic2 Cntr: register next activation at 1900
    [concat] periodic4 Cntr: register next activation at 1800
    [concat] periodic3 Cntr: fire at time 1800
    [concat] Periodic 3: Activated with index 18, sent data 18
    [concat] periodic3 Cntr: register next activation at 1900
    [concat] periodic4 Cntr: fire at time 1800
    [concat] Periodic 4: Activated with index 18, sent data 18
    [concat] periodic1 Cntr: fire at time 1900
    [concat] Periodic 1: Activated with index 19, sent data 19
    [concat] periodic1 Cntr: register next activation at 2000
    [concat] periodic2 Cntr: fire at time 1900
    [concat] Periodic 2: Activated with index 19, sent data 19
    [concat] periodic2 Cntr: register next activation at 2000
    [concat] periodic4 Cntr: register next activation at 1900
    [concat] periodic3 Cntr: fire at time 1900
    [concat] Periodic 3: Activated with index 19, sent data 19
    [concat] periodic3 Cntr: register next activation at 2000
    [concat] periodic4 Cntr: fire at time 1900
    [concat] Periodic 4: Activated with index 19, sent data 19
    [concat] periodic5 Cntr: fire at time 2000
    [concat] Periodic 5: Activated with index 10, read data from periodic1: 9
    [concat] Periodic 5: Activated with index 10, read data from periodic2: 9
    [concat] Periodic 5: Activated with index 10, read data from periodic3: 9
    [concat] Periodic 5: Activated with index 10, read data from periodic4: 9
    [concat] Periodic 5: Activated with index 10, sent data 4
    [concat] periodic5 Cntr: register next activation at 2200
    [concat] periodic6 Cntr: fire at time 2000
    [concat] Periodic 6: Activated with index 10, read data: 4
    [concat] periodic6 Cntr: register next activation at 2200
    [concat] periodic1 Cntr: fire at time 2000
    [concat] Periodic 1: Activated with index 20, sent data 20
    [concat] periodic1 Cntr: register next activation at 2100
    [concat] periodic2 Cntr: fire at time 2000
    [concat] Periodic 2: Activated with index 20, sent data 20
    [concat] periodic2 Cntr: register next activation at 2100
    [concat] periodic4 Cntr: register next activation at 2000
    [concat] periodic3 Cntr: fire at time 2000
    [concat] Periodic 3: Activated with index 20, sent data 20
    [concat] periodic3 Cntr: register next activation at 2100
    [concat] periodic4 Cntr: fire at time 2000
    [concat] Periodic 4: Activated with index 20, sent data 20
    [concat] periodic4 Cntr: register next activation at 2100

    mapping-optimization:
    [java] Read architecture from XML file
    [java] -- full filename: file:/home/user/dolc_ethz/examples/arch/archDemo.xml
    [java] -- Architecture model from XML [Finished]
    [java]
    [java] Read application from XML file
    [java] -- full filename: file: exampleDemo/exampleDemo-DOLC.xml
    [java] -- Application model from XML [Finished]
    [java]
    [java] Start mapping and scheduling optimization
    [java] -- Initial objective: 0.043493596216835996
    [java] -- Best objective: 0.04020293282578188
    [java] -- Examined variations: 17161
    [java] -- Admissible: true
    [java] -- Required time: 438 msec
    [java]
    [java] Generate mapping XML
    [java] -- Optimized mapping has been saved in exampleDemo/mapping.xml

    BUILD SUCCESSFUL
    Total time: 14 seconds
Done! If all steps were performed correctly, the functional simulator reports the activations of the six tasks and the data that were read and written to the mailboxes and the blackboard for a time interval of 2 seconds. Subsequently, the mapping optimizer performs design space exploration (evaluating approx. 17000 potential solutions). Upon convergence to a solution (in our example, this happens after 438 ms), the mapping optimizer generates the build/bin/main/exampleDemo/mapping.xml file with the XML specification of the best found mapping solution. This defines the binding of tasks to cores, the schedule table for each core (assuming TTS scheduling), and the worst-case lengths of the TTS sub-frames at different criticality levels. For this demo application, there are more than one possible mapping solutions which result in the same (optimized) value of the objective function, resp. which minimize the third norm (L3) of the TTS sub-frame lengths across all frames and all criticality levels. One of the mapping solutions of this optimized set is shown below. The corresponding auto-generated XML specification (build/bin/main/exampleDemo/mapping.xml) can be found here. Note that in all possible mapping solutions, tasks periodic2 - periodic4 must be bound to the same core and executed in the order defined by the corresponding precedence constraint within each period (100 ms).
Example mixed-criticality application

Refined timing analysis of optimized mapping solution
Once the mapping optimizer has converged to a solution, the resulting TTS schedule on the cores can be modelled with timed automata as presented in [Giannopoulou et al, 2012] in order to refine the estimation of the worst-case TTS sub-frame lengths. For this step, it is required to install:

The timed automata networks provided under dolc_ethz/analysis/ can serve as a starting point for the timing & interference analysis. They represent the parallel execution and memory accessing that take place within one sub-frame of the TTS mapping. In particular, the model in dolc_ethz/analysis/demoExample.xml represents execution and accessing within the second sub-frame of the second frame of the above illustrated TTS mapping solution. Tasks periodic1 and periodic4, namely their phases with the given minimum / maximum access requests and computation time, are modelled accurately through the Superblock1 automaton template. Note that here, for each superblock phase of a task, which is defined in the application XML specification, we assume that all accesses arrive sequentially upon triggering of the phase, while the subsequent computation is performed using local cached data. On the other hand, the model in dolc_ethz/analysis/demoExampleAbstract.xml represents the system behavior within the same sub-frame of the TTS mapping as before, where execution of periodic4 is modelled based on an arrival curve (real-time calculus). The arrival curve represents the maximum number of access requests that can be emitted by periodic4 in any time interval and it has been computed as shown in [Giannopoulou et al, 2012] (see also below). In this case, streams of interfering access requests, bounded by the computed arrival curve are emitted by the EventGenerator and MakeEvent automata.

By using the timed automata models for a TTS sub-frame, we can easily estimate the worst-case response times of the tasks on each core and consequently, the worst-case points in time where barrier synchronization will be achieved. This is equivalent to the worst-case sub-frame length. Consider for instance task periodic1 in the second sub-frame of the second TTS frame. Based on the application and architecture XML specifications (dolc_ethz/examples/exampleDemo/exampleDemo-DOLC.xml, dolc_ethc/arch/archDemo.xml), it performs 5 to 30 memory accesses upon its triggering, followed by an execution interval of 1 to 10 ms. By setting one of the following queries to the Uppaal model checker (sample queries: dolc_ethz/analysis/queries.q):

sup{periodic1.Finish}: periodic1.x or
A[] periodic1.Finish imply periodic1.x <= 5600,

we can verify that under memory contention, the worst-case response time of periodic1 is equal to 5.6 ms. This property can be verified for any of the two models of the system (with accurate or abstract representation of the interfering task periodic4). Respectively, the response time of periodic4 in this sub-frame is 10.6 ms. Therefore, the worst-case sub-frame length is equal to 10.6 ms when the tasks are executed in normal mode (according to the execution parameters at criticality level C). Similarly, we can estimate the lengths of all other sub-frames under different criticality levels and conclude whether a TTS mapping solution is admissible or not, namely if synchronization is achieved for all sub-frames always before the end of the including frame.

Note that the provided timed automata models are customized for the illustrated mapping solution and a particular TTS sub-frame. However, the automata templates can be re-used to model execution within any TTS sub-frame or time interval in general, by simply changing their input parameters. Also, if more than one task is executed on a core, such as in the forth frame of the illustrated mapping, the automaton template for the superblock has to be modified. For instance, the Superblock2 template in dolc_ethz/analysis/demoExample.xml describes the sequential execution of two tasks, such as periodic3 and periodic4 in the example. It can be similarly extended if even more sequentially scheduled tasks need to be modelled.

Furthermore, in order to derive the arrival curve which represents the memory interference generated by one or more tasks, one needs to use the RTC toolbox, which is provided under dolc_ethz/analysis/RTCToolbox.zip. A guide for installing the toolbox under Matlab is provided here. Once it is installed, the following steps need to be taken to compute an interference arrival curve.
  1. Start Matlab and load or install the RTC toolbox.
  2. Change to directory rtc/mpa_work/resource_sharing/interference_representation/:
    >> cd mpa_work/resource_sharing/interference_representation/
  3. Derive the interference arrival curve, which represents the memory accessing behavior of task periodic4:
    >> intCurve4 = interference_curve('./demo tasks/periodic4.data', 1, 400000, 2, 1);
    The first argument is a file, containing the specification of the task, i.e., the memory access and computation time bounds of its phases. The second and third argument indicate that the computed arrival curve should be displayed graphically in Matlab for a time interval up to 400000 us. The fifth argument denotes the number of cores in the system that share access to the memory. Finally, the last argument is a scaling factor which is recommended to be left equal to 1. To derive the interference arrival curve for two sequentially executed tasks, such as periodic3 and periodic4, the task specification has to be modified accordingly, see e.g., the ./demo tasks/periodic3-4.data specification.
  4. Once the interference arrival curve is generated, we need to derive a staircase function which (over-)approximates it tightly. This staircase function is then modeled by the EventGenerator and MakeEvent automata in dolc_ethz/analysis/demoExampleAbstract.xml. The parameters for this function can be selected manually or by using the rtcapproxlb operation:
    >> [curve bu ru step] = rtcapproxlb(intCurve4, 1, 400000);
    In this case, the output parameters for the staircase function which bounds intCurve4 are:
    initial burst size bu = 33, step interval ru = 3333 us, step offset step = 1. The staicase function (magenta line) is depicted along with intCurve4 (blue line) in the following figure.
  5. Example interference arrival curve derivation
  6. If more than one interfering cores exist, the individual arrival curves are derived based on the previous steps and subsequently they are summed up using the rtcplus operator.


And then what?
The previous sections provided a guide on how to set up DOL-Critical on a computer, execute an example application using the DOL-Critical functional simulator, and perform mapping optimization of the application onto a target platform. One can use the automated DOL-Critical toolchain, which is initiated by the runexample.xml script, with alternative examples too. Please refer to the DOL-Critical API and the XML Specification documents for further information on the DOL-Critical coding style and the semantics of the XML schemata for the application, architecture, and mapping specifications, respectively.

When creating an example folder, say exampleX (where X a character or string), the expected structure of its contents is:

  • exampleX-DOLC.xml: Application specification in XML format.
  • dolc-src/: Directory with C/DOL-Critical code defining the functionality of the application tasks.
The XML specification of the target architecture should be saved under dolc_ethz/examples/arch.

To execute an example using the DOL-Critical functional simulator, use the runexample.xml file:
$ ant -f runexample.xml -Dnumber=X .
Other parameters that can be set with the -D input argument are:
  1. pnfile to define the location of the application XML specification when this is different to the default examples/exampleX/exampleX-DOLC.xml
  2. platformfile to define the file name under examples/arch/ which includes the target architecture XML specification (default: arch-Demo.xml )
  3. mapping to define the file name under build/bin/main/exampleX/ where the optimized mapping XML specification will be saved (default: mapping.xml )
  4. framelength to define the (equal) length of the TTS frames, when mapping optimization is to be performed (default: 0)
  5. schedcycle to define the period of the TTS cycle, when mapping optimization is to be performed (default: 0).
If framelength and schedcycle are not defined, no mapping optimization will be performed.

If any problems with the DOL-Critical tool-chain are encountered, we are looking forward to your feedback!


LICENSE
Copyright © ETH Zurich, 2011-2014, Computer Engineering and Networks Laboratory (TIK). All rights reserved.

DOL - Critical
http://www.tik.ee.ethz.ch/~certainty

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  • Neither the name of ETH Zurich nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.