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

FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Embed Size (px)

Citation preview

Page 1: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Praktikum Digitaltechnik

FPGA-Einführung undHardwareentwurf mit VHDL

von Prof. Dr.-Ing. Dirk RabeGruppe: Teilnehmer: Vortestat: Testat:

Benutzte Geräte:

Page 2: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe1 1 Einleitung und Überblick

V 1.1.1 / 2011-05-03 FPGA-Einführung und Hardwareentwurf mit VHDL

1 Einleitung und ÜberblickIm Rahmen dieses Versuchs sollen Sie

• das ALTERA-Experimentierboard DE-2 mit dem darauf befindlichen FPGA† der FamilieCyclone II kennenlernen,

• die Ansteuerung einer 7-Segment-Anzeige in VHDL entwickeln, auf das FPGA synthetisie-ren/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 verwen-dete Versuchshardware

• 3 Einführungsbeispiel: In diesem Abschnitt wird ein kurzes VHDL-Beispiel (Wechselschal-tung) vorgestellt.

- 3.1 Verzeichnisstruktur auf den Praktikumsrechnern

- 3.2 Pin-Mapping File: Anschluss der VHDL-Ports mit den physikalischen FPGA-Pins

- 3.3 VHDL-Kodierung des Beispiels: Anhand des Beispiels werden wesentliche VHDL-Aspekte erklärt.

- 3.4 Implementierung der Schaltung auf das FPGA: Hier werden die Tool-spezifischenSchritte zur Schaltungssynthese dargestellt. Diese Schritte werden Sie im Praktikumschrittweise nachvollziehen.

• 4 Aufgabenstellung: In diesem Abschnitt finden Sie die eigentliche Aufgabe für diesen Prak-tikumsversuch

- 4.1 Vorbereitung (vor dem Praktikumstermin): In diesem Abschnitt finden Sie die Aufga-ben zur Versuchsvorbereitung (handschriftliche Bearbeitung; zu Beginn des Praktikums-versuchs abzugeben).

- 4.2 VHDL-Kodierung, Synthese, FPGA-Programmierung und Erprobung: Anleitung zurUmsetzung der VHDL-Beschreibung in das Ziel-Design

- 4.3 Hinweise zum Praktikums-Protokoll: Einige Hinweise zum Protokoll

• Anhang A: Der Texteditor EMACS: Zur VHDL-Kodierung sollen Sie den GNU-EditorEMACS verwenden, der die Eingabe von VHDL-Konstrukten sehr gut unterstützt. Diewesentlichen Features und Tastatur-Kombinationen sind in diesem Anhang dargestellt. Eswird empfohlen die Features in der Versuchsvorbereitung kurz durchzulesen und in derDurchfü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 Vorle-sung erwähnt. Weitere Informationen könne Sie auf folgender WEB-Page finden: http://www.altera.com/literature/hb/cyc2/cyc2_cii5v1.pdf

Page 3: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 2011-05-03

Auf den Praktikumsrechnern finden Sie neben Versuchsvorgaben einen Link auf weiterefüh-rende 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 istnicht vollständig und an einigen Stellen vereinfacht. Es wird nur soviel an VHDL erklärt wieSie für die Hardwarebeschreibung der Praktikumsinhalte benötigen. Die hier vermitteltenKenntnisse sind eine sehr gute Basis für eine weitere Vertiefung in die Hardwarebeschrei-bungssprache VHDL.

Anmerkung 2: Die im Praktikum verwendete Software ist frei verfügbar und kann unter fol-genden 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.

Page 4: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe3 2 Das DE-2 Board

V 1.1.1 / 2011-05-03 FPGA-Einführung und Hardwareentwurf mit VHDL

2 Das DE-2 BoardDas Eperimentierboard ist in Abbildung 1 dargestellt. Die im folgenden relevanten Teile sindhervorgehoben.

Zur Inbetriebnahme des Boards sind die grün (gepunktet) umrandeten Teile entsprechendanzuschließ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 anden 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 Schalternwird die eigene Hardware stimuliert

Abbildung 1: Aufbau des DE2-Boards

† für die erste Inbetriebnahme: der Treiber für diesen Port findet man im Quartus-Installations-Verzeichnis: z.B.: quartusII\80sp1\quartus\drivers

Expansion Header 1 (JP1)

