FPGA-Einführung und Hardwareentwurf mit VHDL. von Prof. Dr.-Ing. Dirk Rabe



Ähnliche Dokumente
Übungen zu Architektur Eingebetteter Systeme. Teil 1: Grundlagen. Blatt 5 1.1: VHDL 28./

FPGA-Einführung und Hardwareentwurf mit VHDL. von Prof. Dr.-Ing. Dirk Rabe

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

Handbuch B4000+ Preset Manager

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Erklärung zum Internet-Bestellschein

Bauteilattribute als Sachdaten anzeigen

teischl.com Software Design & Services e.u. office@teischl.com

Ihr CMS für die eigene Facebook Page - 1

SICHERN DER FAVORITEN

Windows 7 Winbuilder USB Stick

Speichern. Speichern unter

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

Tel.: Fax: Ein Text oder Programm in einem Editor schreiben und zu ClassPad übertragen.

Programm GArtenlisten. Computerhinweise

Installationsanleitungen

Stand: Adressnummern ändern Modulbeschreibung

1 Konto für HBCI/FinTS mit Chipkarte einrichten

Artikel Schnittstelle über CSV

Kurzeinführung Excel2App. Version 1.0.0

Registrierungsanleitung Informatik-Biber

Hilfe zur Urlaubsplanung und Zeiterfassung

Excel Pivot-Tabellen 2010 effektiv

ARAkoll 2013 Dokumentation. Datum:

Einführung in. Logische Schaltungen

Lernwerkstatt 9 privat- Freischaltung

Dokumentation IBIS Monitor

Arbeiten mit UMLed und Delphi

ÖKB Steiermark Schulungsunterlagen

Hilfe zur Dokumentenverwaltung

Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG

Dokumentation für die software für zahnärzte der procedia GmbH Onlinedokumentation

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Sie finden im Folgenden drei Anleitungen, wie Sie sich mit dem Server der Schule verbinden können:

Datenübernahme von HKO 5.9 zur. Advolux Kanzleisoftware

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Outlook 2000 Thema - Archivierung

Datensicherung. Beschreibung der Datensicherung

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

iphone-kontakte zu Exchange übertragen

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Folgeanleitung für Fachlehrer

Microsoft Access 2013 Navigationsformular (Musterlösung)

Outlook-Daten komplett sichern

Die USB-Modem-Stick Software (Windows) verwenden. Doppelklicken Sie das Symbol auf dem Desktop, um die Software zu starten. Die Hauptseite erscheint:

TEAMWORK-Uploader. Dokumentenaustausch mit dem PC

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Übung: Verwendung von Java-Threads

Menü Macro. WinIBW2-Macros unter Windows7? Macros aufnehmen

Einrichten eines IMAP Kontos unter Outlook Express

! " # $ " % & Nicki Wruck worldwidewruck

Installationsanleitung CLX.PayMaker Home

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

3 ORDNER UND DATEIEN. 3.1 Ordner

25 Import der Beispiele

Pascal-Compiler für den Attiny

Bilder zum Upload verkleinern

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

Shellfire L2TP-IPSec Setup Windows XP

ACHTUNG: Es können gpx-dateien und mit dem GP7 aufgezeichnete trc-dateien umgewandelt werden.

PowerPoint 2010 Mit Folienmastern arbeiten

Kurzanleitung für die Import/Export Funktion Kinderleicht Produkte importieren und aktualisieren und exportieren

Office-Programme starten und beenden

Bedienung des Web-Portales der Sportbergbetriebe

DOKUMENTATION VOGELZUCHT 2015 PLUS

Hex Datei mit Atmel Studio 6 erstellen

Die Dateiablage Der Weg zur Dateiablage

Installation OMNIKEY 3121 USB

Folgeanleitung für Klassenlehrer

Qt-Projekte mit Visual Studio 2005

Installation von Microsoft Visual C Express

Serienbrief erstellen

Wollen Sie einen mühelosen Direkteinstieg zum Online Shop der ÖAG? Sie sind nur einen Klick davon entfernt!

Anleitung für TYPO Bevor Sie beginnen Newsletter anlegen Inhalt platzieren und bearbeiten Neuen Inhalt anlegen...

Python Installation. 1 Vorbereitung. 1.1 Download. Diese Anleitung ist für Windows ausgelegt.

FuxMedia Programm im Netzwerk einrichten am Beispiel von Windows 7

2. Word-Dokumente verwalten

Informatik 1 Tutorial

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung

Beispiel Shop-Eintrag Ladenlokal & Online-Shop im Verzeichnis 1

S TAND N OVEMBE R 2012 HANDBUCH DUDLE.ELK-WUE.DE T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E

Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000

Handbuch Groupware - Mailserver

AUF LETZTER SEITE DIESER ANLEITUNG!!!

Einkaufslisten verwalten. Tipps & Tricks

Sichern der persönlichen Daten auf einem Windows Computer

Second Steps in eport 2.0 So ordern Sie Credits und Berichte

Erstellen einer digitalen Signatur für Adobe-Formulare

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Diese Anleitung enthält Anweisungen, die nur durch erfahrene Anwender durchgeführt werden sollten!

Anleitung für Berichte in Word Press, auf der neuen Homepage des DAV Koblenz

Anleitung für Zugriff auf den LEM-FTP-Server

CVR Seniorentreff vom 04. und Serienbriefe/Seriendruck. Serienbriefe / Seriendruck

Transkript:

FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. Dr.-Ing. Dirk Rabe Praktikum Digitaltechnik Gruppe: Teilnehmer: Vortestat: Testat: Benutzte Geräte:

