17
Praktikum Rechnerorganisation Praktikum 1 Lehrveranstaltung: Prof. Dr. W. Rehm Bearbeiter: Ralph Schlosser Letzte Änderung: Torsten Mehlan, 19. April 2005 E HIT C R A KTUR 1 Ziel Hier zunächst ein Überblick über die Ziele des 1. Praktikums: Einführung in VHDL und das Design digitaler Systeme mittels VHDL Kennenlernen des UP 2-Boards und der MAX+PLUS II Entwicklungsumgebung Realisierung einfacher kombinatorischer Systeme 2 Einführung in VHDL und das Design digitaler Systeme mittels VHDL Digitale Systeme haben in den letzten Jahren eine immer größere Bedeutung erlangt und fast alle Bereiche von Wissen- schaft und Technik, aber vor allem auch des täglichen Lebens durchdrungen. Die Komplexität solcher Systeme ist dabei enorm angestiegen, sodass die Entwicklung digitaler Systeme zu weiten Teilen nur noch mit Computer-Unterstützung durchführbar ist. Ein Beispiel dafür ist der Mikroprozessor. Der erste von Intel vorgestellte Mikroprozessor – der Intel 4004 – konnte aufgrund der geringen Komplexität noch durch eine Person auf dem Papier entworfen werden. Bei heutigen Mikropro- zessoren mit einer Vielzahl von Elementen (Transistoren, Verbindungen) ist dies praktisch nicht mehr möglich. Man bedient sich daher heute verschiedener Software, die den Designprozess in allen Phasen unterstützen. Insbesondere zur Beschreibung von Hardware existieren Hardware-Beschreibungssprachen, wie etwa VHDL, ABEL, Verilog u.a., die Architektur, Struktur und Verhalten von digitalen Systemen beschreiben. Wir werden in diesem und in den anderen Prak- tika die weit verbreitete Sprache VHDL erlernen und benutzen. Eine kostenloser VHDL Simulator kann z.B. unter [1] heruntergeladen werden. Weitere Links sind bei [5] zu finden. 2.1 VHDL Die Sprache VHDL, eine Abkürzung für Very High Speed Integrated Circuit Hardware Description Language, wurde Anfang der 80er Jahre spezifiziert und 1987 bzw. 1993 vom IEEE standardisiert. Mittlerweile existieren einige Imple- mentationen, die meist als Teil von komplexen Hardware-Entwicklungswerkzeugen ausgeliefert werden. Folgende beim Hardware-Designprozess wichtige Schritte werden bei VHDL durch entsprechende Tools unterstützt: Simulation und Verifikation des modellierten Systems Optimierung Synthese der beschriebenen Hardware für eine bestimmte Technologie 1

Praktikum Rechnerorganisation - tu- · PDF fileVHDL ist eine Hardware-Beschreibungssprache, die neben den aus „normalen” Programmiersprachen bekannten Daten-typen, Kontrollstrukturen,

Embed Size (px)

Citation preview

PraktikumRechnerorganisation

Praktikum 1Lehrveranstaltung: Prof. Dr. W. Rehm

Bearbeiter: Ralph SchlosserLetzte Änderung: Torsten Mehlan, 19. April 2005

EH I TCRA K T U R

1 Ziel

Hier zunächst ein Überblick über die Ziele des 1. Praktikums:

• Einführung in VHDL und das Design digitaler Systeme mittels VHDL

• Kennenlernen des UP 2-Boards und der MAX+PLUS II Entwicklungsumgebung

• Realisierung einfacher kombinatorischer Systeme

2 Einführung in VHDL und das Design digitaler Systeme mittels VHDL

Digitale Systeme haben in den letzten Jahren eine immer größere Bedeutung erlangt und fast alle Bereiche von Wissen-schaft und Technik, aber vor allem auch des täglichen Lebens durchdrungen. Die Komplexität solcher Systeme ist dabeienorm angestiegen, sodass die Entwicklung digitaler Systeme zu weiten Teilen nur noch mit Computer-Unterstützungdurchführbar ist.

Ein Beispiel dafür ist der Mikroprozessor. Der erste von Intel vorgestellte Mikroprozessor – der Intel 4004 – konnteaufgrund der geringen Komplexität noch durch eine Person auf dem Papier entworfen werden. Bei heutigen Mikropro-zessoren mit einer Vielzahl von Elementen (Transistoren, Verbindungen) ist dies praktisch nicht mehr möglich.

Man bedient sich daher heute verschiedener Software, die den Designprozess in allen Phasen unterstützen. Insbesonderezur Beschreibung von Hardware existierenHardware-Beschreibungssprachen, wie etwaVHDL, ABEL, Verilogu.a., dieArchitektur, Struktur und Verhalten von digitalen Systemen beschreiben. Wir werden in diesem und in den anderen Prak-tika die weit verbreitete Sprache VHDL erlernen und benutzen. Eine kostenloser VHDL Simulator kann z.B. unter [1]heruntergeladen werden. Weitere Links sind bei [5] zu finden.

2.1 VHDL

Die Sprache VHDL, eine Abkürzung fürVery High Speed Integrated CircuitHardwareDescriptionLanguage, wurdeAnfang der 80er Jahre spezifiziert und 1987 bzw. 1993 vom IEEE standardisiert. Mittlerweile existieren einige Imple-mentationen, die meist als Teil von komplexen Hardware-Entwicklungswerkzeugen ausgeliefert werden.

Folgende beim Hardware-Designprozess wichtige Schritte werden bei VHDL durch entsprechende Tools unterstützt:

• Simulation und Verifikation des modellierten Systems

• Optimierung

• Synthese der beschriebenen Hardware für eine bestimmte Technologie

1

VHDL ist eine Hardware-Beschreibungssprache, die neben den aus „normalen” Programmiersprachen bekannten Daten-typen, Kontrollstrukturen, Prozeduren und dergleichen auch einige Konzepte enthält, welche die speziellen Eigenschaftenvon Hardware reflektieren. Die Syntax von VHDL lehnt sich dabei stark an den der ProgrammiersprachePascalan,wodurch viele VHDL-Konstrukte leicht lesbar sind und zunächst auch ohne viel Hintergrundwissen verstanden werdenkönnen.

VHDL-Designs bestehen aus einer oder mehreren.vhd bzw..vhdl -Dateien, die von Programmen wie VHDL-Compileroder VHDL-Simulator verarbeitet werden. Diese Programme erzeugen Ausgabedateien, die dann wiederum benutzt wer-den, um z.B. die Simulationsergebnisse auszuwerten oder die beschriebene Hardware auf einen programierbaren Logik-Chip zu bringen (Synthesefür eine bestimmte Technologie). Wir werden diese Möglichkeiten aber weiter unten bespre-chen und uns zunächst dem prinzipiellen Aufbau von VHDL-Beschreibungen zuwenden.

2.2 Aufbau von VHDL-Beschreibungen

