Esterel - Technische Informatik

Werbung
Esterel
Jürgen Ruf
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
1
Inhalt
•
•
•
•
Motivation und Einleitung
Verilog
SystemC
Esterel
– Beschreibung synchroner Systeme mit Esterel
• Optionale Themen
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
2
1
Esterel Geschichte
• entwickelt am Centre de Mathematiques Appliquees
(CMA), Ecole des Mines de Paris
• J.-P. Marmorat und J.-P. Rigault bauen einen
selbstfahrenden Roboter
• herkömmliche Programmiersprachen erwiesen sich
dabei als unbefriedigend:
– Struktur des reaktiven Systems lies sich nicht als
(sequentielles) Programm wiedergeben
Ô erster Ansatz für Esterel
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
3
Esterel Geschichte
• Esterel ist eine Bergkette zwischen Cannes und St.
Raphael, der Name erinnerte die Entwickler an
”Echtzeit“ (frz. temps-reel)
• G. Berry entwickelte formale Semantik für Esterel
• Public Domain erhältlich unter www.esterel.org
– compiler für
• C
• BLIF (Hardware)
– Simulator (textuel, grafisch)
– Äquivalenzprüfer
– JAVA-Codegenerator
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
4
2
Perfekte Synchronität
Definition (Perfekte Synchronität)
•
•
•
•
Ein System arbeitet perfekt synchron, gdw.es ohne Zeitverzögerung auf externe Ereignisse reagiert. Ausgaben erscheinen
somit zum gleichen Zeitpunkt wie die zugehörigen Eingaben.
in der Praxis ist ”ohne Zeitverzögerung“ eher durch ”rechtzeitig“,
zu ersetzen, d.h. Ausgaben erscheinen vor der nächsten
Eingabe
die Zeitpunkte der Interaktionen müssen nicht äquidistant sein
dennoch Modellierung der Zeit durch natürliche Zahlen möglich
Interaktion erfolgt durch globale Ereignisse, welche zu jedem
Zeitpunkt zwei Zustände haben:
– Zweiwertigkeit: 1/0, true/false, set/unset, etc.
– In Esterel: present/absent
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
5
Generelle Bemerkungen
• in Esterel sind nur sehr wenige Datentypen
vorhanden
ÔEsterel ist keine ”vollständige“ Sprache
• Datentypen und darauf aufbauende Funktionen
werden in einer ”host language“ (z.B. C)
implementiert und dann in Esterel importiert
• Esterel Programme werden in diese ”host language“
übersetzt
• Esterel Programme kümmern sich nur um die
Kontrolle der Parallelität
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
6
3
Vorgehen
C
Esterel
C
µ-controller
ASIC
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
7
Beispiel: ABRO
An o soll 1 ausgegeben werden,sobald zwei Ereignisse
a und b eingetroffen sind. Das Verhalten soll zurückgesetzt werden, falls die Eingabe r eingegeben wird.
• mehrere Signale können gleichzeitig vorhanden sein
ÔABRO Spezifikation ist mehrdeutig: was
geschieht, wenn a, b und r gleichzeitig gelten?
ÔNichtdeterminismus? In Esterel nicht möglich!
• Esterel erzwingt reaktive + deterministische Systeme
Ô Annahme: r soll Priorität haben!
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
8
4
Mealyautomat für ABRO
abr/o
abr/o
**r/o
**r/o
**r/o
abr/o
Jürgen Ruf
abr/o
Zur Semantik:
• Kreise stellen Zustände dar
• Kantenbeschriftung abr/o bedeutet:
wenn a = 1, b = 0 und r = 0
eingelesen wird, so wird o = 1
ausgegeben, ein Stern bedeutet,
daß der Übergang nicht von diesem
Signal abhängt
• default ist immer im Zustand zu
bleiben
• Automaten arbeiten synchron, d.h.
zu festgelegten Zeiten werden
gleichzeitig alle Eingaben abgefragt
und gleichzeitig alle Ausgaben
erzeugt!
Systembeschreibungssprachen WS 02/03
9
ABRO als Esterel-Programm
• Bemerkung: Programme können ”von innen nach
außen“ oder von außen nach innen“ gelesen werden:
module ABRO :
input a,b,r;
output o;
loop
[await a || await b ];
emit o
each r
end module
Jürgen Ruf
im Automaten erscheinen Signale
mehrfach, im Esterel-Programm
kommen Signale analog zur
Spezifikation jeweils einfach vor
Ô WTO-Prinzip: ” Write-Things-Once“
Systembeschreibungssprachen WS 02/03
10
5
Zum Verständnis des Programms
• Esterel ist imperativ
• jede Anweisung beginnt zu einem Zeitpunkt t und
terminiert evtl. zu einem Zeitpunkt t +δ ( 0 ≤ δ )
• eine Anweisung heißt sofortig (engl. instantaneous)
gdw. δ = 0
dies entspricht kombinatorischen Schaltungen
• eine Anweisung verbraucht Zeit gdw. δ > 0
dies entspricht sequentiellen Schaltungen
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
11
Das await-Statement
• await a verbraucht Zeit; es wird aktiv auf die Eingabe
a gewartet,
wobei die evtl. momentane Präsenz (zum Zeitpunkt t)
von a ignoriert wird
• startet await a zu einem Zeitpunkt t, so terminiert die
Anweisung zum ersten Zeitpunkt t +δ zu dem a gilt
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
12
6
Parallelität
• S1 || S2 entspricht der parallelen Ausführung von S1
und S2
– wenn S1 || S2 zum Zeitpunkt t startet, so starten S1 und S2
zum Zeitpunkt t
– wenn S1 zum Zeitpunkt t + δ1 und S2 zum Zeitpunkt t + δ2
terminiert, dann terminiert S1|| S2 zum Zeitpunkt
t + max( δ1 , δ2 )
Ô durch || werden parallele Kontrollfäden erzeugt und
synchronisiert!
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
13
Sequentialität
• S1; S2 ist eine Sequentialisierung, d.h.
– wenn S1; S2 zum Zeitpunkt t startet, so startet S1 zum
Zeitpunkt t
– wenn S1 zum Zeitpunkt t + δ1 terminiert, dann startet S2 zum
Zeitpunkt t + δ 1
– Terminierungszeitpunkt von S1; S2 ist
Terminierungszeitpunkt von S2
• Klammern [...] dienen zur Auflösung der
Operatorpräzedenz
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
14
7
Senden von Signalen und die Schleife
• emit o
terminiert zum Startzeitpunkt, verbraucht also keine Zeit und
gibt sofort o aus. o ist zu diesem Zeitpunkt also ‘present’.
• loop S each r
– wenn loop S each r zum Zeitpunkt t startet, dann startet S
zum Zeitpunkt t
– falls S zum Zeitpunkt t + δ terminiert und r bis t + δ
abwesend bleibt, dann ist loop S each r äquivalent zu
S; await r; loop S each r
– ist r schon zu einem Zeitpunkt t + δ2 mit 0 ≤ δ 2 < δ präsent,
so wird die Ausführung von S zum Zeitpunkt t + δ2
unterbrochen und S zum Zeitpunkt t + δ2 neu gestartet
Ô Starker Abbruch, da S zum Zeitpunkt t + δ2 keinen Einfluß
mehr hat
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
15
WTO-Prinzip von Esterel
”Write-Things-Once“-Prinzip (WTO):
• Esterel erlaubt Wiederholung von Programmcode
durch Verschachtelung syntaktischer Strukturen
• Mealy-Automaten erlauben dies z.B. nicht und
erfordern statt dessen eine Wiederholung von
Kodesequenzen
• WTO ist essentiell für Sprachdesign; auch in anderen
Sprachen wird WTO verwendet: z.B.
– Schleifen
– Prozeduren, Funktionen
– Objekte und Klassen
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
16
8
ABCRO-Beispiel
• Allgemein hat der Mealy-Automat für n Ereignisse
O(2n) Zustände, das Esterel Programm hingegen eine
Länge von nur O(n) .
module ABRO :
input a,b,r;
output o;
loop
[
await a ||
await b ||
await c
];
emit o
each r
end module
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
17
Ortogonalitätsprinzip
• jedes Programmkonstrukt kann beliebig in andere
Konstrukte verschachtelt werden
• die meisten anderen Sprachen haben kein derart
durchgängiges Othogonalitäts-Prinzip; z.B. ist
Parallelität meist auf Modul- bzw. Prozeßebene
beschränkt
Ô Struktur des reaktiven Systems wird im EsterelProgramm sichtbar
Ô Generell wird in Esterel durch syntaktische
Verschachtelung eine Hierarchie an Prozessen und
Signalen bestimmt
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
18
9
Signale mit Werten: COUNTER
• Bei erscheinen des Signals i soll ein Zähler erhöht werden
module COUNT :
input i;
output count := 0 : integer;
var c := 0 integer in
every i do
c := c + 1;
emit count(c)
end every
end var
end module
Jürgen Ruf
module COUNT :
input i;
output count := 0 : integer;
every i do
emit count(pre(?count) + 1)
end every
end module
Systembeschreibungssprachen WS 02/03
19
Zum Verständnis des COUNT-Beispiels
• every x do S end every
– zuerst wird auf Eintreten von x gewartet
– dann S gestartet und bei jedem Eintreten von x neu gestartet
Ô every x do S end every ist äquivalent zu
await x; loop S each x
– aber Nutzung von every vermeidet Wiederholung von x!
• x : τ deklariert ein Signal, welches außer dem Status
present/absent einen Wert des Typs τ trägt
• der Wert eines Signals x wird mit ?x referenziert
• var x := v : τ in S end var deklariert eine lokale
Variable x des Typs τ welche den Geltungsbereich S
und den Initalwert v hat
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
20
10
Signale mit Werten: SPEED-Beispiel
Es soll die Zahl der zurückgelegten Zentimeter pro Sekunde
gezählt werden. Zu jeder vollen Sekunde soll die Zahl als Maß
für die Geschwindigkeit ausgegeben werden.
second
cm
distance 0 1 2 3 0 1 2
speed
0
3
3 0
1 2
0
2
1
0
1
Der Problemfall, bei dem die Ereignisse cm und Second
zusammenfallen, wird zunächst ausgeschlossen.
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
21
SPEED in Esterel
module SPEED :
input cm,second;
relation cm # second;
output speed:integer;
loop
var distance := 0 : integer in
abort
every cm do
distance := distance + 1
end every
when second do
emit speed(distance)
end abort
end var
end loop
end module
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
22
11
Zum Verständnis des SPEED-Beispiels
• die Restriktion x#y schränkt die Signale x,y so ein,
daß x und y niemals gleichzeitig präsent sein dürfen
• loop S end ist eine Endlosschleife, d.h.
– beim Start von loop S end startet S
– Terminierung von S bewirkt sofortigen Neustart von S
• abort S1 when x do S2 end abort
– verhält sich zunächst wie S1, terminiert S1 bevor x eintritt,
so ist S1 äquivalent zu obigem Konstrukt
– die Präsenz des Signals x während der Ausführung von S1
führt jedoch zum Abbruch von S1 und gleichzeitig zum Start
von S2
Ô Prozeßverdrängung (engl. preemption)
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
23
Variablen versus Signale
• Werte werden solange beibehalten, bis sie geändert werden
• der Status (präsent oder abwesend) eines Signals muß zu
jedem Zeitpunkt neu definiert werden (wird nicht gespeichert)
• der Wert eines Signals kann nur durch emit geändert
werden, d.h. nur dann, wenn das Signals zu diesem
Zeitpunkt ”present“ ist
• der Wert eines Signals x wird mit ?x referenziert
• der Status eines Signals x kann mit present(x) abgefragt
werden
• Eingabesignale werden von der Umgebung beschrieben,
Ausgabesignale und lokale Signale von emit-Anweisungen
des jeweiligen Programms
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
24
12
Variablen versus Signale
• Sichtbarkeitsbereich einer Variablen ist ein Teil des
Programms
• der Wert einer Variablen kann durch Zuweisungen
oder Prozeduraufrufe verändert werden
• beides verbraucht keine Zeit
• eine Variable kann während eines Zeitpunktes den
Wert mehrmals ändern, Werte von Signalen sind
während eines Zeitpunktes stabil
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
25
Variablen versus Signale
• Variablen beziehen sich auch innerhalb eines Moduls
auf einen Thread:
var x : integer in
...
S1 || S2
...
end var
– x darf in S1 und S2 entweder nur gelesen werden
– oder nur in einem der Zweige S1 ; S2 verwendet werden
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
26
13
Variablen versus Signale
• in parallelen Kontrollflüssen kann zu einem Zeitpunkt
durchaus das selbe Signal mit unterschiedlichen
Werten beschrieben werden (resolution)
• Signalwerte können nicht zu ihrer Berechnung
verwendet werden:
– häufiger Fehler: emit x(?x+1)
– dies macht keinen Sinn: einerseits ist der momentane Wert
von x gerade ?x; andererseits aber durch die Ausgabe auch
?x+1
Ô Verwendung des „alten“ Wertes von x mit pre(?x)
Ô Verwendung von Variablen
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
27
Allgemeine Lösung von SPEED
Bisher wurde angenommen, daß die Signale cm und Second
nicht gleichzeitig präsent sein können. Ohne diese Annahme
gibt es zwei Fälle (speed1, speed2):
second
cm
distance1 0 1 2 3
speed1
0
1 2
3
distance2 0 1 2 3
speed3
Jürgen Ruf
0
3 1
0 1
2 3
3
Systembeschreibungssprachen WS 02/03
0
3
0
1
2
4
1 2
3
3 4 0 1 2
1
0
1
28
14
Schwacher und sofotiger Abbruch
Betrachte erneut
abort S1 when x do S2 end abort
– S1 startet, auch wenn x zum Startzeitpunkt schon
eintritt
Ô verzögerte Prozeßverdrängung
– S1 hat zum Zeitpunkt des Eintretens von x ”keine
Kontrolle mehr“
Ô starke Prozeßverdrängung
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
29
Weak und immediate abortion
abort S1 when immediate x do S2 end abort
Ôbetrachtet zum Startzeitpunkt auch Präsenz
von x
weak abort S1 when x do S2 end abort
ÔS1 wird beim Eintreten von x noch einen
Zeitpunkt lang ausgeführt
Kombination möglich:
weak abort S1 when immediate x do S2 end abort
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
30
15
Schwacher Abbruch bei SPEED
• Lösung1: Falls cm und Second gleichzeitig eintreten,
so soll cm dem vorigen Intervall zugeordnet werden.
loop
var distance1 := 0 : integer in
weak abort
every cm do
distance1 := distance1 + 1
end every
when Second do
emit speed(distance1)
end abort
end var
end loop
Jürgen Ruf
every cm... wird nun auch
ausgeführt, wenn cm und
Second gleichzeitig eintreten
Systembeschreibungssprachen WS 02/03
31
Sofortiger Abbruch bei SPEED
• Lösung2: Falls cm und Second gleichzeitig eintreten,
so soll cm dem neuen Intervall zugeordnet werden.
loop
var distance2 := 0 : integer in
abort
every immediate cm do
distance2 := distance2 + 1
end every
when Second do
emit speed(distance2)
end abort
end var
end loop
Jürgen Ruf
every cm ... wird nun zur
neuen Sekunde gezählt
Systembeschreibungssprachen WS 02/03
32
16
Bemerkung zum SPEED-Beispiel
• falls sowohl weak abort als auch every immediate
verwendet werden, wird ein Ereignis cm, welches
gleichzeitig mit einem Ereignis Second eintritt,
zweimal gezählt
Ô Fehler! (zu hohe Geschwindigkeit wird ausgegeben)
• falls weder weak abort noch every immediate
verwendet werden, wird ein Ereignis cm, welches
gleichzeitig mit einem Ereignis Second eintritt,
überhaupt nicht gezählt
Ô Fehler! (zu niedrige Geschwindigkeit wird ausgegeben)
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
33
Prozeduraufrufe: Beispiel REGUL
cm
second
SPEED
speed
Jede Sekunde soll das Ergebnis der
Funktion Regfun als Wert eines
Signals regul ausgegeben werden.
Regfun erhält als Argumente die
Position des Gaspedals und die
momentane Geschwindigkeit.
Jürgen Ruf
gasPedal
REGUL
Benzin
regul
Systembeschreibungssprachen WS 02/03
34
17
Prozeduraufrufe: REGUL-Beispiel
module REGUL:
function Regfun (integer,integer) : integer;
input cm, second;
sensor gasPedal :integer;
relation cm # Second;
output regul : integer;
signal speed : integer in
run SPEED
||
await speed;
sustain regul(Regfun(?speed,?gasPedal))
end signal
end module
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
35
Funktionsaufrufe: REGUL-Beispiel
function f(τ1 ,..., τn) : τ
• deklariert eine Funktion, welche n Argumente der
Typen τ1 ,..., τn erhält und als Resultat einen Wert
des Typs τ liefert
• Funktionen werden nicht in Esterel, sondern in der
”host language“ geschrieben (z.B. C), in die Esterel
übersetzt werden soll
• Funktionsaufrufe verbrauchen keine Zeit
Ô kleine Funktionen schreiben!
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
36
18
Sensoren : REGUL-Beispiel
sensor x: τ
• deklariert einen Sensor vom Typ τ
• Sensoren sind Signale ohne Status bzw. mit immer
präsentem Status
• Sensoren liefern stets Werte
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
37
Prozeduraufruf und sustain
run m
• startet den Prozeß m
• ersetzt textuell den Rumpf des Moduls m
sustain s(v)
• gibt ab dem Startzeitpunkt zu jedem Zeitpunkt den
Wert v über das Signal s aus
– ist äquivalent zu loop emit s(v) each tick,
– wobei tick ein Signal ist, welches zu jedem
Zeitpunkt präsent ist
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
38
19
Prozeßsuspension
suspend S when x
• verhält sich wie S, aber
– zu jedem Zeitpunkt, bei dem x präsent ist, ist S inaktiv
– bei der nächsten Abwesenheit von x arbeitet S an dem
letzten Zustand weiter (kein Neustart)
• Vergleiche: in Unix bricht Ctrl-C einen Prozeß ab;
Ctrl-Z hält den Prozeß an, so daß er mit fg oder bg
wieder weiter arbeiten kann
• damit läßt sich die Gaspedalregelung ein- und
ausschalten
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
39
Erweiterung von REGUL
On/Off schaltet Gaspedalregelung ein- bzw. aus
signal inactive in
suspend
sustain regul(Regfun(?speed,?gasPedal))
when inactive
||
loop
await Off;
abort
sustain inactive
when On
end loop
end signal
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
40
20
Generische Module
bei der Ersetzung run m können auch Ein- und
Ausgaben sowie Typen umbenannt werden:
module TwoStates :
input Pressed;
output StateOff, StateOn;
loop
abort
sustain StateOff;
when Pressed;
abort
sustain StateOn;
when Pressed;
end loop
end module
Jürgen Ruf
||
loop
signal StateOn in
run TwoStates
[signal
Button/Pressed,
inactive/StateOff
]
end signal
end loop
Systembeschreibungssprachen WS 02/03
41
RUNNER-Beispiel
• jedes Signal kann als Zeitgeber verwendet werden
Ô Echtzeit ist nicht nur auf Zeit beschränkt
• statt dessen sind beliebige Restriktionen über
Signale definierbar, wie z.B.eine zurückgelegte
Strecke, eine momentane Geschwindigkeit/
Beschleunigung, etc. (multiform time)
• RUNNER: Jeden Morgen sollen im Stadion die
folgende Übung für eine gewissen Anzahl an Runden
durchgeführt werden:
– erst 100 Meter gehen
– dann 15 Sekunden lang hüpfen
– und danach den Rest der Runde bei vollem Tempo rennen.
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
42
21
RUNNER-Beispiel
module RUNNER:
constant
NumberOfLaps : integer;
input
Morning,
Second,
Meter,
Step,
Lap;
relation
Morning → Second,
Lap → Meter;
output
Walk,
Jump,
Run;
every Morning do
repeat NumberOfLaps times
abort
abort
sustain Walk
when 100 Meter;
abort
every Step do
emit Jump
end every
when 15 Second ;
sustain Run
when Lap
end repeat
end every
end module
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
43
RUNNER-Beispiel
• x → y drückt aus, daß x nur dann präsent sein kann,
wenn zu diesem Zeitpunkt auch y präsent ist
• Lap ist präsent, wenn eine Runde zurückgelegt
wurde
• falls eine Runde kürzer als 100m ist, so wird nur
gegangen
• falls eine Runde kürzer ist als 100m plus die Strecke,
welche in 15 Sekunden hüpfen zurückgelegt wird, so
wird kein volles Tempo gelaufen.
• die Länge der Runden braucht im Beispiel nicht
konstant zu sein, da das Signal Lap willkürlich
erscheinen kann
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
44
22
Ausnahmebehandlung
Ergänzung zu
REGUL:
falls die
Geschwindigkeit
eine gewisse
Schranke
überschreitet, so
soll die
Regelung
aufhören und ein
Alarm soll
ausgelöst
werden
Jürgen Ruf
trap SpeedTooHigh in
signal speed :integer in
run SPEED
||
await speed;
sustain regul(Regfun(?Speed,?GasPedal))
||
every Speed do
if ?Speed >MaxSpeed then
exit SpeedTooHigh
end
end every
end signal
handle SpeedTooHigh do
emit Alarm
end trap
Systembeschreibungssprachen WS 02/03
45
Ausnahmebehandlung
trap x in S end trap
• erlaubt dem Kontrollfluß von S bei der Abarbeitung
innerhalb von S zu stoppen und alle restlichen
Anweisungen von S zu ignorieren
• beim Start von trap x in S end trap startet S sofort,
kann aber durch die Anweisung exit x (schwach)
abgebrochen werden.
Ô Sprung aus S heraus
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
46
23
Ausnahmebehandlung
trap x in S1 handle x do S2 end trap
• beim Start startet S1 sofort, kann aber durch die
Anweisung exit x (schwach) abgebrochen werden. In
diesem Fall wird S2 gestartet.
• nebenläufige Ausnahmebehandlung:
trap x1 ,..., xn
S
handle x1 do S1
...
handle xn do Sn
end trap
Jürgen Ruf
• hier werden gleichzeitig verschiedene
Ausnahmen deklariert
• bei der Abarbeitung von S können
gleichzeitig mehrere Ausnahmen
ausgelöst werden: (z.B. exit x1|| exit x2)
Ô dann werden die entsprechenden
Si parallel gestartet
Systembeschreibungssprachen WS 02/03
47
Ausnahmebehandlung bei RUNNER
Die ”Jump Übung“ könnte gefährlich werden:
every Morning do
trap HeardAttack in
repeat NumberOfLaps times
abort
abort sustain Wal k when 100 Meter;
abort
every Step do emit Jump end every
|| % Code zur Herzüberwachung in der Jump Übung
when 15 Second ;
sustain Run
when Lap
end repeat
end trap
end every
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
48
24
Die Esterel Syntax im Detail
module name :
d1; ... dn;
S
end module
• name ist ein Esterel-Bezeichner
• d1; ... dn; sind Esterl Deklarationen (Eingaben,
Ausgaben, Funktionen, Prozeduren, Tasks und
Relationen)
• S ist eine Esterel-Anweisung
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
49
Primitive Datentypen in Esterel
primitive Datentypen: boolean, integer, float, string
• boolean besteht aus true und false und den
Operationen and, or und not
• integer beschreibt die ganzen Zahlen und hat die
Operationen +,-,*,/
• float beschreibt die reellen Zahlen und hat die
Operationen +,-,*,/
– (übliche Schreibweise z.B. 3.1415E12)
• string beschreibt die Menge der Zeichenketten;
Konstanten werden durch Hochkommata
gekennzeichnet z.B. “Esterel“
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
50
25
Definierte Datentypen in Esterel
definierte Datentypen: type name
• führt einen neuen Typ mit dem Namen name
ein
• in Esterel ist über diesen Typ ansonsten
nichts bekannt; der Typ stammt aus der host
language
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
51
Deklarationen
• Konstanten
– constant x : τ deklariert x als Konstante des Typs τ
– constant x = v : τ deklariert x als Konstante, welchen den
Wert v vom Typ τ hat. Typen und Intialwerte können dabei
aus der host language stammen
• importierte Funktionen
– function f(ττ1,..., τn) : τ deklariert eine Funktion, welche n
Argumente mit den Typen τ1,..., τn erhält und einen
Rückgabewert des Typs τ liefert
– Funktionen werden in der host language implementiert
– Funktionen dürfen keine Seiteneffekte haben
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
52
26
Deklarationen
• Prozeduren
– procedure p(τ1,..., τn)(π1,..., πm) deklariert eine Prozedur,
welche n Argumente mit den Typen τ1,..., τn und m
Argumente mit den Typen π1,..., πm erhält
– (τ1,..., τn) werden mit call-by-reference übergeben
– (π1,..., πm) werden mit call-by-value übergeben
– die Prozedur ist in der host language implementiert
•
Tasks
– task p(τ1,..., τn)(π1,..., πm) ; deklariert eine Task die
Argumentlisten haben dieselbe Bedeutung wie bei
Prozeduren
– Tasks dürfen im Gegensatz zu Prozeduren Zeit
verbrauchen (Synchronisation über return Signale)
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
53
Interface Signal-Deklarationen
Signalfluß:
• input deklariert Eingabesignale
• output deklariert Ausgabesignale
• inputoutput deklariert Signale, welche sowohl von
der Umgebung als auch vom Modul bestimmt werden
• return deklariert Signale, welche die Terminierung
von externen Tasks signalisieren
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
54
27
Interface Signal-Deklarationen
pure Signale:
• haben nur einen Status, welcher zu jedem Zeitpunkt
eindeutig entweder als present oder absent definiert ist
• Status wird nicht gespeichert und stattdessen in jedem
Zeitpunkt neu bestimmt
• input x, output x, inputoutput x, return x
• es gibt ein Signal tick, welches immer deklariert ist
– tick ist zu jedem Zeitpunkt present
– vergleichbar mit dem Takt bei synchronen Schaltungen
• der Signalwert zum letzten Zeitpunkt kann mit pre(x)
bestimmt werden.
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
55
Interface Signal-Deklarationen
wertbehaftete Signale:
• haben außer dem Status noch einen Wert
• Signalwerte werden gespeichert, bis sie verändert werden
• der Wert eines Signals kann nur durch eine Signalemission
geändert werden
• daher ist bei jeder Wertänderung das Signal präsent
• input x : τ, output x : τ, inputoutput x : τ
• Initalwerte können bei Dekarationen ebenfalls angegeben
werden:
– output x = v : τ, inputoutput x = v : τ
– bei Angabe von Initialwerten erübrigt sich oft die Typangabe,
da sie sich aus dem Initialwert ergibt:
Beispiel: output x = 5
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
56
28
Interface Signal-Deklarationen
• Signale können zu jedem Zeitpunkt von mehreren
Threads gleichzeitig beschrieben werden
(Schreibkonflikte)
Ô Auflösung der Schreibkonflikte durch kombinierte
Signale:
– output x : combine with f
– f muß kommutativ und assoziativ sein
– f wird verwendet, um ein eindeutigen Wert des Signals zu
bestimmen, wenn mehrere Kontrollfäden gleichzeitig das
Signal x mit verschiedenen Werten ausgeben
– Beispiel: output votes := 0 : combine integer with +
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
57
Sensoren
• die Umgebung enthält oft technische Apparaturen,
welche kontinuierlich Werte erfassen und liefern
Ô Sensoren als besondere Signale in Esterel
– sensor x : τ
– Sensoren sind wertbehaftete Signale, deren Status stets
”present“ ist
– sie haben defacto also keinen Status
– Sensoren werden von der Umgebung gegeben und können
nur gelesen werden
– Initialwerte machen also keinen Sinn
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
58
29
Eingaberestriktionen
• wichtige Zusatzinformation über die Umgebung für
den Compiler
• die Einhaltung der Eingaberestriktionen muß durch
die Umgebung sichergestellt sein
• Signalinklusion: relation x→y
– besagt, daß zu jedem Zeitpunkt, zu dem x gilt auch y gelten
muß
– Beispiel: relation Minute → Sekunde
•
Signalausschluß: relation x1 # x2 # ... # xn
– besagt, daß von den Signalen x1, x2,..., xn zu jedem
Zeitpunkt maximal eines präsent ist
– Beispiel relation liftup # liftdown
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
59
Anweisungen: Variablen
lokale Deklaration: var x : τ in S end var
• deklariert eine Variable vom Typ τ mit dem Namen x,
welche in S sichtbar ist
• der Wert einer Variablen kann durch Zuweisungen
oder Prozeduraufrufe verändert werden
• eine Variable kann während eines Zeitpunktes den
Wert mehrmals ändern, Werte von Signalen sind
während eines Zeitpunktes stabil
• auch hier wieder Initialisierung möglich:
var x := v : τ in S end var
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
60
30
Datenausdrücke
• Datenausdrücke werden gebildet über
– deklarierten oder primitiven Konstanten c
– deklarierten Variablen x
– ?s für jedes deklarierte wertbehaftete Signal s; der Typ von
?s ist der Typ des Signals
– ??t für jeden wertbehafteten Trap t; der Typ von ??t ist der
Typ des Traps
– f(e1 ,..., en), falls f eine deklarierte Funktion des Typs τ1,..., τn
→ τ ist und jedes ei den Typ τi hat; f(e1 ,..., en), hat dann den
Typ τ
• Auswertung von Datenausdrücken verbraucht keine
Zeit
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
61
Signalausdrücke
• boolesche Ausdrücke über dem Signalstatus
• elementare Ausdrücke sind
– tick
– deklarierte Signale
• wenn s1 und s2 Signalausdrücke sind, dann sind
–
–
–
–
not s1
s1 and s2
s1 or s2
(s1)
auch Signalausdrücke
• Auswertung von Signalausdrücken verbraucht keine
Zeit
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
62
31
Delayausdrücke
• Werden für temporale Schleifen benötigt
• Jeder Signalausdruck s ist ein Delayausdruck
– läuft im nächsten Zeitschritt ab, zu dem s present ist
– läuft nie zum aktuellen Zeitpunkt ab!
• immediate [s]
– s ist ein Signalausdruck
– Klammer kann entfallen, wenn s ein Signal ist
– läuft zu dem Zeitpunkt ab, zu dem s present ist
• count delays: e [s]
–
–
–
–
e ist ein Datenausdruck mit Typ(e)=integer
läuft ab, wenn e-mal s gegolten hat
können nicht geschachtelt werden
können nicht immediate sein
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
63
Anweisungen
•
•
•
•
nothing terminiert sofort
pause verbraucht genau eine Zeiteinheit
halt verbraucht die restliche Zeit (Endlosschleife!)
Zuweisungen: x := expression
–
–
–
–
x ist eine deklarierte Variable
expression ist ein gültiger Datenausdruck
Typ(x) = Typ(expression)
verbraucht keine Zeit
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
64
32
Anweisungen - Prozeduraufrufe
call p(x1,..., xn)(e1 ,..., em)
• x1,..., xn sind deklarierte Variablen vom Typ τi
• e1 ,..., em sind gültige Datenausdrücke vom Typ π1
• p wurde als Prozedur p(τ1,..., τn)(π1,..., πm) deklariert
• Prozeduraufrufe verbrauchen keine Zeit
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
65
Anweisungen - Signalausgaben
• emit x
– x ist ein deklariertes Signal
• emit x(v)
– x ist als wertbehaftetes Signal deklariert
– v ist ein Datenausdruck mit Typ(v)=Typ(x)
• emit setzt den Status des Signals zum momentanen
Zeitpunkt auf ”present“ und ändert evtl. den Wert des
Signals zu diesem Zeitpunkt
• benötigt keine Zeit
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
66
33
Anweisungen - Signalausgabe
• sustain x
– x ist ein deklariertes Signal
• sustain x(v)
– x ist als wertbehaftetes Signal deklariert
– v ist ein Datenausdruck mit Typ(v)=Typ(x)
• sustain setzt den Status des Signals für den
momentanen und alle Folgezeitpunkte auf ”present“
• sustain benötigt die restliche Zeit
• sustain x(v) ist äquivalent zu emit x(v); pause; emit
x(v); pause; ...
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
67
Anweisungen – Schleifen
• loop S end loop
– S ist ein Esterel Statement
– startet sofort S, bei Terminierung von S wird sofort S neu
gestartet
– S muß Zeit verbrauchen!
• repeat n times S end repeat
–
–
–
–
S ist ein Esterel Statement
n ist ein Datenausdruck vom Typ integer
wird sofort ausgewertet und danach wird n-mal S ausgeführt
falls n zu 0 ausgewertet wird, wird die Schleife nicht
durchlaufen
– S muß Zeit verbrauchen!
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
68
34
Anweisungen – Schleifen
• positive repeat n times S end repeat
–
–
–
–
S ist ein Esterel Statement
n ist ein Datenausdruck vom Typ integer
wird sofort ausgewertet und danach wird n-mal S ausgeführt
äquivalent zu repeat n times S end repeat, aber der
Programmierer stellt sicher, dass n nicht 0 ist (notwendig für
Schleifenschachtelung)
– S muß Zeit verbrauchen!
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
69
Anweisungen – Präsenztest
present [sig] then S1 else S2 end present
• sig ist ein Signalausdruck
• S1 und S2 sind Anweisungen
• ist sig momentan präsent, so ist die Anweisung zu S1 ,
andernfalls zu S2 äquivalent
• then S1 bzw. else S2 kann weggelassen werden (bzw.
Si =nothing)
present
case [sig1] do S1
...
case [sign] do Sn
else Sn+1
end present
Jürgen Ruf
present [sig1] then S1
...
else present [sign] do Sn
else Sn+1
end present
Systembeschreibungssprachen WS 02/03
70
35
Anweisungen – Konditionale
if exp then S1 else S2 end if
• exp ist ein Datenausdruck mit Typ(exp)=boolean
• S1 und S2 sind Anweisungen
• wird exp = true ausgewertet, so ist die Anweisung zu S1
, andernfalls zu S2 äquivalent
• then S1 bzw. else S2 kann weggelassen werden (bzw.
Si =nothing)
• allgemeinere Form:
If exp1 then S1
elsif exp2 then S2
...
elsif expn then Sn
else Sn+1
end if
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
71
Anweisungen – Warteanweisung
await d
• d ist ein Delayausdruck
• es wird gewartet, bis d abgelaufen ist
• allgemeinere Form:
await
case d1 do S1
...
case dn do Sn
end await
Jürgen Ruf
await d1 or ... or dn;
present
case [d1] do S1
...
case [dn] do Sn
end present
Systembeschreibungssprachen WS 02/03
72
36
Starker verzögerter Prozeßabbruch
• abort S1 when d
–
–
–
–
S1 ist eine Anweisung
d ist ein Delayausdruck
S1 startet sofort wird aber abgebrochen, falls d abläuft
S1 wird zum Abbruchzeitpunkt nicht mehr ausgeführt
• Variante: abort S1 when d do S2 end abort
• allgemeinere Form:
abort S when
case d1 do S1
...
case dn do Sn
end abort
Jürgen Ruf
abort S when d1 or ... or dn;
present
case [d1] do S1
...
case [dn] do Sn
end present
Systembeschreibungssprachen WS 02/03
73
Schwacher verzögerter Prozeßabbruch
• weak abort S1 when d
–
–
–
–
S1 ist eine Anweisung
d ist ein Delayausdruck
S1 startet sofort wird aber abgebrochen, falls d abläuft
S1 wird zum Abbruchzeitpunkt noch einmal ausgeführt
(S1 bekommt seinen letzten Willen)
• Variante: abort S1 when d do S2 end abort
weak abort S when
case d1 do S1
...
case dn do Sn
end abort
Jürgen Ruf
weak abort S when d1 or ... or dn;
present
case [d1] do S1
...
case [dn] do Sn
end present
Systembeschreibungssprachen WS 02/03
74
37
Anweisungen – Temporale Schleifen
• loop S each d
–
–
–
–
S ist eine Anweisung und d ein Delayausdruck
startet sofort S
das Eintreten von d startet S erneut
tritt d schon ein, wenn S noch läuft, wird S „stark“
abgebrochen und sofort neu gestartet
• loop S each d ist äquivalent zu
loop
abort
S; halt
when d
end loop
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
75
Anweisungen – Temporale Schleifen
• every d do S end every
–
–
–
–
S ist eine Anweisung und d ein Delayausdruck
wartet zunächst auf d und startet dann sofort S
das Eintreten von d startet S erneut
tritt d schon ein, wenn S noch läuft, wird S „stark“
abgebrochen und sofort neu gestartet
• every d do S end every ist äquivalent zu
await d; loop S each d
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
76
38
Anweisungen – Prozeßsuspension
• suspend S when d
– S ist eine Anweisung und d ein Delayausdruck
– S startet sofort wird aber immer dann („stark“) angehalten
wenn d präsent ist
– Präsenz von d ”friert“ den Zustand von S ein, so dass S bei
erneuter Abwesenheit von d vom momentanen Zustand aus
weiter arbeiten kann
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
77
Anweisungen – Ausnahmebehandlung
• trap x in S end trap
– S ist eine Anweisung
– x ist ein Esterelbezeichner
– S startet sofort, kann aber durch die Anweisung exit x
(„schwach“) abgebrochen werden.
– exit x kann nur von S ausgeführt werden (Selbstabbruch!)
– allgemeinere Form (nebenläufige Ausnahmen mit
Behandlung):
trap x1 ,..., xn in
S
handle x1 do S1
...
handle xn do Sn
end trap
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
78
39
Anweisungen – Ausnahmebehandlung
• Ausnahmeaufrufe können auch Werte mitliefern:
trap x : τ in S end trap
– die Ausnahme wird dann mit exit x(v) ausgelöst
– der Wert kann dann mit ??x abgefragt werden
– allgemeinere Form:
trap x1 : τ1 ,..., xn : τn in
S
handle x1 do S1
...
handle xn do Sn
end trap
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
79
Anweisungen
• Sequenzen S1; S2
–
–
–
–
S1 und S2 sind Anweisungen
startet sofort S1
bei Terminierung von S1 wird sofort S2 gestartet
bei Terminierung von S2 terminiert dann auch S1; S2
• parallele Kontrollflußverzweigung S1 || S2
– startet sofort S1 und S2
– terminiert, wenn S1 und S2 beide terminieren (Laufzeit ist
also das Maximum von S1 und S2)
•
sowohl ”;“ als auch ”||“ sind assoziativ
• ”;“ bindet stärker
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
80
40
Anweisungen – Taskausführung
run m
• m ist ein deklariertes Modul
• run m wird durch den Anweisungsteil der Deklaration von m
textuell ersetzt
• Dabei können auch Namen umbenannt werden:
run m [t1 y1/x1 , ... , tn yn/xn]
– x1 ,..., xn und y1 ,..., yn sind Esterelbezeichner
– t1 ,..., tn sind aus {type, constant, function, signal}
– ti muß zur Deklaration von x1 in m passen
• rekursive Modulaufrufe sind nicht erlaubt!
• dagegen ist partielles Umbenennen erlaubt, d.h. die Liste
x1 ,..., xn braucht nicht alle Objekte aus m enthalten
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
81
Anweisungen – Taskausführung
• exec p(x1 ,..., xn)(y1 ,..., ym) return r
– x1 ,..., xn sind Esterelbezeichner
– y1 ,..., ym sind Datenausdrücke
– p wurde als task p(τ1,..., τn)(π1,..., πm) deklariert mit
Typ(xi) = τi und Typ(yi)=πi
• Taskaufrufe verbrauchen Zeit
• die Ausführung der Task (außerhalb) verläuft parallel
und asynchron zum weiteren Esterel Kontrollfluß
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
82
41
Anweisungen – Taskausführung
• Einbettung in Esterel erfolgt jedoch vollkommen
synchron
– Terminierung des Taskaufrufs wird durch die Präsenz von r
angezeigt;
– r : τ kann dabei ein wertbehaftetes Signal sein, welches
einen Rückgabewert mit sich trägt
– Präsenz von r bewirkt eine sofortige Aktualisierung der
Variablen x1 ,..., xn
– Taskausführungen können auch abgebrochen oder
suspendiert werden
• in diesem Fall wird ein Signal (kein Esterel Signal!) an den
externen Kontrollfluß geschickt
– kommen mehrere Taskausführungen in einem Programm
vor, so müssen die Rückgabesignale r unterschiedlich sein
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
83
Abbruch von Tasks
abort
exec t(x)(1) return r
when s
• tritt r ein bevor s eintritt, so wird x aktualisiert und
abort terminiert
• tritt s ein bevor r eintritt, so wird t abgebrochen und
es gibt keine Aktualisierung von x
• treten r und s gleichzeitig ein, so terminiert abort;
x wird nicht aktualisiert
• der letzte Punkt kann durch weak abort umgangen
werden
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
84
42
Mehrfache Taskausführung
exec
case t1(...)(...)return r1 do S1
...
case tn(...)(...)return rn do Sn
end exec
• beim Start werden alle Tasks t1,..., tn nebenläufig
ausgeführt
• tritt eines der Signal r1,..., rn ein, so terminiert das ganze
Konstrukt
• sind mehrere Signale ri gleichzeitig eingetreten, so
werden die Variablen aktualisiert, welche zu den
entsprechenden Tasks ti gehören
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
85
Esterel Semantik
• Es gibt verschiedene formale Semantiken
–
–
–
–
–
–
logische Transitionssemantik
konstruktive Transitionssemantik
logische operationelle Semantik
konstruktive operationelle Semantik
elektrische Semantik
...
• prinzipiell sind alle Semantiken zueinander
äquivalent aber:
– unterschiedliche Anwendungsfelder: Softwaresynthese,
Hardwaresynthese, Verifikation, Simulation, ...
– manche Semantiken sind restriktiver als andere
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
86
43
Logische Transitionssemantik
• Basiert auf dem logical coherence law:
A signal S is present in an instance if and only if an
„emit S“ statement is executed in this instance
Ô Es gibt genau einen Status für jedes Signal zu jedem
Zeitpunkt
Ô Ein Programm, das diese Eigenschaft erfüllt ist logisch
korrekt!
Ô present-Statements hängen von Signalen ab und
Ô emit-Statements können in Zweigen von present-Statements
ausgeführt werden
Ô zyklische Abhängigkeiten
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
87
Beispiele für logisch korrektes Programm
module P1 :
input I;
output O;
signal S1, S2 in
present I then emit S1 end
||
present S1 else emit S2 end
||
present S2 then emit O end
end signal
end module
Fall 1: I present
⇒ S1 present
⇒ S2 absent
⇒ O absent
Fall 2: I absent
⇒ S1 absent
⇒ S2 present
⇒ O present
Programm ist logisch korrekt
Andere Signalstati sind nicht möglich (nach logical coherence law)
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
88
44
Beispiele für logisch korrektes Programm
module P2 :
signal S, O in
emit S;
present O then
present S then
pause;
end;
emit O;
end;
end signal
end module
Das Programm ist eingabelos, d.h.
es reagiert nur auf das Signal tick
Fall 1: S absent
⇒ S wird emittiert
⇒ keine gültiger Signalzustand
Fall 2: S present, O present
⇒ pause wird ausgeführt, aber nicht emit O
⇒ kein gültiger Signalzustand
Fall 2: S present, O absent
⇒ S wird emittiert, O nicht
⇒ gültiger Signalstatus
Programm ist logisch korrekt
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
89
Beispiele für logisch nicht korrekte Programme
module P3 :
output O;
present O else emit O;
end module
Fall 1: O present
⇒ O wird nicht emittiert
⇒ keine gültiger Signalzustand
Fall 2: O absent
⇒ O wird emittiert
⇒ kein gültiger Signalstatus
Programm ist logisch nicht korrekt,
da es keinen gültigen Signalstatus gibt
⇒ Programm ist nicht reaktiv
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
90
45
Beispiele für logisch nicht korrekte Programme
module P4 :
output O;
present O then emit O;
end module
Fall 1: O present
⇒ O wird emittiert
⇒ gültiger Signalzustand
Fall 2: O absent
⇒ O wird nicht emittiert
⇒ gültiger Signalstatus
Programm ist logisch nicht korrekt,
da es mehrere gültige Signalstati gibt
⇒ Programm ist nicht deterministisch
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
91
Beispiele für logisch nicht korrekte Programme
module P5 :
present O1 then emit O2 end
||
present O2 else emit O1 end
end module
module P6 :
present O1 then emit O2 end
||
present O2 then emit O1 end
end module
Jürgen Ruf
nicht reaktiv
nicht deterministisch
Systembeschreibungssprachen WS 02/03
92
46
Beispiele für logisch nicht korrekte Programme
module P8 :
trap T in
present I else pause end
emit O;
||
present O then exit T end
end trap
emit O
end module
Fall 1: I present
⇒ pause wird nicht ausgeführt
⇒ O wird emittiert
⇒ trap wird beendet
⇒ gültiger Signalzustand
Fall 2: I absent
⇒ pause ist aktiv
⇒ Fall 2.1: O absent
⇒ trap wird nicht verlassen
⇒ O wird erst später emittiert
⇒ Fall 2.2: O present
⇒ trap wird verlassen
⇒ O wird emittiert
Programm ist nicht deterministisch
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
93
Beispiel für ein merkwürdiges Programm
module P9 :
present O1 then emit O1 end
||
present O1 then
present O2 else emit O2 end
end
end module
Fall 3: O1 pres. und O2 abs.
⇒ O1 wird emittiert
⇒ O2 wird emittiert
⇒ ungültig
Jürgen Ruf
Fall 1: O1 und O2 present
⇒ O1 wird emittiert
⇒ O2 wird nicht emittiert
⇒ ungültig
Fall 2: O1 und O2 absent
⇒ O1 wird nicht emittiert
⇒ O2 wird nicht emittiert
⇒ gültig
Fall 4: O1 abs. und O2 pres.
⇒ O1 wird nicht emittiert
⇒ O2 wird nicht emittiert
⇒ ungültig
Systembeschreibungssprachen WS 02/03
94
47
Kritik an der logischen Semantik
• Komplexität:
– Prüfung auf Reaktivität und Determinismus braucht
exponentielle Zeit: es müssen im schlimmsten Fall alle
möglichen Signalbelegungen betrachtet werden
• logische Semantik ist nicht intuitiv:
– Beispiel: bei present x then S1 else S2 end geht der
Programmierer üblicherweise davon aus, daß in der
momentanen Situation x geprüft wird und dann entweder S1
oder S2 ausgeführt wird. In der logischen
Transistionssemantik kann jedoch S1 und S2 den Status von
x beeinflussen.
Ô Anweisungen wie present geben eine gewisse
Auswertungsordnung vor, welche sich jedoch nicht auf die
Zeit bezieht!
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
95
Konstruktive Semantik
• Konstruktive Semantik berücksichtigt die Kausalität
der Informationsverarbeitung
• gerichteter Informations- und Auswertungsfluß
• keine Spekulation, sondern effiziente Berechnung!
Ô effiziente Übersetzung von Esterel Programmen
Ô effiziente Schaltungssynthese von Esterel
Programmen
Ô dabei jedoch Zurückweisen einiger logisch korrekter
Programme
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
96
48
Kausalität
• allgemein kann der Status eines Signals x vom
Status eines anderen Signals y abhängen
present y then emit x end
– x hängt (kausal) von y ab; diese Kausalität gibt es auch in
sequentiellen imperativen Programmiersprachen
– aber bei synchronen Sprachen kann die Kausalitätsrelation
Zyklen haben
present x then emit x end
– hier wird emit x nur dann ausgeführt, wenn x präsent ist
– andererseits ist x nur dann präsent, wenn emit x ausgeführt wird.
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
97
Kausalitätszyklen und Reaktivität
• bei Kausalitätszyklen kann es vorkommen, daß der
Anweisung S kein Verhalten mehr zugeordnet
werden kann
present x else emit x end
– x present ⇒ else-Zweig wird nicht ausgeführt ⇒
x wird nicht emittiert
– x absent ⇒ else-Zweig wird ausgeführt ⇒ x wird emittiert
• es gibt syntaktisch richtige, aber semantisch sinnlose
Programme
• hier ist die Reaktivität des Programms nicht mehr gegeben
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
98
49
Kausalitätszyklen und Determinismus
• bei Kausalitätszyklen kann es vorkommen, daß der
Anweisung S mehr als ein Verhalten zugeordnet
werden kann
present x then emit x end
– x present ⇒ x wird emittiert
– x absent ⇒ x wird nicht emittiert
• es gibt syntaktisch richtige, aber semantisch nicht eindeutige
Programme
• hier ist der Determinismus des Programms nicht mehr gegeben
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
99
Umgang mit Kausalitätszyklen
Bei der Definition synchroner Sprachen kann man
1. alle Kausalitätszyklen zulassen
– Deadlock und Nichtdeterminismus möglich
2. alle Kausalitätszyklen zulassen, welche zu logisch
korrekten Programmen führen
3. nur Kausalitätszyklen zulassen, welche zu logisch
korrekten Programmen führen und die einfach zu
prüfen sind
4. alle Kausalitätszyklen ablehnen
– nur azyklische Programme zulassen
– wurde von den Esterelanwendern abgelehnt (zu
eingeschränkt!)
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
100
50
Umgang mit Kausalitätszyklen
Esterel verwendet die 3. Variante:
• gewisse an sich logisch korrekte Programme werden
verworfen
• dafür ist die Kausalitätsprüfung effizient und stellt die
logische Korrektheit sicher
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
101
Konstruktive Programme
• Unterscheide Zeitfluß und Kontrollfluß
• mit present x then S1 end meint der Programmierer,
– zuerst x überprüfen und dann je nach Präsenz von x soll
entweder S1 ausgeführt werden oder nicht
• Bei logisch korrekte Programmen kann jedoch nicht
nur in diese Richtung ausgewertet werden
Ô dies erscheint nicht intuitiv
Ô konstruktive Programme
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
102
51
Konstruktive Programme
• Konstruktive Programme sind eine echte Teilmenge
der logisch korrekten Programme.
• Bei konstruktiven Programmen ist beim Nachweis der
logischen Korrektheit jedoch keine Spekulation
(Selbsterklärung, self-justification) zur Bestimmung
der Signalstati nötig.
Ô konstruktive Programme sind intuitiver
Ô strikte gerichtete imperative Auswertung
(paßt besser zum imperativen Stil von Esterel)
Ô Konstruktivität läßt sich mit polynomiellem Aufwand
nachweisen, logische Korrektheit ist vermutlich NP vollständig.
Jürgen Ruf
Systembeschreibungssprachen WS 02/03
103
52
Herunterladen