1 1 Einleitung und Überblick 1 Einleitung und Überblick Im Rahmen dieses Versuchs sollen Sie das ALTERA-Experimentierboard DE-2 mit dem darauf befindlichen FPGA der Familie Cyclone II kennenlernen, die Ansteuerung einer 7-Segment-Anzeige in VHDL entwickeln, auf das FPGA synthetisieren/programmieren und erproben. Hierfür ist ein 2-stufiges Vorgehen vorgesehen: 1) Bedienung der Entwicklungswerkzeuge anhand einer kleinen vorgegebenen VHDL- Beschreibung (schrittweise Anleitung), 2) Entwurf Ihrer eigenen 7-Segment-Anzeige. Diese Versuchsanleitung ist wie folgt gegliedert: 2 Das DE-2 Board: hier erhalten Sie einen kurzen Überblick über die im Praktikum verwendete Versuchshardware Einführungsbeispiel: In diesem Abschnitt wird ein kurzes VHDL-Beispiel (Wechselschaltung) vorgestellt. -.1 Verzeichnisstruktur auf den Praktikumsrechnern -.2 Pin-Mapping File: Anschluss der VHDL-Ports mit den physikalischen FPGA-Pins -. VHDL-Kodierung des Beispiels: Anhand des Beispiels werden wesentliche VHDL- Aspekte erklärt. -.4 Implementierung der Schaltung auf das FPGA: Hier werden die Tool-spezifischen Schritte zur Schaltungssynthese dargestellt. Diese Schritte werden Sie im Praktikum schrittweise nachvollziehen. 4 Aufgabenstellung: In diesem Abschnitt finden Sie die eigentliche Aufgabe für diesen Praktikumsversuch - 4.1 Vorbereitung (vor dem Praktikumstermin): In diesem Abschnitt finden Sie die Aufgaben zur Versuchsvorbereitung (handschriftliche Bearbeitung; zu Beginn des Praktikumsversuchs abzugeben). - 4.2 VHDL-Kodierung, Synthese, FPGA-Programmierung und Erprobung: Anleitung zur Umsetzung der VHDL-Beschreibung in das Ziel-Design - 4. Hinweise zum Praktikums-Protokoll: Einige Hinweise zum Protokoll Anhang A: Der Texteditor EMACS: Zur VHDL-Kodierung sollen Sie den GNU-Editor EMACS verwenden, der die Eingabe von VHDL-Konstrukten sehr gut unterstützt. Die wesentlichen Features und Tastatur-Kombinationen sind in diesem Anhang dargestellt. Es wird empfohlen die Features in der Versuchsvorbereitung kurz durchzulesen und in der Durchführung anzuwenden. Der Begriff FPGA steht für Field Programmable Gate Array. Die Bezeichnungen der Bausteine im Bereich der komplexen programmierbaren Bausteine werden nicht klar getrennt - wie auch in der Vorlesung erwähnt. Weitere Informationen könne Sie auf folgender WEB-Page finden: http://www.altera.com/ literature/hb/cyc2/cyc2_cii5v1.pdf V 1.1.1 / 211-5- FPGA-Einführung und Hardwareentwurf mit VHDL

2 Auf den Praktikumsrechnern finden Sie neben Versuchsvorgaben einen Link auf weitereführende Dokumentation. Folgende Dokumentation ist interessant: tut_initialde2.pdf: Tutorial für die Inbetriebnahme des DE2-Boards, tut_quartus_intro_vhdl.pdf: Tutorial für die Bedienung der Quartus Software (Compiler, Simulator und Programer), DE2_UserManual.pdf: das komplette Manual zum DE2-Board. Anmerkung 1: Der hier dargestellte Einstieg in die Hardwarebeschreibungssprache VHDL ist nicht vollständig und an einigen Stellen vereinfacht. Es wird nur soviel an VHDL erklärt wie Sie für die Hardwarebeschreibung der Praktikumsinhalte benötigen. Die hier vermittelten Kenntnisse sind eine sehr gute Basis für eine weitere Vertiefung in die Hardwarebeschreibungssprache VHDL. Anmerkung 2: Die im Praktikum verwendete Software ist frei verfügbar und kann unter folgenden Adressen herunter geladen werden: http://www.altera.com (Quartus - Anmeldung erforderlich - sehr große Dateigröße (>1GB)) und http://www.gnu.org/software/emacs/windows/getting-emacs.html#getting-emacs (EMACS) Die Downloads sind auch auf den Praktikums-PCs verfügbar. FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 211-5-

2 Das DE-2 Board 2 Das DE-2 Board Das Eperimentierboard ist in Abbildung 1 dargestellt. Die im folgenden relevanten Teile sind hervorgehoben. relevante Anschlüsse und Schalter für den Betrieb des Boards Hardware, die für das Einführungsbeispiel benötigt wird Hardware, die für Folgeaufgaben benötigt wird Expansion Header 1 (JP1) Expansion Header 2 (JP2) Abbildung 1: Aufbau des DE2-Boards Zur Inbetriebnahme des Boards sind die grün (gepunktet) umrandeten Teile entsprechend anzuschließen/einzustellen: Stromversorgung: das entsprechende Netzteil ist hier anzuschließen Power ON/OFF: Ein/Ausschalter USB Blaster Port: Hierüber wird das FPGA programmiert - entsprechend ist dieser Port an den PC anzuschließen Programmierschalter: Umschaltung zwischen Speicherung im RAM (flüchtig) und EEP- ROM (nicht flüchtig) - dieser Schalter sollte auf RUN stehen (flüchtige Speicherung) Die Hardware, die für das Einführungsbeispiel notwendige ist, ist rot umrandet: das FPGA: Hier wird die implementierte Hardware hinein programmiert Toggle Switches: Schalter, die direkt mit dem FPGA verbunden sind - mit diesen Schaltern wird die eigene Hardware stimuliert für die erste Inbetriebnahme: der Treiber für diesen Port findet man im Quartus-Installations-Verzeichnis: z.b.: quartusii\8sp1\quartus\drivers V 1.1.1 / 211-5- FPGA-Einführung und Hardwareentwurf mit VHDL

4 grüne und rote LEDs: Wenn man die Ausgänge des FPGAs auf die LEDs schaltet kann man das Verhalten der Schaltung hier beobachten Weitere für die folgenden Versuche/Aufgaben notwendige Hardware ist in magenta (gepunktet) umrandet dargestellt: 8 Zeichen umfassende 7-Segment-Anzeige (Aufgabe im Anschluss an das Einführungsbeispiel) Druckschalter (entprällt): für manuelle Taktgenerierung verwendete Schalter (Versuch PRNG - Pseudo Random Number Generator ) 27MHz Oszillator: als Takt für PRNG verwendet (alternativ zum Druckschalter) Expansion Header 2: enthält Pins, die direkt mit dem FPGA verbunden sind - wird verwendet, um den Zustand des PRNGs am Oszilloskop sichtbar zu machen FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 211-5-