Expansion Header 2 (JP2)

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

Page 5: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 4

FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 2011-05-03

• grüne und rote LEDs: Wenn man die Ausgänge des FPGAs auf die LEDs schaltet kann mandas Verhalten der Schaltung hier beobachten

Weitere für die folgenden Versuche/Aufgaben notwendige Hardware ist in magenta (gepunk-tet) umrandet dargestellt:

• 8 Zeichen umfassende 7-Segment-Anzeige (Aufgabe im Anschluss an das Einführungsbei-spiel)

• 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 36 Pins, die direkt mit dem FPGA verbunden sind - wird ver-wendet, um den Zustand des PRNGs am Oszilloskop sichtbar zu machen

Page 6: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe5 3 Einführungsbeispiel

V 1.1.1 / 2011-05-03 FPGA-Einführung und Hardwareentwurf mit VHDL

3 EinführungsbeispielAls Einführungsbeispiel soll eine 2-fach Wechselschaltung betrachtet werden. Die Schaltungbesteht aus 2 Schaltern und einem Ausgang, der an eine LED angeschlossen wird. Wenn eineinzelner Schalter geschaltet wird, dann soll die LED ihren „Zustand“ ändern (also: an->ausoder aus->an). In der Realität müssen die beiden Eingänge einfach nur über ein EXOR-Gattermit dem Ausgang verbunden werden:

3.1 Verzeichnisstruktur auf den Praktikumsrechnern

Auf dem Desktop der Rechner finden Sie einen Ordner mit dem Namen student:

In diesem Verzeichnis gibt es einen Unterordner altera\Projects\introtutorial. In diesem Ver-zeichnis finden Sie folgende Dateien vor:

• light.vhd: VHDL Code für das Beispiel-Design

• DE2_pin_assignments.csv: Zuordnung (Mapping) von Toplevel-Interface-Signalen zuFPGA-Pins

3.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.

Abbildung 2: Beispiel-Design

Abbildung 3: Inhalt des Ordners introtutorial

Page 7: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe3.3 VHDL-Kodierung des Beispiels 6

FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 2011-05-03

Die Interface-Signalnamen auf dem VHDL Toplevel sind prinzipiell beliebig. Es sollen jedochdie Bezeichner auf dem DE2-Board verwendet werden. Für diese Bezeichner gibt es bereitsein vorgefertigtes Pin-Mapping File DE2_pin_assignments.csv. Um unnötige Warnings imspäteren Compile-Vorgang zu vermeiden, sind die nicht benötigten Pins auskommentiert wor-den („#“ am Zeilenanfang).

3.3 VHDL-Kodierung des Beispiels

Anhand des Beispiels soll die Hardware-Beschreibungssprache VHDL kurz vorgestellt wer-den. Wir beschränken uns hier auf die wesentlichen Punkte, die wir benötigen um einfacheHardwarekomponenten zu beschreiben.

Ein wesentlicher Unterschied zwischen normalen Programmiersprachen wie C und Hardware-beschreibungssprachen ist, dass in Hardwarebeschreibungssprachen das Verhalten von Hard-warekomponenten nebenläufig beschrieben wird - also sämtlich dort beschriebenenHardwarekomponenten sind ständig aktiv und Signale können sich „gleichzeitig“ ändern, sowie wir das Verhalten von Hardware eben erwarten. Im Gegensatz dazu werden in normalenProgrammiersprachen die dortigen Kommandos schrittweise abgearbeitet (also Kommando fürKommando). Bei der Beschreibung einer Hardwareschaltung in VHDL sollte man grundsätz-lich die beschriebene Hardwarestruktur grob im Kopf haben.

Folgende Zuweisungen aus einer VHDL-Architektur führt beispielsweise dazu, dass in einerSimulation zum selben physikalischen Zeitpunkt die Signale endlos einander zugewiesen wer-den - 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 2Sichtweisen:

• die Blackbox-Sichtweise (entity): Hier werden im Wesentlichen die Interface-Signalebeschrieben - also die Port-Signale, die nach außen sichtbar sind und zum Anschließen derHardware 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. Hardwarerea-lisierungen (architectures) verwaltet werden. Diese müssen bei einer Instanziierung eindeutigzugewiesen werden. Diese Zuweisung erfolgt in VHDL über configuration-declarations. Gibtes für jede entity nur eine architecture, so benötigt man für die meisten CAD-Werkzeuge keineconfiguration-declarations - für unsere einfachen Aufgaben auch nicht.

Zusammenfassend unterscheidet man in VHDL also folgende 3 Beschreibungen:

• Entity: Interfacebeschreibung

• Architecture: Hardwarerealisierung

Page 8: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe7 3 Einführungsbeispiel

V 1.1.1 / 2011-05-03 FPGA-Einführung und Hardwareentwurf mit VHDL

• Configuration: welche architectures für ein Design verwendet werden sollen (meistens nurbei Mehrdeutigkeiten notwendig)

Für unser Beispiel soll nun der VHDL-Code erklärt werden (siehe Abb. 4).

Abbildung 4: Teil 1 der VHDL-Codierung für das Beispiel

Nummer Erklärung

0 Library-Deklarationen: im Package std_logic_1164 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).

