Esterel - Esterel
Esterel ist eine synchrone Programmiersprache zur Entwicklung komplexer reaktiver Systeme. Der zwingende Programmierstil von Esterel erlaubt den einfachen Ausdruck von Parallelität und Vorrang . Daher eignet es sich gut für kontrolldominierte Modelldesigns.
Die Entwicklung der Sprache begann in den frühen 1980er Jahren und wurde hauptsächlich von einem Team der Ecole des Mines de Paris und INRIA unter der Leitung von Gérard Berry in Frankreich durchgeführt. Aktuelle Compiler verwenden Esterel-Programme und generieren C-Code oder Hardware (RTL)-Implementierungen ( VHDL oder Verilog ).
Die Sprache befindet sich noch in der Entwicklung, mit mehreren Compilern. Die kommerzielle Version von Esterel ist die Entwicklungsumgebung Esterel Studio . Das Unternehmen, das es kommerzialisiert ( Synfora ) leitete im April 2007 einen Normalisierungsprozess mit dem IEEE ein, die Arbeitsgruppe (P1778) löste sich jedoch im März 2011 auf. Das Esterel v7 Reference Manual Version v7 30 – initial IEEE Standardization Proposal ist öffentlich verfügbar.
Der vielgestaltige Zeitbegriff
Der in Esterel verwendete Begriff der Zeit unterscheidet sich von dem der nicht-synchronen Sprachen in folgender Weise: Der Begriff der physikalischen Zeit wird durch den Begriff der Ordnung ersetzt. Nur die Gleichzeitigkeit und der Vorrang von Ereignissen werden berücksichtigt. Das bedeutet, dass die physikalische Zeit keine besondere Rolle spielt. Dies wird als vielgestaltiger Zeitbegriff bezeichnet. Ein Esterel-Programm beschreibt eine vollständig geordnete Folge logischer Augenblicke. Zu jedem Zeitpunkt tritt eine beliebige Anzahl von Ereignissen auf (einschließlich 0). Ereignisereignisse, die zum gleichen logischen Zeitpunkt auftreten, werden als gleichzeitig betrachtet. Andere Ereignisse werden als ihre Instanzen von Vorkommen geordnet. Es gibt zwei Arten von Anweisungen: solche, die keine Zeit benötigen (im selben Moment ausgeführt und beendet werden) und solche, die eine vorgeschriebene Anzahl von Zyklen verzögern.
Signale
Signale sind das einzige Kommunikationsmittel. Es gibt bewertete und nicht bewertete Signale. Sie werden weiter als Eingangs-, Ausgangs- oder lokale Signale kategorisiert. Ein Signal hat die Eigenschaft, in einem Augenblick entweder vorhanden oder abwesend zu sein. Bewertete Signale enthalten auch einen Wert. Signale werden im gesamten Programm übertragen, und das bedeutet, dass jeder Prozess ein Signal lesen oder schreiben kann. Der Wert eines bewerteten Signals kann zu jedem Zeitpunkt bestimmt werden, auch wenn das Signal nicht vorhanden ist. Der Default-Status eines Signals fehlt. Signale bleiben abwesend, bis sie mit der emit-Anweisung explizit auf Present gesetzt werden. Die Kommunikation erfolgt unverzögert, dh ein zyklisch ausgesendetes Signal ist sofort sichtbar. Beachten Sie, dass man im gleichen Zyklus hin und her kommunizieren kann.
Regeln zur Signalkohärenz
- Jedes Signal ist nur in einem Zyklus vorhanden oder nicht vorhanden, niemals beides.
- Alle Autoren laufen, bevor es die Leser tun.
Daher
present A else emit A end
ist ein fehlerhaftes Programm : Der Schreiber "emit A" muss vor dem Leser "present A" ausgeführt werden, aber dieses Programm verlangt, dass "present A" zuerst ausgeführt wird.
Die Sprachkonstrukte
Primitive Esterel-Aussagen
Reines Esterel hat elf primitive Aussagen.
nothing |
Kündigt sofort ohne weitere Wirkung. |
pause |
Blockiert den Kontrollfluss im aktuellen Zyklus für die Wiederaufnahme im nächsten Zyklus. |
p ; q
|
Läuft p bis zum Ende und startet dann in derselben Reaktion q . |
p || q
|
Läuft p und q parallel |
loop P end
|
Starten Sie den Körper p neu , sobald er beendet ist. Jeder Pfad durch den Schleifenkörper muss mindestens eine pause Anweisung enthalten, um unbegrenzte Schleifen innerhalb einer einzelnen Reaktion zu vermeiden.
|
signal S in p end
|
Deklariert ein lokales Signal. |
emit S
|
Signal S im aktuellen Moment vorhanden machen. Ein Signal fehlt, es sei denn, es wird ausgegeben. |
present S then p else q end
|
Wenn im aktuellen Moment das Signal S vorhanden ist, sofort p ausführen , andernfalls q ausführen . |
suspend p when S
|
Unterbricht die Ausführung des Körpers in Momenten, in denen S vorhanden ist. |
trap T in p end
|
Deklarieren Sie einen gekennzeichneten Escape-Block. |
exit T
|
Zum Ende des innersten T- beschrifteten Escape-Blocks springen. |
Abgeleitete Esterel-Aussagen
Esterel hat mehrere abgeleitete Konstruktionen:
Abgeleitete Aussage | Erweiterung |
---|---|
halt |
loop pause end
|
sustain S
|
loop emit S; pause end
|
present s then p end
|
present s then p else nothing end
|
await S
|
trap T in loop pause; present S then exit T end end loop end
|
await immediate S
|
trap T in loop present S then exit T end; pause end loop end
|
suspend p when immediate s
|
suspend present s then pause end; p when s
|
abort p when (immediate) s
|
trap T in suspend p when (immediate) s ; exit T || await (immediate) s; exit T; end
|
weak abort p when (immediate) s
|
trap T in p ; exit T || await (immediate) s; exit T; end
|
loop S
|
loop abort p ; halt when s end loop
|
every (immediate) s do p end every
|
await (immediate) s ; loop p each s
|
Andere Esterel-Aussagen
Die vollständige Esterel-Sprache hat auch Anweisungen zum Deklarieren und Instanziieren von Modulen, für Variablen, zum Aufrufen externer Prozeduren und für bewertete Signale.
Beispiel (ABRO)
Das folgende Programm gibt den Ausgang O aus, sobald beide Eingänge A und B empfangen wurden. Setzen Sie das Verhalten zurück, wenn der Eingang R empfangen wird.
module ABRO: input A, B, R; output O; loop [ await A || await B ]; emit O each R end module
Vorteile von Esterel
- Das Zeitmodell gibt dem Programmierer eine präzise Kontrolle
- Parallelität bequem für die Spezifikation von Steuerungssystemen
- Völlig deterministisch
- Sprache mit endlichen Zuständen
- Ausführungszeit vorhersehbar
- Formal viel einfacher zu verifizieren
- Kann sowohl in Hardware als auch in Software implementiert werden
Nachteile von Esterel
- Die endliche Natur der Sprache schränkt die Flexibilität ein (jedoch ist die Expressivität für das gewählte Anwendungsgebiet ausreichend)
- Semantische Herausforderungen
- Kausalitätsverletzungen zu vermeiden ist oft schwierig
- Im allgemeinen Fall schwer zu kompilieren, aber einfache Korrektheitskriterien existieren
Siehe auch
- Lustre , eine Cousin-Programmiersprache
- SIGNAL , eine datenflussorientierte synchrone Sprache, die Multi-Clock-Spezifikationen ermöglicht
- Esterel Technologies , Entwickler von Esterel Studio und anderen Tools
- Paralleles Programmiermodell
Verweise
Externe Links
- Die Esterelsprache bei Inria
- Der Columbia Esterel Compiler ist ein Open-Source-Compiler