5 Einführungsbeispiel Einführungsbeispiel Als Einführungsbeispiel soll eine 2-fach Wechselschaltung betrachtet werden. Die Schaltung besteht aus 2 Schaltern und einem Ausgang, der an eine LED angeschlossen wird. Wenn ein einzelner Schalter geschaltet wird, dann soll die LED ihren Zustand ändern (also: an->aus oder aus->an). In der Realität müssen die beiden Eingänge einfach nur über ein EXOR-Gatter mit dem Ausgang verbunden werden: Abbildung 2: Beispiel-Design.1 Verzeichnisstruktur auf den Praktikumsrechnern Auf dem Desktop der Rechner finden Sie einen Ordner mit dem Namen student: Abbildung : Inhalt des Ordners introtutorial In diesem Verzeichnis gibt es einen Unterordner altera\projects\introtutorial. In diesem Verzeichnis finden Sie folgende Dateien vor: light.vhd: VHDL Code für das Beispiel-Design DE2_pin_assignments.csv: Zuordnung (Mapping) von Toplevel-Interface-Signalen zu FPGA-Pins.2 Pin-Mapping File In diesem File stehen pro Zeile je 2 durch Komma getrennte Namen: Signalname des Interface-Signals auf dem VHDL-Toplevel, Zuordnung dieses Signals zu einem FPGA Pin. V 1.1.1 / 211-5- FPGA-Einführung und Hardwareentwurf mit VHDL

