VHDL-Grundlagen - Technische Informatik an der Universität Frankfurt
VHDL-Grundlagen - Technische Informatik an der Universität Frankfurt
VHDL-Grundlagen - Technische Informatik an der Universität Frankfurt
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Praktikum<br />
<strong>Grundlagen</strong> von Hardwaresystemen<br />
Sommersemester 2007<br />
Versuch 1: <strong>VHDL</strong>-<strong>Grundlagen</strong><br />
12. April 2007<br />
Fachbereich 12: Mathematik für <strong>Informatik</strong><br />
Institut für <strong>Informatik</strong><br />
Professur für <strong>Technische</strong> <strong>Informatik</strong><br />
Prof. Dr. K. Waldschmidt<br />
Joh<strong>an</strong>n Wolfg<strong>an</strong>g Goethe-<strong>Universität</strong><br />
Fr<strong>an</strong>kfurt am Main
Inhaltsverzeichnis<br />
1 Einleitung 2<br />
2 <strong>Grundlagen</strong> 4<br />
2.1 <strong>VHDL</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4<br />
2.1.1 Entity, Architektur und Signale . . . . . . . . . . . . . . . . . . . . . . 4<br />
2.1.2 Simulation einer <strong>VHDL</strong>-Schaltung . . . . . . . . . . . . . . . . . . . . 9<br />
2.1.3 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />
2.1.4 Das gesamte Projekt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />
2.1.5 Hinweise zur Benutzung des ModelSim <strong>VHDL</strong>-Compilers . . . . . . . 13<br />
2.2 Addierer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />
2.2.1 Halb- und Volladdierer . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
3 Anmerkungen und Tipps 15<br />
4 Vorbereitungsaufgaben 16<br />
5 Praktikumsaufgaben 19<br />
1
Kapitel 1<br />
Einleitung<br />
Die Entwicklung von mikroelektronischen Schaltungen auf hohem Abstraktionsniveau wird<br />
durch den starken Anstieg <strong>der</strong> Entwicklungskomplexität bei sehr stark reduzierten Entwicklungszeiten<br />
bestimmt.<br />
Um konkurrenzfähig zu bleiben, reichen herkömmliche Wege über graphische Schaltpl<strong>an</strong>eingaben<br />
auf Logikelementebene in <strong>der</strong> Industrie schon seit längerem nicht mehr aus. Aus<br />
diesem Grund kommen Hardwarebeschreibungssprachen zum Einsatz, um Schaltungen zu<br />
entwerfen. Zudem besteht die Möglichkeit den entworfenen Quellcode mit zur Verfügung stehenden<br />
Simulationsprogrammen zu testen und das Verhalten <strong>der</strong> Schaltung schon vor <strong>der</strong><br />
Synthese zu überprüfen. Diese Beschreibungssprachen werden in zwei Kategorien unterteilt:<br />
ˆ Hardwarebeschreibungssprachen<br />
ˆ Modellierungs- und Simulationssprachen<br />
Eine Hardwarebeschreibungssprache (engl. Hardware Description L<strong>an</strong>guage, HDL)<br />
bezeichnet eine Sprache innerhalb einer allgemeinen Klasse von Beschreibungssprachen in<br />
<strong>der</strong> Elektronik. Mit ihr können die Funktion von Schaltungen und ihr Design beschrieben,<br />
sowie durch Simulation getestet werden. Sie drücken ein zeitliches Verhalten und/o<strong>der</strong> eine<br />
(räumliche) Schaltkreisstruktur in normalem Text aus. Zu dieser Klasse gehören die Hardwarebeschreibungssprachen,<br />
die in Tabelle 1 aufgelistet sind.<br />
Eine Modellierungs- und Simulationssprache wie SystemC ist insbeson<strong>der</strong>e für die<br />
Entwicklung von komplexen elektronischen Systemen, die sowohl Hardware- als auch Softwarekomponenten<br />
enthalten, geeignet. Im Gegensatz zu reinen Hardwarebeschreibungssprachen<br />
wird SystemC vorr<strong>an</strong>gig zur Modellierung auf noch höheren Abstraktionsebenen eingesetzt,<br />
womit Simulationen um den Faktor 100 bis 1000 schneller durchgeführt werden können. Selbst<br />
längere Programme, z.B. die Firmware eingebetteter Systeme, die auf <strong>der</strong> beschriebenen Hardware<br />
ablaufen, können mitsimuliert werden.<br />
In diesem Praktikum wird eine Hardwarebeschreibungssprache benötigt, die für die Beschreibung<br />
und Simulation digitaler Systeme und <strong>der</strong>en Umgebung geeignet ist. Wir haben<br />
uns für <strong>VHDL</strong>, welche 1983 vom amerik<strong>an</strong>ischen Departament of Defense initiiert wurde,<br />
entschieden.<br />
Ein beson<strong>der</strong>er Vorteil <strong>der</strong> Benutzung <strong>der</strong> Hardwarebeschreibungssprachen liegt in <strong>der</strong><br />
gemeinsamen Nutzung einheitlicher Modellierung für Simulation und Synthese. Die Simulation<br />
dient <strong>der</strong> Verifikation <strong>der</strong> Entwurfsidee; die Synthese setzt die Hardwarebeschreibung<br />
2
KAPITEL 1. EINLEITUNG 3<br />
HDL St<strong>an</strong>dardisierung Anbieter<br />
<strong>VHDL</strong> IEEE 1076-1987 EDA<br />
Verilog IEEE 1364-1995 EDA<br />
GHDL<br />
(Genrad)<br />
MHDL<br />
<strong>VHDL</strong>-AMS (IEEE 1976.1) (EDA)<br />
Verilog (OVI) (EDA)<br />
MAST<br />
Analogy<br />
FAS<br />
Anacad/MGC<br />
Spectre-HDL<br />
Cadence<br />
IRENE<br />
IMAG<br />
Grenoble 183<br />
KARL <strong>Universität</strong> Kaiserslautern 1979<br />
AHPL <strong>Universität</strong> Arizona 1974<br />
DACAPO<br />
DOSIS GmbH Dortmund<br />
Tabelle 1.1: Hardwarebeschreibungssprachen<br />
automatisch in eine Netzliste um. Letztere ist die Grundlage für die Implementierung <strong>der</strong><br />
Schaltung auf Hardwareplattformen wie ASIC, FPGA und CPLD.<br />
Das Entwurfsziel des Praktikums ist ein FPGA von Xilinx. Den FPGA-Markt teilen sich<br />
im Wesentlichen die Firmen Xilinx und Altera. D<strong>an</strong>eben gibt es noch einige weitere Nischen<strong>an</strong>bieter<br />
wie Actel, Lattice und QuickLogic. Xilinx wurde ausgewählt, da neben <strong>der</strong><br />
Marktbedeutung auch bereits entsprechende Software und Erfahrung <strong>an</strong> <strong>der</strong> Professur vorh<strong>an</strong>den<br />
sind.
Kapitel 2<br />
<strong>Grundlagen</strong><br />
In diesem Versuch werden grundlegende <strong>VHDL</strong>-Konzepte erläutert. Am Beispiel eines NANDund<br />
eines XOR-Gatters wird <strong>der</strong> <strong>VHDL</strong>-Sprachumf<strong>an</strong>g schrittweise und problemorientiert<br />
eingeführt. Im Einzelnen werden dabei die folgenden Punkte beh<strong>an</strong>delt:<br />
ˆ Methoden <strong>der</strong> Schaltungsbeschreibung:<br />
– Konzept: Trennung zwischen Schnittstelle(Port), Entwurfseinheit(Entity) und Verhalten<br />
(Architecture)<br />
– Beschreibungsstile <strong>der</strong> Schaltungen:<br />
* strukturelle Beschreibung<br />
* Datenflussbeschreibung<br />
* algorithmische Beschreibung<br />
ˆ Definition von Signalen<br />
ˆ Bedienung <strong>der</strong> <strong>VHDL</strong>-Entwurfsumgebung (Compiler und Simulator)<br />
ˆ Modellierung einfacher boolescher Schaltnetze<br />
ˆ Beschreibung von Halb- und 1-Bit-Volladdierern<br />
2.1 <strong>VHDL</strong><br />
2.1.1 Entity, Architektur und Signale<br />
Die nachfolgend aufgeführten <strong>VHDL</strong>-Elemente sind als grundlegende Strukturelemente je<strong>der</strong><br />
<strong>VHDL</strong>-Beschreibung <strong>an</strong>zusehen.<br />
Entity<br />
In <strong>der</strong> mit Entity bezeichneten Entwurfseinheit werden die Schnittstellen eines <strong>VHDL</strong>-Funktionsblocks<br />
nach außen beschrieben. Unter <strong>der</strong> Schnittstelle einer Schaltung versteht m<strong>an</strong><br />
die Menge aller Signalleitungen, die diese Schaltung mit ihrer Umgebung verbinden, inklusive<br />
<strong>der</strong> Information über die Signaleigenschaften wie z.B. Wertebereiche und Signalrichtungen.<br />
Beim Vergleich eines Board-Designs mit einem <strong>VHDL</strong>-Quellcode stellt eine Entity den zu<br />
4
KAPITEL 2. GRUNDLAGEN 5<br />
bestückenden IC-Gehäusetyp dar, <strong>der</strong> durch die Anzahl, die Eigenschaften und die Bezeichnung<br />
<strong>der</strong> Anschlüsse definiert ist. Die Deklaration <strong>der</strong> Anschlüsse innerhalb <strong>der</strong> Entity erfolgt<br />
mit Hilfe <strong>der</strong> Port-Anweisung. Dabei beschreibt jedes Element <strong>der</strong> Port-Anweisung einen<br />
o<strong>der</strong> mehrere Anschlüsse.<br />
Entity-Syntax<br />
entity is<br />
port ();<br />
end ;<br />
entity NAND gate i s<br />
port ( a , b : in STD LOGIC ;<br />
c : out STD LOGIC ) ;<br />
end NAND gate ;<br />
Listing 2.1: Deklaration eines NAND-Gatters<br />
a<br />
b<br />
NAND_gate<br />
c<br />
Abbildung 2.1: Graphische Darstellung <strong>der</strong> Entity eines NAND-Gatters<br />
Die Entity einer Schaltung (mit zwei Eingängen und einem Ausg<strong>an</strong>g) k<strong>an</strong>n m<strong>an</strong> auch<br />
graphisch wie in Abbildung 2.1 darstellen. Dabei sind a und b die Eing<strong>an</strong>gssignale und c das<br />
Ausg<strong>an</strong>gssignal <strong>der</strong> Schaltung. Alle drei Signale sind vom Typ std logic, was bedeutet, dass<br />
es sich um einzelne Logiksignale h<strong>an</strong>delt.<br />
Signale<br />
Signale sind ein weiteres zentrales Element von <strong>VHDL</strong>. Ähnlich wie Variablen in <strong>an</strong><strong>der</strong>en<br />
Programmiersprachen sind Signale in <strong>VHDL</strong> die Datenträger. Nach einer Signalzuweisung<br />
nimmt das Signal einen bestimmten Wert <strong>an</strong>. Natürlich k<strong>an</strong>n das Signal auf den augenblicklichen<br />
Wert abgefragt werden o<strong>der</strong> mit <strong>an</strong><strong>der</strong>en Signalen und geeigneten Operatoren verknüpft<br />
werden.<br />
Vergleichbar mit einem Stück Draht verbindet ein Signal Ausg<strong>an</strong>g und Eing<strong>an</strong>g zweier<br />
Teilschaltungen (z. B. Gatter, Flip-Flop etc.). Doch nicht jedes Signal ist nach <strong>der</strong> Synthese<br />
auch tatsächlich als Verbindungsleitung vorh<strong>an</strong>den. Während <strong>der</strong> Synthese können Signale<br />
als Folge einer Optimierung verschwinden o<strong>der</strong> neue hinzukommen.<br />
Jedes Signal ist von einem eindeutig zu definierenden Typ und besitzt einen eindeutigen<br />
Namen. Zur Einführung soll hier zunächst nur <strong>der</strong> Signaldatentyp std logic bzw.<br />
std logic vector benutzt werden, welcher den Anwen<strong>der</strong>n aus dem std logic 1164 Paket<br />
<strong>der</strong> Bibliothek IEEE zur Verfügung steht. Das Paket std logic 1164 stellt 9-wertige Logik<br />
dar, k<strong>an</strong>n aber auch 3-, 4- und 5-wertige Logik realisieren. Das heißt, dass <strong>der</strong> Wertevorrat<br />
des Signaldatentyps std logic aus neuen logischen Werten besteht. Für das Praktikum
KAPITEL 2. GRUNDLAGEN 6<br />
sind folgende vier Werte relev<strong>an</strong>t: 0, 1, U, X. Ein std logic vector stellt einen aus mehreren<br />
std logic Signalen bestehenden Bus dar. Dieser Bus k<strong>an</strong>n entwe<strong>der</strong> aufsteigend, z.B.<br />
als std logic vector(0 to 7) o<strong>der</strong> aber abfallend als std logic vector(7 downto 0) bezeichnet<br />
werden.<br />
Die IEEE-Library ist sehr weit verbreitet. Abhängig von <strong>der</strong> verwendeten Entwurfsumgebung<br />
können auch <strong>an</strong><strong>der</strong>e Bibliotheken mit <strong>an</strong><strong>der</strong>en Bezeichnern verwendet werden, die m<strong>an</strong><br />
von einem Hersteller erhalten o<strong>der</strong> die m<strong>an</strong> selbst geschrieben hat.<br />
Im Quellcode können diese Datentypen verwendet werden, wenn vor <strong>der</strong> entity-Deklaration<br />
die IEEE-Bibliothek mit Hilfe einer library-Anweisung deklariert wird. Zusätzlich muss<br />
durch die use-Anweisung <strong>an</strong>gegeben werden, dass alle Komponenten des std logic vector 1164<br />
Pakets verwendet werden sollen.<br />
Library IEEE ;<br />
use IEEE . s t d l o g i c 1 1 6 4 . a l l ;<br />
Signale können <strong>an</strong> folgenden Stellen im <strong>VHDL</strong>-Code deklariert werden:<br />
ˆ als Port <strong>der</strong> entity-Deklaration für entity-globale Signale.<br />
ˆ innerhalb einer architecture als architektur-globale Signale. Im Allgemeinen werden<br />
alle Signale, die keine Ports sind, so deklariert.<br />
Syntax eines Signals<br />
signal : ;<br />
Für den Modus <strong>der</strong> Ein-/Ausgänge einer Portdeklaration gilt:<br />
1. in: Eing<strong>an</strong>g, nur auf rechter Seite von Variablen-/Signalzuweisungen, also in Ausdrücken,<br />
zulässig.<br />
2. out: Ausg<strong>an</strong>g, nur auf linker Seite von Signalzuweisungen zulässig.<br />
3. inout: bidirektionale Leitung, k<strong>an</strong>n im Code lesend und schreibend benutzt werden.<br />
Architektur<br />
Die Architektur beschreibt das Innenleben, d.h. die Funktionalität des <strong>VHDL</strong>-Codes. Je<strong>der</strong><br />
Entity muss (mindestens) eine Architektur zugeordnet sein. In obiger Vorstellung beschreibt<br />
also die Architektur, welche Funktion bzw. welcher Chip sich in dem Gehäuse befindet.<br />
Syntax einer Architektur:<br />
architecture of is<br />
[Lokale Deklarationen]<br />
begin<br />
<br />
end ;<br />
Der Deklarationsteil definiert Typen, Unterprogramme, Konst<strong>an</strong>ten und Signale, die in<br />
dieser Architektur benötigt werden, während die <strong>VHDL</strong>-Anweisungen das eigentliche Innenleben<br />
beschreiben. Für diese Beschreibung gibt es drei Stile: Verhalten, Datenfluss und Struktur.<br />
Innerhalb des Anweisungsteils k<strong>an</strong>n ein Stil o<strong>der</strong> eine beliebige Kombination dieser Stile<br />
benutzt werden.
KAPITEL 2. GRUNDLAGEN 7<br />
Verhalten Die Grundstruktur <strong>der</strong> Verhaltensbeschreibung ist <strong>der</strong> Prozess.<br />
Syntax eines Prozesses:<br />
: process ()<br />
<br />
begin<br />
<br />
end process ;<br />
Listing 2.2: Verhaltensbeschreibung eines NAND-Gatters<br />
architecture behavior of NAND gate i s<br />
begin<br />
P1 : process ( a , b )<br />
begin<br />
i f ( a = ’ 1 ’ ) <strong>an</strong>d ( b = ’ 1 ’ ) then<br />
c
KAPITEL 2. GRUNDLAGEN 8<br />
use IEEE . s t d l o g i c 1 1 6 4 . a l l ;<br />
entity And gatter i s<br />
port (<br />
in0 , in1 : in STD LOGIC ;<br />
out0 : out STD LOGIC<br />
) ;<br />
end And gatter ;<br />
architecture dataflow of And gatter i s<br />
begin<br />
out0
KAPITEL 2. GRUNDLAGEN 9<br />
in0 , in1 : in STD LOGIC ;<br />
out0 : out STD LOGIC<br />
) ;<br />
end component ;<br />
component I n v e r t e r<br />
port (<br />
in0 : in STD LOGIC ;<br />
out0 : out STD LOGIC<br />
) ;<br />
end component ;<br />
signal And out0 , I n v e r t e r 1 o u t 0 : STD LOGIC ;<br />
begin<br />
And : And gatter port map ( a , b , And out0 ) ;<br />
I n v e r t e r 1 : I n v e r t e r port map ( And out0 , I n v e r t e r 1 o u t 0 ) ;<br />
−− S i g n a l mapping<br />
c
KAPITEL 2. GRUNDLAGEN 10<br />
architecture Test NAND of SimBox<br />
i s<br />
−− Hier muss das NAND−Gatter mit<br />
−− den g l e i c h e n Ports und Portnamen<br />
−− wie in <strong>der</strong> E n t i t y a l s Komponente d e k l a r i e r t werden<br />
component NAND gate<br />
port (<br />
a , b : in STD LOGIC ;<br />
c : out STD LOGIC<br />
) ;<br />
end component ;<br />
−− h i e r werden d i e S i g n a l e d e k l a r i e r t ,<br />
−− d i e in <strong>der</strong> Simbox verwendet werden<br />
signal a t e s t , b t e s t , c t e s t : STD LOGIC ;<br />
begin<br />
−− Dies i s t d i e I n s t a n t i i e r u n g von<br />
−− my NAND gate <strong>der</strong> ” Klasse ” NAND gate<br />
my NAND gate : NAND gate<br />
−− Hier werden d i e S i g n a l e <strong>der</strong> Simbox<br />
−− den Ports von my NAND gate zugeordnet<br />
port map (<br />
a => a t e s t ,<br />
b => b t e s t ,<br />
c => c t e s t<br />
) ;<br />
−− Hier werden den S ignalen k o n k r e t e Werte zugewiesen .<br />
−− Die Zeiten b e z i e h e n s i c h auf den S t a r t <strong>der</strong> Simulation .<br />
a t e s t
KAPITEL 2. GRUNDLAGEN 11<br />
2.1.3 Konfiguration<br />
Mittels <strong>der</strong> Konfiguration k<strong>an</strong>n <strong>der</strong> Entwickler zwischen verschiedenen Design-Alternativen<br />
und -Versionen auswählen. Dabei bestimmt eine Konfiguration, welche Realisierung für eine<br />
Entity, benutzt wird, d.h. welche Architektur in einer Entity eingesetzt wird. work ist dabei<br />
das Arbeitsverzeichnis des Compilers und des Simulators.<br />
Syntax einer Konfiguration:<br />
configuration of <br />
for <br />
{}<br />
end for;<br />
end Name <strong>der</strong> Konfiguration;<br />
Syntax <strong>der</strong> Konfigurationskomponenten:<br />
for :<br />
use entity work. (Architekturname)<br />
[for <br />
{}<br />
end for;]<br />
end for;<br />
Listing 2.5: Konfiguration eines NAND-Gatters<br />
configuration NAND test of SimBox i s<br />
for Test NAND<br />
for my NAND gate : NAND gate<br />
use entity work . NAND gate( dataflow ) ;<br />
end for ;<br />
end for ;<br />
end NAND test ;<br />
2.1.4 Das gesamte Projekt<br />
Unser erstes NAND-Simulationsprojekt besteht nun aus drei Teilen:<br />
ˆ Entity und (hier nur einer) Architektur<br />
ˆ Simulationsumgebung SimBox mit Stimuli<br />
ˆ Konfiguration<br />
Library IEEE ;<br />
use IEEE . s t d l o g i c 1 1 6 4 . a l l ;<br />
entity NAND gate i s<br />
port (<br />
a , b : in STD LOGIC ;<br />
c : out STD LOGIC
KAPITEL 2. GRUNDLAGEN 12<br />
) ;<br />
end NAND gate ;<br />
architecture dataflow of NAND gate i s<br />
begin<br />
c a t e s t ,<br />
b => b t e s t ,<br />
c => c t e s t<br />
) ;<br />
a t e s t
KAPITEL 2. GRUNDLAGEN 13<br />
’0 ’ after 4 ns ,<br />
’1 ’ after 6 ns ;<br />
end Test NAND ;<br />
configuration NAND test of SimBox i s<br />
for Test NAND<br />
for my NAND gate : NAND gate<br />
use entity work . NAND gate( dataflow ) ;<br />
end for ;<br />
end for ;<br />
end NAND test ;<br />
2.1.5 Hinweise zur Benutzung des ModelSim <strong>VHDL</strong>-Compilers<br />
In diesem Praktikum verwenden Sie zwei <strong>VHDL</strong>-Entwicklungsumgebungen. An den ersten<br />
drei Praktikumstagen ist es das Programm ModelSim zur Simulation Ihrer <strong>VHDL</strong>-Entwürfe,<br />
<strong>an</strong> den letzten drei Tagen kommt das Programm Webpack ISE <strong>der</strong> Firma Xilinx zur Synthese<br />
für die Zielarchitektur FPGA hinzu.<br />
Legen Sie bitte für jeden Praktikumstag ein neues Verzeichnis <strong>an</strong>. Es empfiehlt sich, ein<br />
einheitliches Bezeichnungsschema durchzuhalten, z. B. p1 für den ersten Praktikumstag, p2<br />
für den zweiten usw. Wechseln Sie in dieses neue Verzeichnis und starten Sie ModelSim.<br />
Am besten org<strong>an</strong>isiert m<strong>an</strong> die einzelnen Entwürfe in Projekten. Benutzen Sie Jumpstart,<br />
um ein solches Projekt <strong>an</strong>zulegen. Später können Sie das auch mit File->New->Project<br />
tun. Mit Jumpstart ist es auch möglich, ein bestehendes Projekt zu öffnen o<strong>der</strong> sich die<br />
Dokumentation von ModelSim <strong>an</strong>zuschauen.<br />
ModelSim fragt Sie nach einem Namen für Ihr Projekt. Wählen Sie z. B. a1 für die<br />
Aufgabe 1. Es ist günstig, sich die entsprechenden Namen schon bei <strong>der</strong> Praktikumsvorbereitung<br />
zu überlegen. Öffnen Sie in ModelSim mit File->New->Source-><strong>VHDL</strong> ein neues<br />
<strong>VHDL</strong>-Quelltextfile, übertragen Sie die Beschreibungen des NAND-Gatters per Copy <strong>an</strong>d<br />
Paste und speichern Sie schließlich das G<strong>an</strong>ze als NAND.vhd.<br />
Eine <strong>VHDL</strong>-Quelltextdatei muss einem Projekt zugeordnet werden. Dies geschieht mit<br />
Add file to Project. Geben Sie hier den Dateinamen <strong>an</strong> o<strong>der</strong> klicken Sie auf den Button<br />
Browse, um eine Datei auszuwählen. Stellen Sie sicher, dass Sie im richtigen Verzeichnis sind.<br />
Im ModelSim-<strong>VHDL</strong>-Editor können Sie unter dem Menüpunkt Tools->Compile die Kompilierung<br />
starten.<br />
Im Konsolenfenster zeigt ModelSim die aufgerufenen Tools sowie Fehlermeldungen o<strong>der</strong><br />
Warnungen <strong>an</strong>. Hier können Sie auch Komm<strong>an</strong>dos des Betriebssystems eingeben, z. B. help,<br />
dir, type, cd o<strong>der</strong> mkdir.<br />
2.2 Addierer<br />
Addierer berechnen die arithmetische Summe boolescher Vektoren, wobei auch Überträge<br />
entstehen können. Daher werden Addierer sowohl durch die Anzahl <strong>der</strong> zu addierenden Bits
KAPITEL 2. GRUNDLAGEN 14<br />
als auch durch die Art <strong>der</strong> Berechnung des Übertrages klassifiziert. Sie können durch Kaskadierung<br />
(Hinterein<strong>an</strong><strong>der</strong>schaltung) von 1-Bit-Volladdierern realisiert werden, die ihrerseits<br />
wie<strong>der</strong>um Halbaddierer enthalten.<br />
2.2.1 Halb- und Volladdierer<br />
Halbaddierer sind Addierer, die aus zwei booleschen Werten a und b die mod 2-Summe<br />
s = (a + b)mod 2 und den Übertrag (Carry) c = a ∗ b berechnen.<br />
a<br />
b<br />
HA<br />
c_out<br />
s<br />
Abbildung 2.2: Graphische Darstellung eines Halbaddierers<br />
Volladdierer weisen neben dem Übertragsausg<strong>an</strong>g (carry out) noch einen Übertragseing<strong>an</strong>g<br />
(carry in) auf, wodurch sie sich u.a. zur Kaskadierung eignen.<br />
a<br />
b<br />
c_out<br />
VA<br />
c_in<br />
s<br />
Abbildung 2.3: Graphische Darstellung eines Volladdierers
Kapitel 3<br />
Anmerkungen und Tipps<br />
ˆ <strong>VHDL</strong> unterscheidet nicht zwischen Gross- und Kleinschreibung.<br />
ˆ In <strong>VHDL</strong> werden Kommentare mit -- eingeleitet.<br />
ˆ Namen und Bezeichner müssen mit einem Buchstaben beginnen. Die nachfolgenden<br />
Zeichen können Buchstaben, Ziffern o<strong>der</strong> aber <strong>der</strong> Unterstrich _ sein.<br />
ˆ Vollständige <strong>VHDL</strong>-Anweisungen werden mit einem Semikolon abgeschlossen.<br />
ˆ Die Entity-Beschreibung enthält keinerlei Information über die innere Struktur o<strong>der</strong> das<br />
Verhalten einer Schaltung. Sie beschreibt lediglich die Ein- und Ausgänge.<br />
ˆ Während sich die library-Anweisung auf alle Entwurfseinheiten einer <strong>VHDL</strong>-Datei<br />
bezieht, ist bei <strong>der</strong> use-Anweisung zu beachten, dass diese vor je<strong>der</strong> einzelnen entity<br />
wiedeholt werden muss, die diese Datentypen verwendet.<br />
ˆ Die Zuweisung eines Signalwerts vom Typ std logic erfolgt durch den Operator
Kapitel 4<br />
Vorbereitungsaufgaben<br />
Die folgenden Aufgaben dienen <strong>der</strong> Vorbereitung <strong>der</strong> Praktikumsaufgaben und sind teilweise<br />
Ausg<strong>an</strong>gsbasis für eine <strong>VHDL</strong>-Implementierung. Dokumentieren Sie die Lösung <strong>der</strong> folgenden<br />
Aufgaben schriftlich. Diese Lösungsdokumentation bildet den ersten Teil des Protokolls des<br />
Praktikumstermins und wird zu Beginn von den Tutoren eingesammelt.<br />
Aufgabe 1.<br />
Finden Sie die Fehler im Quellcode:<br />
1 . Library IEEE<br />
2 . use IEEE . s t d l o g i c 1 1 6 4 . a l l ;<br />
3 .<br />
4 . entity X gate i s<br />
5 . port ( a , b : in STD LOGIC ;<br />
6 . c : out STD LOGIC ) ;<br />
7 . end X;<br />
8 .<br />
9 . architecture dataflow of X i s<br />
1 0 . begin<br />
1 1 . c
KAPITEL 4. VORBEREITUNGSAUFGABEN 17<br />
2 9 .<br />
3 0 . begin<br />
3 1 .<br />
3 2 . my X gate : X gate ;<br />
3 3 . port map<br />
3 4 . (<br />
3 5 . a => a t e s t ,<br />
3 6 . b => b t e s t ,<br />
3 7 . c => c t e s t<br />
3 8 . ) ;<br />
3 9 .<br />
4 0 . a t e s t
KAPITEL 4. VORBEREITUNGSAUFGABEN 18<br />
und den Übertrag in zwei KV-Diagramme. Führen Sie eine graphische Minimierung<br />
durch und ermitteln Sie die minimalen DNFs für die Summe und den Übertrag.<br />
Aufgabe 7.<br />
Im Folgenden soll ein 1-Bit-Volladdierer entworfen werden. Er bildet die Summe aus zwei<br />
Eing<strong>an</strong>gsbits und dem Carry-out <strong>der</strong> vorherigen Stufe. Außerdem liefert er ein Carry-out<br />
für die nachfolgende Stufe. Beschreiben Sie sein Verhalten durch eine Wahrheitstabelle.<br />
Erstellen Sie die Karnaugh-Diagramme für die Summe s und für c out. Bestimmen Sie<br />
die daraus resultierenden minimalen DNFs.
Kapitel 5<br />
Praktikumsaufgaben<br />
Die folgenden Aufgaben sind innerhalb des Praktikumstermins zu bearbeiten. Dokumentieren<br />
Sie Ihre Lösung im zweiten Teil des Protokolls des Praktikumstermins. Das Protokoll soll die<br />
erstellten <strong>VHDL</strong>-Beschreibungen sowie die Simulationsergebnisse enthalten. Kommentieren<br />
Sie die <strong>VHDL</strong>-Beschreibungen und erlätern Sie ihr Design und die Ergebnisse. Beachten Sie<br />
dabei die geson<strong>der</strong>ten Anmerkungen zu je<strong>der</strong> Aufgabe.<br />
Aufgabe 1.<br />
Aufgabe 2.<br />
Erzeugen Sie in ModelSim eine neue <strong>VHDL</strong>-Quelldatei (File->New->Source-><strong>VHDL</strong>),<br />
übertragen Sie die Beschreibung des NAND-Gatters per Copy und Paste und speichern<br />
das G<strong>an</strong>ze als n<strong>an</strong>d.vhd. Im ModelSim-<strong>VHDL</strong>-Editor können Sie unter dem Menüpunkt<br />
Tools->Compile die Kompilierung starten. Wenn ModelSim keine Fehlermeldung in <strong>der</strong><br />
Textkonsole ausgibt, ist <strong>der</strong> <strong>VHDL</strong>-Code zumindest syntaktisch korrekt, und sie finden<br />
im ModelSim-Workspace im work-Verzeichnis die einzelnen Teile des Projekts.<br />
Für das Protokoll: Erläutern Sie in Ihrem Protokoll die Bedeutung <strong>der</strong> Begriffe Entity,<br />
Architektur und Konfiguration.<br />
Simulieren Sie Ihre <strong>VHDL</strong>-Beschreibung des NAND-Gatters. Ihre <strong>VHDL</strong>-Beschreibung<br />
können Sie gemäß folgen<strong>der</strong> Liste simulieren:<br />
ˆ Auf das Icon Simulate klicken<br />
ˆ Reiter Design auswählen<br />
ˆ work ausklappen<br />
ˆ Name Ihrer zu simulierenden Datei (z.B. simbox) auswählen<br />
ˆ Die Signale in <strong>der</strong> Mitte zur Ansicht hinzufügen (rechte Maustaste, Add to Wave)<br />
ˆ Im Menüpunkt Simulate auf Run klicken um die Simulation zu starten.<br />
ˆ Alternativ k<strong>an</strong>n auch in <strong>der</strong> Tr<strong>an</strong>scriptbox am unteren Ende direkt run eingegeben<br />
werden. Als Parameter ist optional die zu simulierende Länge (z.B. 100 ns) erlaubt.<br />
Mit den Lupensymbolen können sie im Wave-Fenster herein- und wie<strong>der</strong> herauszoomen.<br />
Bei <strong>der</strong> Simulation werden die als Stimuli definierten Testwerte zu den entsprechenden<br />
Zeitpunkten <strong>an</strong>gelegt, und das Ergebnis im Wave-Fenster <strong>an</strong>gezeigt. Alternativ können<br />
Sie auch schrittweise simulieren.<br />
19
KAPITEL 5. PRAKTIKUMSAUFGABEN 20<br />
Für das Protokoll: Erzeugen sie zur Dokumentation Ihrer Simulationsergebnisse einen<br />
Screenshot des Wave-Fensters mit Alt+Druck. Den aktuellen Bildschirminhalt (mit Ihren<br />
Simulationsergebnissen) können Sie d<strong>an</strong>n aus <strong>der</strong> Zwischenablage in die meisten<br />
Bild- o<strong>der</strong> Textbearbeitungsprogramme einfügen. Erläutern Sie die Ergebnisse.<br />
Aufgabe 3.<br />
Aufgabe 4.<br />
Aufgabe 5.<br />
Aufgabe 6.<br />
Aufgabe 7.<br />
Mit <strong>der</strong> in <strong>der</strong> Vorbereitung bestimmten minimalen DNF soll nun von Ihnen eine Entity<br />
mit dem Namen xor gate und eine zugehörige Architekture namens xor dataflow für<br />
das XOR-Gatter geschrieben werden. Passen Sie auch die Simulationsumgebung und<br />
die Konfiguration entsprechend <strong>an</strong>, speichern Sie die neue Datei unter dem Namen<br />
xor gate.vhd, und simulieren Sie die Schaltung (mit allen möglichen Eingabewerten)<br />
in <strong>der</strong> gleichen Art und Weise wie beim NAND-Gatter.<br />
Für das Protokoll: Machen Sie einen Screenshot des Wave-Fensters und erläutern Sie<br />
die Simulationsergebnisse.<br />
Setzen Sie in <strong>der</strong> process-Umgebung das if-then-else-Konstrukt ein, um die XOR-Funktionalität<br />
zu modellieren. Tragen Sie die so entst<strong>an</strong>dene Architektur in die Datei xor gate.vhd<br />
als Architektur behaviour ein. Um die Schaltung mit <strong>der</strong> neuen Architektur zu simulieren,<br />
ist keine Än<strong>der</strong>ung <strong>an</strong> <strong>der</strong> Simulationsumgebung (SimBox) nötig. Hier muß lediglich<br />
<strong>der</strong> Name <strong>der</strong> Architektur in <strong>der</strong> Konfiguration ausgetauscht werden. Simulieren<br />
Sie diese Schaltung.<br />
Für das Protokoll: Erläutern Sie eventuelle Unterschiede gegenüer <strong>der</strong> Simulation <strong>der</strong><br />
Datenflussbasierten Beschreibung.<br />
Ergänzen Sie die Datei xor gate.vhd um eine weitere Architektur xor structure, in<br />
die Sie Ihre NAND-basierte Schaltung des XOR-Gatters eintragen. Verwenden Sie als<br />
Basis den <strong>VHDL</strong>-Export von LogiFlash, und <strong>an</strong>alysieren Sie den erzeugten Code. K<strong>an</strong>n<br />
m<strong>an</strong> diesen automatisch erzeugten Code noch etwas optimieren Än<strong>der</strong>n Sie nun wie<strong>der</strong><br />
die Konfigurationsdatei so, dass sie die neu geschriebene Architektur benutzt, und<br />
simulieren Sie <strong>an</strong>schließend die Schaltung. Gibt es Verän<strong>der</strong>ungen in den Ergebnissen<br />
im Vergleich zu den vorigen Simulationen<br />
Für das Protokoll: Erläutern Sie eventuelle Unterschiede gegenüber <strong>der</strong> vorigen Simulationen.<br />
Beschreiben Sie die Entity und die Architektur eines Halbaddierers gemäß <strong>der</strong> ermittelten<br />
Gleichungen für die Ausgänge c out und s. Ergänzen Sie die Simulationsumgebung<br />
und die Konfiguration. Simulieren Sie den Halbaddierer mit allen möglichen Eing<strong>an</strong>gsbelegungen.<br />
Erstellen Sie eine Datenflussbeschreibung für den Volladdierer gemäß den Ergebnissen<br />
aus den Vorbereitungsaufgaben. Simulieren Sie Ihre Entwurf.