Ein reales digitales System verfügt üblicherweise über Schnittstellen und eine interne Realisierung, in der Verbindun-gen und Komponenten (z.B. logische Gatter, Flipflops usw.) enthalten sind. Diese Bestandteile finden sich auch in derVHDL-Beschreibung wieder: Die Schnittstelle in Form einerEntity, die interne Realisierung durch eine oder mehrereArchitecture(s).

2.2.1 Die Schnittstellenbeschreibung

Die Schnittstellenbeschreibung wird durch das Schlüsselwortentity eingeleitet. Innerhalb der Schnittstellenbeschrei-bung werden die Ein- und Ausgänge des Systems durch das Schlüsselwortport spezifiziert. Neben den Ports können aberauch noch Konstanten, sogenannteGenericsdefiniert werden, die zum Zeitpunkt der Übersetzung der VHDL-QuelldateiEinfluss auf bestimmte Architekturparameter nehmen (etwa Busbreiten, Verzögerungszeiten usw.). Diese Konstanten ste-hen innerhalb desgeneric -Blocks der Entity-Deklaration.

Beispiel:

Es soll die Schnittstelle für ein zweieingängiges NOR-Gatter, wie es in Abbildung 1 zu sehen ist, in VHDL beschriebenwerden. Die Eingänge des NORs sinda undb und der Ausgang seir .

a=b>1 r

Abbildung 1: Schaltsymbol für zweieingängiges NOR-Gatter

Daraus ergibt sich folgende Entity-Deklaration:1

entity mnor2 isport(

a, b: in bit;r: out bit

);end mnor2;

2.2.2 Die Architekturbeschreibung

Die eigentliche Realisierung der Entity steckt in der Architektur, die mit dem Schlüsselwortarchitecture eingeleitetwird. Auf die unterschiedlichen Arten der Realisierung werden wir weiter unten noch zu sprechen kommen. Zu jeder

1Bei der Namensgebung von Entities muss unbedingt darauf geachtet werden, dass nicht schon definierte Namen gewählt werden. Diese trivialerscheinende Erkenntnis wird später bei der Verwendung des Altera-Entwicklungssystems wichtig, da dort z.B. per Default solche Gattertypen wienot2, and2 usw. in VHDL zur Verfügung stehen, ohne das explizit irgendwelche Libraries eingebunden werden. Etwaige Namenskonflikte werden vomCompiler dann mit dubiosen Fehlermeldungen quittiert, aus denen aber zunächst nicht ersichtlich wird, dass ein Namenskonflikt besteht!

2

Architektur innerhalb eines Designs gehört eine Entity; eine Entity kann aber auch mehrere Realisierungen, d.h. meh-rere Architekturen haben. Im letzteren Fall muss dann durch eineConfigurationfestgelegt werden, welche Architekturbeim Übersetzungs- bzw. Simulationsvorgang benutzt werden soll. Wir werden hier jedoch von diesem Feature keinenGebrauch machen und generell nur eine Architektur verwenden.

Beispiel:

Zu obiger Schnittstelle soll die Realisierung des NORs in VHDL beschrieben werden. Dafür gibt es viele Möglichkeiten– wir wollen die einfachste wählen. Vorraussetzung dieser Realisierung seien die logischen Elementarfunktionenor undnot , die als Operatoren über den VHDL-Datentypbit zur Verfügung gestellt werden. Die Architektur zur Realisierungder oben stehenden Entity habe den Namena.

architecture a of mnor2 isbegin

r <= not(a or b);end architecture a;

Hier wird also einfach der Wert der beiden Eingangssignalea und b mithilfe desor verknüpft und dann anschließendnoch durchnot negiert. Dies entspricht der Funktionalität eines NORs. Das Resultat wird dann über den VHDL-Operator„<=” dem Ausgangr zugewiesen.2

Für die komplette Syntax der Schnittstellen- sowie Architekturbeschreibung siehe etwa [2], Kapitel 3.

2.3 Modellierungssichtweisen

Grundsätzlich gibt es bei der Hardwaremodellierung mit VHDL verschiedene Herangehensweisen, die sich durch dieSichtweise auf das zu modellierende System unterscheiden. Die von VHDL unterstützten Modellierungssichtweisen sind:

• Verhaltensmodellierung

• Datenflussmodellierung

• Strukturmodellierung

Zum besseren Verständnis der einzelnen Sichtweisen soll jeweils eine entsprechende Architekturbeschreibung eines 2-Bit-Volladdierers angegeben werden, zu dem folgende Entity vorliegt:

entity fulladder isport(

a, b, cin: in bit;r, cout: out bit

);end fulladder;

Dabei seiena undb die Eingangsbits sowiecin der einlaufende Übertrag. Folglich istr das Ergebnis der Addition undcout der dabei entstehende Übertrag.

2Hinweis: Dieser Operator ist nicht mit einer Variablenzuweisung, die es in VHDL auch gibt (Operator„:=” ), zu verwechseln, da es sich beia, bundr um Signalehandelt.

3

2.3.1 Verhaltensmodellierung

In der Verhaltensmodellierung beschreibt man ein System durch Angabe eines Algorithmus in VHDL-Notation, d.h. dieinterne technische Realisierung (verwendete Gatter, Verbindungen usw.) wird nicht explizit spezifiziert. Dies ist oft dieeinfachste Variante, eine VHDL-Beschreibung eines Systemes anzugeben, jedoch nicht die optimale, da etwaige Optimie-rungen allein dem Compiler überlassen werden.

Nun also eine beispielhafte Realisierung des Addierers durch eine Verhaltensbeschreibung:

architecture behavioral of fulladder isbeginl1: r <= ’0’ when (a = ’0’ and b = ’0’ and cin = ’0’) else

’1’ when (a = ’0’ and b = ’0’ and cin = ’1’) else’1’ when (a = ’0’ and b = ’1’ and cin = ’0’) else’0’ when (a = ’0’ and b = ’1’ and cin = ’1’) else’1’ when (a = ’1’ and b = ’0’ and cin = ’0’) else’0’ when (a = ’1’ and b = ’0’ and cin = ’1’) else’0’ when (a = ’1’ and b = ’1’ and cin = ’0’) else’1’ when (a = ’1’ and b = ’1’ and cin = ’1’);

l2: cout <= ’0’ when (a = ’0’ and b = ’0’ and cin = ’0’) else’0’ when (a = ’0’ and b = ’0’ and cin = ’1’) else’0’ when (a = ’0’ and b = ’1’ and cin = ’0’) else’1’ when (a = ’0’ and b = ’1’ and cin = ’1’) else’0’ when (a = ’1’ and b = ’0’ and cin = ’0’) else’1’ when (a = ’1’ and b = ’0’ and cin = ’1’) else’1’ when (a = ’1’ and b = ’1’ and cin = ’0’) else’1’ when (a = ’1’ and b = ’1’ and cin = ’1’);

end architecture behavioral;

