FPGA-Einführung und Hardwareentwurf mit VHDL von

Transcrição

FPGA-Einführung und Hardwareentwurf mit VHDL von
Praktikum
Digitaltechnik
FPGA-Einführung und
Hardwareentwurf mit VHDL
von Prof. Dr.-Ing. Dirk Rabe
Gruppe:
Teilnehmer:
Benutzte Geräte:
Vortestat:
Testat:
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
1 Einleitung und Überblick
1
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 VHDLBeschreibung (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
• 3 Einführungsbeispiel: In diesem Abschnitt wird ein kurzes VHDL-Beispiel (Wechselschaltung) 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 VHDLAspekte erklärt.
- 3.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.3 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 / 2011-05-03
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
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 / 2011-05-03
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
2 Das DE-2 Board
3
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 EEPROM (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\80sp1\quartus\drivers
V 1.1.1 / 2011-05-03
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
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 36 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 / 2011-05-03
5
3
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3 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
3.1 Verzeichnisstruktur auf den Praktikumsrechnern
Auf dem Desktop der Rechner finden Sie einen Ordner mit dem Namen student:
Abbildung 3: 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
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.
V 1.1.1 / 2011-05-03
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3.3 VHDL-Kodierung des Beispiels
6
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).
3.3 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 3 Beschreibungen:
• Entity: Interfacebeschreibung
• Architecture: Hardwarerealisierung
FPGA-Einführung und Hardwareentwurf mit VHDL
V 1.1.1 / 2011-05-03
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3 Einführungsbeispiel
7
• 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).
0
1
2
3
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).
V 1.1.1 / 2011-05-03
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3.3 VHDL-Kodierung des Beispiels
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
8
V 1.1.1 / 2011-05-03
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3 Einführungsbeispiel
9
Nummer
Erklärung
3
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 <= ‘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-Werte
O: 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-BitZahl 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 / 2011-05-03
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3.3 VHDL-Kodierung des Beispiels
10
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 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 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
sw0
VSS
pin_n25
sw(0)
x1
light_core
(vhdl)
f
ledg0
x2
VDD
sw1
VSS
sw(1)
pin_n26
ledr0
light (vhdl)
fpga (Pin-Mapping File)
ledg0
PIN_AE22 VSS
ledr0
PIN_AE23 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
ledr0) - hier werden also andere Componenten instanziiert
malve: toolspezifisch (hier Altera-QuartusII) wird noch ein Mapping der Toplevel-EntitySignale 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 / 2011-05-03
11
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3 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. 6 dargestellt.
5
6
7
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.
V 1.1.1 / 2011-05-03
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3.4 Implementierung der Schaltung auf das FPGA
12
Nummer
Erklärung
6
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(0).
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 ledg0 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 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 vermeiden (emacs-Editor - siehe weiter unten).
3.4 Implementierung der Schaltung auf das FPGA
In diesem Abschnitt sollen die verschiedenen Schritte für die Implementierung der VHDLBeschreibung auf das FPGA/DE2-Board erklärt werden. Startpunkt sind die beiden in Abbildung 3 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 / 2011-05-03
13
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3 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
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
†
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 / 2011-05-03
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3.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 / 2011-05-03
15
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3 Einführungsbeispiel
Abbildung 10: Auswahl Design Files
4.c)
Auswahl des Ziel-FPGAs (siehe Abb. 11)
Abbildung 11: Auswahl des Ziel-FPGAs
-> next
V 1.1.1 / 2011-05-03
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3.4 Implementierung der Schaltung auf das FPGA
16
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. 13)
6)
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 / 2011-05-03
17
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3 Einführungsbeispiel
Abbildung 13: QuartusII-Oberfläche nach der Generierung des neuen Projekts
Abbildung 14: Auswahl des Pin-Mapping-Files
V 1.1.1 / 2011-05-03
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3.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 / 2011-05-03
19
8)
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3 Einführungsbeispiel
Synthese: Drücken Sie hierfür in der Symbolleiste den Pfeil nach rechts (start compilation)
sollte alles korrekt durchlaufen, sollten Sie den in Abb.16 dargestellten Report erhalten
Abbildung 16: 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 / 2011-05-03
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3.4 Implementierung der Schaltung auf das FPGA
20
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
10) Unter Processing->Compilation Report erhält man Informationen über das SyntheseErgebnis (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 / 2011-05-03
21
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3 Einführungsbeispiel
Abbildung 19: Programmer-Oberfläche
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 sw0
leuchten die LEDs LEDG0 bzw. LEDR0
-> schalten Sie den Schalter SW0 um!
V 1.1.1 / 2011-05-03
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
3.4 Implementierung der Schaltung auf das FPGA
4
22
Aufgabenstellung
Nachdem Sie das Beispiel in Abschnitt 3 durchgearbeitet haben, sollen Sie nun eine eigene
VHDL-Beschreibung entwickeln.
Im ersten Schritt soll die Schalterstellung sw3...sw0 hexadezimal auf der ersten 7-Segmentanzeige (ganz rechts - Signale hex0(6 downto 0)) dargestellt werden. Jeder der 7 Segmente kann
durch ein separates Signal leuchten (Signal=0) oder nicht leuchten (Signal=1). Die Segmente
sind wie in Abbildung 20 angesteuert (z.B.: oberstes Segment hex0(0), unterstes Segment
hex0(3)).
In der VHDL-Implementierung soll zunächst ein Kodierer für die 7-Segment-Ansteuerung entwickelt werden (Eingangssignal: switch_i(3 downto 0), Ausgangssignal segm_o(6 downto 0).
0
5
4
6
3
1
2
Abbildung 20: Signal-Mapping auf die Segmente
Die Entity-Signale sollen in einer weiteren Designhierarchie mit den entsprechenden FPGAPins 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 / 2011-05-03
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
4 Aufgabenstellung
23
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 16 HEX-Zahlen auf das 7-bit breite
Ausgangsignal segm_o (hier high-aktiv - also Segment=1 => Segment leuchtet)):
switch_i
0000
HEX
segm_o
0
5
4
0001
1
4
2
4
3
2
6
3
1
2
6
3
1
2
0
5
4
0100
3
1
0
5
0011
6
0
5
0010
0111111
0
4
6
3
1
2
0
5
4
6
3
1
2
Tabelle 1: Kodierung von switch_i (4-Bit) auf segm_o (7-Bit)
V 1.1.1 / 2011-05-03
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
4.1 Vorbereitung (vor dem Praktikumstermin)
switch_i
0101
HEX
segm_o
5
0
5
4
0110
6
4
7
4
8
4
9
6
3
1
2
6
3
1
2
6
3
1
2
0
5
4
1010
2
0
5
1001
3
1
0
5
1000
6
0
5
0111
24
A
6
3
1
2
0
5
4
6
3
1
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 / 2011-05-03
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
4 Aufgabenstellung
25
switch_i
1011
HEX
segm_o
b
0
5
4
1100
c
4
d
4
E
6
3
1
2
6
3
1
2
0
5
4
1111
2
0
5
1110
3
1
0
5
1101
6
F
6
3
1
2
0
5
4
6
3
1
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?
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). 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 / 2011-05-03
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
4.2 VHDL-Kodierung, Synthese, FPGA-Programmierung und Erprobung
26
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?
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 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?
10) 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“.
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 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 / 2011-05-03
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
4 Aufgabenstellung
27
5)
Erstellen Sie in der Datei one_digit.vhd eine Entity mit folgenden Ports:
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
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.
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 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 16 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 HardwareAufgabe beschreibt (z.B. decoder oder dec).
8)
Innerhalb des process (zwischen begin und end) empfiehlt sich in diesem Fall eine caseAnweisung (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 annehmen kann, haben wir mit den 16 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 / 2011-05-03
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
4.2 VHDL-Kodierung, Synthese, FPGA-Programmierung und Erprobung
9)
28
In der Datei siebensegment.vhd ergänzen wir nun zunächst die entity:
Signalname
Richtung
Signaltyp
Bedeutung
sw
in
std_ulogic_vector(15 downto 0)
4 Mal 4-Bit Eingangswerte
für insgesamt 4 Sieben-Segment-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 Leuchtdioden zu Debugging-Zwecken
hex1
out
std_ulogic_vector(6 downto 0)
7-Bit Ausgangswert (lowaktiv) für die Darstellung
von sw(7 downto 4)
hex2
out
std_ulogic_vector(6 downto 0)
7-Bit Ausgangswert (lowaktiv) für die Darstellung
von sw(11 downto 8)
hex3
out
std_ulogic_vector(6 downto 0)
7-Bit Ausgangswert (lowaktiv) für die Darstellung
von sw(15 downto 12)
hex4
out
std_ulogic_vector(6 downto 0)
hex5
out
std_ulogic_vector(6 downto 0)
hex6
out
std_ulogic_vector(6 downto 0)
hex7
out
std_ulogic_vector(6 downto 0)
Auf dem Board sind insgesamt 8 7-Segmentanzeigen.
Standardmäßig würden
sämtliche Segmente leuchten. Deshalb schalten wir
diese in der architecture einfach komplett aus.
Tabelle 3: Interface-Signale von one_digit
10) 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 / 2011-05-03
29
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
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(3 downto 0)).
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.
13) Das Ausgangssignal des 7-Segment-Dekoders muss noch negiert werden, weil hex0 lowaktiv 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 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 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 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
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 7Segment-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 soll
hier durch VHDL-Kommentare erklärt werden.
V 1.1.1 / 2011-05-03
FPGA-Einführung und Hardwareentwurf mit VHDL
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
4.3 Hinweise zum Praktikums-Protokoll
Anhang A:
30
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 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
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 PasteBuffer 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
FPGA-Einführung und Hardwareentwurf mit VHDL
V 1.1.1 / 2011-05-03
31
Versuchsanleitung Praktikum Digitaltechnik - Prof. Dr.-Ing. Dirk Rabe
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 EntityDefinition 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 / 2011-05-03
FPGA-Einführung und Hardwareentwurf mit VHDL

Documentos relacionados