1

2

3

4

0

Page 9: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe3.3 VHDL-Kodierung des Beispiels 8

FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 2011-05-03

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.

Nummer Erklärung

Page 10: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe9 3 Einführungsbeispiel

V 1.1.1 / 2011-05-03 FPGA-Einführung und Hardwareentwurf mit VHDL

3 In der Architecture kann das Verhalten durch nebenläufige Statements oder Pro-zesse beschrieben werden.Nebenläufiges Statement: Das hier durch zwei Minuszeichen (‚--‘) auskom-mentierte 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-Kombi-nationen von Mehr-Bit-Werten werden in VHDL in Anführungszeichen ange-geben. In dem Beispiel (unter Punkt 4) wird folgende • Ein-Bit-Signalzuweisung verwendet: f <= ‘0‘;Für Mehr-Bit-Signalzuweisungen gibt es folgende Möglichkeiten (Annahme expl sei vom Typ std_ulogic_vector(6 downto 0):• Möglichkeit 1: f<= “1111000“; -- 78• Möglichkeit 2: f<=X“F“ & O“0“; -- 78

X: Steht für Hexadezimal-WerteO: Steht für Oktal-Werte (3-Bit)B: Steht für Binär-Werte (optional)Der Verkettungsoperator & muss verwendet werden, weil X“70“ 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 irrele-vant. 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 Signalzu-weisungen 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) gleichbedeu-tend:• 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 vor-gemerkt - und dies geschieht identisch in beiden Varianten. Wenn sich gleich-zeitig 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 ver-wendet. 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 Signalzuwei-sung...). Dies ist also die Begründung dafür, dass die Reihenfolge von nebenläu-figen Signalzuweisungen irrelevant ist.

Nummer Erklärung

Page 11: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe3.3 VHDL-Kodierung des Beispiels 10

FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 2011-05-03

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 wei-teren Hierarchieebene realisiert (siehe Abb. 5):

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 erfor-derlich 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 3). 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 zugewiesenend 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

Abbildung 5: Darstellung der Design-Hierarchieebenen

Nummer Erklärung

light_core(vhdl)

x1

x2

f

sw(0)

sw(1)

ledg0

pin_n25

pin_n26light (vhdl)

PIN_AE22

fpga (Pin-Mapping File)

VDD

VSS

VDD

VSS

VSS

sw0

sw1

ledg0

PIN_AE23

ledr0

VSSledr0

magenta: RTL-Beschreibung (d.h. Register- und Datenflußbescheibung) - hier ist daseigentliche Verhalten der Schaltung beschriebengelb: primär strukturelle Beschreibung (mit Ausnahme des Inverters vor dem Ausgangledr0) - hier werden also andere Componenten instanziiertmalve: 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-Experimentier-boards darstellen

Page 12: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe11 3 Einführungsbeispiel

V 1.1.1 / 2011-05-03 FPGA-Einführung und Hardwareentwurf mit VHDL

In der Hierarchieebene light werden die Eingänge und Ausgänge von light_core nur an Pinsmit den selben Namen wie auf unserem DE2-Board zugewiesen. Hierdurch ist das Designlight_core unabhängig von den Namen des Experimentierboards.

Der VHDL-Code hierzu ist in Abb. 6 dargestellt.

Abbildung 6: VHDL-Code für die strukturell Toplevel-Beschreibung