Grundlage dieser Realisierung ist die Funktionstabelle des Volladdierers. Es gibt 3 Eingangssignale; daraus resultieren23

mögliche Eingangsbelegungen. In der obigen VHDL-Beschreibung ist für jede mögliche Eingangsbelegung der Signalea undb sowiecin angegeben, wie die entsprechenden Ausgangssignaler undcout beschaltet werden müssen. Damitgeben wir also direkt an, wie sich die Architektur bei welcher Eingangsbelegungverhaltensoll.

Die beiden oben stehenden Zuweisungen fürr und cout werden dabei parallel ausgewertet, es handelt sich um sog.nebenläufigeZuweisungen. Das Konzept der Nebenläufigkeit ist ein wichtiges Konzept in VHDL, denn es spiegelt einehervorstechende Eigenschaft von realer Hardware – nämlich parallel arbeitende Funktionseinheiten – wider.

2.3.2 Datenflussmodellierung

Diese Form der Modellierung wird normalerweise dann eingesetzt, wenn beschrieben werden soll, wie Daten von denEingängen zu den Ausgängen eines Systemes „fliessen” und dabei transformiert werden. Es bietet sich daher in unseremFalle an, direkt die logischen Gleichungen für Summe und Übertrag aufzustellen und zu benutzen. Dazu liest man dieKNF aus obiger Funktionstabelle aus und minimiert die dabei entstehenden Funktionen wenn möglich. Es ergibt sich:

r = cin⊕ (a⊕ b)cout = (a ∧ b) ∨ (a ∧ cin) ∨ (b ∧ cin)

Diese Gleichungen können direkt in nebenläufige Zuweisungen in VHDL übersetzt werden, so dass man folgende Archi-tektur erhält:

architecture dataflow of fulladder isbegin

r <= cin xor (a xor b);cout <= (a and b) or (a and cin) or (b and cin);

end architecture dataflow;

4

2.3.3 Strukturmodellierung

Mithilfe der Strukturmodellierung kann beschrieben werden, wie die einzelnen Komponenten eines Systemes unterein-ander verbunden sind, also strukturell zusammenhängen. Das erlaubt es, ein komplexes Design aus mehreren, eventuelleinfacheren Komponenten hierarchisch zusammenzusetzen. Dabei spielt es keine Rolle, ob die einzelnen Komponentenin einer Verhaltens-, Datenfluss- oder gar Strukturbeschreibung vorliegen.

architecture structural of fulladder iscomponent mxor2

port(

a1, a2: in bit;c: out bit

);end component;

component mand2port(

a1, a2: in bit;c: out bit

);end component;

component mor3port(

a1, a2, a3: in bit;c: out bit

);end component;

signal t1, t2, t3, t4: bit;begin

p1: mxor2 port map(a, b, t1);p2: mxor2 port map(t1, cin, r);p3: mand2 port map(a, b, t2);p4: mand2 port map(a, cin, t3);p5: mand2 port map(b, cin, t4);p6: mor3 port map(t2, t3, t4, cout);

end architecture structural;

In dieser Strukturbeschreibung werden zunächst die Schnittstellen der Komponentenmand2, mxor2 undmor3 dekla-riert, die vorher, z.B. in einer sogenanntenGatterbibliothekschon definiert wurden (die genaue Definition dieser Kompo-nenten kann in der Dateifulladder.vhd nachgelesen werden).

In der eigentlichen Architekturbeschreibung werden dann mittels desport map -Konstruktes die Eingänge des Addierersentsprechend der oben angegebenen logischen Gleichung auf die einzelnen Komponenten beschaltet. Dabei entstehende„Zwischenergebnisse” werden auf die Signalet1...t4 gelegt. Die Funktion desport map ist es also, einfach gesagt,„Verbindungsdrähte” zwischen den einzelnen Komponenten zu ziehen. Damit kann ein komplexes Design hierarchischaus kleineren Einheiten aufgebaut werden.

2.4 Sequentielle und parallele Abarbeitung von Konstrukten

Wie weiter oben schon einmal kurz erwähnt, laufen bei VHDL — anders als in der Regel bei Programmiersprachen —mehrere Anweisungen (etwa Signalzuweisungen) nebenläufig, d.h. parallel ab. Dabei gibt es zwei wichtige Notationsfor-men, die wir hier einmal näher betrachten wollen.

5

2.4.1 Prozesse

Eine sehr oft verwendete Art der Notation nebenläufiger Anweisungen, ist die Benutzung verschiedener sogenannterProzesse innerhalb einer Architektur. Alle diese Prozesse laufengleichzeitigab, wobei Prozesse an sich (d.h. die einzelnenAnweisungen) jedoch sequentiell abgearbeitet werden. Diese Abarbeitung wird immer dann angestoßen, wenn sich diePegel der in derSensitivitätslistedes Prozesses spezifizierten Signale ändern und solange fortgesetzt, bis die Abarbeitungder sequentiellen Konstrukte im Prozess beendet ist.

Es gibt auch Prozesse ohne Sensitivitätsliste. In einem solchen Fall müssen dann innerhalb des Prozesseswait - oderwait-for -Klauseln angegeben werden. Dabei hat man nur die Wahl entwederwait -Klauseln oder eine Sensitivitätsli-ste zu verwenden, nicht beides gleichzeitig. Wir werden diese Möglichkeit hier aber nicht weiter diskutieren.

Prozesse sind deshalb so wichtig, da viele sequentielle VHDL-Statements, wie z.B.if, case, loop, wait aus-schließlich in Prozessen (oder Subprogrammen) verwendet werden dürfen. Daher ist man meist auf Prozesse angewiesen,wenn man eine bestimmte Hardware durch einen Algorithmus — also eine Verhaltensbeschreibung — modellieren möch-te.

Folgendes kleines Beispiel soll die Verwendung von Prozessen demonstrieren. Es handelt sich dabei um die Verhaltens-beschreibung eines NOT-Gatters. Der dabei verwendete Prozess hat das Signalq in der Sensitivitätsliste. Dadurch wirddascase -Konstrukt ausgewertet und damit der Ausgangq_bar neu berechnet, sobald sichq ändert.

entity mnot isport(

q: in bit;q_bar: out bit

);end mnot;

architecture a of mnot isbeginp1: process(q)

begincase q is

when ’1’ =>q_bar <= ’0’;

when ’0’ =>q_bar <= ’1’;

end case;end process p1;

end architecture a;

2.4.2 Nebenläufige Zuweisungen in der Architekturbeschreibung

Nebenläufige Zuweisungen in der Architekturbeschreibung wurden schon in den Beispielen 2.3.1 und 2.3.2 verwendet.Die entsprechenden Zuweisungen werden vom Compiler/Simulator dabei parallel solange ausgewertet, bis sich an denjeweiligen Eingängen der Konstrukte keine Pegeländerung mehr vollzieht. Im Prinzip handelt es sich hierbei also auchum Prozesse, aber in einer bestimmten Notationsform.