. VHDL-Kodierung des Beispiels Die Interface-Signalnamen auf dem VHDL Toplevel sind prinzipiell beliebig. Es sollen jedoch die Bezeichner auf dem DE2-Board verwendet werden. Für diese Bezeichner gibt es bereits ein vorgefertigtes Pin-Mapping File DE2_pin_assignments.csv. Um unnötige Warnings im späteren Compile-Vorgang zu vermeiden, sind die nicht benötigten Pins auskommentiert worden ( # am Zeilenanfang).. VHDL-Kodierung des Beispiels Anhand des Beispiels soll die Hardware-Beschreibungssprache VHDL kurz vorgestellt werden. Wir beschränken uns hier auf die wesentlichen Punkte, die wir benötigen um einfache Hardwarekomponenten zu beschreiben. Ein wesentlicher Unterschied zwischen normalen Programmiersprachen wie C und Hardwarebeschreibungssprachen ist, dass in Hardwarebeschreibungssprachen das Verhalten von Hardwarekomponenten nebenläufig beschrieben wird - also sämtlich dort beschriebenen Hardwarekomponenten sind ständig aktiv und Signale können sich gleichzeitig ändern, so wie wir das Verhalten von Hardware eben erwarten. Im Gegensatz dazu werden in normalen Programmiersprachen die dortigen Kommandos schrittweise abgearbeitet (also Kommando für Kommando). Bei der Beschreibung einer Hardwareschaltung in VHDL sollte man grundsätzlich die beschriebene Hardwarestruktur grob im Kopf haben. Folgende Zuweisungen aus einer VHDL-Architektur führt beispielsweise dazu, dass in einer Simulation zum selben physikalischen Zeitpunkt die Signale endlos einander zugewiesen werden - die Simulationszeit sich also nicht ändern wird: a <= b; b <= a; Wenn man nun Hardware mit Hilfe von VHDL beschreiben möchte, so unterscheiden man 2 Sichtweisen: die Blackbox-Sichtweise (entity): Hier werden im Wesentlichen die Interface-Signale beschrieben - also die Port-Signale, die nach außen sichtbar sind und zum Anschließen der Hardware verwendet werden können. die innere Sichtweise (architecture): Hier wird - das Verhalten der Hardware oder - die strukturelle Zusammenschaltung (Instanziierung) von weiteren Hardwarekomponenten (hierarchische Hardwarebeschreibung) beschrieben. Zusätzlich können in VHDL mehrere alternative Hardwarebeschreibungen bzw. Hardwarerealisierungen (architectures) verwaltet werden. Diese müssen bei einer Instanziierung eindeutig zugewiesen werden. Diese Zuweisung erfolgt in VHDL über configuration-declarations. Gibt es für jede entity nur eine architecture, so benötigt man für die meisten CAD-Werkzeuge keine configuration-declarations - für unsere einfachen Aufgaben auch nicht. Zusammenfassend unterscheidet man in VHDL also folgende Beschreibungen: Entity: Interfacebeschreibung Architecture: Hardwarerealisierung FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 211-5-

7 Einführungsbeispiel Configuration: welche architectures für ein Design verwendet werden sollen (meistens nur bei Mehrdeutigkeiten notwendig) Für unser Beispiel soll nun der VHDL-Code erklärt werden (siehe Abb. 4). 1 2 4 Abbildung 4: Teil 1 der VHDL-Codierung für das Beispiel Nummer Erklärung Library-Deklarationen: im Package std_logic_114 der Bibliothek ieee ist der Datentyp std_ulogic (9-wertige Logik - vergleiche Vorlesung) und std_ulogic_vector definiert, die im folgenden verwendet werden. Der Typ std_ulogic wird für Ein-Bit-Signale verwendet und der Typ std_ulogic_vector für Mehr-Bit-Signale. 1 Entity light_core: Hier sind die Eingangsports x1 und x2 definiert. Die Signale sind vom Typ std_ulogic definiert. Zusätzlich wird das Ausgangssignal f definiert (auch vom Typ std_ulogic). V 1.1.1 / 211-5- FPGA-Einführung und Hardwareentwurf mit VHDL

. VHDL-Kodierung des Beispiels 8 Nummer Erklärung 2 architecture LogicFunction of light_core is... end LogicFunction; Hier wird das Verhalten für unsere Hardwarekomponente beschrieben. Diese Realisierung kann eine von mehreren Alternativen sein (hier ist es jedoch die einzige). Diese Alternative heißt LogicFunction - der Name ist beliebig. FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 211-5-

9 Einführungsbeispiel Nummer Erklärung In der Architecture kann das Verhalten durch nebenläufige Statements oder Prozesse beschrieben werden. Nebenläufiges Statement: Das hier durch zwei Minuszeichen ( -- ) auskommentierte Statement weist dem Signal f die XOR-Verknüpfung von x1 und x2 zu - wenn es nicht auskommentiert wäre. Wenn sich x1 oder x2 ändern wird das Signal f neu berechnet. Das Signal f entspricht gleichzeitig dem Ausgangssignal der beschriebenen Wechselschalterrealisierung. Die Syntax für eine Signalzuweisung ist <=. Ein-Bit-Werte (z.b. vom Typ std_ulogic) werden in VHDL in Hochkommata angegeben ( ). Die Bit-Kombinationen von Mehr-Bit-Werten werden in VHDL in Anführungszeichen angegeben. In dem Beispiel (unter Punkt 4) wird folgende Ein-Bit-Signalzuweisung verwendet: f <= ; Für Mehr-Bit-Signalzuweisungen gibt es folgende Möglichkeiten (Annahme expl sei vom Typ std_ulogic_vector( downto ): Möglichkeit 1: f<= 1111 ; -- 78 Möglichkeit 2: f<=x F & O ; -- 78 X: Steht für Hexadezimal-Werte O: Steht für Oktal-Werte (-Bit) B: Steht für Binär-Werte (optional) Der Verkettungsoperator & muss verwendet werden, weil X 7 eine 8-Bit- Zahl und keine 7-Bit-Zahl darstellen würde. VHDL ist hier sehr streng. Die Reihenfolge von (mehreren) nebenläufigen Signalzuweisungen ist irrelevant. Um dies verstehen zu können, ist die Behandlung von Signalen in VHDL von grundlegender Bedeutung. Hierfür muss man sich die Behandlung in einer digitalen VHDL-Simulation vorstellen. Jede Signalzuweisung wird in VHDL zunächst nur vorgemerkt und noch nicht zugewiesen. Erst wenn alle Signalzuweisungen für den aktuellen Simulationszeitpunkt abgearbeitet sind, so werden die vorgemerkten Werte auch tatsächlich zugewiesen. Deshalb sind folgende 2 nebenläufigen Signalzuweisungen (innerhalb einer Architektur) gleichbedeutend: Variante A: b <= d; a <= b and e; Variante B: a <= b and e; b <= d; Wenn sich hier Signal d ändern wird, dann wird b neu berechnet und für b vorgemerkt - und dies geschieht identisch in beiden Varianten. Wenn sich gleichzeitig mit Signal d auch das Signal e geändert hat, so wird das Signal a ebenfalls neu berechnet und vorgemerkt - hierbei wird aber noch der alte Wert von b verwendet. Nachdem nun alle Signalzuweisungen vorgemerkt sind, werden die vorgemerkten Werte zugewiesen. Da sich nun b geändert hat, muss nun a neu berechnet werden (zunächst Signalvormerkung und dann die Signalzuweisung...). Dies ist also die Begründung dafür, dass die Reihenfolge von nebenläufigen Signalzuweisungen irrelevant ist. V 1.1.1 / 211-5- FPGA-Einführung und Hardwareentwurf mit VHDL

. VHDL-Kodierung des Beispiels 1 Nummer Erklärung 4 Alternativ zum nebenläufigen Statement kann das Verhalten durch einen process beschrieben werden. Bei Prozess-Bescheibungen ist es wichtig, dass sämtlich Eingangssignale, die eine Neuberechnung der Ausgangswerte erforderlich machen, in der sogenannten sensitivity-list (Klammerausdruck nach dem process-statement) beschrieben werden. In Prozessen werden typischerweise komplexere Verhaltenszuweisungen beschrieben. VHDL bietet hierfür eine Vielzahl von Konstrukten, um innerhalb eines Prozesses das Verhalten zu beschreiben. Die Reihenfolge der Statements ist innerhalb der Prozessbeschreibung von Bedeutung (vergleiche auch Erklärungen zu nebenläufigen Signalzuweisungen unter Punkt ). Dies soll an folgenden Beispielen kurz erklärt werden: p1: process (...) begin -- a, b, c seien Signale (keine Variablen) a <= b; a <= c; -- vorherige Zuweisung von a <= b ist redundant (es wird nur a <= c zugewiesen) d <= a; -- d wird der alte Signalwert von a zugewiesen end p1; -- die Signalzuweisungen werden zunächst vorgemerkt und erst zugewiesen wenn alle Statements -- zum aktuellen Zeitpunkt zugewiesen sind-- -- weitere Stichworte hierzu: Unterschiede Variablen, Signale; Delta-Zyklen; sequentielle Prozesse Die Interface-Signale x1, x2 und f entsprechen nicht den Bezeichnungen auf dem DE2-Board. Dieses Mapping wird nun durch eine Instanziierung unserer Wechselschaltung in einer weiteren Hierarchieebene realisiert (siehe Abb. 5): VDD VSS sw pin_n25 sw() VDD VSS sw1 x1 x2 sw(1) pin_n2 light_core (vhdl) f ledg light (vhdl) ledr fpga (Pin-Mapping File) ledg PIN_AE22 VSS ledr PIN_AE2 VSS magenta: RTL-Beschreibung (d.h. Register- und Datenflußbescheibung) - hier ist das eigentliche Verhalten der Schaltung beschrieben gelb: primär strukturelle Beschreibung (mit Ausnahme des Inverters vor dem Ausgang ledr) - hier werden also andere Componenten instanziiert malve: toolspezifisch (hier Altera-QuartusII) wird noch ein Mapping der Toplevel-Entity- Signale auf tatsächliche (FPGA-)Hardwarepins unterstützt - also kein VHDL (CSV-Datei) blau: dieser Teil soll die vorhandene (nicht änderbare) Hardware des DE2-Experimentierboards darstellen Abbildung 5: Darstellung der Design-Hierarchieebenen FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 211-5-

11 Einführungsbeispiel In der Hierarchieebene light werden die Eingänge und Ausgänge von light_core nur an Pins mit den selben Namen wie auf unserem DE2-Board zugewiesen. Hierdurch ist das Design light_core unabhängig von den Namen des Experimentierboards. Der VHDL-Code hierzu ist in Abb. dargestellt. 5 7 Abbildung : VHDL-Code für die strukturell Toplevel-Beschreibung Nummer Erklärung 5 Library-Deklarationen: die obige Library- und Package-Deklaration (Nr. ) bezieht sich nur auf eine entity und eine architecture - deshalb muss sie hier erneut deklariert werden. V 1.1.1 / 211-5- FPGA-Einführung und Hardwareentwurf mit VHDL

.4 Implementierung der Schaltung auf das FPGA 12 Nummer Erklärung Entity light Die Top-level Entity des VHDL-Designs sollte den selben Namen wie das Altera-Projekt tragen (hier light). sw ist hier ein Eingangsvektor vom Typ std_ulogic_vector - also ein Array. Dieser Vektor hat die Elemente sw(1) und sw(). 7 architecture struc of light is -- declarations begin... end struc; Hier wird die Struktur (d.h. die Verdrahtung) der Hardware-Komponente beschrieben. Der Name struc ist beliebig. struc soll hier nur verdeutlichen, dass die Architektur eine strukturelle Beschreibung beinhaltet (reines Lesbarkeitsthema). Sämtliche instanziierte Komponenten müssen im Deklarationsteil der architecture (vor dem begin-statement) deklariert werden. Zusätzlich können hier interne Signale deklariert werden (my_f_signal), die nicht direkt am Interface (entity) sichtbar sind. Im Architektur-Body (zwischen begin und end) wird das Verhalten oder hier die Instanziierung der light_core-komponente beschrieben. Das Ausgangssignal f der light_core-komponente wird dem Signal my_f_signal zugewiesen. Eine direkte Zuweisung auf das Signal ledg ist nicht möglich, weil das Signal intern noch weiter verwendet werden soll (Besonderheit von VHDL: Port-Ausgangssignale dürfen intern nicht weiter verwendet werden!). Deshalb muss das Ausgangssignal f der light_core-komponente zunächst my_f_signal zugewiesen werden und kann dann dem Signal ledg sowie als Eingangssignal für den Inverter verwendet werden. Die Negation von my_f_signal ist streng genommen schon keine reine strukturelle Beschreibung mehr. Das negierte my_f_signal wird dann direkt auf eine rote LED gegeben. Anmerkung: Unnötige Tipp-Arbeiten für die component-deklaration und die Instanziierung läßt sich durch den Einsatz eines geeigneten Texteditors vermeiden (emacs-editor - siehe weiter unten)..4 Implementierung der Schaltung auf das FPGA In diesem Abschnitt sollen die verschiedenen Schritte für die Implementierung der VHDL- Beschreibung auf das FPGA/DE2-Board erklärt werden. Startpunkt sind die beiden in Abbildung dargestellten Files im Ordner Desktop\student\altera\Projects\introtutorial. Der komplette Flow ist in Abbildung 7 dargestellt. Hier sollen jedoch nur die Schritte Synthesis und Programming and Configuration durchgeführt werden. Die weiteren Simulations und Timingschritte sind sehr gut im Quartus-Tutorial (tut_quartus_intro_vhdl.pdf) dargestellt. Diese wichtigen Schritte sind nicht besonders kompliziert - sprengen hier jedoch den Rahmen. Sie sollten wie folgt vorgehen: FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 211-5-

1 Einführungsbeispiel Abbildung 7: Design-Flow 1) ggf. Adaptieren des Pin-Mapping Files DE2_pin_assignments.csv - wenn Sie mit einem neuen Design beginnen sollten sich diese Datei ggf. von einem anderen Design kopieren 2) ggf. Erstellen der VHDL Beschreibung ) Starten der Quartus II-Software (liegt auf dem Desktop) 4) Anlegen eines neuen Projekts: File->New Project Wizard: 4.a) Angabe des Projekt-Verzeichnisses und des Projektnamens (siehe Abb. 9) -> next 4.b) Auswahl der VHDL-Resourcen (siehe Abb. 1) -> next Falls das Lizensfile nachgefragt wird sollten Sie sich dieses vom Masterserver verwenden (generell kann man die Lizensfiles über die WEB-Page von Altera kostenlos beantragen). Um das richtige File zu finden benötigen Sie die MAC-Adresse des PCs. Diese erhalten Sie über das Kommando ipconfig /all in einer DOS-Shell. V 1.1.1 / 211-5- FPGA-Einführung und Hardwareentwurf mit VHDL

