# Simulink

Simulink ist eine Software des Herstellers The MathWorks zur Modellierung von technischen, physikalischen, finanzmathematischen und anderen Systemen. Simulink ist ein Zusatzprodukt zu MATLAB und benötigt dieses zum Ausführen.

## Modellierung und Funktionsweise

Simulink ermöglicht die hierarchische Modellierung mit Hilfe grafischer Blöcke. Dabei stellt Simulink einen Grundsatz an kontinuierlichen und diskreten Schaltblöcken zur Verfügung. Zusätzliche, komplexere Schaltblöcke können von The MathWorks oder anderen Herstellern bezogen werden.
Zusätzlich kann mit sogenannten S-Funktionen eigener Code in das Modell integriert werden. Auch das Einbinden von MATLAB-Code ist mittels Embedded MATLAB möglich.
Der Datenfluss zwischen den Blöcken wird grafisch über Verbindungslinien realisiert (sog. gerichteter Graph). Ein so erstelltes System kann dann innerhalb von Simulink simuliert werden. Für die numerische Simulation stehen verschiedene Lösungsverfahren (engl. „Solver“) zur Verfügung.
Mithilfe geeigneter Toolboxen ist es möglich, aus Matlab/Simulink heraus fertigen Code (C und VHDL) für Mikroprozessoren, Computer und FPGAs zu erzeugen.
Simulink unterstützt alle Integer-, Gleit- und Festkommatypen (float und fixed point) in der Simulation und Codegenerierung, wobei für (skalierte) Festkommatypen eine zusätzliche Toolbox-Lizenz erforderlich ist.

## Erweiterungen
### Blocksets

Simulink kann durch sogenannte Blocksets (z. B. das „DSP-Blockset“) erweitert werden, von denen zahlreiche sowohl von Mathworks selbst als auch von vielen anderen Firmen angeboten werden.

### Physikalische Modellierung

Für einzelne Domänen wie mechanische, elektrische oder hydraulische Systeme stehen spezielle Zusätze zur Verfügung, welche die Modellierung von physikalischen Systemen zusätzlich vereinfachen. Dafür wurde das Konzept der unidirektionalen Signalverbindungen um bidirektionale logische Verbindungen – den sog. physical networks – erweitert. Die Basis dieser Technologie heißt Simscape, in der mittels der Simscape language auch eigene Domänen definiert oder vorhandene Domänen erweitert werden können.

### Reglerauslegung

Die Auslegung der Reglerstrukturen, die in Simulink modelliert und simuliert werden, erfolgt mit der Toolbox Simulink Control Design, welche die lineare Regelungstheorie für Simulink nutzbar macht.
Eine numerische Parameteroptimierung wird mit der Toolbox Simulink Design Optimization durchgeführt.

### Codegenerierung

Mit Hilfe der Toolbox Simulink Coder kann aus einem Simulink-Modell Programmcode erzeugt werden, der mit Konfigurationsdateien für verschiedene Zielsprachen anpassbar ist. Soll der generierte Code auf einer Zielhardware ohne mathematischen Koprozessor laufen, wie es oft bei eingebetteten Systemen der Fall ist, kann die zusätzliche Toolbox Embedded Coder eingesetzt werden, die das Generieren von Festkomma-Algorithmen ermöglicht.
Eine weitere so genannte Toolbox ist der Simulink HDL-Coder mit dessen Hilfe sich ein Simulink-Modell in VHDL- oder Verilog-Code umsetzen lässt. Der erzeugte Code kann dann, mit Hilfe eines von den FPGA-Herstellern gelieferten Synthesewerkzeugs, synthetisiert und auf die entsprechende Hardware übertragen werden. Das Endprodukt ist dann anstatt eines ausführbaren Codes ein Stück Hardware mit den entsprechenden Funktionen (ASIC) oder eine Hardwarebeschreibung für einen FPGA.
Im Falle der Nutzung von FPGAs können Teile der Simulation übersetzt und in sehr hoher Geschwindigkeit auf der Hardware simuliert werden, was die Ausführungszeit um Größenordnungen reduziert.

### Verifikation und Validierung

Die Toolbox Verification and Validation kann ein Simulinkmodell mit Anforderungen verknüpfen und die Testabdeckung von Modellen bei der Simulation nach verschiedenen Kriterien messen. Diese Messung korreliert mit der des generierten Codes, ist aber nicht identisch.
Der Design Verifier ist eine weitere Toolbox, die eine Formale Verifikation von Modellen und eine automatische Testfallgenerierung durchführt.