2.4.3 Mischformen

Es ist durchaus möglich und oft auch sinnvoll, in einer Architekturbeschreibung Prozesse als auch nebenläufige Signalzu-weisungen einzusetzen.

6

3 Kennenlernen des UP 2-Boards und der MAX+PLUS II Entwicklungsum-gebung

Nach diesen (notwendigen) theoretischen Erörterungen wollen wir nun zum praktischen Teil kommen. Wir werden uns imFolgenden mit dem Altera UP 2-Entwicklungsboard und der MAX+PLUS II Entwicklungsumgebung beschäftigen, diewährend des ganzen Praktikums benutzt werden. Es ist daher unerlässlich, sich insbesondere mit der MAX+PLUS II Soft-ware intensiv zu befassen, da außer in diesem Praktikum nicht mehr auf die bloße Anwendung der Software eingegangenwird.

Auf allen Poolrechnern des Raumes 1/014 ist die Dokumentation zu dem UP 2-Board und der MAX+PLUS II Software imVerzeichnisC: \Docs\Altera installiert, sodass bei Unklarheiten jederzeit in diesen Dokumentationen nachgeschlagenwerden kann.

3.1 Das Altera UP 2-Board

Das Altera UP 2-Board (siehe Abbildung 2) ist ein Entwicklungsboard, das speziell für universitäre Zwecke konzipiertwurde. Es enthält zwei programmierbare Logikbausteine und eine Reihe von Ein- und Ausgängen (u.a. LEDs, Sieben-segmentanzeigen, Taster, DIP-Schalter, 25.175 MHz Taktgenerator sowie VGA- und PS/2-Anschluss), welche verwendetwerden können. Neben diesen vorgegebenen Ein- und Ausgängen gibt es noch die Möglichkeit, weitere externe Hardwarezu verbinden, indem die an den jeweiligen Seiten des Board befindlichen „Anschlussleisten” verwendet werden. DieseAnschlussleisten sind auf der Platine mit den Pins des entsprechenden programmierbaren Logik-Chips verbunden. Überdiesen Weg sind z.B. die LEDsD1 - D16 mit einem der Logik-Chips, dem FLEX EPF10K70, verbunden.

Abbildung 2: Das UP 2-Board, schematisch

Der FLEX ist weiterhin intern u.a. mit der DIP-SchalterreiheFLEX_SWITCH, der SiebensegmentanzeigeFLEX_DIGITund den TasternFLEX_PB1undFLEX_PB2verbunden.3

Zur Programmierung der Logik-Chips wird die weiter unten noch behandelte Software MAX+PLUS II verwendet, dieüber den Parallelport des Rechners die damit verbundene Hardware programmiert. Darüberhinaus ist das Board noch miteiner Spannungsquelle verbunden, die ebenfalls aus dem Rechner kommt.

Hinweis: Der Stecker der das Board mit Strom versorgt, ist nicht vollständig gegen Verpolung geschützt! Er darf daherkeinesfallsentfernt werden, da bei unsachgemäßem Aufstecken das Board zerstört werden könnnte. Sollte er dennochabgehen, muss der anwesende Praktikumsleiter informiert werden.

3.1.1 Die programmierbaren Logik-Bausteine

Das UP 2-Board beinhaltet zwei frei programmierbare Logik-Bausteine, mit denen sowohl die auf dem Board befindlichenals auch externen Hardware-Ressourcen angesteuert werden können. Obwohl die Benutzung durch den Anwender undder Programmiervorgang scheinbar gleich ist, unterscheiden sich die beiden Bausteine grundsätzlich in ihrer Architektur,die hier allerdings nicht weiter behandelt wird. Wir wollen lediglich einige praktische Belange erörtern.

3Die eben genannten Bezeichnungen, wie z.B.FLEX_PB1, sind auf der Platine des Boards und auch in Abbildung 1 zu erkennen.

7

3.1.2 Der MAX EPM7128SLC84-7

Bei dem MAX EPM7128SLC84-7 handelt es sich um einen EEPROM-basierten Schaltkreis. Daher bleiben die in denBaustein geladenen Designs auch nach dem Abschalten der Spannungsquelle erhalten. Der MAX-Chip hat 84 Pins, vondenen einige festverdrahtet sind (z.B. Siebensegmentanzeige, Taktgenerator), andere wiederum durch den Anwender freibenutzt werden können aber vorher verdrahtet werden müssen. Der MAX-Chip besitzt 2500 sogenannteGatteräquivalen-te. Das bedeutet, das theoretisch Designs mit bis zu 2500 Gattern (AND, OR, ...) möglich sind. Natürlich ist diese Zahl nureine ungenaue Angabe, weil die tatsächliche Anzahl von der Ausnutzung des Chips durch ein konkretes Design abhängt.Der entscheidende Nachteil des MAX-Bausteins ist, dass er nur ungefähr 100 Mal neu programmiert werden kann. Wirwerden ihn deshalb im Praktikum nicht benutzen.

3.1.3 Der FLEX EPF10K70RC240-4

Der von uns verwendete FLEX EPF10K70RC240-4 ist SRAM-basiert und verliert aus diesem Grund nach Abschaltender Spannungsversorgung seinen Inhalt. Der Chip verfügt über 240 Pins und 70000 Gatteräquivalente, woran man schonerkennt, das grössere Designs als mit dem MAX-Baustein möglich sind. Ansonsten gilt für das Pinout Ähnliches wiebeim MAX EPM7128SLC84-7. Wichtig ist noch, das einige Dinge, wie z.B. VGA- und PS/2-Anschlussausschliesslichdurch den FLEX-Chip ansteuerbar sind.

Einen Überblick über die Pinnummern der festverdrahteten Bausteine auf dem Board findet man in der Dateiupds.pdf ,die sich im oben erwähnten Verzeichnis befindet. Die Pinnummern sind deshalb wichtig, da diese später in derMAX+PLUS II Software den entsprechenden Ein- bzw. Ausgangssignalen zugewiesen werden müssen. Auf den Übungs-plätzen wird ebenfalls noch eine Kurzübersicht dazu ausgelegt.

Die ausführliche Beschreibung der Architektur der beiden programmierbaren Logik-Bausteine kann in Dokumenten nach-gelesen werden, die unter [4] zu finden sind.

3.2 Die MAX+PLUS II Entwicklungsumgebung

Die Entwicklungsumgebung MAX+PLUS II vereinigt alle wesentlichen Tools (wenn auch in etwas „abgespeckter” Form),die beim Hardwaredesign mit programmierbarer Logik notwendig sind.

Zu diesen Tools gehöhren insbesondere:

• Ein VHDL-Compiler nach dem VHDL ’93-Standard.

• Ein Synthesetool, das aus einer VHDL-Beschreibung eine Programmierdatei für die programmierbaren Bausteinegeneriert.

• Ein VHDL-Simulator, mit dem ein VHDL-Design vor dem Download in die programmierbaren Bausteine ausführ-lich simuliert und, wenn nötig, verbessert werden kann.