.4 Implementierung der Schaltung auf das FPGA 14 Abbildung 8: QuartusII-Oberfläche nach dem Öffnen Abbildung 9: Projekt anlegen FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 211-5-

15 Einführungsbeispiel Abbildung 1: Auswahl Design Files 4.c) Auswahl des Ziel-FPGAs (siehe Abb. 11) Abbildung 11: Auswahl des Ziel-FPGAs -> next V 1.1.1 / 211-5- FPGA-Einführung und Hardwareentwurf mit VHDL

.4 Implementierung der Schaltung auf das FPGA 1 4.d) Da keine sonstigen EDA-Werkzeuge außerhalb der Altera-Tools verwendet werden sollen ist das nächste Fenster einfach mit -> next zu bestätigen 4.e) im letzten Schritt erhalten wir einen Summary (siehe Abb. 12) -> finish Abbildung 12: Summary der Projekt-Spezifikation 5) Anmerkung: Durch Doppelklick auf das nun oben links angezeigte VHDL-File wird der VHDL-Code im Textfenster eingeblendet (siehe Abb. 1) ) Festlegung des Pin-Mappings: Assignments -> Import Assignments (siehe Abb. 14) 7) Unter Assignments->Assignment Editor können die eingelesenen Pin-Mappings angezeigt werden (siehe Abb. 15) FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 211-5-

17 Einführungsbeispiel Abbildung 1: QuartusII-Oberfläche nach der Generierung des neuen Projekts Abbildung 14: Auswahl des Pin-Mapping-Files V 1.1.1 / 211-5- FPGA-Einführung und Hardwareentwurf mit VHDL

.4 Implementierung der Schaltung auf das FPGA 18 Abbildung 15: Anzeige der Pin-Mappings FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 211-5-

19 Einführungsbeispiel 8) Synthese: Drücken Sie hierfür in der Symbolleiste den Pfeil nach rechts (start compilation) sollte alles korrekt durchlaufen, sollten Sie den in Abb.1 dargestellten Report erhalten Abbildung 1: QuartusII-Oberfläche nach erfolgreicher Kompilation 9) Syntax-Fehler im VHDL-Code werden vom Compiler erkannt. Um eine Fehlermeldung zu erhalten klicken Sie oben links auf das VHDL-File und fügen Sie einen Syntax-Fehler in den VHDL Code ein (z.b. is -> ist) und starten Sie die Kompilation erneut (bestätigen Sie, dass Sie die Modifikation speichern wollen) V 1.1.1 / 211-5- FPGA-Einführung und Hardwareentwurf mit VHDL

.4 Implementierung der Schaltung auf das FPGA 2 Der Fehler wird auf der QuartusII-Oberfläche angezeigt (siehe Abb. 17) Abbildung 17: Anzeige VHDL Syntax-Fehler -> Klicken Sie auf den ersten Fehler im Message-Fenster -> korregieren Sie den VHDL Syntax-Fehler -> kompilieren Sie das Design erneut 1) Unter Processing->Compilation Report erhält man Informationen über das Synthese- Ergebnis (z.b. timing - siehe Abb. 18) Abbildung 18: Timing Report der Synthese/Fitting 11) Im nächsten Schritt kann nun das Design auf das FPGA programmiert werden: auf dem DE2-Board soll der Prog-Schalter auf RUN stehen Tools->Programmer (siehe Abb. 19) FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 211-5-

