AspectVHDL: Entwurf und Implementierung eines Aspektwebers ... ?· 1 Einleitung VHDL ist eine der am…

Download AspectVHDL: Entwurf und Implementierung eines Aspektwebers ... ?· 1 Einleitung VHDL ist eine der am…

Post on 26-Jan-2019

212 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

<p>Bachelorarbeit</p> <p>AspectVHDL:Entwurf und</p> <p>Implementierung einesAspektwebers fr VHDL</p> <p>Karl Stelzner24. September 2013</p> <p>Betreuer:Prof. Dr.-Ing. Olaf SpinczykDipl.-Inf. Matthias Meier</p> <p>Technische Universitt DortmundFakultt fr InformatikLehrstuhl Informatik 12Arbeitsgruppe Eingebettete Systemsoftwarehttp://ess.cs.tu-dortmund.de</p> <p>http://ess.cs.tu-dortmund.de</p> <p>Hiermit versichere ich, dass ich die vorliegende Arbeit selbststndig verfasst, keine an-deren als die angegebenen Quellen und Hilfsmittel verwendet sowie Zitate kenntlichgemacht habe.</p> <p>Dortmund, den 24. September 2013</p> <p>Karl Stelzner</p> <p>Zusammenfassung</p> <p>Hardwarebeschreibungssprachen wie VHDL, mit denen digitale Systeme textuell be-schrieben werden knnen, erlauben die Entwicklung von Hardware auf einem hohen, derSoftwareentwicklung hnlichen Abstaktionsniveau. Daher stellen sie ein vielversprechen-des Gebiet fr die Anwendung von Technologien aus dem Softwarebereich dar. Mit derSprache AspectVHDL ist das von dort bekannte Konzept der aspektorientierten Pro-grammierung auf die Hardwareentwicklung bertragen worden. In dieser Arbeit wird derzum praktischen Einsatz der Sprache notwendige Aspektweber entwickelt. Dazu wird zu-nchst ein bestehender VHDL-Parser gewhlt und zur Verarbeitung von AspectVHDLerweitert. Auf Basis dessen wird der Aspektweber implementiert, der die Codemanipu-lationen am VHDL-Code durchfhrt, die durch AspectVHDL vorgesehenen sind. Dieerarbeitete Lsung wird anschlieend mit Hinblick auf ihre Praxistauglichkeit evaluiert.</p> <p>Inhaltsverzeichnis</p> <p>1 Einleitung 11.1 Zielsetzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3 bersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4</p> <p>2 Anforderungen 52.1 Join Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5</p> <p>2.1.1 Unterprogramme . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.1.2 Introductions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7</p> <p>2.2 Pointcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.3 Aspekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9</p> <p>3 Entwurf 113.1 Parsen des AspectVHDL Codes . . . . . . . . . . . . . . . . . . . . . . . 11</p> <p>3.1.1 GHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.1.2 VAUL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.1.3 vMAGIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13</p> <p>3.2 Entwurf des Webers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15</p> <p>4 Implementierung 174.1 Metaklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17</p> <p>4.1.1 Aspekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.1.2 Advices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194.1.3 Slices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194.1.4 Pointcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20</p> <p>4.2 Parser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.2.1 Erweiterung des VHDL-Parsers . . . . . . . . . . . . . . . . . . . 214.2.2 Anpassung des Baum-Parsers . . . . . . . . . . . . . . . . . . . . 23</p> <p>4.3 Weber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.3.1 Analyse des VHDL-Codes . . . . . . . . . . . . . . . . . . . . . . 254.3.2 Interpretation der Pointcuts . . . . . . . . . . . . . . . . . . . . . 284.3.3 Einweben des Aspectcodes . . . . . . . . . . . . . . . . . . . . . . 30</p> <p>5 Evaluation 355.1 Laufzeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35</p> <p>5.1.1 Szenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355.1.2 Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36</p> <p>i</p> <p>Inhaltsverzeichnis</p> <p>5.2 MB-Lite Implementierung . . . . . . . . . . . . . . . . . . . . . . . . . . 375.3 Mgliche Erweiterungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 38</p> <p>5.3.1 Bindung von Prozedur-Argumenten durch Pointcuts . . . . . . . . 395.3.2 Verbindung von Prozeduraufruf und Prozedur . . . . . . . . . . . 39</p> <p>6 Zusammenfassung und Ausblick 41</p> <p>Quellenverzeichnis 43</p> <p>Abbildungsverzeichnis 45</p> <p>ii</p> <p>1 Einleitung</p> <p>VHDL ist eine der am weitesten verbreiteten Hardwarebeschreibungssprachen [1], alsoeine Sprache, mit der digitale Systeme textuell beschrieben werden knnen. Darberhinaus erlaubt es VHDL, beschriebene Systeme zu simulieren und sogar automatischzugehrige Schaltungsdesigns zu generieren (Synthese). Der Entwurf von komplexen Sys-temen wird dadurch stark vereinfacht sie mssen nicht mehr Bauteil fr Bauteil ent-worfen werden, sondern knnen auf einer hheren Abstraktionsebene fr den Menschenverstndlich beschrieben werden.</p> <p>Da der Entwurf von Hardware somit einen hnlichen Charakter wie das Programmierenvon Software gewonnen hat, bietet es sich an, Designphilosophien aus dem Software-bereich zu untersuchen und auf ihre bertragbarkeit auf die Hardwareentwicklung zuprfen. Eine davon ist die Idee der Modularisierung: Fr die Struktur von Software ist esvon Vorteil, wenn logisch zusammenhngende Teile eines Programms auch im Quelltextzusammenhngen. Dies erlaubt es, Projekte besser zu strukturieren und konfigurierbarerzu machen: Im Idealfall kann die gewnschte Funktionalitt nach dem Baukastenprinzipmageschneidert zusammengestellt werden. VHDL bietet hierfr bereits einige Konzep-te, wie etwa die Mglichkeit, Komponenten zu parametrisieren und so in verschiedenenVarianten wiederzuverwenden (generics).</p> <p>Ein Paradigma, welches darauf abzielt, die Modularisierbarkeit von Programmierspra-chen zu verbessern, ist die aspektorientierte Programmierung (AOP) [2]. Hierzu bietetsie Sprachkonstrukte, mit denen Programmcode, der normalerweise ber mehrere Ele-mente des Projekts (z. B. mehrere Klassen) verteilt ist, in sogenannten Aspekten zusam-mengefasst werden kann. Damit knnen gemeinhin schwer kapselbare Angelegenheitenwie z. B. Logging modularisiert werden. Um diese Vorteile auf VHDL zu bertragen,wurde 2012 von der Arbeitsgruppe Eingebettete Systemsoftware ein Prototyp der Spra-che AspectVHDL erstellt [3]. Durch diese werden bekannte, grundlegende Konzepte deraspektorientierten Programmierung in VHDL eingefhrt. Zwar ist die Funktionsweiseder Sprache bereits spezifiziert, es fehlt allerdings ein Aspektweber, um sie in der Praxisverwenden zu knnen. Dabei handelt es sich um ein Programm, das den in Aspektengekapselten Code wieder in das restliche Projekt einwebt und so aus einem AspectVHDL-Projekt quivalenten VHDL-Code erzeugt. Dieser kann dann durch bereits vorhandeneTools simuliert oder synthetisiert werden. Abbildung 1.1 stellt diese Funktionalitt dar.</p> <p>1</p> <p>Einleitung 1.2</p> <p>Abbildung 1.1: Visualisierung der Aufgabe des Aspektwebers</p> <p>1.1 ZielsetzungZiel dieser Arbeit ist es, einen solchen Aspektweber zu entwerfen und zu implementieren.Dieser soll in der Lage sein, AspectVHDL-Code einzulesen, also sowohl die neuen AOP-Elemente als auch herkmmlichen VHDL-Code zu verarbeiten. Hierzu muss ein Parserfr AspectVHDL erstellt werden. Anschlieend soll der Aspektweber den eingelesenenAspektcode gem der in [3] gegebenen Spezifikationen in den normalen VHDL-Codeeinweben. Hierzu ist es insbesondere notwendig, den VHDL-Code zu analysieren, um dieStellen zu finden, die zum Einweben verwendet werden knnen (Join Points). Zuletztmuss der Aspektweber das Ergebnis dieses Vorgangs in Form von VHDL-Dateien aus-geben.</p> <p>Ein weiteres Ziel der Arbeit besteht in der Evaluation der gewonnenen Lsung undder Formulierung von mglichen Erweiterungen. Dabei gilt es vor allem, die Praxistaug-lichkeit des Aspektwebers zu untersuchen und mit den durch seine Implementierunggewonnenen Erfahrungen Anstze fr eine zuknftige Weiterentwicklung zu erarbeiten.</p> <p>1.2 MotivationWie oben bereits erwhnt liegt der grundlegende Zweck von AOP darin, Elemente einesProjekts zu modularisieren, die normalerweise ber mehrere logische Schichten des Pro-</p> <p>2</p> <p>1.2 Einleitung</p> <p>gramms verteilt wren. Um zu untersuchen, ob solche sogenannten querschneidendenBelange (Cross-Cutting Concerns) auch in VHDL vorkommen, wurde im Rahmen desArtikels zu AspectVHDL die MB-Lite CPU, eine quelloffene VHDL-Implementierungvon Xilinx Microblaze Prozessor, analysiert. Diese bietet die Mglichkeit, optionale Er-weiterungen des Prozessors hinzuzuschalten. Fr drei von diesen Erweiterungen, nmlichHardwareuntersttzung fr Multiplikations-, Shift- und Gleitkommaoperationen, wurdedie Verteilung des fr sie zustndigen Codes im Projekt untersucht. Abbildung 1.2 fasstdie Ergebnisse der Untersuchung zusammen: Die Spalten stellen Quelldateien des Pro-jektes dar, die eingefrbten Flchen markieren Codeabschnitte, die zu den optionalenErweiterungen gehren. Es stellt sich heraus, dass der Quelltext fr alle drei Featuresauf mehrere Standorte aufgeteilt ist. Insbesondere die optionale Gleitkommaeinheit istber viele verschiedene Stellen im Projekt verteilt.</p> <p>Abbildung 1.2: Darstellung der Verteilung des Codes von drei optionalen Erweiterungender MB-Lite CPU (aus [3])</p> <p>Es existiert somit auch in VHDL-Projekten eine Art von Cross-Cutting Concerns, diedurch die Konzepte von AOP besser gekapselt werden knnten. Durch AspectVHDLknnten die drei betrachteten Elemente in Aspekten zusammengefasst und so die Ver-stndlichkeit und Wartbarkeit des Projektes verbessert werden. Allgemein knnte AOPdabei helfen, die Modularisierbarkeit von VHDL zu verbessern und somit die Entwick-lung von mageschneiderter Hardware zu vereinfachen.</p> <p>3</p> <p>Einleitung 1.3</p> <p>Die Entwicklung des Aspektwebers im Rahmen dieser Arbeit ist ein notwendiger Schrittdorthin: Erst mit einer funktionsfhigen Implementierung kann AspectVHDL praktischeingesetzt sowie untersucht und verbessert werden.</p> <p>1.3 bersichtIm folgenden Kapitel werden zunchst die Anforderungen erlutert, die an den Aspekt-weber gestellt werden. Hierzu wird ein berblick ber die grundlegenden Elemente vonAOP und den Aufbau von VHDL-Projekten gegeben. Anschlieend werden die spezi-ellen Sprachkonstrukte von AspectVHDL vorgestellt, die vom Aspektweber verarbeitetwerden mssen. In Kapitel 3 folgt eine Darstellung der Analyse- und Entwurfsarbeiten,die vor der Implementierung des Aspektwebers durchgefhrt wurden. Hierzu zhlt dieWahl einer bestehenden Software zum Einlesen des Programmcodes und der Entwurfeines Algorithmus fr den Aspektweber.</p> <p>Kapitel 4 befasst sich mit der Implementierung des Aspektwebers. Die Umsetzung derzuvor entworfenen Komponenten des Programms wird hier im Detail erlutert. In Ka-pitel 5 folgt anschlieend eine Evaluation dieser Implementierung: Es wird untersucht,inwieweit die zuvor formulierten Anforderungen erfllt sind und wie sich die Laufzeitdes Aspektwebers verhlt. Auerdem werden einige mgliche Erweiterungen von Aspect-VHDL vorgestellt. In Kapitel 6 werden die erlangten Erkenntnisse zusammengefasst undein Ausblick auf die mgliche Zukunft des Projekts gegeben.</p> <p>4</p> <p>2 AnforderungenDie Anforderungen, die an den Aspektweber gestellt werden, ergeben sich direkt ausden Spezifikationen von AspectVHDL [3]. Die dort vorgesehenen Sprachelemente msseneingelesen, analysiert und ihre Semantik umgesetzt werden. Bevor diese Funktionalitterlutert wird, folgt zunchst ein berblick ber die Grundkonstrukte, die AspectVHDLvon anderen aspektorientierten Sprachen wie AspectJ [2] oder AspectC++ [4] bernom-men hat:</p> <p> Join Points: Als Join Points werden die Punkte im VHDL Code bezeichnet, andenen durch Aspekte Vernderungen vorgenommen werden knnen. Welche dasgenau sind, wird in Abschnitt 2.1 erlutert.</p> <p> Advice: Ein Advice ist eine Anweisung an den Aspektweber, die dafr sorgt, dassein bestimmter Codeabschnitt an einem oder mehreren Join Points eingewobenwird.</p> <p> Slice: In manchen Fllen ist ein solcher Codeabschnitt unabhngig von den Advicesdefiniert, die ihn nutzen. In diesem Fall spricht man von einem Slice.</p> <p> Pointcut: Um zu bestimmen, an welchen Join Points eingewoben wird, verfgtjeder Advice ber einen sogenannten Pointcut-Ausdruck. Hierbei handelt es sichum einen Ausdruck, der mit Hilfe spezieller Funktionen (siehe Abschnitt 2.2) eineMenge von Join Points spezifiziert.</p> <p> Aspekt: Aspekte bilden die grundlegenden Einheiten von aspektorientierten Pro-grammiersprachen. In AspectVHDL knnen sie Advices, Slices und einige weitereDeklarationen (siehe Abschnitt 2.3) enthalten.</p> <p>2.1 Join PointsDie erste Frage, die sich zu einer aspektorientierten Sprache stellt, ist, an welchen Stellenber Aspekte Code eingewoben werden kann, sprich, wo die Join Points liegen. Dies istfr den Aspektweber insofern relevant, als dass er die Join Points im VHDL-Code er-kennen und in der Lage sein muss, an diesen Stellen Modifikationen vorzunehmen. Zumbesseren Verstndnis folgt zunchst ein berblick ber den Aufbau von VHDL-Code.</p> <p>Die grundlegenden Elemente von VHDL-Projekten sind sogenannte Entitten (Enti-ties), die die Schnittstelle eines Hardwarebausteins darstellen [1]. Dies umfasst vor al-lem dessen Ein- und Ausgangssignale. Das eigentliche Verhalten der Hardware wird</p> <p>5</p> <p>Anforderungen 2.1</p> <p>durch Architekturen beschrieben, die jeweils eine Entitt implementieren. Auf diese Wei-se knnen unterschiedliche Umsetzungen derselben Schnittstelle formuliert werden. DieBeschreibung des Hardwareverhaltens durch die Architekturen erfolgt durch paralleleAnweisungen: Diese werden nicht sequentiell ausgefhrt, sondern jede einzelne sorgt frdie Erzeugung einer bestimmten Hardwarestruktur. Dementsprechend spielt auch derenReihenfolge keine Rolle.</p> <p>VHDL bietet verschiedene Arten von Anweisungen, mit denen ein Hardwareelementbeschrieben werden kann: Zum einen knnen andere Entitten instanziiert werden, umso eine hierarchische Struktur von Komponenten aufzubauen. Zum anderen knnen Pro-zesse definiert werden, die Folgen von sequentiellen Anweisungen enthalten. Hier knnendie aus Programmiersprachen bekannten Konstrukte wie Schleifen oder bedingte Anwei-sungen verwendet werden, um das Verhalten des Hardwareelements durch programmar-tige Strukturen zu beschreiben. Es ist allerdings zu beachten, dass diese Anweisungenspter nicht durch einen Prozessor ausgefhrt, sondern auch nur in Hardwareelementeumgewandelt werden. Die Prozesse werden immer dann aufgerufen, wenn sich eines derSignale ndert, die in ihrer Sensitivittsliste vermerkt sind.</p> <p>Um redundanten Code zu vermeiden, gibt es auch in VHDL die Mglichkeit, wieder-verwendbare Unterprogramme und Datentypen zu spezifizieren. Diese knnen unter an-derem in Paketen hinterlegt werden. Hierbei handelt es sich um Container fr wiederver-wendbare Definitionen, die von den Entitten und Architekturen genutzt werden knnen.Um auch hier eine Trennung von Schnittstelle und Implementierung herzustellen, kn-nen Pakete in zwei Teile aufgeteilt werden: Header und Body. In diese...</p>

Recommended

View more >