• Ein sog.Waveform-Editor, der Simulationsergebnisse zur besseren Lesbarkeit als Impulsdiagramme darstellt.

Die MAX+PLUS II-Software ist auf jedem Pool-Rechner im Raum 1/014 installiert und kann unter Windows überStart→MAX+plus II 10.1 BASELINE→MAX+plus II 10.1 BASELINEgestartet werden. Auch handelt es sich hierbeium freie Software, welche man sich bei Altera herunterladen kann:http://www.altera.com/products/software/pld/products/max/sof-emax_baseline.htmlAnsonsten können von der Professur Rechnerarchitektur ebenfalls Installations–CDs ausgeliehen werden.

Abbildung 3 zeigt die Entwicklungsumgebung mit geöffnetem VHDL-Editor und Waveform-Editor. Zu sehen ist derVHDL-Quellcode der Dateifulladder.vhd und das Simulationsergebnis der Strukturbeschreibungs-Variante.

Wir wollen anhand eines einfachen Beispieles den typischen Ablauf bei der Arbeit mit dem UP 2-Board und derMAX+PLUS II Software nachvollziehen. Es wird unbedingt empfohlen, dieses Beispiel einmal selbst am Rechner nach-zuvollziehen, da man nur so die später notwendigen (und implizit vorrausgesetzten) Fertigkeiten für das Praktikum lernt.

8

Abbildung 3: Der Arbeitsbereich der MAX+PLUS II Entwicklungsumgebung

3.3 Beispiel:Berechnung der Parität

Die Berechnung der Parität eines gegebenen Bit-Wortes ist ein, insbesondere bei der Datenübertragung, oft genutztesMittel zur Erkennung von 1 Bit-Fehlern. Wir wollen an diesem Beispiel nachvollziehen, wie man

• ein VHDL-Design für das UP 2-Board erstellt,

• compiliert,

• simuliert,

• synthetisiert,

• konfiguriert und schließlich

• auf die Hardware herunterlädt.

Zunächst aber noch ein paar Einzelheiten zur Implementation: Die Parität soll über einem an den DIP-Schaltern 1 bis 4desFLEX_SWeingestellten 4 Bit-Wort berechnet werden und auf dem Dezimalpunkt der linken Stelle der Siebensegmen-tanzeige ausgegeben werden. Wir entwerfen dazu eine Verhaltensbeschreibung.

Dazu gelte folgende Konvention:b3b2b1b0 sei das gegbene Bitwort. Weiterhin sei

p =3∑

i=0

bi mod 2

Dann legen wir fest:

• Wennp = 0 ist, dann ist die Paritätgeradeund der Dezimalpunkt soll nicht aufleuchten,

• sonst ist die Paritätp ungeradeund der Dezimalpunkt soll aufleuchten.

9

Allerdings ist eine direkte Implementation der oben angegebenen Formel im MAX+PLUS II-VHDL nicht möglich, dader Modulo-Operator nicht implementiert ist. Ausserdem wäre der entstehende Hardwareaufwand sehr groß, da bei derSynthese Einheiten zur Addition und Modulo-Rechnung automatisch synthetisiert würden. Besser ist es daher, mit derXOR-Operation zu arbeiten, die ja bekanntlich einer Addition ohne Übertrag in den Dualzahlen entspricht.

Hier der Quelltext:

entity mparity isport(

bw: in bit_vector(3 downto 0);p: out bit

);end mparity;

architecture behavioral of mparity issignal temp: bit;

begin

temp <= bw(3) xor bw(2) xor bw(1) xor bw(0);p <= not temp; -- invertiert ausgeben wegen Low-aktiver LED

end architecture behavioral;

Nur nebenbei: Eine Architektur zur Paritätsberechnung eines beliebig breiten Vektors könnte z.B. so aussehen:

architecture behavioral of mparity isbeginp1: process(bw)

variable temp: bit;begin

temp := ’0’;

l1: for i in bw’range looptemp := temp xor bw(i);

end loop l1;

p <= not temp; -- invertiert ausgeben wegen Low-aktiver LEDend process p1;

end architecture behavioral;

3.4 Erstellen des VHDL-Designs

Jetzt geht es endlich los! :-)

Die Altera MAX+PLUS II-Entwicklungsumgebung kann auf den Poolrechnern mittelsStart→MAX+plus II 10.1BASELINE→MAX+plus II 10.1 BASELINEgeschehen. UnterFile→Newselektieren wir „Text Editor File”. Es öffnetsich ein Text Editor-Fenster, indem wir unseren obigen VHDL-Code eintippen. Gleich zu Beginn speichert man am be-sten die Datei unter dem Namenmparity.vhd ab, da so das Syntax Highlighting im Editor aktiviert wird. Alternativkönnte man den VHDL-Quelltext auch in einem externen Editor eingeben (z.B. einen, der Auto Indenting unterstützt) unddie erstellte Datei dann überFile→Openaus dem entsprechenden Verzeichnis laden.

Zum Schluss legen wir noch die aktuell bearbeitete Datei als aktuelles Projekt unterFile→Project→Set Project to CurrentFile fest.

Wichtig: MAX+PLUS II erwartet immer, dass der Name des Designs mit dem Namen der VHDL-Datei übereinstimmt!Weil unser Designnamemparity lautet, muss die VHDL-Datei entsprechendmparity.vhd heißen.

10

3.5 Compilieren des VHDL-Designs

Bevor Simulation, Synthese oder ähnliches gestartet werden kann muss das aktuelle Projekt compiliert werden. Da dieserVorgang bei großen Projekten eine Weile dauern kann und bei etwaigen Fehlern (z.B. Tippfehlern im VHDL-Quellcode)dann immer sehr lange gewartet werden müsste, kann die Überprüfung des Designs auf syntaktische, semantische undandere Fehler vom eigentlichen Compile-Vorgang entkoppelt separat gestartet werden. Dazu benutzt man am besten dieTastenkombinationStrg+K. Dabei wird das aktuelle Projekt auch gleich abgespeichert (Save and Check).

Das obige Projekt sollte erfolgreich mit 0 Fehlern und 0 Warnungen überprüft werden. Dann kann mitStrg+L das Projektcompiliert werden. Auch dieser Vorgang sollte ohne Fehler oder Warnungen beendet werden.

3.6 Simulation

Die (funktionelle) Simulation der modellierten Hardware ist ein wichtiger Schritt beim Hardwaredesign mittels Hardware-Beschreibungssprachen. Zum einen kann so oftmals kostengünstig und effizient gezeigt werden, dass ein Design „funktio-niert” und zum anderen erlauben es die Simulationstools, besonders bei komplexen Fehlern, die Fehlerquelle schneller zuisolieren und das Design dann Schritt für Schritt zu verbessern. Somit haben Simulatoren bei der Hardwareentwicklungungefähr den gleichen Stellenwert wie Debugger bei der Softwareentwicklung.