Nummer Erklärung

5 Library-Deklarationen: die obige Library- und Package-Deklaration (Nr. 0) bezieht sich nur auf eine entity und eine architecture - deshalb muss sie hier erneut deklariert werden.

5

6

7

Page 13: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe3.4 Implementierung der Schaltung auf das FPGA 12

FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 2011-05-03

3.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 Abbil-dung 3 dargestellten Files im Ordner Desktop\student\altera\Projects\introtutorial.

Der komplette Flow ist in Abbildung 7 dargestellt. Hier sollen jedoch nur die Schritte „Synthe-sis“ und „Programming and Configuration“ durchgeführt werden. Die weiteren Simulationsund 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:

6 Entity lightDie 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(0).

7 architecture struc of light is-- declarationsbegin...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 Lesbar-keitsthema).Sämtliche instanziierte Komponenten müssen im Deklarationsteil der architec-ture (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 ledg0 ist nicht möglich, weil das Signal intern noch weiter verwendet werden soll (Besonder-heit 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 ledg0 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 vermei-den (emacs-Editor - siehe weiter unten).

Nummer Erklärung

Page 14: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe13 3 Einführungsbeispiel

V 1.1.1 / 2011-05-03 FPGA-Einführung und Hardwareentwurf mit VHDL

1) ggf. Adaptieren des Pin-Mapping Files DE2_pin_assignments.csv - wenn Sie mit einemneuen Design beginnen sollten sich diese Datei ggf. von einem anderen Design kopieren

2) ggf. Erstellen der VHDL Beschreibung

3) 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. 10)-> next

Abbildung 7: Design-Flow

† 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.

Page 15: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe3.4 Implementierung der Schaltung auf das FPGA 14

FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 2011-05-03

Abbildung 8: QuartusII-Oberfläche nach dem Öffnen

Abbildung 9: Projekt anlegen

Page 16: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe15 3 Einführungsbeispiel

V 1.1.1 / 2011-05-03 FPGA-Einführung und Hardwareentwurf mit VHDL

4.c) Auswahl des Ziel-FPGAs (siehe Abb. 11)

-> next

Abbildung 10: Auswahl Design Files

Abbildung 11: Auswahl des Ziel-FPGAs

Page 17: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe3.4 Implementierung der Schaltung auf das FPGA 16

FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 2011-05-03

4.d) Da keine sonstigen EDA-Werkzeuge außerhalb der Altera-Tools verwendet werdensollen ist das nächste Fenster einfach mit -> next zu bestätigen

4.e) im letzten Schritt erhalten wir einen Summary (siehe Abb. 12)-> finish

5) Anmerkung: Durch Doppelklick auf das nun oben links angezeigte VHDL-File wird derVHDL-Code im Textfenster eingeblendet (siehe Abb. 13)

6) Festlegung des Pin-Mappings:Assignments -> Import Assignments (siehe Abb. 14)

7) Unter Assignments->Assignment Editor können die eingelesenen Pin-Mappings ange-zeigt werden (siehe Abb. 15)

Abbildung 12: Summary der Projekt-Spezifikation

Page 18: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe17 3 Einführungsbeispiel

V 1.1.1 / 2011-05-03 FPGA-Einführung und Hardwareentwurf mit VHDL

Abbildung 13: QuartusII-Oberfläche nach der Generierung des neuen Projekts

Abbildung 14: Auswahl des Pin-Mapping-Files

Page 19: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe3.4 Implementierung der Schaltung auf das FPGA 18

FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 2011-05-03

Abbildung 15: Anzeige der Pin-Mappings

Page 20: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe19 3 Einführungsbeispiel

V 1.1.1 / 2011-05-03 FPGA-Einführung und Hardwareentwurf mit VHDL

8) Synthese: Drücken Sie hierfür in der Symbolleiste den Pfeil nach rechts (start compila-tion)sollte alles korrekt durchlaufen, sollten Sie den in Abb.16 dargestellten Report erhalten

9) Syntax-Fehler im VHDL-Code werden vom Compiler erkannt. Um eine Fehlermeldungzu erhalten klicken Sie oben links auf das VHDL-File und fügen Sie einen Syntax-Fehlerin den VHDL Code ein (z.B. is -> ist) und starten Sie die Kompilation erneut (bestätigenSie, dass Sie die Modifikation speichern wollen)

