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 pauseAnweisung 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 p each 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

Verweise

Externe Links