3.6.1 Grundlagen der Simulation

Ziel der Simulation ist es, das Verhalten des modellierten Systems, d.h. das Verhalten von internen Signalen und Ausgangs-signalen in Abhängigkeit der Eingangssignale zu betrachten und zu überprüfen, ob dieses mit dem erwarteten Verhaltenübereinstimmt.

Um bestimmte Änderungen an den Ausgängen beobachten zu können, müssen eventuell den Eingängen gezielt Testwerte(man nennt diese Testwerte auchStimuli) zugeführt werden können. Die verschiedenen Design-Tools kennen dazu unter-schiedliche Methoden, die man aber grundsätzlich in zwei Kategorien einteilen kann: Zuweisung von Stimuli über eineeigene Zuweisungssprache und Zuweisung von Stimuli überTestbenches. Wir werden für unser Beispiel aber nur die er-stere Möglichkeit näher betrachten, da die VHDL-Implementation im MAX+PLUS II Testbenches im eigentlichen Sinnenicht unterstützt.4

3.6.2 Die MAX+PLUS II Vector File

Die MAX+PLUS II Vector Filebietet eine komfortable Möglichkeit, Stimuli für ein bestimmtes Design zu definieren.Diese Stimuli werden dann zur Simulationszeit an die Eingänge des modellierten Systems angelegt. Dabei kann maneine zeitliche Abfolge festlegen und eine Gesamtdauer der Simulation angeben. Auf die genaue Syntax dieserVectorFile kann hier aus Platzgründen nicht näher eingegangen werden. Vielmehr wird auf die Online-Hilfe von MAX+PLUSII verwiesen, in der unterHelp→Search for Help onunter dem Stichwort „Vector File” einiges zum Aufbau solcherDateien zu finden ist. Ausserdem sollte die folgende, ausführlich kommentierteVector File für unser Beispiel relativselbsterklärend sein.

3.6.3 Simulation der Entity mparity

Zur Simulation der oben erstellten Entitymparity müssen wir zuerst noch eine entsprechendeVector Fileerstellen.Da wir, wie oben schon angedeutet, nur ein 4 Bit breites Eingangssignal haben, scheint es günstig, alle 16 möglichenEingangsvektoren nacheinander an den Eingang anzulegen. FolgendeVector File bildet daher die Grundlage unsererSimulation:

% Wir definieren ms als Zeiteinheit %% fuer die bei START und STOP %% angegebenen Zeiten. Auch moeglich: %% ns, us, s, mhz %

4Das liegt u.a. daran, dass die bei Testbenches üblichen „leeren” Entities (d.h. ohne port-Deklaration) vom Altera VHDL-Compiler nicht akzeptiertwerden. Als Ausweg kann man aber ein neues Design schreiben, das einen pseudo-Ein- und Ausgang hat und das zu testende Design überportmap-Konstrukte einbindet.

11

UNIT ms;

% Angabe der Startzeit %START 0;

% Angabe der Endezeit %STOP 15;

% Angabe des Intervals, in dem %% die Simulationszeit fortschreitet %INTERVAL 1;

% RADIX spezifiziert die Basis der %% Zahlendarstellung der unten ange- %% gebenen Test-Vektoren. Auch %% Angaben wie DEC, OCT, ... waeren %% hier moeglich %RADIX BIN;

% Hier faengt die Section mit %% Testmustern fuer den Eingangssig- %% nalvektor "bw" an. Hintereinander %% werden Startzeit u. jeweiliger %% Stimulus notiert. %INPUTS bw;PATTERN0> 00001> 00012> 00103> 00114> 01005> 01016> 01107> 01118> 10009> 100110> 101011> 101112> 110013> 110114> 111015> 1111

% Ende der Section durch Semikolon %;

% Section mit Ausgabesignal %OUTPUTS p;

Diese Datei kann wieder als Textdatei in der Entwicklungsumgebung erstellt werden und sollte im Projektverzeichnisunter dem Namenmparity.vec abgespeichert werden, da diese so automatisch vom Simulator geladen wird. Wie mansieht, wird jede Millisekunde ein neuer Testvektor auf das Eingangssignal geschaltet, sodass nach 15 ms alle möglichenTestvektoren „verarbeitet” wurden. Die Intervall-Zeit von 1 ms ist sogar sehr großzügig gewählt, da sich die Änderungam Eingang schon nach viel kürzerer Zeit am Ausgang bemerkbar macht. Zoomt man später in das Timing-Diagrammhinein, wird man diese Verzögerung sehen.

Nun starten wir (nach erfolgreicher Compilierung des Projektes!) im MAX+PLUS II-Programm den Simulatordurch MAX+plus II→Simulator. Danach ist das Simulatorfenster sichtbar. In der Zeile „Simulation Input” steht:mparity.vec , also die eben erstellte Datei. Jetzt kann die Simulation durch einen Klick auf denStart-Button gest-artet werden. Anschliessend wird die erfolgreiche Simulation in einem Fenster gemeldet.

12

Achtung: Sobald der Simulator eine sog. *.scf-Datei erzeugt hat, so verwendet er künftig diese als Simulationsstimu-lus. Damit werden Änderungen an der *.vec-Datei nicht berücksichtigt. Man kann sich hier behelfen, indem man vorder Simulation mit der neuen *.vec-Datei die entsprechende *.scf-Datei manuell löscht, oder mittels Doppelklick auf„Simulation Input” im Simulations-Kontrollfenster explizit die *.vec-Datei anstelle der *.scf-Datei auswählt.

3.6.4 Auswertung des Simulationsergebnisses

Nach erfolgreicher Simulation hat der MAX+PLUS II-Simulator eineWaveform-Datei mit der Dateiendung.scf erstellt,die direkt aus dem Simulatorfenster heraus durch Klick auf denOpen SCF-Button geöffnet werden kann. Diese Dateienthält die Simulationsergebnisse, d.h. die Änderungen an den zuvor in derVector Filespezifizierten Ein-, Ausgangs- undinternen (sog. „buried”)-Signalen.

Diese Änderungen werden zur besseren Übersicht in Form eines Impulsdiagrammes dargestellt. In Abbildung 4 ist dasErgebnis der vorangegangenen Simulation mit geöffneterWaveform-Datei zu sehen.

Abbildung 4: Impulsdiagramm dermparity -Entity nach der Simulation

Am Verlauf des Impulsdiagrammes kann dann genau die Pegeländerung an den Ein- und Ausgängen nachvollzogenwerden. Wie man erkennt, ist der Wert am Ausgangssignalp invers zu dem, den man erwarten würde (laut unserer obigenDefinition). Das liegt daran, dass in der Architekturbeschreibung die ermittelte Parität invertiert an das Ausgangssignal pübergeben wird.