Abbildung 16: QuartusII-Oberfläche nach erfolgreicher Kompilation

Page 21: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe3.4 Implementierung der Schaltung auf das FPGA 20

FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 2011-05-03

Der Fehler wird auf der QuartusII-Oberfläche angezeigt (siehe Abb. 17)

-> Klicken Sie auf den ersten Fehler im Message-Fenster-> korregieren Sie den VHDL Syntax-Fehler -> kompilieren Sie das Design erneut

10) Unter Processing->Compilation Report erhält man Informationen über das Synthese-Ergebnis (z.B. timing - siehe Abb. 18)

11) Im nächsten Schritt kann nun das Design auf das FPGA programmiert werden:auf dem DE2-Board soll der Prog-Schalter auf RUN stehenTools->Programmer (siehe Abb. 19)

Abbildung 17: Anzeige VHDL Syntax-Fehler

Abbildung 18: Timing Report der Synthese/Fitting

Page 22: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe21 3 Einführungsbeispiel

V 1.1.1 / 2011-05-03 FPGA-Einführung und Hardwareentwurf mit VHDL

12) Drücken Sie im Programmer-Fenster den Start-Button

13) Nun ist das Design auf dem FPGA programmiert und je nach Stellung des Schalters sw0leuchten die LEDs LEDG0 bzw. LEDR0-> schalten Sie den Schalter SW0 um!

Abbildung 19: Programmer-Oberfläche

Page 23: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe3.4 Implementierung der Schaltung auf das FPGA 22

FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 2011-05-03

4 AufgabenstellungNachdem Sie das Beispiel in Abschnitt 3 durchgearbeitet haben, sollen Sie nun eine eigeneVHDL-Beschreibung entwickeln.

Im ersten Schritt soll die Schalterstellung sw3...sw0 hexadezimal auf der ersten 7-Segmentan-zeige (ganz rechts - Signale hex0(6 downto 0)) dargestellt werden. Jeder der 7 Segmente kanndurch ein separates Signal leuchten (Signal=0) oder nicht leuchten (Signal=1). Die Segmentesind wie in Abbildung 20 angesteuert (z.B.: oberstes Segment hex0(0), unterstes Segmenthex0(3)).

In der VHDL-Implementierung soll zunächst ein Kodierer für die 7-Segment-Ansteuerung ent-wickelt werden (Eingangssignal: switch_i(3 downto 0), Ausgangssignal segm_o(6 downto 0).

Die Entity-Signale sollen in einer weiteren Designhierarchie mit den entsprechenden FPGA-Pins verbunden werden (ähnlich Einleitungsbeispiel). Im nächsten Schritt werden dann 12weitere Schalter auf die daneben liegenden 7-Segmentanzeigen geschaltet.

Abbildung 20: Signal-Mapping auf die Segmente

0

5 16

4 23

Page 24: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe23 4 Aufgabenstellung

V 1.1.1 / 2011-05-03 FPGA-Einführung und Hardwareentwurf mit VHDL

4.1 Vorbereitung (vor dem Praktikumstermin)

Dieser Teil ist vor dem Praktikumstermin handschriftlich vorzubereiten. Die Antworten zu denVHDL-Fragen finden Sie in den Erklärungen zum Beispiel-VHDL-Code (Wechselschalter).

1) Vervollständige Sie die folgende Tabelle (Kodierung 16 HEX-Zahlen auf das 7-bit breiteAusgangsignal segm_o (hier high-aktiv - also Segment=1 => Segment leuchtet)):

switch_i HEX segm_o

0000 0 0111111

0001 1

0010 2

0011 3

0100 4

Tabelle 1: Kodierung von switch_i (4-Bit) auf segm_o (7-Bit)

0

5 16

4 23

0

5 16

4 23

0

5 16

4 23

0

5 16

4 23

0

5 16

4 23

Page 25: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe4.1 Vorbereitung (vor dem Praktikumstermin) 24

FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 2011-05-03

0101 5

0110 6

0111 7

1000 8

1001 9

1010 A

switch_i HEX segm_o

Tabelle 1: Kodierung von switch_i (4-Bit) auf segm_o (7-Bit)

0

5 16

4 23

0

5 16

4 23

0

5 16