21 Einführungsbeispiel Abbildung 19: Programmer-Oberfläche 12) Drücken Sie im Programmer-Fenster den Start-Button 1) Nun ist das Design auf dem FPGA programmiert und je nach Stellung des Schalters sw leuchten die LEDs LEDG bzw. LEDR -> schalten Sie den Schalter SW um! V 1.1.1 / 211-5- FPGA-Einführung und Hardwareentwurf mit VHDL

.4 Implementierung der Schaltung auf das FPGA 22 4 Aufgabenstellung Nachdem Sie das Beispiel in Abschnitt durchgearbeitet haben, sollen Sie nun eine eigene VHDL-Beschreibung entwickeln. Im ersten Schritt soll die Schalterstellung sw...sw hexadezimal auf der ersten 7-Segmentanzeige (ganz rechts - Signale hex( downto )) dargestellt werden. Jeder der 7 Segmente kann durch ein separates Signal leuchten (Signal=) oder nicht leuchten (Signal=1). Die Segmente sind wie in Abbildung 2 angesteuert (z.b.: oberstes Segment hex(), unterstes Segment hex()). In der VHDL-Implementierung soll zunächst ein Kodierer für die 7-Segment-Ansteuerung entwickelt werden (Eingangssignal: switch_i( downto ), Ausgangssignal segm_o( downto ). Abbildung 2: Signal-Mapping auf die Segmente 5 1 4 2 Die Entity-Signale sollen in einer weiteren Designhierarchie mit den entsprechenden FPGA- Pins verbunden werden (ähnlich Einleitungsbeispiel). Im nächsten Schritt werden dann 12 weitere Schalter auf die daneben liegenden 7-Segmentanzeigen geschaltet. FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 211-5-

2 4 Aufgabenstellung 4.1 Vorbereitung (vor dem Praktikumstermin) Dieser Teil ist vor dem Praktikumstermin handschriftlich vorzubereiten. Die Antworten zu den VHDL-Fragen finden Sie in den Erklärungen zum Beispiel-VHDL-Code (Wechselschalter). 1) Vervollständige Sie die folgende Tabelle (Kodierung 1 HEX-Zahlen auf das 7-bit breite Ausgangsignal segm_o (hier high-aktiv - also Segment=1 => Segment leuchtet)): switch_i HEX segm_o 111111 5 1 4 2 1 1 5 1 4 2 1 2 11 1 4 5 1 4 2 5 1 4 2 5 1 4 2 Tabelle 1: Kodierung von switch_i (4-Bit) auf segm_o (7-Bit) V 1.1.1 / 211-5- FPGA-Einführung und Hardwareentwurf mit VHDL

4.1 Vorbereitung (vor dem Praktikumstermin) 24 switch_i HEX segm_o 11 5 11 111 7 1 8 11 9 11 A 5 1 4 2 5 1 4 2 5 1 4 2 5 1 4 2 5 1 4 2 5 1 4 2 Tabelle 1: Kodierung von switch_i (4-Bit) auf segm_o (7-Bit) FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 211-5-

25 4 Aufgabenstellung switch_i HEX segm_o 111 b 11 c 111 d 111 E 1111 F 5 1 4 2 5 1 4 2 5 1 4 2 5 1 4 2 5 1 4 2 Tabelle 1: Kodierung von switch_i (4-Bit) auf segm_o (7-Bit) 2) Was versteht man in VHDL unter einer Architecture und einer Entity? ) Wo werden in einer Architecture Signale deklariert? 4) Wo ist der Datentyp std_ulogic und std_ulogic_vector definiert? a sei ein Signal vom Typ std_ulogic und v vom Typ std_ulogic_vector(1 downto ). Wie können Sie dem Signal a dem Wert 1 zuweisen und wie können Sie sämtlichen Bits des Signals v auf 1 setzen? V 1.1.1 / 211-5- FPGA-Einführung und Hardwareentwurf mit VHDL

4.2 VHDL-Kodierung, Synthese, FPGA-Programmierung und Erprobung 2 5) Auf Entity-Ports von welchem Mode darf nicht lesend in der Architecture zugegriffen werden? Wie müssen Sie Ihre VHDL-Beschreibung der Architecture gestalten, um das Signal dennoch lesen zu können? ) Wofür verwendet man in einer Architecture Prozesse und wie sind diese aufgebaut? 7) Spielt die Reihenfolge von nebenläufigen Signalzuweisungen in einer Architecture eine Rolle? 8) Spielt die Reihenfolge von Signalzuweisungen in einem Prozess eine Rolle? 9) Für ein Signal vom Typ std_ulogic darf es in VHDL nur einen Treiber geben. Jede nebenläufige Signalzuweisung stellt einen Treiber dar - z.b.: a <= b and c; -- a wird durch den Ausgang eines AND-Gatters getrieben werden Außerdem stellt jedes Signal, dem in einem Prozess ein Wert/Signal zugewiesen wird, einen Treiber dar. In wieviel Prozessen und in wieviel nebenläufigen Signalzuweisungen darf dem selben Signal ein Wert zugewiesen werden? 1) Was müssen Sie tun, um in einer Architecture VHDL-Komponenten zu instanziieren (2 Punkte müssen beachtet werden)? Anmerkung: Unter Instanziierung versteht man den Einbau einer VHDL-Komponente in die aktuelle Architektur. Dadurch erhält man ein hierarchisches Design (das Pendent in der Software-Programmierung ist der Aufruf eines Unterprogramms). 11) Wofür benötigt man in der Quartus-Software das PinPin-Mapping File? Was müssen Sie ändern wenn Sie den VHDL-Ports in der Top-Level-Entity andere Namen geben? 4.2 VHDL-Kodierung, Synthese, FPGA-Programmierung und Erprobung Gehen Sie im Praktikum wie folgt vor: 1) Erstellen Sie im Windows-Datei-Manager das neue Verzeichnis siebensegment. Achten Sie darauf, dass Sie keine deutschen Umlaute (ä, ö, ü,...) verwenden. 2) Legen Sie im Zielverzeichnis 2 Textdateien an: one_digit.vhd: Hier werden Sie die Dekodierung von 4 Schaltereingängen auf eine 7-Segment-Anzeige in VHDL beschreiben (entity + architecture) siebensegment.vhd: Hier werden Sie zunächst ein Mal die one_digit-komponente instanziieren und auf die entsprechenden Ausgänge verdrahten. ) Öffnen Sie die VHDL-Dateien mit dem EMACS -Editor. 4) Damit in beiden Dateien die für alle Signale zu verwendenden Datentypen std_ulogic und std_ulogic_vector bekannt sind ergänzen Sie die library- und use-statements wie in obigem Beispiel. eine Kurzanleitung zum EMACS-Editor finden Sie im Anhang A FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 211-5-