Die Ursache dafür ist in der Art und Weise der Ansteuerung der LEDs auf dem Board zu finden. In 3.3 haben wir verein-bart, dass die LED bei gerader Parität (alsop = 0) nicht aufleuchten soll. In der Beschreibung zum Board (upds.pdf )kann aber auf Seite 9 nachgelesen werden, dass die LEDs low-aktiv sind, weswegen beip = 0 die LED aufleuchten wür-de. Daher ist die Invertierung des Signals notwendig. Bei Ansteuerung anderer Komponenten auf dem UP 2-Board solltedaher immer in der Dokumentation nachgelesen werden, welche Logik (positiv oder negativ) die Komponenten liefernbzw. erwarten.

Doch mit Kenntnis der eben gemachten Bemerkungen stellen wir anhand der Simulation fest, dass unser Design korrektist.

13

3.7 Synthese und Konfiguration

3.7.1 Auswahl der Zielhardware

Um das Design auf die UP 2-Hardware bringen zu können, muss erst noch eine Synthese ablaufen, die das Design fürdie entsprechende Zielhardware auf dem Board (also entweder den MAX- oder den FLEX-Baustein)synthetisiert, d.h. ineine Form bringt, die direkt auf den jeweiligen Chip übertragen werden kann. Diese Form hängt natürlich vom internenAufbau des gewählten Chips ab, weshalb die Synthese für jede Zielhardware neu gestartet werden muss. Das Ergebnisder Synthesephase ist eine Programmierdatei mit der Endung (z.B..sof ), die dann im nächsten Schritt auf die Hardwareheruntergeladen werden kann.

Wer die Ausgaben imMessages-Fenster nach dem Compilier-Vorgang aufmerksam betrachtet, wird feststellen, dassdort Meldungen wie:Selecting a device from ’...’ family for AUTO device ’mparity’ zu le-sen sind. Daran ist zu erkennen, dass bei dem unter 3.5 durchgeführten Compilieren schon eine Synthese durchgeführtwurde. Der Compiler hat dabei automatisch einen Schaltkreis ausgewählt. Da dieser nicht mit dem von uns verwendetenübereinstimmt, müssen wir die gewünschte Zielhardware von Hand einstellen.

Unsere Zielhardware ist das EPF10K70RC240-4 der Familie FLEX10K. Dazu wählen wir unterAssign→Deviceaus derDrop Down-Liste „Device Family” den WertFLEX10K aus. Damit in der „Device”-Liste exakt unser FPGA auftaucht,muss die Checkbox „Show Only Fastest Speed Grades” deaktiviert sein. Dann selektieren wir den entsprechenden Typenund bestätigen zum Schluss mitOK.

3.7.2 Konfiguration der Pins

Um unsere Entity mit der „Aussenwelt”, d.h. mit der LED und den DIP-Schaltern zu verbinden muss eine Zuweisungder I/O-Pins des FLEX-Chips zu den I/O-Pins unseres Designs konfiguriert werden. Diese Einstellung wird unter demMenü-PunktAssign→Pin/Location/Chipgetroffen. Bei „Node Name” ist der Name anzugeben, den der I/O-Pin in derEntity hat; bei „Pin” kann dann der entsprechende I/O-Pin am FLEX-Chip eingegeben werden. Jede Zuweisung muss mitAddbestätigt werden.

Die Nummern der entsprechenden I/O-Pins am FLEX-Chip sind durch die fest vorgegebene Verdrahtung beschränkt undwerden Ihnen entweder in Form einer Vorgabe-Datei mit Informationen über die Pin-Zuordnung oder in der entsprechen-den Praktikums-Anleitung genannt.

Für unser Beispiel ist die Zuweisung Entity-Pin – I/O-Pin aus Abbildung 5 zu entnehmen.

Abbildung 5: Pin-Zuweisungen für dasmparity -Projekt

Wie man sieht, muss für jedes Element des 4 Bit-Vektorsbwextra eine Pin-Zuweisung angegeben werden. Die Zuweisungwird durch Klick aufOK abgeschlossen.

3.7.3 Synthese

Wenn alle obigen Einstelungen abgeschlossen sind, so kann dass Projekt durch Start eines erneuten Compile-Vorgangsmit anschliessender Synthese fertiggestellt werden. Dabei sollten wieder keine Warnungen oder Fehler entstehen.

14

3.8 Herunterladen der Programmierdatei auf den FLEX10K

Wie oben schon erwähnt, wurde durch die obigen Schritte eine Programmierdatei mit dem Namenmparity.sof er-stellt, welche alle nötigen Informationen zur Programmierung des FLEX10K enthält. Diese muss jetzt nur noch über dasDownload Kabel in den entsprechenden Chip heruntergeladen werden.

Dazu starten wir das Programmier-Modul durchMAX+plus II→Programmer. Im JTAG-Menü selektieren wir dann zu-erst die OptionMulti-Device JTAG Chain. Dadurch sind wir in der Lage ohne Änderung der Jumper-Stellung beideprogrammierbaren Logik-Bausteine zu programmieren. Dann starten wir aus dem selben Menü dasMulti-Device JTAGChain Setup. Dort fügen wir dann zuerst den MAX-Chip durch Selektion des EintragesEPM7128Saus der „DeviceName” Drop Down-Liste hinzu. Dann fügen wir noch dasEPF10K70 aus der Drop Down-Liste hinzu. Dieses wird alserstes Device der Liste eingefügt und wir wählen wir für diesen Chip mitSelect Programming Filedie Programmerdateimparity.sof aus. Dabei darf für den MAX-Chip keine Programmierdatei eingestellt werden; bei „Programming FileNames” muss daher hinter dem EPM7128S<none> stehen.

Nach Bestätigung der eben gemachten Einstellungen durchOK kann das FLEX10K durch einen Klick aufConfigureim Programmier-Modul programmiert werden. Dieser Vorgang ist auf dem UP 2-Board daran zu erkennen, dass dieProgrammier-LED aufleuchtet. Nach Beendigung der Programmierung ist das Design auf dem FLEX-Chip und „läuft”.

Nun kann man sich selbst durch Veränderung der Schalter 1 bis 4 desFLEX_SWITCHdavon überzeugen, ob für dasjeweils eingestellte Bitwort die Parität korrekt und wie in 3.3 definiert auf angezeigt wird.

Im MAX+PLUS II Getting Started-Dokument, das auf den Poolrechnern unter dem Dateinamenmpgs.pdf zu findenist, kann man noch weitere Spezialitäten des MAX+PLUS II Entwicklungssystems nachlesen, werden. Dieses Dokumentkann auch bei [4] geladen werden.

4 Realisierung wichtiger kombinatorischer Systeme

Im letzten Abschnitt wollen wir noch kurz auf die Realisierung zweier wichtiger kombinatorischer Systeme eingehen. Daslogische Design der zu besprechenden kombinatorischen Systeme ist bereits aus der Digitaltechnik bekannt; hier sollenlediglich mögliche VHDL-Realisierungen vorgestellt werden.

4.1 Codewandler