4 23

0

5 16

4 23

0

5 16

4 23

0

5 16

4 23

Page 26: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe25 4 Aufgabenstellung

V 1.1.1 / 2011-05-03 FPGA-Einführung und Hardwareentwurf mit VHDL

2) Was versteht man in VHDL unter einer Architecture und einer Entity?

3) 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 0). Wiekönnen Sie dem Signal a dem Wert 1 zuweisen und wie können Sie sämtlichen Bits desSignals v auf 1 setzen?

1011 b

1100 c

1101 d

1110 E

1111 F

switch_i HEX segm_o

Tabelle 1: Kodierung von switch_i (4-Bit) auf segm_o (7-Bit)

0

5 16

4 23

0

5 16

4 23

0

5 16

4 23

0

5 16

4 23

0

5 16

4 23

Page 27: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe4.2 VHDL-Kodierung, Synthese, FPGA-Programmierung und Erprobung 26

FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 2011-05-03

5) Auf Entity-Ports von welchem Mode darf nicht lesend in der Architecture zugegriffenwerden? Wie müssen Sie Ihre VHDL-Beschreibung der Architecture gestalten, um dasSignal dennoch lesen zu können?

6) Wofür verwendet man in einer Architecture Prozesse und wie sind diese aufgebaut?

7) Spielt die Reihenfolge von nebenläufigen Signalzuweisungen in einer Architecture eineRolle?

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 werdenAuß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 selbenSignal ein Wert zugewiesen werden?

10) Was müssen Sie tun, um in einer Architecture VHDL-Komponenten zu instanziieren (2Punkte müssen beachtet werden)?Anmerkung: Unter Instanziierung versteht man den Einbau einer VHDL-Komponente indie aktuelle Architektur. Dadurch erhält man ein hierarchisches Design (das Pendent inder 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 andereNamen 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“. AchtenSie 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-Seg-ment-Anzeige in VHDL beschreiben (entity + architecture)siebensegment.vhd: Hier werden Sie zunächst ein Mal die one_digit-Komponente instan-ziieren und auf die entsprechenden Ausgänge „verdrahten“.

3) Öffnen Sie die VHDL-Dateien mit dem EMACS†-Editor.

4) Damit in beiden Dateien die für alle Signale zu verwendenden Datentypen std_ulogic undstd_ulogic_vector bekannt sind ergänzen Sie die library- und use-Statements wie inobigem Beispiel.

† eine Kurzanleitung zum EMACS-Editor finden Sie im Anhang A

Page 28: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe27 4 Aufgabenstellung

V 1.1.1 / 2011-05-03 FPGA-Einführung und Hardwareentwurf mit VHDL

5) Erstellen Sie in der Datei one_digit.vhd eine Entity mit folgenden Ports:

Wenn Sie im EMACS-Editior das Keywort entity eingeben, werden die notwendigen Infor-mationen 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.

6) 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 sichbeschleunigen, indem Sie z.B. nur „ar“ eingeben und dann die TAB-Taste drücken - beiMehrdeutigkeiten kann die TAB-Taste auch mehrfach gedrückt werden).Als Name für die Architektur sollten Sie typischerweise den Design-Stil verwenden - alsoz.B. rtl für register transfer level.

7) Nun müssen Sie aus den 16 verschiedenen Eingangskombinationen von switch_i diejeweils korrekten Ausgangskombinationen generieren. Dies machen Sie innerhalb derarchitecture zwischen „begin“ und „end“ am einfachsten in einem process. Wie gewohnthilft Ihnen auch hier der EMACS-Editor bei der Syntax. Geben Sie einfach das Key-Wortprocess und ein Leerzeichen ein. Es handelt sich hierbei um einen kombinatorischen pro-cess. 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 16 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. “0000“). Rechts vom „=>“ muss dann die Signalzuweisung auf segm_o erfolgen.Da jedes Bit - zumindest formal - neben den Werten 0 und 1 noch 7 weitere Werte anneh-men kann, haben wir mit den 16 Kombinationen nicht alle Möglichkeiten abgedeckt. Des-halb muss hier in der others-Zeile beschrieben werden, was in den anderen Fällengeschehen soll. In der Synthese werden die anderen 7 Fälle jedoch ignoriert - deshalbmüssen wir dort nur eine NULL-Zuweisung angeben (ist bereits eingetragen).Damit haben wir den process und die architecture bereits fertig gestellt.

