06.01.2015 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!