Codewandler werden in digitalen Systemen immer dann benötigt, wenn Ausgaben, die als Bitfolge vorliegen auf Anzei-gesystemen (LED, Siebensegment oder LCD) zur Anzeige gebracht werden sollen. Der Codewandler muss dabei eineTransformation des Eingabecodes in einen Ausgabecode vornemehmen. Je nach Ein- und Ausgabecode lassen sich dieverschiedensten Codewandler mehr oder weniger effizient als VHDL-Verhaltensbeschreibung erstellen.

Hier soll ein Beispiel eines 2 Bit Binär-zu-1-aus-4-Codewandlers angegeben werden. Es wurde eine Realisierungsformgewählt, bei der der entsprechende Ausgangscode durch eine Wertetabelle ermittelt wird.

Bei Codewandlern für Codes mit mehr Bits als oben wäre der Schreibaufwand aber entsprechend größer, weshalb man ineinem solchen Fall eine algorithmische Version, die die Position der 1 im Ausgabecode berechnet, eventuell bevorzugenwürde.

entity codew isport(

in_code: in bit_vector(1 downto 0);out_code: out bit_vector(0 to 3)

);end codew;

architecture behavioral of codew isbeginp1: process(in_code)

begincase in_code is

when "00" => out_code <= "0001";

15

when "01" => out_code <= "0010";when "10" => out_code <= "0100";when "11" => out_code <= "1000";

end case;end process p1;

end architecture behavioral;

4.2 Multiplexer

Die Aufgabe von Multiplexern ist es, aus mehreren Eingangssignalen nach Maßgabe einer bestimmten Adresse eines derEingangssignale auszuwählen und auf das Ausgangssignal zu schalten. Damit erfüllen Multiplexer eine Funktionalität,die vor allen in Digitalrechnern sehr oft benötigt wird.

Auch bei einem einfachen Multiplexer ist eine Realisierung mittels einer Wertetabelle möglich. Im Beispiel ist ein 4-zu-1-Multiplexer zu sehen.

entity mmux4 isport(

s: in bit_vector(1 downto 0);d: in bit_vector(0 to 3);q: out bit

);end mmux4;

architecture behavioral of mmux4 isbeginp1: process(s, d)

begincase s is

when "00" => q <= d(0);when "01" => q <= d(1);when "10" => q <= d(2);when "11" => q <= d(3);

end case;end process p1;

end architecture behavioral;

5 Versuchsvorbereitung

Hinweis:

Diese Fragen dienen der Vorbereitung der praktischen Arbeit im Pool. Die stichpunktartigen Antworten zu diesen Fragensind zum Beginn der praktischen Übung mitzubringen.

1. Was ist VHDL und wozu wird es benutzt?

2. Aus welchen Bestandteilen ist eine VHDL-Beschreibung aufgebaut?

3. Welche Modellierungssichtweisen beim Design von digitalen Systemen kennt man?

4. Kann man durch Simulation die Korrektheit desparity -Beispiels aus 3.3beweisen? Wenn ja, warum? Ist so etwasmit Simulation generell (praktisch) möglich? Wo könnten dabei eventuell Probleme auftreten?

5. Geben Sie die vollständige Entity und Architecture des Addierers aus Aufgabe 3 an!

16

6 Aufgaben

Hinweis:

Die in den folgenden Aufgaben zu entwickelnden VHDL-Entwürfe sollen für das FLEX10K synthetisiert werden.

1. Entwickeln und testen Sie ein VHDL-Design, mit dem man im Quellcode voreingestellte 4-Bit-Muster auf einerLED-Reihe ausgeben kann. Die dazu benötigten Pinnummern finden Sie im Handout an den Praktikumsplätzen.

Hinweis: Die Synthesesoftware stürzt aus irgendeinem Grund ab, wenn das Design keine Eingänge besitzt. Inte-grieren Sie daher einen Eingang (z.B. von einem Taster) den Sie direkt auf eine weitere LED schalten.

Erweitern Sie dann Ihren Entwurf so, dass man das 4-Bit-Muster auf den DIP-Schaltern 1 bis 4 desFLEX_SWITCHeinstellen kann.

2. Entwerfen Sie zunächst einen einfachen Addierer in VHDL, ohne diesen in das FPGA zu laden. Er soll zwei natür-liche 4-Bit Binärzahlen addieren können. Bei einem Überlauf, d.h. das Ergebnis der Addition ist größer als24, solldas Bit-Wort’1111’ ausgegeben werden. Überprüfen Sie Ihren Entwurf durch Simulation mit einer geeignetenVector File.

3. Machen Sie aus dem entworfenen Addierer ein richtiges Design. Die beiden 4-Bit Operanden sollen auf dem DIP-SchalterFLEX_SWITCHeingestellt werden können und das Ergebnis soll auf geeigneten LEDs angezeigt werden.Der vorhin entworfene 4-Bit Addierer soll dabei im Sinne einer Strukturbeschreibung eingebunden werden.

Hinweis: Es ist auf die Low-aktiven DIP-Schalter und LEDs zu achten!

4. Zusatzaufgabe: Verändern Sie den vorigen Entwurf in geeigneter Weise, so dass die Ausgabe des Ergebnisses aufder Siebensegmentanzeigedezimalerfolgt. Bei einem Überlauf soll jetzt aber ein’E’ angezeigt werden.

Hinweise, Berichtigungen und Kritik zu den Übungsunterlagen bitte an:

[email protected] oder

[email protected] oder

[email protected]

Literatur und wichtige Links

[1] VHDL SimiliDie Kommandozeilenversion von VHDL Simili ist kostenlos und kann für Linux oder Windows heruntergeladenwerden.http://www.symphonyeda.com/proddownloads.htm

[2] The VHDL Cookbook, First EditionPeter J. AshendenKann in Form von mehreren.ps -Dateien unterftp.cs.adelaide.edu.au/pub/VHDL-Cookbook/kostenlos heruntergeladen werden.

[3] Schaltungsdesign mit VHDLGunther Lehmann, Bernhard Wunder, Manfred SelzEine ausführliche Einführung in VHDL und nebenbei ein gutes Referenzhandbuch. Ein „must-have” ;-) Das Buch, bestehend aus einer.pdf -Datei, ist kostenlos im Internet verfügbar.http://www.itiv.uni-karlsruhe.de/opencms/opencms/de/study/vhdl/book/download.html

[4] Altera University Program HomepageAuf diesen Seiten finden sich weitere Informationen zum UP 2-Entwicklungsboard und der MAX+PLUSII Software. Interessant sind insbesondere die Datenblätter zu den beiden auf dem Board be-findlichen programmierbaren Logik-Bausteinen und dasMAX+PLUS Getting Started-Dokument.http://www.altera.com/education/univ/unv-index.html

[5] Hamburg VHDL archivehttp://tech-www.informatik.uni-hamburg.de/vhdl/... eine Unmenge von VHDL-Links

19. April 2005

17