200 likes | 668 Views
Automatische Code-Generierung aus Simulink-Modellen. HK Eingebette Systeme - Produktivität und Qualität Prof. Dr. Holger Schlingloff Referent: Martin Werner. Agenda. Motivation – Warum automatisch Code generieren? Funktionsweise und Besonderheiten
E N D
Automatische Code-Generierung aus Simulink-Modellen HK Eingebette Systeme - Produktivität und Qualität Prof. Dr. Holger Schlingloff Referent: Martin Werner
Agenda Motivation – Warum automatisch Code generieren? Funktionsweise und Besonderheiten Optimierungsmöglichkeiten der Code Generierung Bewertung: Pro und Contra
Definition „automatische Code Generierung“ Was ist automatische Code Generierung? • Umfasst das Generieren von Quellcode einer High-Level Programmier-sprache (C, C++ etc.) oder einer Hardware Beschreibungssprache (VHDL, Verilog etc.) aus Metainformationen • Diese Metainformationen können unter anderem UML-Diagramme, Datenflussdiagramme etc. sein • Grundprinzip basiert auf „Model Driven Architecture“ (MDA) • Die dafür eingesetzten Werkzeuge heißen „Generatoren“ • Simulink bietet hierfür den „Real-Time Workshop“, den „Real-Time Workshop Embedded Coder“, den „Stateflow Coder“und den „Simulink HDL Coder“ an • Der generierte Code kann dann mit Hilfe eines „normalen“ Compilersin Byte-Code der Zielarchitektur umgewandelt werden • Im Falle des HDL Coders ist ein Synthese-Werkzeug (Synopsys, ISE etc.) nötig, um die entsprechende Hardware zu erzeugen
Die automatische Code Generierung soll die Produktionskosten und die Entwicklungszeitverringern und gleichzeitig die Qualität des Codes im Vergleich zur manuellen Implementierung verbessern Wofür braucht man die automatische Code Generierung? Warum möchte man Code automatisch generieren lassen? Vorurteile • Automatische Code Generierung ermöglicht den Entwurf von Software/Hardware auf der Spezifikationsebene • Der höhere Abstraktionsgrad von Modellen bietet einebessere Übersicht und schnellere Umsetzung derSpezifikationen • Simulation des Modells ermöglicht Test des Designsnoch vor der Implementierung • Durch die autom. Code Generierung wird das Rapid-Prototyping beschleunigt • Sofern das Modell korrekt ist und der Generator zuverlässigarbeitet, entspricht der generierte Code den Spezifikationenund Implementierungsfehler werden so reduziert • Performance des generierten Codes ist schlecht • Integration von Legacy Codeist schwierig • Der generierte Code ist schlecht lesbar • Der generierte Code ist schlecht portierbar • Mächtigkeit der Modelle, aus denen sich Code generierenlässt, ist eingeschränkt
Agenda Motivation – Warum automatisch Code generieren? Funktionsweise und Besonderheiten Optimierungsmöglichkeiten der Code Generierung Bewertung: Pro und Contra
Vorraussetzungen für die Code Generierung Voraussetzungen • Der Model Advisor gibt Aufschluss darüber, ob aus dem Modell Code generiert werden kann • Folgende Dinge sollten beachtet werden: • Der Solver muss auf „Fixed-Step“ eingestellt werden • Man sollte Blocks nicht verwenden, die nicht in Codeübersetzt werden können (z.B. MATLAB Fcn block) • Es wird empfohlen die Zielplattform anzugeben, damitder Code möglichst optimal angepasst werden kann • Je nach Zielplattform sollten die Datentypen ausgewählt werden (Optimierungspotential!) • Vermeiden von teuren floating-point Datentypen, wenn möglich • Bei der Verwendung von Zeitabhängigen Blocks sollteeine Lebensdauer des Programms angegeben werden, damit der Generator ausreichend große Zähler generiert (sonst Gefahr eines frühzeitigem Overflows!)
Mögliche Zielplattformen Simulink Generatoren Real-Time Workshop RTW Embedded Coder Stateflow Coder HDL Coder C / C++ VHDL / Verilog C - Compiler Synthese Tool FPGA ASIC AMD K5 ARM AVR Intel x86 SPARC TI C6000 …
Workflow der Code Generierung Ausführbare Datei erzeugen Vom Modell zum Prototypen
Einbindung von Legacy Code Workflow für das Einbinden von Legacy Code Definition: Legacy Code • Ist bestehender Code, welcher ausführlich getestet wurde und bereits viele Jahre im Einsatz ist • Oftmals auch in anderen (alten) Programmier-sprachen verfasst(Fortran, Ada, etc.) • Matlab Konsolen Befehle: • f1 = legacy_code('initialize') • f1.SFunctionName = 'ex_sfun_doubleit'; f1.OutputFcnSpec = 'double y1 = doubleIt(double u1)'; f1.SourceFiles = {'doubleIt.c'}; f1.HeaderFiles = {'doubleIt.h'}; • legacy_code('sfcn_cmex_generate', f1); • legacy_code('compile', f1); • legacy_code('slblock_generate', f1); Integration in Simulink • Simulink erlaubt das Ein-binden von C Header und Source Files • Eingebettete Funktionen können als normale Blöcke in das Modell eingebaut werden • Diese Blöcke heißen S-Function Blocks
Beispiel: Euklidischer Algorithmus Pseudocode Simulink Modell Generierter C Code A B C EUCLID(a, b) 1 solange b ≠ 0 2 h a mod b 3 a b 4 b h 5 return a Spezifikation Simulink Implementierung Model Advisor Autom. Code Generierung Executable
Agenda Motivation – Warum automatisch Code generieren? Funktionsweise und Besonderheiten Optimierungsmöglichkeiten der Code Generierung Bewertung: Pro und Contra
Automatische Code Optimierung Automatische Optimierungen Ein Beispiel • Vereinfachen boolescher und algebraischer Formeln • Zusammenfassen von Blöcken • Sinnvolle automatische Zuweisung der Datentypen • Eliminierung von unerreichbaren Pfaden • Wiederverwendung von gespeicherten Signalen Generierte Dateien: Optimize01.c Optimize01_data.c
Manuelle Code Optimierung Manuelle Optimierungen Ein einfachere Variante des Eukl. Algorithmus • Kleinere Datentypen erzwingen (wenn Overflow vernachlässigt werden kann) • Alternative Implementierung vonAlgorithmen • Abstimmen des Modells auf diejeweilige Zielplattform • Nutzung vorgefertigter EmbeddedMatlab Funktionen Generierte Dateien: Optimize02.c Optimize02_data.c 416 LoC vs. 305 LoC (optimiert) 51 LoC vs. 32 LoC (optimiert)
Agenda Motivation – Warum automatisch Code generieren? Funktionsweise und Besonderheiten Optimierungsmöglichkeiten der Code Generierung Bewertung: Pro und Contra
Leistungsanalyse Automatisch generierte Code vs. „Handarbeit“ Erfahrungsbericht: Daimler Crysler * “ • Üblicherweise erreicht der automatischgenerierte Code eine ähnliche Performancewie handgeschriebener Code • In vielen Fällen ist der Auto-Code etwas Speicherschonender • Die tatsächliche Leistung hängt aber sehr vonden gewählten Einstellungen ab „ Erfahrungsbericht: NASA ** “ „ * http://www.mathworks.com/mason/tag/proxy.html?dataid=5442&fileid=22827 **http://www.mathworks.com/mason/tag/proxy.html?dataid=5961&fileid=24637
Vor- und Nachteile der Code Generierung Vorteile der Code Generierung Nachteile der Code Generierung • Deutliche Reduktion der Entwicklungszeit • Bessere Handhabbarkeit des Projekts durch bessere Übersicht undgeringere Komplexität • Leichtere Interpretierbarkeit des SimulinkModells im Vergleich zu reinem Code • Einfache Wiederverwendbarkeit von Legacy Code • Relativ breite Palette an unterstütztenPlattformen inkl. der Möglichkeit Hardware generieren zu lassen • Automatisch generierter Code istweniger anfällig für Imple-mentierungsfehler • Generierter Code ist schlecht lesbar und dadurch auch schwer manuell verifizierbar • Der generierte Code ist bei einfachenAlgorithmen deutlich größer alshandgeschriebener Code • Hohe Lizenzkosten (RTW kostet 7.500,00 €) und viele zusätzlichePlugins/Toolboxes • Keine Möglichkeit der Einflussnahmeauf den verwendeten Sprachumfang • Hohe Einarbeitungszeit bis guter Codegeneriert werden kann
Zukunftsaussichten dieser Methode Die nächste Evolutionsstufe: • Steigende Komplexität der Software/Hardware erfordert weitere Abstraktion undsomit wird diese Art der Modellierung sicherlich an Bedeutung gewinnen • Automatische Code Generierung könnte die Qualität von Software-Codedeutlich steigern, da es weniger Fehler bei der Übersetzung von Modellzu Programmcode gibt • Die Code-Generatoren und Compiler werden immer besser und liefern bereitsheute ebenbürtige Ergebnisse im Vergleich zu handgeschriebenem Code • Der Konkurrenzkampf fordert immer geringere Time-To-Market und effizientere (billigere) Entwicklungsmethoden
Quellenverzeichnis Verwendete Quellen • http://www.mathworks.de/applications/controldesign/description/embedded.html • http://www.mathworks.de/store/productIndexLink.do • “Model-Based Design and Beyond: Solutions for Today’s Embedded Systems Requirements”, Krasner, Jerry, Embedded Market Forecasters, 2004http://www.mathworks.com/applications/controldesign/technicalliterature.html • „Automatische Codegenerierung: Mythos und Realität“, D&V Dezember 2004, S. 40,http://www.eue24.net/pi/index.php?StoryID=253&articleID=10540 • “Multi-target Modelling for Embedded Software Development for Automotive Applications”, Hodge, Ye, Stuart, VisteonCorporation, March 2003, SAE Technical Paper Series 2004-01-0269 http://www.visteon.com/whitepapers/2004_01_0269.pdf • “Automatic Code Generation: Facilitating New Teaching Opportunities inEngineering Education”, Pieter J. Mosterman, The MathWorks Inc., 2006 • Matlab und Simulink Hilfe und Dokumentation • Wikipedia