Signalname Richtung Signaltyp Bedeutung

switch_i in std_ulogic_vector(3 downto 0) 4-Bit Eingangswert, der für die 7-Segment-Darstellung dekodiert werden soll

segm_o out std_ulogic_vector(6 downto 0) 7-Bit Ausgangswert

Tabelle 2: Interface-Signale von one_digit

Page 29: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe4.2 VHDL-Kodierung, Synthese, FPGA-Programmierung und Erprobung 28

FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 2011-05-03

9) In der Datei siebensegment.vhd ergänzen wir nun zunächst die entity:

10) Ergänzen Sie nun für die entity siebensegment die architecture. Da Sie hier primärone_digit-Komponenten instanziieren werden - also ein hierarchisches Design aufbauenwerden, handelt es sich hierbei um eine strukturelle Beschreibung. Deshalb empfiehlt sichals Architecture-Name struc zu verwenden.

11) In der architecture soll die Komponente one_digit zunächst instanziiert werden. Die not-wendigen Schritte sind analog zum Beispiel-Design (Wechselschalter) vorzunehmen.Tipp: Öffnen Sie im selben EMACS-Editor die Datei one_digit.vhd. Gehen Sie mit demCursor in die Entity und wählen dann über das EMACS-Menü VHDL->Port->Copy. Überdas Buffer-Menü können Sie zur siebensegment.vhd-Datei zurück kehren. Hier können

Signalname Richtung Signaltyp Bedeutung

sw in std_ulogic_vector(15 downto 0) 4 Mal 4-Bit Eingangswerte für insgesamt 4 Sieben-Seg-ment-Anzeigen.Es werden 16 Schalter auf dem Experimentierboard verwendet.

hex0 out std_ulogic_vector(6 downto 0) 7-Bit Ausgangswert für die Darstellung von sw(3 downto 0)

ledg out std_ulogic_vector(6 downto 0) 7-Bit Ausgangswert für die Darstellung von sw(3 downto 0) auf 7 Leuchtdio-den zu Debugging-Zwecken

hex1 out std_ulogic_vector(6 downto 0) 7-Bit Ausgangswert (low-aktiv) für die Darstellung von sw(7 downto 4)

hex2 out std_ulogic_vector(6 downto 0) 7-Bit Ausgangswert (low-aktiv) für die Darstellung von sw(11 downto 8)

hex3 out std_ulogic_vector(6 downto 0) 7-Bit Ausgangswert (low-aktiv) für die Darstellung von sw(15 downto 12)

hex4 out std_ulogic_vector(6 downto 0) Auf dem Board sind insge-samt 8 7-Segmentanzeigen. Standardmäßig würden sämtliche Segmente leuch-ten. Deshalb schalten wir diese in der architecture ein-fach komplett aus.

hex5 out std_ulogic_vector(6 downto 0)

hex6 out std_ulogic_vector(6 downto 0)

hex7 out std_ulogic_vector(6 downto 0)

Tabelle 3: Interface-Signale von one_digit

Page 30: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe29 4 Aufgabenstellung

V 1.1.1 / 2011-05-03 FPGA-Einführung und Hardwareentwurf mit VHDL

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(3 downto 0)).

12) Legen Sie sämtliche Bits der Signale hex1 bis hex7 komplett auf 1. Sie können hierfürsämtliche Bits einzeln zuweisen (z.B. hex1 <= “1111111“;) oder mit der others-Zuwei-sung sämtlichen Bits den gleichen Bit-Wert zuweisen (z.B. hex1 <= (others => ‘1‘);) - beider syntaktisch korrekten Eingabe wird Sie wieder der EMACS unterstützen.

13) Das Ausgangssignal des 7-Segment-Dekoders muss noch negiert werden, weil hex0 low-aktiv ist. Hierfür benötigen Sie ein Signal in der architecture.Dieses 7-Bit-Signal vom Typ std_ulogic_vector(6 downto 0) deklarieren Sie noch vordem „begin“ der architecture. Hierfür müssen Sie nur das Key-Wort signal eingeben. Ver-wenden Sie grundsätzlich keine Signal-Initialisierungen bei der Deklaration, weil dies inder Synthese ignoriert wird. Die korrekte Funktion ergibt sich aus der Hardware-Beschrei-bung.Dem Ausgangssignal segm_o der Komponente one_digit weisen Sie zunächst auf diesesSignal zu. Anschließend können Sie in einer nebenläufigen Signalzuweisung den negier-ten Wert dieses Signals auf hex0 zuweisen (hex0 <= 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 dierichtigen 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

16) 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 3 zusätzliche 7-Segment-Anzeigen)