27 4 Aufgabenstellung 5) Erstellen Sie in der Datei one_digit.vhd eine Entity mit folgenden Ports: Signalname Richtung Signaltyp Bedeutung switch_i in std_ulogic_vector( downto ) 4-Bit Eingangswert, der für die 7-Segment-Darstellung dekodiert werden soll segm_o out std_ulogic_vector( downto ) 7-Bit Ausgangswert Tabelle 2: Interface-Signale von one_digit Wenn Sie im EMACS-Editior das Keywort entity eingeben, werden die notwendigen Informationen vom Editor abgefragt: - name: one_digit - generics: keine (einfach Zeilenumbruchstaste drücken) - ports: bei der names -Abfrage können durch Komma getrennt mehrere Signalnamen (oder auch nur einer) eingegeben werden, anschließend werden die Signalrichtung (in, out, inout) und der Datentyp abgefragt, ein Kommentar kann optional hinzugefügt werden. ) Nachdem Sie die entity vervollständigt haben, ergänzen Sie die architecture für one_digit. Geben Sie hier einfach das Keywort architecture ein (Tipp: die Eingabe lässt sich beschleunigen, indem Sie z.b. nur ar eingeben und dann die TAB-Taste drücken - bei Mehrdeutigkeiten kann die TAB-Taste auch mehrfach gedrückt werden). Als Name für die Architektur sollten Sie typischerweise den Design-Stil verwenden - also z.b. rtl für register transfer level. 7) Nun müssen Sie aus den 1 verschiedenen Eingangskombinationen von switch_i die jeweils korrekten Ausgangskombinationen generieren. Dies machen Sie innerhalb der architecture zwischen begin und end am einfachsten in einem process. Wie gewohnt hilft Ihnen auch hier der EMACS-Editor bei der Syntax. Geben Sie einfach das Key-Wort process und ein Leerzeichen ein. Es handelt sich hierbei um einen kombinatorischen process. Als Prozesslabel sollten Sie einen sinnvollen Namen verwenden, der die Hardware- Aufgabe beschreibt (z.b. decoder oder dec). 8) Innerhalb des process (zwischen begin und end) empfiehlt sich in diesem Fall eine case- Anweisung (also wieder case + Leerzeichen eingeben). Es wird hier ein expression abgefragt - dies ist unser Eingangssignal switch_i. Für jede der 1 Eingangskombinationen müssen Sie nun eine when -Zeile kodieren. Nach dem Key-Wort when geben Sie die Bit-Kombination ein (in Anführungszeichen... - z.b. ). Rechts vom => muss dann die Signalzuweisung auf segm_o erfolgen. Da jedes Bit - zumindest formal - neben den Werten und 1 noch 7 weitere Werte annehmen kann, haben wir mit den 1 Kombinationen nicht alle Möglichkeiten abgedeckt. Deshalb muss hier in der others-zeile beschrieben werden, was in den anderen Fällen geschehen soll. In der Synthese werden die anderen 7 Fälle jedoch ignoriert - deshalb müssen wir dort nur eine NULL-Zuweisung angeben (ist bereits eingetragen). Damit haben wir den process und die architecture bereits fertig gestellt. V 1.1.1 / 211-5- FPGA-Einführung und Hardwareentwurf mit VHDL

4.2 VHDL-Kodierung, Synthese, FPGA-Programmierung und Erprobung 28 9) In der Datei siebensegment.vhd ergänzen wir nun zunächst die entity: Signalname Richtung Signaltyp Bedeutung sw in std_ulogic_vector(15 downto ) 4 Mal 4-Bit Eingangswerte für insgesamt 4 Sieben-Segment-Anzeigen. Es werden 1 Schalter auf dem Experimentierboard verwendet. hex out std_ulogic_vector( downto ) 7-Bit Ausgangswert für die Darstellung von sw( downto ) ledg out std_ulogic_vector( downto ) 7-Bit Ausgangswert für die Darstellung von sw( downto ) auf 7 Leuchtdioden zu Debugging-Zwecken hex1 out std_ulogic_vector( downto ) 7-Bit Ausgangswert (lowaktiv) für die Darstellung von sw(7 downto 4) hex2 out std_ulogic_vector( downto ) 7-Bit Ausgangswert (lowaktiv) für die Darstellung von sw(11 downto 8) hex out std_ulogic_vector( downto ) 7-Bit Ausgangswert (lowaktiv) für die Darstellung von sw(15 downto 12) hex4 out std_ulogic_vector( downto ) Auf dem Board sind insgesamt hex5 out std_ulogic_vector( downto ) 8 7-Segmentanzeigen. Standardmäßig würden hex out std_ulogic_vector( downto ) sämtliche Segmente leuchten. hex7 out std_ulogic_vector( downto ) Deshalb schalten wir diese in der architecture einfach komplett aus. Tabelle : Interface-Signale von one_digit 1) Ergänzen Sie nun für die entity siebensegment die architecture. Da Sie hier primär one_digit-komponenten instanziieren werden - also ein hierarchisches Design aufbauen werden, handelt es sich hierbei um eine strukturelle Beschreibung. Deshalb empfiehlt sich als Architecture-Name struc zu verwenden. 11) In der architecture soll die Komponente one_digit zunächst instanziiert werden. Die notwendigen Schritte sind analog zum Beispiel-Design (Wechselschalter) vorzunehmen. Tipp: Öffnen Sie im selben EMACS-Editor die Datei one_digit.vhd. Gehen Sie mit dem Cursor in die Entity und wählen dann über das EMACS-Menü VHDL->Port->Copy. Über das Buffer-Menü können Sie zur siebensegment.vhd-datei zurück kehren. Hier können FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 211-5-