20) Compilieren + Programmieren + Überprüfen...

4.3 Hinweise zum Praktikums-Protokoll

Das wesentliche Ergebnis ist Ihr erstellter VHDL-Code. Der Aufbau des VHDL-Codes sollhier durch VHDL-Kommentare erklärt werden.

Page 31: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe4.3 Hinweise zum Praktikums-Protokoll 30

FPGA-Einführung und Hardwareentwurf mit VHDL V 1.1.1 / 2011-05-03

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-i386.zip

Nach dem Download muss lediglich das ZIP-File ausgepackt werden. Im Bin-Directory findetman das Executable runemacs.exe. Hierdrauf legt man am besten auf dem Desktop einen Linkan. Die Eigenschaften des Links können editiert werden und über das Verzeichnis „ausführenin“ kann das Initialverzeichnis zum Öffnen/Speichern von Dateien festgelegt werden.

Neben den normalen Texteditor-Features verfügt der Editor hervoragende Unterstützungen beider VHDL-Kodierung.

Im folgenden sollen die wesentlichen Short-Cuts und VHDL-Features zusammengestellt wer-den. Einige Funktionalitäten sind auch über die Menüs erreichbar. Folgende Short-Cutsbeschleunigen jedoch die Bearbeitung von Dateien erheblich:

Short-Cut Bedeutung

CTRL-k Rest der Zeile wird gelöscht und in Paste-Buffer gespeichert

CTRL-y Paste-Buffer einfügen

CTRL-x, r, k rechteckiger markierter Bereich wird gelöscht und in Paste-Buffer gespeichert

CTRL-x, r, y rechteckiger Bereich wird eingefügt

CTRL-x,2 waagerechtes Teilen des Fensters

CTRL-x,3 vertikales Teilen des Fensters

CTRL-x,1 nur noch 1 Fenster sichtbar

Alt-x vhdl-mode Umschalten des Editors auf VHDL-Mode (wenn Files mit Endung .vhd geöffnet werden ist dieser Mode automatisch aktiv)

Tabelle 4: Wichtige Shortcuts des EMACS-Editors

Short-Cut Bedeutung

CTRL-x, CTRL-f File öffnen

CTRL-x, CTRL-s File speichern

CTRL-_ UNDO, auch mehrfach möglich - Umschalten zwischen UNDO und REDO durch Betätigung der Pfeiltaste

CTRL-s Such-Funktion

ALT-% Ersetz-Funktion

Tabelle 5: Wichtige Shortcuts des EMACS-Editors, die auch über das Menü erreichbar sind

Page 32: FPGA-Einführung und Hardwareentwurf mit VHDL von Prof. …rabe/Downloads/digi/praktikum/PraktDigi_V4... · Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe 2

Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe31 4 Aufgabenstellung

V 1.1.1 / 2011-05-03 FPGA-Einführung und Hardwareentwurf mit VHDL

Wenn im VHDL-Mode VHDL-Keywörter wie z.B. entity oder architecture eingegeben wer-den, werden automatisch die notwendigen Informationen erfragt und syntaktisch korrekt imVHDL-Code eingefügt. Als weitere Erleichterung können Keywörter, Signalnamen und sons-tige Identifier automatisch durch die TAB-Taste erweitert werden - durch mehrfaches Betäti-gen 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 aktuellenMarkierung

• Update->Sensitivity List (Buffer): In Prozessen werden automatisch die Sensitivitätslistenangepaßt

• Beautify->...: Die Einrückungen usw. der spezifizierten Bereiche werden automatisch ange-paß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 Entityeingefügt (wird im Deklarationsteil von architectures benötigt)

• Port->Paste as Instance: Es wird eine Instanz der vorher kopierten Entity eingefügt. DieSignalzuweisungen müssen noch editiert werden (ggf. auch der Instanzname).