29 4 Aufgabenstellung Sie nun über das Menü VHDL->Port->... die notwendigen Ergänzungen vornehmen. Das Eingangssignal switch_i ist manuell mit den untersten 4 Bits von sw zu verbinden (sw( downto )). 12) Legen Sie sämtliche Bits der Signale hex1 bis hex7 komplett auf 1. Sie können hierfür sämtliche Bits einzeln zuweisen (z.b. hex1 <= 1111111 ;) oder mit der others-zuweisung sämtlichen Bits den gleichen Bit-Wert zuweisen (z.b. hex1 <= (others => 1 );) - bei der syntaktisch korrekten Eingabe wird Sie wieder der EMACS unterstützen. 1) Das Ausgangssignal des 7-Segment-Dekoders muss noch negiert werden, weil hex lowaktiv ist. Hierfür benötigen Sie ein Signal in der architecture. Dieses 7-Bit-Signal vom Typ std_ulogic_vector( downto ) deklarieren Sie noch vor dem begin der architecture. Hierfür müssen Sie nur das Key-Wort signal eingeben. Verwenden Sie grundsätzlich keine Signal-Initialisierungen bei der Deklaration, weil dies in der Synthese ignoriert wird. Die korrekte Funktion ergibt sich aus der Hardware-Beschreibung. Dem Ausgangssignal segm_o der Komponente one_digit weisen Sie zunächst auf dieses Signal zu. Anschließend können Sie in einer nebenläufigen Signalzuweisung den negierten Wert dieses Signals auf hex zuweisen (hex <= not(ihrsignal);). 14) Kopieren Sie das Pin-Mapping-File aus dem Beispiel-Verzeichnis (Wechselschalter) und öffnen Sie diese Datei am besten mit dem EMACS-Editor. Stellen Sie sicher, dass die richtigen Signal einkommentiert sind. Denken Sie auch daran, diese Datei zu importieren. 15) Legen Sie in Quartus II ein neues Projekt für die Siebensegmentanzeige an 1) Compilieren/Synthetisieren Sie das VHDL-Design 17) Programmieren Sie das Design auf das DE2-Board 18) Überprüfen Sie die Funktionalität 19) Ergänzen Sie die 7-Segmentanzeigen für die Schalter sw15...sw4 (also zusätzliche 7- Segment-Anzeigen) 2) Compilieren + Programmieren + Überprüfen... 4. Hinweise zum Praktikums-Protokoll Das wesentliche Ergebnis ist Ihr erstellter VHDL-Code. Der Aufbau des VHDL-Codes soll hier durch VHDL-Kommentare erklärt werden. V 1.1.1 / 211-5- FPGA-Einführung und Hardwareentwurf mit VHDL

4. Hinweise zum Praktikums-Protokoll Anhang A: Der Texteditor EMACS Der EMACS-Editor ist ein gnu-editor (Public-Domain). Er kann unter http://ftp.gnu.org/gnu/emacs/windows/ herunter geladen werden: z.b. für Windows: http://ftp.gnu.org/gnu/emacs/windows/emacs-22.2-bin-i8.zip Nach dem Download muss lediglich das ZIP-File ausgepackt werden. Im Bin-Directory findet man das Executable runemacs.exe. Hierdrauf legt man am besten auf dem Desktop einen Link an. Die Eigenschaften des Links können editiert werden und über das Verzeichnis ausführen in kann das Initialverzeichnis zum Öffnen/Speichern von Dateien festgelegt werden. Neben den normalen Texteditor-Features verfügt der Editor hervoragende Unterstützungen bei der VHDL-Kodierung. Im folgenden sollen die wesentlichen Short-Cuts und VHDL-Features zusammengestellt werden. Einige Funktionalitäten sind auch über die Menüs erreichbar. Folgende Short-Cuts beschleunigen jedoch die Bearbeitung von Dateien erheblich: Short-Cut CTRL-k CTRL-y CTRL-x, r, k CTRL-x, r, y CTRL-x,2 CTRL-x, CTRL-x,1 Alt-x vhdl-mode Bedeutung Rest der Zeile wird gelöscht und in Paste-Buffer gespeichert Paste-Buffer einfügen rechteckiger markierter Bereich wird gelöscht und in Paste- Buffer gespeichert rechteckiger Bereich wird eingefügt waagerechtes Teilen des Fensters vertikales Teilen des Fensters nur noch 1 Fenster sichtbar Tabelle 4: Wichtige Shortcuts des EMACS-Editors Short-Cut CTRL-x, CTRL-f CTRL-x, CTRL-s CTRL-_ CTRL-s ALT-% Umschalten des Editors auf VHDL-Mode (wenn Files mit Endung.vhd geöffnet werden ist dieser Mode automatisch aktiv) Bedeutung File öffnen File speichern UNDO, auch mehrfach möglich - Umschalten zwischen UNDO und REDO durch Betätigung der Pfeiltaste Such-Funktion Ersetz-Funktion Tabelle 5: Wichtige Shortcuts des EMACS-Editors, die auch über das Menü erreichbar sind FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 211-5-

1 4 Aufgabenstellung Wenn im VHDL-Mode VHDL-Keywörter wie z.b. entity oder architecture eingegeben werden, werden automatisch die notwendigen Informationen erfragt und syntaktisch korrekt im VHDL-Code eingefügt. Als weitere Erleichterung können Keywörter, Signalnamen und sonstige Identifier automatisch durch die TAB-Taste erweitert werden - durch mehrfaches Betätigen der TAB-Taste werden auch mehrere mögliche Erweiterungen angezeigt. Im VHDL-Menü sind besonders folgende Features zu erwähnen: Comment->(Un)Comment Out Region: Auskommentieren bzw. Kommentieren der aktuellen Markierung Update->Sensitivity List (Buffer): In Prozessen werden automatisch die Sensitivitätslisten angepaßt Beautify->...: Die Einrückungen usw. der spezifizierten Bereiche werden automatisch angepaßt (funktioniert recht gut) Port->Copy: Befindet man sich mit einem Cursor innerhalb einer Entity so wird die Entity- Definition gespeichert (vergl. folgende Befehle) Port->Paste as Component: Es wird eine Component-Deklaration der vorher kopierten Entity eingefügt (wird im Deklarationsteil von architectures benötigt) Port->Paste as Instance: Es wird eine Instanz der vorher kopierten Entity eingefügt. Die Signalzuweisungen müssen noch editiert werden (ggf. auch der Instanzname). V 1.1.1 / 211-5- FPGA-Einführung und Hardwareentwurf mit VHDL