I205: Prozessor: R(egister)-T(ransfer)

HARDWARE - PRAKTIKUM
Digitaltechnik I200
Version 1/2016
16. März 2016
Einführung in die Xilinx ISE Design Suite
I201: Schaltnetze
I202: Flipflops und RAM
I203: Schaltwerke: Zähler
I204: Prozessor: ALU
I205: Prozessor: R(egister)-T(ransfer)-Struktur
I206: Prozessor: Mikroprogrammierung
Grundpraktikum für Ingenieure
Inhaltsverzeichnis
1. Einführung in die Xilinx ISE Design Suite
1.1. Projekt anlegen . . . . . . . . . . . . . . . . . . . . .
1.2. Erstellen einer Schaltung . . . . . . . . . . . . . . . .
1.3. Simulation einer digitalen Schaltung mit ISim . . . .
1.4. Erstellen einer wiederverwendbaren Subkomponente
1.5. Wichtige Hinweise und Tipps . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
2
3
7
9
10
I201: Schaltnetze
I201 A1: Volladdierer . . . . . . . . . .
I201 A2: Einfache Multiplexer . . . . .
I201 A3: Multiplexer für Datenkanäle .
I201 A4: Dekodierer . . . . . . . . . .
I201 A5: Shifter . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
12
13
13
14
15
I202: Flipflops und RAM
I202 A1: RS-Basis-Flipflop . . . . .
I202 A2: Getaktetes RS-Flipflop . .
I202 A3: D-Latch . . . . . . . . . .
I202 A4: JK-Master-Slave-Flipflop
I202 A5: RAM . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
16
18
19
19
20
21
.
.
.
.
.
.
.
.
.
.
I203: Schaltwerke: Zähler
23
I203 A1: Asynchroner Binärzähler . . . . . . . . . . . . . . . . . . . . . . . . . 26
I203 A2: Synchroner Glixon-Code-Zähler . . . . . . . . . . . . . . . . . . . . . . 27
I203 A3: Synchroner Binärzähler . . . . . . . . . . . . . . . . . . . . . . . . . . 28
I204: Prozessor: ALU
Einleitung: von-Neumann-Architekturen
I204 A1: Carry-Look-Ahead-Addition . .
I204 A2: 1-bit-ALU . . . . . . . . . . . .
I204 A3: Flags . . . . . . . . . . . . . .
I204 A4: 4-bit-ALU . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
29
29
31
32
33
34
I205: Prozessor: R(egister)-T(ransfer)-Struktur
I205 A1: Eine kleine Rechnung . . . . . . . .
I205 A2: Carry-Flipflop . . . . . . . . . . . .
Prozessorarchitekturen . . . . . . . . . . . . .
Taktung der RT-Struktur . . . . . . . . . . .
I205 A3: Taktung und Mikroprogramm . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
35
36
37
39
40
42
.
.
.
.
.
.
.
.
.
.
I206: Prozessor: Mikroprogrammierung
44
I206 A1: Schieben und Rotieren . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Sprungbefehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
i
Grundpraktikum für Ingenieure
I206 A2: Software-Multiplikation . . . . . . . . . . . . . . . . . . . . . . . . . . 47
I206 A3: Hardware-Multiplikation . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Befehlsausführung in CISC-Architekturen . . . . . . . . . . . . . . . . . . . . . 51
A. Bausteine für die Digitaltechnik
52
B. Beispiele für die Signalgenerierung
53
C. Verwendung eines Vektors aus Einzelsignalen in einer Testbench
57
D. Simulations Konfigurationsdatei
60
E. In den Datenblättern benutzte Begriffe und Abkürzungen
61
F. Literatur zum Grundpraktikum Informatik
62
ii
Einführung in die Xilinx ISE Design Suite
1. Einführung in die Xilinx ISE Design Suite
Xilinx ISE ist ein weitverbreitetes Programmpaket der Firma Xilinx ∗ . Es bietet unter
anderem die Möglichkeit digitale Schaltungen zu entwerfen und diese zu simulieren.
Die Schaltungen werden im grafischen ISE Editor als Schematic durch das Verschalten
bereitgestellter und eigener Bauteile erstellt. Mithilfe einer sogenannten Testbench kann
das Verhalten der Schaltung für definierte logische Eingangspegel getestet werden.
Digitale Schaltungssimulation mit Xilinx ISE
Schaltplan zeichnen auf grafischer Oberfläche
Bauteilbibliothek
Testbench erstellen
Schaltungssimulation
Die Schaltungssimulation erfolgt durch das integrierte Programm ISim. Im Simulator
wird das Verhalten der digitalen Schaltung grafisch veranschaulicht.
In den nachfolgenden Abschnitten wird Ihnen der Umgang mit Xilinx ISE kurz erläutert.
∗
www.xilinx.com
1
Grundpraktikum für Ingenieure
Abbildung 1: Xilinx ISE in der Übersicht
1.1. Projekt anlegen
In einer Projektdatei werden untergeordnete Dateien und Hierarchien, sowie die Zielplattform spezifiziert. Ein neues Projekt kann über Project - New Project erzeugt werden.
Ihnen wird für das Praktikum ein vorgefertigtes Projekt zur Verfügung gestellt. Während
der Versuchsdurchführung müssen keine weiteren Änderungen an den Projekteinstellungen vorgenommen werden. Außerdem sind dem Projekt alle benötigten Bauteile der
Bauteilbibliotheken zugeordnet, so dass Sie direkt mit dem Schaltungsentwurf beginnen
können.
2
Einführung in die Xilinx ISE Design Suite
Abbildung 2: Wichtige Schaltflächen zur Projektverwaltung
1.2. Erstellen einer Schaltung
Um eine neue Schaltung zu erstellen, wird eine leere Designfläche benötigt, auf die Sie
die Bauteile platzieren können. Diese kann über Projekt - New Source... - Schematic oder
die zugehörige Schaltfläche zum Projekt hinzugefügt werden. Alternativ können Sie auch
über einen Rechtsklick auf eine beliebige Projektdatei und New Source... - Schematic
eine Schaltung erstellen.
Einfügen und Vernetzen von Komponenten
Eine von Ihnen auf Papier entworfene Schaltung kann nun auf die leere Designfläche
übertragen werden. Zuerst werden die Bauteile (Components) positioniert.
Wählen Sie Add - Symbol oder die Tastenkombination Ctrl + M, um in die Komponentenübersicht zu gelangen. Die jeweiligen Bauteilbibliotheken sind in unterschiedliche
Kategorien eingeteilt. Für das Praktikum sollten Sie nur auf Symbole aus den Kategorien
HWP und HWP_advanced zurückgreifen.
Suchen Sie aus den Bibliotheken die benötigten Bauteile heraus und platzieren Sie sie
auf der Zeichenfläche des Editors durch einen Klick mit der linken Maustaste. Mit gehaltener linker Maustaste lassen sich eingefügte Komponenten verschieben. Markierte
Bauteile werden mittels Edit - Rotate (Ctrl + R) gedreht, bzw. mit Edit - Mirror (Ctrl
+ E ) gespiegelt. Gelöscht werden markierte Bauteile durch Edit - Delete oder die Taste
Entf.
Eine Übersicht aller Bauteile finden Sie im Anhang auf Seite 52.
Um Komponenten in der Simulation identifizieren zu können, besteht die Möglichkeit der
individuellen Namensvergabe. Führen Sie einen Doppelklick mit der linken Maustaste auf
3
Grundpraktikum für Ingenieure
einem Bauteil aus, so gelangen Sie zu dessen Eigenschaften. Sie können den Bezeichner
im Feld InstName beliebig ändern.
Zum Verschalten der einzelnen Komponenten gehen Sie auf Add - Wire oder nutzen Sie
die Tastenkombination Ctrl - W. Man unterscheidet zwischen zwei möglichen Verbindungsarten:
a) Verbindung zwischen Ein- und Ausgängen von Schaltkreisen
Selektieren Sie mit jeweils einem Mausklick mit der linken Taste den Anfangs- und
den Endpunkt der Leitung, die Verbindung wird dann automatisch hergestellt.
b) Verbindung zwischen einem Ein- oder Ausgang eines Schaltkreises und einem nach
außen geführten freien Leitungsende
Bestimmen Sie den Anfangspunkt der Leitung mit einem linken Mausklick, bewegen
Sie die Maus zum gewünschten Endpunkt und klicken Sie die linke Maustaste
doppelt.
Leitungsverbindungen zwischen Komponenten können verschoben werden, indem man
mit der linken Maustaste einen Abschnitt der Leitung hält und entsprechend verschiebt.
Leitungen können zusätzlichztlich über Add - Net Name oder die Tastenkombination
Ctrl + D mit einem Namen (Label ) versehen werden. Leitungen, die den gleichen Namen
tragen, werden vom Programm automatisch als verbunden angesehen.
Für alle beschriebenen Funktionen finden Sie in der Werkzeugleiste neben der Zeichenfläche auch ein entsprechendes Symbol.
Spezielle Netze: Der Bus
Ein Bus ist in digitalen Schaltungen eine Sammelleitung für mehrere Signale. Ein Bus
umfasst dabei eine beliebige Anzahl an Leitungen. In ISE kann ein Bus sehr leicht erstellt werden, indem Sie einer normalen Leitung eine gewisse “Breite” zuweisen. Dazu
vergeben Sie einen Namen, der zusätzlich in Klammer die begrenzenden Größen enthält.
Zum Beispiel kann ein Datenbus mit dem Namen D eine Datenbreite von 6 zugewiesen
bekommen, indem man ihn D(5:0) nennt. Dies entspricht prinzipiell sechs Einzelleitungen
D0, D1, D2, D3, D4 und D5, spart aber erheblich viel Platz ein.
Sollen nun über einen Bus Signale an Komponenten verteilt werden, die über einen einfachen digitalen Eingang verfügen, so muss man eine Bus Trap einsetzen. Eine Trap ist
eine Abzweigung eines bestimmten Signals von einem Bus. Sie finden in der Symbolleiste
am linken Rand der Zeichenfläche die Schaltfläche Add Bus Trap. Positionieren Sie eine
Trap an einem Bus, so kann eine Einzelleitung separiert werden. Sie können auch im
Kontextmenü Add Wire Options des Vernetzungswerkzeugs einstellen, dass automatisch
eine Trap eingefügt werden soll, wenn Sie eine Leitung von einer Komponente zu einem
Bus legen. Wählen Sie dazu den Punkt When a wire connects a symbol pin and a bus
aus.
Es ist erforderlich zu spezifizieren, welche der Busleitungen durch die Trap abgezweigt
4
Einführung in die Xilinx ISE Design Suite
werden soll. Daher muss der Einzelleitung der zugehörige Name gegeben werden. Um
zum Beispiel das Signal D3 an den Eingang eines Bauteils anzulegen, nennen Sie die
Leitung D(3). Das gleiche Signal kann beliebig oft vom Bus abgezweigt werden.
In einigen Fällen erweist es sich als sehr praktisch einen Bus anstatt von Einzelsignalen
als Schaltungseingang zu nutzen. Sie können an einen Bus einen Port anschließen, der
dann automatisch den Namen des Busses übernimmt. In der Simulation kann der Bus
dann vektoriell angesteuert werden. Das heißt, Sie können in der Testbench alle Signale
eines Busses für einen gewissen Zeitpunkt gleichzeitig bestimmen. Zum Beispiel:
D <= "011010";
Dies entspricht folgenden Anweisungen.
D(0)
D(1)
D(2)
D(3)
D(4)
D(5)
<=
<=
<=
<=
<=
<=
’0’;
’1’;
’0’;
’1’;
’1’;
’0’;
Bei der Zuweisung erfolgt die Signalbelegung des linksäußeren Wertes immer an das
Signal, das bei der Benennung des Busses ebenfalls links steht. Heißt der Bus D(5:0), so
erhält D(5) den Wert des Eingabevektors an der linkesten Stelle. Wird der Bus D(0:5)
benannt, so erhält D(0) den linkesten Wert.
Ebenfalls möglich es es, einzelne Signale aus einer Schaltung in der Simulation als Bus
bzw. Vektor zusammenzufassen. Dazu muss man die Testbench um folgende Befehle
erweitern:
SIGNAL E : std_logic_vector(3 downto 0) := "0000";
E0
E1
E2
E3
<=
<=
<=
<=
E(0);
E(1);
E(2);
E(3);
E <= "0101";
Was wird gemacht? Es wird ein Signal E als Vektor definiert, bestehend aus vier Signalen.
Dieser Vektor hat den Startwert „0000“. Anschließend werden die einzelnen Vektoren E(0],
E(1), E(2) und E(3) den entsprechenden Signalen E3, E2, E1 und E0 zugeordnet. Danach
kann man in der Testbench den Vektor E benutzen. Im Anhang C ist ein komplettes
Beispiel aufgeführt, wie so eine Testbench aussieht. Die entscheidenden Zeilen sind grau
hinterlegt.
5
Grundpraktikum für Ingenieure
Entfernen von Komponenten und Netzen
Selektierte Bauteile und Vernetzungen können über die Taste Del (Entf ) gelöscht werden. Es gilt zu beachten, dass bei der Auswahl von Leitungen zwei unterschiedliche
Möglichkeiten der Auswahl bestehen. Einerseits können Sie ganze Netze auswählen oder
nur einzelne Leitungen. Im Menü des Auswahlwerkzeugs (Pfeilsymbol) steht Ihnen dazu
Select the entire branch und Select the line segment zur Verfügung.
Mit gehaltener linker Maustaste können Sie einen Kasten um mehrere Bauteile ziehen.
Alle darin enthaltenen Komponenten werden gesammelt markiert. Außerdem können Sie
über Edit - Select All oder die Tastenkombination Ctrl + A alle Komponenten der Zeichenfläche auswählen.
Anlegen von Ein- und Ausgängen (Ports)
Xilinx ISE erfordert das Definieren von Schaltungsein- und Ausgängen. Dazu wird an
freien Leitungsenden oder direkt an den Verbindungspunkten der Komponenten ein sogenannter Port hinzugefügt. Die Datenrichtung des Ports ergibt sich automatisch gemäß
der beteiligten Bauteilfunktion.
Ein Port kann über Add - I/O Marker oder die Tastenkombination Ctrl + G ausgewählt
werden. Mit der linken Maustaste wird seine Position festgelegt. Sie sollten jeden Port mit
einem nachvollziehbaren Namen versehen. Dazu können Sie entweder einen Leitungsnamen vergeben oder über einen Doppelklick mit der linken Maustaste auf den Port seinen
Namen ändern.
In der Werkzeugleiste neben der Zeichenfläche finden Sie ebenfalls einen Button zum
Einfügen eines Ports.
Überprüfen der Schaltung
Die von Ihnen entworfene Schaltung kann auf Verschaltungsfehler überprüft werden,
indem Sie Tools - Check Schematic ausführen.
Speichern
Ist die Zeichnung fertiggestellt oder soll die Arbeit daran unterbrochen werden, ist sie
mit File - Save oder der Tastenkombination Ctrl - S abzuspeichern.
6
Einführung in die Xilinx ISE Design Suite
1.3. Simulation einer digitalen Schaltung mit ISim
Nach dem Fertigstellen Ihrer Schaltung, kann diese durch den Simulator ISim auf ein
korrektes Verhalten überprüft werden. Dazu muss für jeden eingehenden Pegel der Ausgang der Schaltung überprüft werden.
Die Testbench legt fest, welche logischen Pegel zu einem bestimmten Zeitpunkt an den
Eingängen Ihrer Schaltung anliegen. Um eine Testbench für eine Schaltung zu erstellen,
wählen Sie Projekt - New Source... - VHDL Testbench. Vergeben Sie einen Namen für die
Testbench. Im nachfolgenden Schritt bestimmen Sie die Schaltung für die die Testbench
erzeugt werden soll, damit ein grundlegendes Framework automatisch generiert werden
kann. Die Testbench wird zum Projekt hinzugefügt und kann von Ihnen ausgefüllt werden.
Testbench
Die Testbench ist ein VHDL Framework. Die Ports Ihrer Schaltung werden als Signal
aufgeführt, das von Ihnen mit logischen Pegeln belegt werden muss. Die Syntax
entnehmen Sie dem nachfolgenden Beispiel. Weitere Beispiele finden Sie B.
7
Grundpraktikum für Ingenieure
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
LIBRARY UNISIM;
USE UNISIM.Vcomponents.ALL;
ENTITY test_tb IS
END test_tb;
ARCHITECTURE behavioral OF test_tb IS
COMPONENT test
PORT (
A : IN STD_LOGIC;
B : IN STD_LOGIC;
Y : OUT STD_LOGIC
);
END COMPONENT;
SIGNAL A : STD_LOGIC;
SIGNAL B : STD_LOGIC;
SIGNAL Y : STD_LOGIC;
BEGIN
UUT : test
PORT MAP (
A => A,
B => B,
Y => Y
);
tb : PROCESS BEGIN
--Initialisierung
A <= ’0’;
B <= ’0’;
--Pegel für 50 ns halten
wait for 50 ns;
--Pegelwechsel Signal A, B unverändert
A <= ’1’;
wait for 100 ns;
A <= ’0’;
B <= ’1’;
WAIT;
END PROCESS;
END;
8
Einführung in die Xilinx ISE Design Suite
Simulation
Um den Simulator zu starten, wechseln sie von der Design View Implementation zu Simulation. Dort werden die von Ihnen erstellten Testbench Dateien angezeigt. Im Fenster
Processes klicken Sie doppelt auf Simulate Behavioral Model. Die Schaltung wird einer
Fehlerprüfung unterzogen und anschließend gemäß der Testbench simuliert. Das Simulatorfenster öffnet sich und die in der Testbench aufgeführten Signale werden visualisiert.
Mit den Pfeiltasten der Tastatur können Sie innerhalb der Simulation auf markierten
Signalen von Pegelwechsel zu Pegelwechsel navigieren. Markierung für zeitliche Messungen lassen sich mit einem Rechtsklick und Add - Marker an die Position des Mauszeigers
einfügen.
Das Simulationsprogramm erstellt in der Regel ein Signalverlaufsdiagramm für die Dauer
von 1000 ns.
Informationen zur Simulations-Konfigutrationsdatei 60
1.4. Erstellen einer wiederverwendbaren Subkomponente
In einigen Aufgaben wird von Ihnen gefordert, dass eine erstellte Schaltung als Subkomponente wiederverwendet werden soll, z.B. das Einfügen des erstellten Multiplexers
mux2-1. Für alle benötigten Subkomponenten sind vorgefertigte Symbole in Ihrem Projektverzeichnis hinterlegt. Damit das Symbol mit Ihrer Schaltung assoziiert werden kann,
9
Grundpraktikum für Ingenieure
ist es erforderlich, dass alle Portbenennungen übereinstimmen. Stellen Sie also sicher, dass
die Ports Ihrer Schaltung entsprechend der Ports des Symbols benannt sind. Um sicherzugehen, sollten Sie die Benennungen der Ports vor dem Speichern kontrollieren. Über
File - Open können Sie das gewünschte Symbol mit der Dateiendung sym aus Ihrem
Projektordner wählen und anzeigen lassen. Anschließend ist die Schaltung dann unter
dem in der Aufgabe genannten Namen zu speichern.
Damit Ihre Schaltung als Subkomponente in einer anderen Schaltung verwendet werden
kann, muss sie dem Projekt zugewiesen sein. Ist die zu assoziierende Schaltung noch
nicht im Projekt, so sollte sie über einen Rechtsklick auf die in Hierarchy dargestellten
Projektdatein und Add Source... in das Projekt aufgenommen werden.
Sind diese Schritte erfolgt, so können Sie durch Verwendung des Symbols ihre Schaltung
als Subkomponente in einem anderen Design einbinden. Bedenken Sie, dass das jeweilige
Symbol nicht in der Komponentenbibliothek HWP, sondern im Projektordner zu finden
ist.
In den entsprechenden Aufgaben werden Sie auf das Symbol noch einmal gesondert hingewiesen.
1.5. Wichtige Hinweise und Tipps
Wählen Sie die Namen für die einzelnen Schaltungen eindeutig (z.B. ip201a1). Achten
Sie unbedingt auf Groß- und Kleinschreibung, insbesondere um Verknüpfungen zwischen
Ihren Schaltungen und vorgefertigten Symbolen herstellen zu können.
In der ISE Testbench können die folgenden Zeiteinheiten verwendet werden:
Einheit
s
ms
us
ns
ps
10
Bezeichnung
Sekunde
Millisekunde
Mikrosekunde
Nanosekunde
Picosekunde
Größenordnung
10−3
10−6
10−9
10−12
I201: Schaltnetze
I201: Schaltnetze
Ein Schaltnetz ist nach DIN eine Funktionseinheit zum Verarbeiten von Schaltvariablen,
wobei der Wert am Ausgang nur vom Wert am Eingang abhängt. Ein Schaltnetz lässt
sich aus Gattern (Schaltkreisen oder Verknüpfungsgliedern) aufbauen. Nachfolgend die
Symbole für die Schaltkreise nach IEC (International Electrotechnical Commission):
AND-Gatter
x
&
y
f0
OR-Gatter
x
≥1
y
f2
NOT-Gatter
x
1
r
f4
NAND-Gatter
x
& r
y
NOR-Gatter
x
≥1 r
y
XOR-Gatter
x
=1
y
f1
f3
f5
Für den Entwurf der Schaltnetze sollen Sie, ausgehend von einer Wertetabelle, die disjunktive Normalform bilden und anschließend die erhaltene Gleichung nach den Regeln
der Booleschen Algebra oder mit einem KV-Diagramm minimieren. Das Ergebnis lässt
sich direkt in eine zweistufige UND-ODER-Schaltung übertragen. Finden Sie die für die
direkte Umsetzung erforderlichen Logikbausteine nicht in der Bibliothek, müssen Sie die
Schaltung - unter Beibehaltung der Zweistufigkeit - mit den entsprechenden Booleschen
Regeln umformen.
Es wird angenommen, dass die Variablen am Eingang des Schaltnetzes (falls erforderlich) auch mit ihrem Komplement zur Verfügung stehen. Wo das nicht der Fall ist, käme
für alle Variablen, deren Komplement gebraucht wird, noch eine Gatterebene für einen
Inverter hinzu. Diese Ebene wird aber nicht als dritte Stufe gezählt.
Hinweis: Es existiert ein Baustein hwp_invninv, der einen invertierenden und einen
nicht invertierenden Ausgang hat. Dieser sollte immer dann verwendet werden, wenn ein
Signal sowohl invertiert als auch in seiner nicht invertierten Form benötigt wird.
11
Grundpraktikum für Ingenieure
I201 A1: Volladdierer
CI
A
S
B
CO
Entwerfen Sie ein Schaltnetz (in zweistufiger NAND-Logik), welches drei Bits addieren
kann, die beiden Operanden A und B und den Eingangsübertrag CI (carry in). Die
Ausgänge sollen die Summe S und den Ausgangsübertrag CO (carry out) liefern; dies
ist ein sog. 1-Bit-Volladdierer.
a) Stellen Sie für Summe S und Übertrag CO die Wertetabelle und KV-Diagramme
auf. Lassen sich die Normalformen vereinfachen? Realisieren und testen Sie die
Schaltung des Addierers. Messen Sie dabei auch die Verzögerungszeiten tP HL und
tP LH ∗ eines Gatters hwp_nand2.
b) Thema Hazards Zeigen Sie anhand eines einfachen Beispiels (logisches Grundglied plus Inverter) die Entstehung eines Hazards und simulieren Sie die Schaltung.
Wie lässt sich mithilfe eines invninv -Baustein dieser Hazard vermeiden? Was bewirkt der invninv -Baustein? Bauen Sie die verbesserte Schaltung in der gleichen
Schaltung ein und zeigen Sie, dass der Hazard in der Simulation verschwunden ist.
∗
12
s. Anhang E
I201: Schaltnetze
I201 A2: Einfache Multiplexer
Ein Multiplexer ist ein elektronischer Umschalter für Datenkanäle. Ein Datenkanal besteht aus einer oder mehreren Leitungen. Gesteuert durch Anwahlbits S wird einer der
(Eingangs-)Datenkanäle Di auf den (Ausgangs-)Datenkanal Y geschaltet.
Entwerfen und testen Sie eine Schaltung für einen (2 zu 1)-Multiplexer und einen (3 zu 1)Multiplexer in NAND-Logik. Um die Schaltungen in den folgenden Aufgaben als eigenständige Bauteile wiederverwenden zu können, erzeugen Sie die Subkomponenten
mux2_1 und mux3_1 gemäß der vorgefertigten Symbole. Verwenden Sie für die Einund Ausgänge Ihrer Schaltung genau die in der Abbildung verwendeten Namen. Im Folgenden können Sie nun Ihre Multiplexer-Schaltung direkt als Bauteil mit entsprechendem
Symbol verwenden ∗ .
I201 A3: Multiplexer für Datenkanäle
Ein Datenkanal kann durchaus eine Bitbreite von mehr als einem Bit besitzen, was in
dieser Aufgabe demonstriert werden soll.
a) Entwickeln Sie einen vierfachen (2 zu 1)-Multiplexer. Das logische Verhalten entspricht dem von vier (2 zu 1)-Multiplexern, deren Steuerleitungen zusammengeschaltet werden.
b) Wieviele Ein- und Ausgänge besitzt ein j-facher (k zu 1)-Multiplexer?
(j = Breite eines Datenkanals)
(k = Anzahl der Eingangs-Datenkanäle)
Hinweis: Schauen Sie sich den Abschnitt “Spezielle Netze: Der Bus” noch einmal an.
Gegebenenfalls kann ein Bus an dieser Stelle hilfreich sein.
∗
Subkomponenten: s. Kapitel 1.4
13
Grundpraktikum für Ingenieure
I201 A4: Dekodierer
Realisieren und testen Sie einen 2-Bit-Binärdekodierer (NOR-Logik). Dies ist eine Schaltung mit zwei Eingängen (E1 , E0 ) ∈ {0, 1}2 und vier Ausgängen (A3 , A2 , A1 , A0 ) ∈
{0, 1}4 . Belegt man die Eingänge mit einer 2-Bit-Dualzahl j = E1 ∗ 2 + E0 , so gilt
Aj = 1 und für alle anderen Ausgänge Ai = 0, mit i 6= j. Diese Schaltung wird allgemein
auch als „1-aus-n-Dekoder“ bezeichnet.
Verpacken Sie die Schaltung in das Symbol d2_4, analog zu I201 A2.
Hinweis: Schauen Sie sich das Symbol des Dekodierers an, damit Sie wissen, wie Sie
die Schaltung bauen müssen.
14
I201: Schaltnetze
I201 A5: Shifter
Im Folgenden soll eine 4-Bit-Schiebe-Einheit (shifter ) realisiert werden. Ein solches
Schaltnetz hat fünf Eingänge E3 , E2 , E1 , E0 und Xin , fünf Ausgänge A3 , A2 , A1 , A0 und
Xout , sowie zwei Steuerleitungen Sh1 , Sh0 , welche die drei Operationen no_shift [0,0],
shift_left [0,1] und shift_right [1,0] auswählen sollen.
Die drei Operationen sollen folgende Bedingungen erfüllen:

und Xout = Xin
für alle i ∈ {0, 1, 2, 3}, falls no_shift
 Ei
Ei−1 und A0 = Xin
und Xout = E3 für alle i ∈ {1, 2, 3},
falls shift_left
Ai =

Ei+1 und A3 = Xin
und Xout = E0 für alle i ∈ {0, 1, 2},
falls shift_right
Hinweis: Der Multiplexer mux3_1 und der Dekoder d2_4 sollen nicht beim Entwurf
der Schaltung benutzt werden. Nach Minimierung des Schaltnetzes sollten Sie nicht mehr
als 22 Gatter (zwei hwp_invninv, zehn hwp_nand2 und zehn hwp_nand3 ) benötigen.
Bei dieser Schaltung haben Sie sieben Eingangs-Variablen zu berücksichtigen. Der Entwurf wird Ihnen dadurch erleichtert, dass Sie für jeden Ausgang Ai bzw. Xout identische
Schaltnetze zu entwerfen haben, die sich nur in der Beschaltung der Eingänge unterscheiden, somit treten pro Teil-Schaltnetz nur noch fünf Variablen auf.
15
Grundpraktikum für Ingenieure
I202: Flipflops und RAM
In den Aufgaben dieses Versuchs lernen Sie den Aufbau verschiedener Flipflop-Typen
kennen. Durch die Einführung von Rückkopplungspfaden können aus zwei NANDSchaltkreisen oder zwei NOR-Schaltkreisen einfache bistabile Kippschaltungen (Flipflops) aufgebaut werden, die über zwei stabile Zustände verfügen. Durch geeignete Ansteuerung kann das Flipflop aus jedem der beiden Zustände in den anderen Zustand
übergehen. Die Vielzahl verschiedener Flipflops lässt sich in drei Klassen gliedern:
1. Nicht taktgesteuerte Flipflops
2. Taktpegel gesteuerte Flipflops, auch Latches
3. Taktflanken gesteuerte Flipflops
Das logische Verhalten von Flipflops kann beschrieben werden durch:
• Wertetabellen
• charakteristische Gleichungen
• Zustandsgraphen
Flipflops sind Schaltwerke, d.h. die Ausgangsvariablen hängen also nicht nur von den
Eingangsvariablen, sondern auch vom jeweiligen Zustand des Flipflops selbst ab. Man
unterscheidet deshalb zwischen dem „alten“ Wert der Ausgangsvariablen Q und dem
„neuen“ Wert der Ausgangsvariablen Q+ , der sich aus den Eingangsvariablen Ej und
dem Zustand Q des Flipflops ergibt:
ungetaktete Flipflops
getaktete Flipflops
Q
Ausgangsvariable des
vorigen stabilen Zustandes
Ausgangsvariable des
letzten stabilen Zustandes vor dem Taktimpuls
Q+
Ausgangsvariable und
Folgezustand
resultierend aus Ej und
Q
Ausgangsvariable und
Folgezustand resultierend aus Ej und Q nach
dem Taktimpuls
In der Wertetabelle wird dargestellt, wie Q+ von den Ej und von Q abhängig ist. Bei
getakteten Flipflops ist der Takt CLK (clockpulse) zwar eine zusätzliche Eingangsvariable,
er wird jedoch nicht mit in die Wertetabelle aufgenommen, denn Q bzw. Q+ werden
jeweils nur vor bzw. nach einem Taktimpuls betrachtet.
Beschreibt man die Wertetabelle durch einen (minimierten) Booleschen Ausdruck, so
erhält man die charakteristische Gleichung Q+ = f (Ej , Q) des Flipflops.
16
I202: Flipflops und RAM
Alle Änderungen des Zustandes eines Flipflops erfolgen in Abhängigkeit von Eingangsvariablen. Stellt man jeden Zustand Qj eines Flipflops als Knoten dar (etwa als Kreis und
mit den Ausgangswerten beschriftet) und den Übergang Qj ⇒ Qj+1 als Kante (etwa als
Pfeil vom Kreis Qj zum Kreis Qj+1 , beschriftet mit der den Übergang verursachenden
Kombination der Eingangsvariablen), dann erhält man einen gerichteten Graphen, den
sog. Zustandsgraphen (s. Abb.). Auch hier wird bei getakteten Flipflops der Takt CLK
nicht aufgeführt.
1,0
E1,E0
Q1,Q0
0,1
1,0
0,1
Bei einigen Flipfloptypen dürfen bestimmte Wertekombinationen der Eingangsvariablen
nicht zugelassen werden, da sie direkt oder indirekt zu undefinierten Ausgangszuständen
führen können. In diesen Fällen ist zu der charakteristischen Gleichung eine entsprechende
Nebenbedingung anzugeben.
Die Taktung eines Flipflops wird taktpegelgesteuert genannt, wenn die Übernahme der
Eingangsinformation während der ganzen Zeit, in der der Takt einen bestimmten Wert,
z.B. [1] annimmt, erfolgen kann.
Flipflops heißen flankengesteuert, wenn die Übernahme der Eingangsinformation und die
Weitergabe der gespeicherten Information an den Ausgang nur während des Übergangs
des Taktes von einem logischen Pegel in den anderen erfolgt.
17
Grundpraktikum für Ingenieure
I202 A1: RS-Basis-Flipflop
NZ
&
```
s r
Q1
```
&
s r
Q2
NR
a) Realisieren und simulieren Sie die Schaltung des RS-Basis-Flipflops, bestehend aus
zwei rückgekoppelten NAND-Gattern.
b) Vervollständigen Sie die zugehörige Wertetabelle durch Experimentieren mit folgender Testsequenz:
R(ücksetzen) → Sp(eichern) → S(etzen) → Sp → (R und S) gleichzeitig → Sp
NZ
0
0
0
0
1
1
1
1
NR
0
0
1
1
0
0
1
1
Q1
0
1
0
1
0
1
0
1
Q1 +
Q2 +
Simulieren Sie genau die vorgegebene Testsequenz! Einige Zustände können in der
Tabelle nicht aus der Testsequenz abgelesen werden. Diese müssen Sie durch Überlegungen herausfinden und kennzeichnen.
c) Stellen Sie die zugehörige KV-Tafel auf und bestimmen Sie die charakteristischen
Gleichungen (Q1 + , Q2 + ) des Flipflops (berücksichtigen Sie dabei auch evtl. Nebenbedingungen). Erstellen Sie den Zustandsgraphen.
d) Wie verhält sich der Ausgangszustand (Q1 , Q2 ) des Basis-Flipflops bei Änderung
von NR = NZ = 0 nach NR = NZ = 1?
Hinweis: Das vorangestellte N bei Signal-Eingängen und -Ausgängen soll anzeigen, dass
bei Eingängen der auslösende aktive log. Pegel eine [0] ist, bei Ausgängen wird damit ein
zweiter negierter Ausgang angezeigt, häufig werden zwei inverse Ausgänge auch mit Q
und Q unterschieden.
18
I202: Flipflops und RAM
I202 A2: Getaktetes RS-Flipflop
S
&
s
Q1
&
r
CLK
s r
```
```
&
&
s
s r
Q2
R
a) Realisieren und simulieren Sie die Schaltung eines getakteten RS-Flipflops. Benutzen Sie die gleiche Testsequenz wie aus I202 A1. Wie muss der Takt sinnvoll
hinzugeschaltet werden?
b) Stellen Sie die zugehörige KV-Tafel auf, bestimmen Sie die charakteristischen Gleichungen (Q1 + , Q2 + ) des Flipflops und erstellen Sie den Zustandsgraphen.
I202 A3: D-Latch
D
r
&
s
Q
&
r
CLK
1
s
```
&
s
s r
``
`
&
s r
NQ
a) Verändern Sie die Schaltung des getakteten RS-Flipflops so, dass ein D-Latch (taktpegelgesteuertes D-Auffangflipflop) entsteht. Testen Sie diese Schaltung.
b) Ermitteln Sie die zugehörige Wertetabelle, geben Sie die charakteristischen Gleichungen (Q, NQ) und den Zustandsgraphen an.
19
Grundpraktikum für Ingenieure
I202 A4: JK-Master-Slave-Flipflop
r NSET
J
CLK
K
&
s
r
&
s r
```
``
`
&
s
&
s r
&
1
s
s
r
r
&
s r
Q
```
``
`
&
s
r
&
r
s r
NQ
NRESET
a) Realisieren Sie die Schaltung eines JK-Master-Slave-Flipflops (sog. SystemFlipflop) und testen Sie diese. Wie funktionieren dabei die Initialisierungseingänge
NSET und NRESET ? Wie müssen diese beim Normalbetrieb beschaltet werden?
Benutzen Sie für J und K eine ähnliche Testsequenz wie aus I202 A1, lassen Sie
lediglich J und K mal über mehrere Takte mit [1] beschaltet.
b) Stellen Sie die Wertetabelle, die charakteristischen Gleichungen (Q, NQ) und den
Zustandsgraphen auf (ohne Berücksichtigung der Initialisierungseingänge NSET
und NRESET ).
c) Wie wirken sich Änderungen der Dateneingänge während CLK = [1] bzw. während
CLK = [0] auf den Zustand des Master-Flipflops aus? Was macht das Slave-Flipflop
zur gleichen Zeit?
d) Was passiert bei der Beschaltung mit J = K = 1? Begründen Sie.
20
I202: Flipflops und RAM
I202 A5: RAM
Ein RAM (Random Access Memory) ist ein flüchtiger Speicher mit wahlfreiem Zugriff,
der Schreiben und Lesen jeder Speicherzelle durch Anlegen der Adresse und der Steuersignale ermöglicht. Es werden statische und dynamische RAMs unterschieden.
Die Speicherzelle eines statischen RAMs (SRAM ) besteht aus einer bistabilen Kippstufe,
die eines dynamischen RAMs (DRAM ) aus einem MOS-Kondensator, der in regelmäßigen Abständen (4-8ms) nachgeladen werden muss, da er sich durch Leckströme entlädt.
Ein ROM (Read Only Memory) ist ein nichtflüchtiger Speicher oder Festwertspeicher mit
ebenfalls wahlfreiem Zugriff, der aber nur gelesen werden kann. Das Einschreiben der Daten erfolgt im Halbleiterwerk durch Maskenprogrammierung mit den kundenspezifischen
Informationen.
A0
A1
RAM
4x1
RNW
NSEL
D
Y
a) Konstruieren Sie ein 4-fach 1-Bit-SRAM. Das SRAM soll einen Tristateausgang
haben. Verwenden Sie als Speicherelemente RS-Basis-Flipflops und für den Tristateausgang Bausteine hwp_tristate (s. Hinweis unten).
A0 und A1 sind die Adresseingänge, D ist der Dateneingang, Y ist der Datenausgang, RNW (Read-Write) schaltet zwischen Schreiben und Lesen um, und NSEL
(Select) erlaubt den Zugriff auf den Speicher.
Funktionsbeschreibung:
RNW
0
0
1
1
NSEL
0
1
0
1
Funktion
Ausgang hochohmig, Schreiben
Ausgang hochohmig, Zugriff gesperrt
Ausgang = Inhalt(Adr), Lesen
Ausgang hochohmig, Zugriff gesperrt
21
Grundpraktikum für Ingenieure
Als Entwurfshilfe für die Schaltnetze einer Speicherzelle x benutzen Sie eine Wertetabelle mit folgenden Ein- und Ausgängen:
Eingänge
NSEL
RNW
Ax (aus dem Adressdekoder)
D
Ausgänge
NSx , NRx
NTx (Steuereingang für den treiber-ts)
b) Testen Sie Ihre Schaltung indem Sie zunächst mit einer willkürlichen Datenfolge
alle Speicherzellen ihes RAMs beschreiben und diese anschließend wieder auslesen.
Bei timing-kritischen Pegelwechseln an den Eingängen A, RNW und D sollen Sie
dabei den Zugang zum Speicher über NSEL sperren.
c) Beschreiben Sie die in b) erwähnten timing-kritischen Pegelwechsel. Was ist damit gemeint? Warum muss der Baustein hier gesperrt werden? Überlegen Sie sich
(theoretisch) ein Szenario, in welchem der Baustein ohne Sperrung ein ungewolltes
Verhalten zeigen würde.
Hinweis (Tristate): Bausteine mit Tristate-Ausgang besitzen eine besondere Ausgangsstufe, die neben den zwei niederohmigen Zuständen für [1] und [0], einen über einen
Steuereingang ausgewählten dritten hochohmigen Zustand [Z], annehmen können. Die
Tristate-Ausgänge dürfen zusammengeschaltet werden, wenn sichergestellt ist, dass sich
höchstens ein Ausgang im niederohmigen Zustand befindet.
Tristate fähige Bausteine sind in der Symboldarstellung mit 5 gekennzeichnet.
22
I203: Schaltwerke: Zähler
I203: Schaltwerke: Zähler
Durch die Verwendung von Flipflops können Sie sequentielle Schaltwerke entwerfen, bei
denen die Ausgangsvariablen nicht nur, wie es bei den Schaltnetzen der Fall ist, von der
jeweiligen Kombination der Eingangsvariablen, sondern auch vom momentanen Zustand
der in der Schaltung enthaltenen Speicherelemente abhängen. In den Aufgaben diese
Versuchs entwerfen Sie spezielle Schaltwerke, nämlich Zähler. Diese zählen Taktimpulse
CLK. Die Abb. zeigt einen asynchronen 4-bit-Binärzähler:
PWR
FF0
Q0
FF1
Q1
FF2
Q2
FF3
Q3
J
CLK
K
Die T-Flipflops (Toggle-Flipflops: JK-Flipflops mit J = K = 1) wechseln bei jedem
Impuls am Takteingang ihren Zustand. Das erste Flipflop wird durch CLK getaktet, die
anderen durch den Ausgang ihres Vorgängerflipflops.
Allgemein gilt: Ein Asynchronzähler besitzt mindestens ein Flipflop, das nicht vom Systemtakt CLK getaktet wird.
0
1
2
3
4
5
6
7
8
9
10
11
12
CLK
Q0
Q1
Q2
Q3
23
Grundpraktikum für Ingenieure
Die nachfolgende Tabelle zeigt die Reihenfolge der Zustände und deren Interpretation als
Zählerstand:
Q3
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
Q2
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
Q1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
Q0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
dezimal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
hexadezimal
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
oktal
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
Nach 16 Zuständen wird wieder der Anfangszustand erreicht. Es handelt sich also um
einen modulo-16-Zähler, der im Binärcode zählt. Nachteile des Asynchronzählers, die Sie
in der ersten Aufgabe erkennen sollen, vermeidet ein synchroner Zähler, bei dem alle
Flipflops gemeinsam durch CLK getaktet werden.
Schaltnetz für die 8 Booleschen Funktionen
Ji , Ki (Q0 , Q1 , Q2 , Q3 ); i ∈ {0, 1, 2, 3}
CLK
Q0
Q1
Q2
Q3
Die einzelnen Flipflops sind JK-Flipflops. Der momentane Zählerstand bestimmt die Eingangskombinationen Jj , Kj aller Flipflops durch das o.a. Schaltnetz und damit auch den
neuen Zählerstand nach dem nächsten Taktimpuls.
24
I203: Schaltwerke: Zähler
Besonders große praktische Bedeutung haben 4-bit-Zähler. Im „natürlichen Binärcode“ zählen sie von 0 bis 15. Zum dezimalen Zählen werden zweckmäßigerweise 4-bitDezimalzähler verwendet.
Von den möglichen 16 verschiedenen Zuständen (Tetraden) eines 4-bit-Binärzählers nutzt
ein 4-bit-Dezimalzähler nur 10 aus. Die verschiedenen dezimalen 4-bit-Codes unterscheiden sich durch die Auswahl der für die Kodierung der Dezimalziffern 0 bis 9 herangezogenen Bit-Muster. Die restlichen 6 Tetraden heißen Pseudotetraden; sie sind in der
folgenden Tabelle mit „X“ gekennzeichnet.
Alle 4-bit-Dezimalcodes sind BCD-Codes (Binary Coded Decimals). Der einfachste BCDCode ist der 8-4-2-1-Code, ein bewerteter Code, bei dem die erste Ziffer den Stellenwert
1 = 20 und die folgenden die Stellenwerte 2 = 21 , 4 = 22 und 8 = 23 haben. Liest man
also den Zählerstand eines im 8-4-2-1-Code zählenden Zählers als Binärzahl, so entspricht
dies genau der umgerechneten Dezimalzahl.
Es gibt aber auch Codes, bei denen der Zählerstand anders interpretiert wird, welches
unterschiedliche Vorteile haben kann, wie beispielsweise eine leichtere Fehlererkennung
usw.
In der nachfolgenden Tabelle sind neben dem 8-4-2-1-Code noch der Gray- und der
Glixon-Code aufgeführt. Diese beiden Codes sollen in der zweiten Aufgabe I203 A2 behandelt werden.
25
Grundpraktikum für Ingenieure
Zusammenstellung einiger 4-bit-Dezimalcodes (BCD-Codes)
Q3
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
Zählerstand
Q2 Q1 Q0
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
Dezimale
Interpretation
C1
C2
C3
0
0
0
1
1
1
2
3
3
3
2
2
4
7
7
5
6
6
6
4
4
7
5
5
8
9
X
9
X
X
X
X
X
X
X
X
X
8
8
X
X
9
X
X
X
X
X
X
C1:
C2:
C3:
oktal
0
1
2
3
4
5
6
7
X
X
X
X
X
X
X
X
hexadezimal
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
8-4-2-1-Code
Glixon-Code
Gray-Code
In den folgenden Aufgaben verwenden Sie bitte ausschließlich das JK-System-Flipflop
hwp_jkff.
I203 A1: Asynchroner Binärzähler
a) Entwerfen und testen Sie einen asynchronen modulo-16-Binärzähler.
b) Schauen Sie sich die Simulation an (Zoomfunktion benutzen) und suchen Sie fehlerhafte Zwischenzustände. Erklären Sie das Zeitimpulsdiagramm des asynchronen
Zählers in zeitgedehnter Darstellung beim Übergang des Zählerstandes von 7 nach
8.
c) Beschreiben Sie, wie man aus dem entworfenem Vorwärtszähler einen Rückwärtszähler machen kann unter Verwendung der gleichen Zählerausgänge?
26
I203: Schaltwerke: Zähler
I203 A2: Synchroner Glixon-Code-Zähler
In dieser Aufgabe soll schrittweise ein synchroner im Glixon-Code zählender 4-bitDezimalzähler entworfen werden.
a) In der Einleitung haben Sie über den Aufbau erfahren, dass Sie ein Schaltnetz
zu entwerfen haben, welches die Belegung der Eingänge J und K jedes Flipflops
so vornimmt, dass sich für die Flipflop-Ausgänge nach einem Taktdurchlauf der
gewünschte Folgezustand ergibt. Zuerst sollen Sie verstehen, durch welche Belegung
von J und K ein J-K-Flipflop von einem Zustand Q in den Folgezustand Q+ kommt.
Tragen Sie die dafür notwendigen logischen Pegel bei J und K in die folgende
Tabelle ein. Beachten Sie dabei auch das Auftreten von Redundanzen, die mit X
zu kennzeichnen sind:
Q → Q+
0→0
0→1
1→0
1→1
J
K
b) Vervollständigen Sie folgende erweiterte Wertetabelle und formulieren Sie Ji , Ki als
logische Funktion von Qi (i ∈ {3..0}). Minimieren Sie die erhaltenen Gleichungen
mit Hilfe von KV-Diagrammen.
Ungenutzte Zählerzustände sollen als Folgezustand 0000 bekommen um einen komplett definierten Verlauf zu erhalten.
i
0
Q3
0
Q2
0
Q1
0
Q0
0
Q+
3
0
Q+
2
0
Q+
1
0
Q+
0
1
1
0
0
0
1
0
1
1
2
..
.
0
0
..
.
1
1
0
..
.
J3
0
K3
X
J2
0
K2
X
..
.
J1
0
K1
X
J0
1
K0
X
c) Erstellen Sie mit Hilfe der minimierten Gleichungen das Schaltwerk des Zählers
und testen Sie es.
d) Welche vorteilhafte Eigenschaft besitzt der Glixon-Code? Im direkten Vergleich,
wann bietet sich der bekanntere Gray-Code an?
27
Grundpraktikum für Ingenieure
I203 A3: Synchroner Binärzähler
Entwickeln Sie einen positiv flankengesteuerten synchronen 5-Bit-Binärzähler mit paralleler Eingabe zum Setzen eines frei wählbaren Zählerstandes im laufenden Betrieb. Mit
Hilfe eines Steuereingangs ZP soll zwischen Zählen (ZP = [0]) und paralleler Eingabe
(ZP = [1]) ausgewählt werden. Die an den parallelen Eingängen anstehende Information
soll (bei ZP = [1]) taktsynchron übernommen werden, keinesfalls über die Initialisierungseingänge S und R.
a) Ermitteln Sie die Belegung der Eingänge J und K jedes Flipflops für das Zählen.
Tipp: Schreiben Sie sich die ersten Zählerstände untereinander auf. Durch „scharfes Hinsehen“ lassen sich die einfachen Funktionen der J- und K-Eingänge leicht
erkennen. So ersparen Sie sich die Erstellung einer Tabelle analog zu I203 A2, begründen Sie im Protokoll.
b) Entwerfen Sie ein Schaltnetz, welches in Abhängigkeit von dem Steuereingang ZP
die Belegung der J- und K-Eingänge für das Zählen oder das parallele Laden
vornimmt.
c) Erstellen Sie das Schaltwerk des Zählers mit paralleler Eingabe und testen Sie es.
28
I204: Prozessor: ALU
I204: Prozessor: ALU
Einleitung: von-Neumann-Architekturen
Das Ziel der folgenden Aufgaben ist es, den Aufbau und die Arbeitsweise eines typischen
Prozessors eines nach dem von-Neumann-Prinzip aufgebauten Rechners kennenzulernen.
Es sollen die wesentlichen Komponenten eines derartigen Prozessors entwickelt, realisiert
und getestet werden.
Es werden Rechnersysteme betrachtet, die aus einem (Haupt-)Speicher, einem Prozessor und einer den Speicher und den Prozessor verbindenden Datensammelleitung (Bus)
bestehen. Ein- bzw. Ausgabeeinheiten werden hier nicht betrachtet.
Zunächst sollen die Komponenten Speicher und Prozessor, sowie die Arbeitsweise eines
derartigen Rechnersystems kurz vorgestellt werden:
Der Speicher ist in Zellen aufgeteilt, die jeweils ein Binärwort, d.h. eine endliche Folge
fester Länge von Binärmustern aufnehmen können. Jede Zelle kann sowohl beschrieben
als auch gelesen werden. Damit eine Zelle für eine Operation ausgewählt werden kann,
sind die Zellen des Speichers mit eindeutigen Adressen versehen. Die Zellen können in
jeder beliebigen Reihenfolge angesprochen werden, es handelt sich um einen Speicher mit
wahlfreiem Zugriff.
Der Speicher erfüllt zwei Aufgaben: Zum einen dient er zur Aufnahme des auszuführenden
(Maschinen-)Programms. Ein solches Programm ist eine Folge von (Maschinen-)Befehlen,
wobei jeder Befehl aus einer endlichen Folge von Binärmustern besteht. In einem Programm aufeinanderfolgende Befehle werden dabei in aufeinanderfolgenden Speicherzellen
abgelegt. Das gesamte Programm ist somit ebenfalls eine endliche Folge von Binärmustern. Da Folgen von Binärmustern nur sehr schwer lesbar sind, werden für Maschinenbefehle mnemonische Bezeichner eingeführt, die durch Assembler in die entsprechenden
Maschinencodes umgewandelt werden. Man kommt so zu den Assemblerbefehlen bzw.
zur Assemblersprache.
Zum anderen sind im Speicher die Daten, mit denen das Programm operieren soll, abgelegt. Es ist zu beachten, dass es eine Besonderheit eines von-Neumann-Rechners ist, dass
Programm und Daten in einem gemeinsamen Speicher (als Binärworte) enthalten sind.
Insbesondere lässt ein derartiges Binärwort nicht erkennen, ob es einen Befehl oder ein
Datum darstellt.
Die Aufgabe des Prozessors ist es nun, das im Speicher abgelegte Programm auszuführen, also die Befehle, aus denen das Programm besteht, in der vorgegebenen Reihenfolge
abzuarbeiten. Damit dies möglich ist, muss der Prozessor die Adresse des nächsten auszuführenden, sog. aktuellen Befehls kennen. Dies ist die Adresse derjenigen Speicherzelle,
in der dieser Befehl abgespeichert ist.
Setzen wir der Einfachheit halber voraus, dass jeder Befehl in einer einzigen Speicherzel-
29
Grundpraktikum für Ingenieure
le abgelegt werden kann, so stellt sich die Abarbeitung des aktuellen Befehls, der in der
Zelle mit der Adresse ADR abgelegt sei, grob gesagt wie folgt dar: Zunächst sendet der
Prozessor (über den Bus) die Adresse ADR und eine Leseanforderung an den Speicher.
Dieser liefert den Befehl an den Prozessor zurück, der ihn daraufhin dekodiert und ausführt. Im Zuge der Ausführung können nun Daten aus dem Speicher geholt, verändert
und wieder im Speicher abgelegt werden. Dabei werden u.U. logische oder arithmetische
Operationen ausgeführt. Nach der Ausführung wird die Adresse des nächsten auszuführenden Befehls bestimmt. In der Regel ist dieses die „nächste“ Adresse im Speicher, also
ADR + 1. Die Befehlsausführung wird dann mit dieser neuen Adresse fortgesetzt usw..
Damit der Prozessor die skizzierten Aufgaben ausführen kann, ist er mit mehreren verschiedenen Komponenten ausgestattet:
• Ein Rechenwerk zur Ausführung der arithmetischen und logischen Operationen.
Kern des Rechenwerks ist die sog. ALU.
• Ein Prozessor enthält sog. Register, diese dienen der Aufnahme von Operanden
und Ergebnissen arithmetischer und logischer Operationen.
• Ein Programmzähler, in dem die Adresse des nächsten auszuführenden Befehls
abgelegt ist.
• Ein Steuerwerk, mit dessen Hilfe das Zusammenspiel aller Komponenten geregelt
wird. Hauptaufgabe des Steuerwerks ist es, den oben skizzierten Befehlszyklus zu
realisieren. Dazu generiert es Steuersignale, die den Zugriff auf den Speicher, auf
die Register, das Rechenwerk, den Programmzähler usw. steuern.
Das Ziel der nächsten Aufgaben besteht darin, diese einzelnen Komponenten zu entwickeln, zu realisieren und zu einem einfachen Prozessor zusammenzustellen. Aus Zeitgründen wird jedoch das Zusammenspiel von Prozessor und Speicher nicht näher betrachtet.
Vielmehr wird davon ausgegangen, dass der nächste auszuführende Befehl schon vom
Speicher geliefert worden ist und nun ausgeführt werden soll. Folglich wird der Programmzähler nicht realisiert.
Da im Zuge der Ausführung eines Befehls im Allgemeinen mehrere atomare Operationen
(Auswahl von Registern, Operationen des Rechenwerks, Ablage von Rechenergebnissen
in Registern usw.) hintereinander durchgeführt werden und die Koordination dieses Ablaufs dem Steuerwerk obliegt, wird sich später schwerpunktmäßig dem Aufbau dieser
Komponente zugewandt.
Zunächst soll das Rechenwerk und die Register realisiert werden. Das Rechenwerk besteht
im wesentlichen aus der sog. ALU, der arithmetisch-logischen Einheit. Hier wird eine 4Bit-ALU entwickelt, also eine ALU, die in einem Schritt 4-Bit-Worte verarbeiten kann.
30
I204: Prozessor: ALU
I204 A1: Carry-Look-Ahead-Addition
Bei einer mehrstelligen Addition unter Verwendung des Addierers aus I201 A1 kommt es
wegen der seriellen Weitergabe der Überträge COk → CIk+1 bei bestimmten Datenkombinationen zu erheblichen Laufzeitverzögerungen (Ripple-Carry-Adder ). Diese Verzögerungen lassen sich mit einer sog. C(arry)L(ook)A(head)-Schaltung deutlich vermindern.
Dazu sollen Sie die Schaltung des Addierers aus I201 A1 so abändern, dass ein Zusammenschalten mit einem noch zu entwerfenden CLA-Generator möglich wird.
Anstelle des CO-Ausgangs sollen Sie zwei Hilfsvariablen G (generate) und P (propagate)
zur Verfügung stellen.
P0
P1
P2
P3
G 3 C3 G2 C2 G1 C1 G0
B A
ADD
CLAG
Cin
Cout
CLAG
Cin
P GS
Die minimale Form für die Erzeugung eines CO
CO = (A · B) + (A · Cin) + (B · Cin)
lässt sich umformen in
CO = (A · B) + (A + B) · Cin
woraus wir die beiden Hilfsvariablen
G = (A · B) und P = (A + B)
gewinnen.
Die Schaltung für den CLA-Generator ergibt sich dann wie folgt:
C1 = G0 + P0 · Cin
C2 = G1 + P1 · C1
= G1 + P1 · (G0 + P0 · Cin)
= G1 + P1 · G0 + P1 · P0 · Cin
C3 = · · ·
Cout = · · ·
31
Grundpraktikum für Ingenieure
a) Ändern Sie die Schaltung des Addierers aus I201 A1 wie oben angesprochen und
verpacken Sie sie in dem Symbol add_1.
b) Entwerfen Sie einen CLA-Generator für 4-bit Wortbreite und verpacken Sie die
Schaltung in dem Symbol clag_4. Achten Sie auf die zweistufige Auslegung der
Übertragserzeugung.
Das Testen der beiden Schaltungen ist für Sie hier nicht notwendig, da die Tests automatisch in den nächsten Aufgaben erfolgen, in denen Sie Ihre hier erstellten Komponenten
weiterverwenden sollen.
I204 A2: 1-bit-ALU
Cin
b
A b
r
&
HH
r
r
Op-Code
Funktion
000
001
010
110
and
or
add
sub
bF
≥1
OP [2 : 0]
cin
HH
B b
r
1 r
b
OP2
A
s
B
g
b
F
alu-1
a
r
Cin
G
P
p
b b
bb
P G OP1 OP0
Realisieren Sie die oben angegebene 1-bit-ALU. Erklären Sie die Funktionsweise der
Schaltung. Warum braucht man für 4 Befehle einen 3-bitigen OP-Code? Überlegen Sie
sich für die logischen Operationen (und und oder ) jeweils min. 2 Fälle und für die arithmetischen Funktionen (add und sub) jeweils min. 3 Fälle. Schreiben Sie für alle Fälle die
Ausgaben F, P und G auf (Vorbereitung) und vergleichen Sie Ihre Ergebnisse mit der
Simulation. Verpacken Sie die Schaltung im Symbol alu_1.
32
I204: Prozessor: ALU
I204 A3: Flags
a) Wird bei arithmetischen Operationen im Zweierkomplement der erlaubte Zahlenbereich von ⊥ = −(2n−1 ) bis > = +(2n−1 − 1) überschritten, kommt es zu einem Überlauf (overflow ) in das Vorzeichenbit. Dieses muss erkannt und in dem
Overflow-Flag OV angezeigt werden.
Überlegen Sie sich ein Schaltnetz, das einen Overflow erkennt und mit [1] anzeigt.
Betrachten Sie dazu die von den Eingabezahlen abhängigen relevanten Fälle, führen
Sie je eine Beispiel-Operation (4 Bit) durch und erstellen Sie eine Wertetabelle aus
der sich die gesuchte Funktion ermitteln lässt. Ein separater Test mit der Xilinx
Software ist nicht notwendig.
Hinweis: Die gesuchte Funktion kommt bei einer n-bit-ALU allein mit den Eingängen Cn−1 und Cn aus.
b) Oft ist es auch sinnvoll zu signalisieren, dass das Ergebnis einer Operation Null ist.
Dieses Signal wird Z-Flag (zero) genannt. Eine [1] bedeutet dabei, dass der gesamte
ALU-Ausgang den Wert Null . Welche Funktion erfüllt genau diese Bedingung
(Wertetabelle, Gleichung)?
33
Grundpraktikum für Ingenieure
I204 A4: 4-bit-ALU
Durch Aneinanderfügen von 1-bit-ALUs lassen sich ALU-Einheiten beliebiger Wortlänge zusammenstellen. Erstellen Sie mit den Bausteinen alu1 und clag4 eine 4-Bit-ALU.
Die Overflow-Signalisierung sowie das Z-Flag aus der vorigen Aufgabe sollen ebenfalls
generiert werden.
A0
OP [2 : 0]
F0
@
@
alu-4
Op-Code
Funktion
000
001
010
110
and
or
add
sub
B0
Z
OV
Cin
Cout
Testen Sie alle Funktionen der 4-Bit-ALU mit mehreren Beispiel-Eingaben (min. 4 logische Operationen und min. 6 arithmetischen Operationen jeweils gleichmäßig verteilt auf
die möglichen Befehle), überprüfen Sie auch die Funktion der Ausgänge Cout, OV und
Z. Schreiben Sie die Beispiel-Eingaben und die zu erwartenden Ergebnisse auf (Vorbereitung) und vergleichen Sie sie mit der Simulation. Testen Sie die Funktionsfähigkeit der
CLAG-Einheit u.a. mit einer Rechnung −1 + 1. Warum gerade diese Zahlenkombination?
Wenn Sie das korrekte Verhalten Ihrer ALU nachgewiesen haben, legen Sie sie als Subkomponente alu_4 an.
34
I205: Prozessor: R(egister)-T(ransfer)-Struktur
I205: Prozessor: R(egister)-T(ransfer)-Struktur
Nachdem in I204 die ALU aufgebaut wurde, wird sich nun den Registern des Prozessors zugewandt. Die Register nehmen u.a. die Operanden, dies sind die Argumente für
die auszuführende Rechenoperation, auf. In typischen Prozessoren sind mehrere Register vorhanden. Hier sollen vier Register (R0 , R1 , R2 , R3 ) realisiert werden. Jedes dieser
Register kann ein 4-bit-Wort speichern und einen Wert an den X-Eingang oder den Y Eingang der ALU liefern. Die Auswahl zwischen den Registern erfolgt mit Hilfe eines
Multiplexers, der als Besonderheit ein fünftes Register R4 enthält, welches bei Anwahl
immer den Wert Null [0000] liefert. Die Register selbst werden als positiv flankengesteuerte D-Register realisiert. Dies erlaubt uns, sie sowohl als Eingaberegister als auch als
Ergebnisregister (Akkumulator) zu benutzen.
Dazu wird der Ausgang der ALU mit den Eingängen aller Register verbunden (Datenbus). Die Auswahl des Registers für die Ablage des Ergebnisses erfolgt dann mit Hilfe
der Takteingänge TR0 , TR1 , TR2 und TR3 der Register. Damit nun die Register auch
mit Werten geladen werden können, sehen wir einen weiteren Multiplexer vor, dessen
erster Eingang mit dem Ausgang der ALU verbunden wird. Der zweite Eingang, Ein-Bus
genannt, kann „von außen“, etwa vom Hauptspeicher, die Register mit Werten versorgen.
Der Ausgang dieses Multiplexers beschreibt also direkt den Datenbus.
Die Schaltung sieht dann wie folgt aus:
Steuerleitungen
R0
Ein−Bus
tr0
MUX
4
R1
X
tr1
MUX
ALU
R2
tr2
Y
MUX
R3
CI
tr3
35
Grundpraktikum für Ingenieure
Mit Hilfe der erhaltenen Schaltung, einer sog. Register-Transfer-Struktur oder RTStruktur, können nun Operationen der Form Rx := Ry op Rz ausgeführt werden. Dabei
ist op eine atomare Rechenoperation, die die ALU direkt ausführen kann. Ein kompletter
Rechenzyklus besteht dabei aus zwei Schritten:
1. Auswahl der Operandenregister und der Rechenoperation.
Dazu werden die Steuerleitungen mit geeigneten Werten belegt. Nach einer gewissen
Zeit (Gatterlaufzeiten beachten) liefert die ALU das Ergebnis der Rechenoperation,
das über den Datenbus auf die Eingänge der Register gelangt.
2. Übernahme des Ergebnisses in ein Register Rx . Dazu wird am Takteingang TRx
des Registers eine positive Taktflanke erzeugt.
Durch die Ablage des Ergebnisses einer solchen atomaren Rechenoperation in einem
Register steht es für eine weitere atomare Operation als Argument zur Verfügung. So
können auf diese Weise komplexe Operationen realisiert werden, die aus einer Folge von
atomaren Rechenoperationen bestehen.
I205 A1: Eine kleine Rechnung
Führen Sie auf der RT-Struktur die Rechnung (2 + 3) − 6 im Zweierkomplement aus.
Laden Sie dazu zunächst die Register in geeigneter Weise mit den positiven Werten 2,
3 und 6. Diese Werte sollen am Ein-Bus zur Verfügung gestellt werden und vor Ausführung der ersten Rechenoperation in Register geladen werden. Das Ergebnis soll in einem
Register abgelegt werden.
Hinweis: Bei Fragen lassen Sie sich von einem Betreuer des Praktikums die vorgefertigte RT-Struktur erklären. Sie dient als Basis für die weiteren Versuche und sollte in
allen Details von Ihnen nachvollzogen werden. Zur Schaltung wird Ihnen ebenfalls eine
Testbench bereitgestellt. Diese muss von Ihnen nicht angepasst oder modifiziert werden.
Zu beachten ist, dass die verwendeten Registerbausteine hwp_register positiv flankengesteuert sind. Damit die Simulation mit definierten Werten startet, sind die Register
zunächst zurückzusetzen. Dazu ist am Reset-Eingang der Register ein geeigneter Impuls
angelegt.
Die Multiplexer hwp_mux20 liefern unter der Adresse [100] die Konstante [0000], dies
ist das oben erwähnte Nullregister R4 .
Weiterhin ist bei der vorgegebenen Schaltung von der Möglichkeit Gebrauch gemacht
worden, mehrere Leitungen in einem Bus ∗ zusammenzufassen.
∗
36
Ein Bus ist eine gemeinsame Sammelleitung zusammengehörender Signale.
I205: Prozessor: R(egister)-T(ransfer)-Struktur
I205 A2: Carry-Flipflop
Wie in der letzten Aufgabe zu sehen war, können mit Hilfe der vorgestellten RT-Struktur
komplexere arithmetische und logische Operationen ausgeführt werden. Ein Nachteil ist
jedoch, dass sich auf Zahlen beschränkt werden muss, die sich mit 4 Bit (im Zweierkomplement) darstellen lassen. Der Grund dafür ist, dass nur das Ergebnis einer atomaren
Operation, also der Wert, den die ALU an ihrem Ausgang liefert, in ein Register abgelegt
werden kann, der evtl. entstehende Übertrag geht aber verloren.
Insbesondere kann z.B. die Rechnung 87 + 25 mit der vorgestellten RT-Struktur nicht
ausgeführt werden. Mit der nachfolgend beschriebenen Erweiterung wird dies trotzdem
möglich.
Da die Zahlen 87 und 25 nicht mit 4 Bit im Zweierkomplement darstellbar sind, muss eine
längere Darstellung gewählt, also die Anzahl der Binärstellen erhöht werden. In diesem
Fall reichen 8 Bit aus. Da das Rechenwerk aber in einem Schritt nur 4-bit-Worte verarbeiten kann, muss die 8-bit-Addition in zwei Schritten (genauer: Rechenzyklen) ausgeführt
werden: Zunächst werden die beiden niederwertigen Worte der Argumente addiert. Der
dabei entstehende Übertrag (Carry), der von der ALU am Ausgang Cout zur Verfügung
gestellt wird, muss abgespeichert werden. Im zweiten Schritt werden die beiden höherwertigen Worte zusammen mit dem abgespeicherten Übertrag, der am Eingang CI der
ALU anliegen muss, addiert.
Die vorgestellte RT-Struktur stellt keine Möglichkeit zur Verfügung, einen Übertrag aufzubewahren und in einem späteren Rechenzyklus an den Eingang CI der ALU zu legen.
Sie soll daher um ein D-Flipflop, das den Übertrag bei Bedarf speichert, erweitert werden.
Dieses Flipflop wird Carry-Flag genannt. Der Ausgang dieses Flipflops wird über einen
2-zu-1-Multiplexer an den Eingang CI zurückgeführt. Der Multiplexer gestattet es, bei
Bedarf CI mit einem festen Wert oder dem Carry-Flag zu belegen.
37
Grundpraktikum für Ingenieure
Die Schaltung für das Carry-Flipflop kann wie folgt aussehen:
ALU
CI
Cout
D
Carry
D−FF
MUX
Csel
Cin
tc
• Erweitern Sie die RT-Struktur um das vorgestellte Carry-Flipflop und führen Sie
die Rechnungen (Vorbereitung) 87 + 25, 87 + 41 und 87 − 41 im Zweierkomplement
durch und vergleichen Sie Ihre Ergebnisse mit der Simulation. Die positiven Werte
87, 25 bzw. 41 sollen vor Ausführung der Operationen über den Ein-Bus in Register
übernommen werden. Beachten Sie, dass Sie für eine Zahl zwei Register benötigen.
Hinweise zum Aufbau: Verwenden Sie für das Carry-Flag das positiv flankengesteuerte
D-Flipflop hwp_dff. Dieses Flipflop ist am Anfang der Simulation durch einen geeigneten
Impuls am Reset-Eingang in einen definierten Zustand zu bringen.
Greifen Sie außerdem auf den 2-zu-1-Multiplexer hwp_mux2 aus der Bibliothek
HWP_advanced zurück.
Bauen Sie unbedingt platzsparend auf. Bei Platzmangel können Sie auch davon Gebrauch
machen, dass Leitungsenden, die mit gleichem Label versehen sind, eine Verbindung
untereinander darstellen.
Hinweis zur Simulation: Damit Sie nicht so viel Zeit verlieren mit dem Anordnen der
Signale im Simulationsfenster, kopieren Sie sich die Simualtionskonfigurationsdatei vom
vorherigen Versuch in die aktuelle Konfigurationsdatei ( siehe 60 ).
38
I205: Prozessor: R(egister)-T(ransfer)-Struktur
Prozessorarchitekturen
Sie haben nun wesentliche Teile des Rechenwerks eines Prozessors kennengelernt. Mit
Hilfe von Registern können komplexe Operationen ausgeführt werden. Das Carry-Flag
erlaubt es darüber hinaus, beliebig große Zahlen zu addieren und zu subtrahieren. Jedoch werden komplexe Operationen quasi per Hand ausgeführt indem explizit Werte an
die Steuerleitungen gelegt und Taktflanken an den Takteingängen der Register erzeugt
werden. Die Aufgabe des Steuerwerks eines Prozessors besteht nun darin, diesen Ablauf zu automatisieren. Das Steuerwerk ist somit ein Schaltwerk, das (abhängig von der
auszuführenden Operation) die Steuerleitungen mit Folgen von Signalmustern und die
Takteingänge mit Taktflanken versorgt.
Für konkrete Aufgaben, wie beispielsweise der eben durchgeführten zweigeteilten Addition, gibt es prinzipiell zwei Ansätze:
Zum einen könnte man ein fest verdrahtetes Schaltwerk aufbauen, das diese Aufgabe
erfüllt. Beispielsweise könnte man mit Hilfe verschiedener Zähler und mehrerer Gatter
die benötigten Signalfolgen erzeugen. Der Nachteil dieses Ansatzes ist offensichtlich. Er
ist sehr unflexibel und komplexere Operationen (wie z.B. die Multiplikation) sind nur
mit unverhältnismäßig großem Aufwand zu realisieren. Der Vorteil ist aber, dass sich
so sehr schnelle Steuerwerke aufbauen lassen, wenn man sich auf einfache Operationen
beschränkt.
Dieser Ansatz wird beispielsweise in sog. RISC-Architekturen (reduced instruction set
computer ) verfolgt. Entsprechende Prozessoren stellen nur elementare Operationen zur
Verfügung, die sehr schnell ausgeführt werden können. Komplexere Operationen müssen mit Hilfe von Maschinenprogrammen realisiert werden, sofern keine weitere spezielle
Hardware (z.B. Coprozessor für arithmetische Operationen) vorhanden ist. Ein Beispiel
für eine derartige Prozessorarchitektur ist der SPARC der Firma Sun.
Der zweite Ansatz besteht darin, die benötigten Signalmuster in einem Speicher abzulegen. Genauer, die Steuerleitungen werden mit den Ausgängen eines Speichers verbunden.
Sie werden daher mit den im Speicher vorhandenen Werten belegt. Der Vorteil dieser
Lösung besteht in einer hohen Flexibilität. Das so realisierte Steuerwerk ist frei programmierbar. Soll eine bestimmte komplexe Operation ausgeführt, so wird auf die Folge der
atomaren Operationen zurückgegriffen. Die den atomaren Operationen entsprechenden
Bitmuster für die Steuerleitungen (die „Steuerworte“) werden dazu in aufeinander folgenden Zellen des Speichers abgelegt, d.h. das Steuerwerk wird programmiert.
Der Nachteil hierbei ist die in der Regel kleinere Geschwindigkeit eines derart realisierten Steuerwerks gegenüber eines fest verdrahteten. Dies macht sich insbesondere dann
39
Grundpraktikum für Ingenieure
bemerkbar, wenn sehr einfache Maschinenbefehle ausgeführt werden sollen. Hier ist die
flexible Lösung der fest verdrahteten im Allgemeinen unterlegen. Dies wiegt umso schwerer, da in einem typischen Maschinenprogramm einfache Befehle (wie etwa das Erhöhen
eines Registers) häufiger ausgeführt werden als komplexe Befehle (wie etwa der Multiplikationsbefehl).
Prozessoren, die mit einem Steuerwerk gemäß dem zweiten Ansatz ausgestattet sind, sind
sog. CISC-Architekturen (complex instruction set computer ). Beispielsweise gehört der
Motorola M68000 -Prozessor zu dieser Familie. Neuere Prozessoren aus der x86-Reihe,
wie beispielsweise der Core i7 von Intel, verfolgen einen hybriden Ansatz. Der CISCBefehlssatz wird in Folgen von RISC-Mikrobefehlen übersetzt.
Der klassischen CISC-Variante ähnlich soll hier weiter verfahren werden. Das Steuerwerk
besteht dann aus zwei Komponenten:
1. Der oben angesprochene Speicher, der Mikroprogrammspeicher genannt wird. Die
Folge der Bitmuster für die Steuerleitungen, d.h. der Inhalt des Speichers, heißt
Mikroprogramm. Die Steuerworte selbst werden Mikroprogrammworte oder Mikroprogrammbefehle genannt. Um dem neueren Hybrid-Ansatz gerecht zu werden,
können die Steuerworte mit RISC-Befehlen und das gesamte Mikroprogramm mit
einem CISC-Befehl verglichen werden.
2. Der sog. Mikroprogrammzähler. Dieser wählt ein Wort des Mikroprogramms aus,
also spricht die Adresse der Speicherzelle des Mikroprogrammspeichers an, die den
nächsten auszuführenden Mikroprogrammbefehl enthält.
(Man vergleiche dazu die Aufgaben des Hauptspeichers eines Computers und des Programmzählers.)
Taktung der RT-Struktur
Damit nun ein zweigeteilter Rechenzyklus realisiert werden kann und ein zeitlich geordneter Ablauf gewährleistet ist, wird der gesamte Ablauf mit Hilfe eines Taktes CLK
gesteuert. Im Detail geschieht dabei folgendes (Zunächst gelte CLK = [0]):
1. Die positive Taktflanke des Taktes CLK zählt den Mikroprogrammzähler um eins
hoch. Dadurch wird die nächste Adresse im Mikroprogrammspeicher und somit das
nächste Steuerwort ausgewählt und aktiviert.
2. Während CLK = [1] werden die Steuerleitungen des Rechenwerks mit Werten versorgt, die Register für die Operanden ausgewählt und die Rechenoperation durchgeführt. Vor (!) der negativen Taktflanke von CLK ist das Ergebnis der atomaren
Operation berechnet worden.
40
I205: Prozessor: R(egister)-T(ransfer)-Struktur
3. Die negative Taktflanke liefert den Takt für die Übernahme des Ergebnisses in
ein Register.
4. Ist das Ergebnis (während CLK = [0]) in das Register übernommen worden, so ist
der Rechenzyklus beendet.
Der Ablauf wird wie folgt durch CLK gesteuert:
Steuerleitungen belegen
Rechnung ausführen
CLK
Ergebnis in Register
ablegen
nächsten
Mikroprogrammbefehl
auswählen
aktive Flanke
für Ergebnisregister
Die Schaltung eines entsprechenden Steuerwerkes kann dann etwa wie folgt aussehen:
SEL
ROM
32x24
24
Daten
Reset
Reset
zu den
Steuer−
leitungen
5
CK
5−Bit
Zähler
Q
hwp_cnt32
Adressen
hwp_rom3224
41
Grundpraktikum für Ingenieure
Die Takteingänge der Register für die Übernahme des Ergebnisses können nach folgendem
Prinzip beschaltet werden:
4
Rx
Ein
TR x
4
Aus
&
1
CLK
Hier ist anzumerken, dass der Inverter dafür zuständig ist, das Register während der
negativen Taktflanke von CLK mit einer positiven Flanke zu versorgen. Wird die Steuerleitung TRx mit [0] belegt, so erfolgt keine Übernahme des Ergebnisses, bei TRx = [1]
dagegen wird das Ergebnis während der negativen Flanke von CLK in das Register übernommen.
I205 A3: Taktung und Mikroprogramm
a) Erweitern Sie die oben entwickelte RT-Struktur um ein Steuerwerk mit Mikroprogrammspeicher und -zähler. Orientieren Sie sich dabei an den vorgestellten
Schaltskizzen.
Verbinden Sie die Steuerleitungen der RT-Struktur mit den Ausgängen des Speichers. Die Signalbelegungen werden aus dem Mikroprogramm abgeleitet, der Zählerstand gibt dabei die jeweilige Programmzeile an. Daher müssen die bisher verwendeten Ports entfernt werden, damit es keine Kollisionen gibt. Sorgen Sie dafür,
dass nur eindeutige Signalpegel verwendet werden.
Bedenken Sie, dass obige Schaltung zur Registertaktung auch an anderer Stelle
notwendig ist. Nämlich wo?
b) Schreiben Sie das Mikroprogramm für die Rechnung (87+25) aus Aufgabe I205 A2.
42
I205: Prozessor: R(egister)-T(ransfer)-Struktur
Hinweise zum Aufbau: Verwenden Sie für den Zähler den synchronen 5-Bit-Binärzähler
hwp_cnt32. Belegen Sie vorerst den Steuereingang ZP mit [0] für Zählen. Für den Mikroprogrammspeicher soll ein ROM verwendet werden. Benutzen Sie hier den Baustein
hwp_rom3224.
Hinweise zum Entwurf der Mikroprogramme: Es hat sich als hilfreich erwiesen, ein
Entwurfsblatt zu verwenden, auf dem spaltenweise die einzelnen Bits des Mikroprogramms und deren Kurzbezeichnung z.B. TR3 , MX2 , OP0 usw. vorgegeben sind. In die
freien Felder darunter sind dann die [0]/[1]-Bitmuster für den jeweiligen Rechenvorgang
einzutragen. Das Entwurfsblatt ist online zu finden, kann Ihnen aber auch vom Betreuer
überreicht werden.
Beachten Sie, dass das Laden der Register ebenfalls mit Mikroprogrammbefehlen erfolgen
muss.
Hinweise zur Simulation:
• Das Mikroprogramm kann von Ihnen in einem beliebigen Texteditor angefertigt
werden. Zum Beispiel können Sie in ISE über File - New - Textfile eine neue Datei
anlegen. Das Mikroprogramm sollte so aussehen, dass Sie die binären Sequenzen
vom Zeilenanfang eingeben. Alle Zeichen, die auf den 24Bit-Mikroprogrammbefehl
folgen, werden nicht mehr als Programm interpretiert. So können Sie einzelne Zeilen
mit hilfreichen Kommentaren versehen.
• Dem Mikroprogrammspeicher muss der Pfad zum Mikroprogramm zugewiesen werden. Gehen Sie mit einem Rechtsklick auf hwp_rom3224 und Push into Symbol auf
die unterliegende Systemkomponente hwp_rom3224. Der Pfad zu Ihrem Programm
kann in den Eigenschaften der Systemkomponente eingetragen werden, welche Sie
über einen Doppelklick mit der linken Maustaste erreichen (Attribut PATH ).
Eine Beispieldatei, bestehend aus drei Mikroschritten, sieht wie folgt aus:
000000000011000000000000
000000000101000000000000
000000001000001000000010
ld R0 - Lade einen Wert in Register R0
ld R1 - Lade einen Wert in Register R1
R2=R0+R1
• Die Testbench sollte keinerlei Steuersignale mehr enthalten, da gerade diese Pegel ja
nun über Mikroprogrammbefehle definiert werden. Der Port CLK sollte von Ihnen
in die Schaltung eingefügt worden sein. Die Taktung der Schaltung erfolgt in der
Testbench über einen separaten Prozess. Stellen Sie das Taktsignal so ein, dass ein
kompletter Rechenzyklus 200ns umfasst.
43
Grundpraktikum für Ingenieure
I206: Prozessor: Mikroprogrammierung
Im Folgenden soll das Rechenwerk aus der vorherigen Serie erweitert und komplexere
Mikroprogramme entwickelt werden.
Die ALU, die eben entwickelt und realisiert worden ist, kann arithmetische und logische
Operationen ausführen. Ein typischer Prozessor stellt jedoch noch eine weitere Klasse
von atomaren Operationen zur Verfügung. Dies sind Schiebe- und Rotieroperationen, die
von einer sog. Schiebe-Einheit oder Shifter ausgeführt werden.
Diesen Operationen ist gemeinsam, dass der Inhalt eines Registers um eine Stelle (nach
links oder rechts) verschoben wird. Dabei wird ein Bit aus dem Register herausgeschoben.
Durch Einfügen eines weiteren Flipflops, dem sog. X-Flag, kann dieses Bit aufgefangen
und weiter verarbeitet werden.
Beim Schieben eines Registerinhaltes wird auch stets eine Stelle frei. Wird eine (logische)
Schiebeoperation ausgeführt, so wird diese Stelle auf [0] gesetzt. Im Fall einer Rotieroperation muss diese Stelle mit dem Inhalt des X-Flags geladen werden.
X
Register
X
Register
0
Linksschieben
Linksrotieren
Die Schiebe-Einheit wird zwischen ALU-Ausgang und Eingang des Multiplexers, der den
Datenbus versorgt, geschaltet. Das X-Flag wird als D-Flipflop realisiert. Wahlweise liefert
dieses Flipflop den Wert für die freiwerdende Stelle (Rotieroperation) oder diese Stelle
wird mit Hilfe eines UND-Gatters auf [0] gesetzt (logische Schiebeoperation):
ALU
Sh1
Sh0
Sh1
Sh0
SHIFTER
4
Ein
Xin
4
MUX
Aus
Xout
D
&
Q
D−FF
Xsel
44
TX
X−Flag
I206: Prozessor: Mikroprogrammierung
Die erweiterte RT-Struktur kann nun Operationen der Art Rx := shif t_op(Ry op Rz )
ausführen, wobei op eine ALU-Operation und shif t_op eine Operation der SchiebeEinheit ist.
I206 A1: Schieben und Rotieren
a) Erweitern Sie die RT-Struktur um eine Schiebe-Einheit gemäß den obigen
Schaltskizzen und verwenden Sie die neu hinzugekommenen Steuerleitungen Xsel,
TX, Sh1 , Sh0 des Mikroprogrammspeichers.
Laden Sie in die ersten beiden Register die Zahl 9 und in die beiden anderen Register
die Zahl 5. Führen Sie nacheinander folgende Operationen aus:
1. Linksschieben von R0
2. Rechtsschieben von R1
3. Linksrotieren von R2 und
4. Rechtsrotieren von R3 .
Was ist bei den Rotationsoperationen zu beachten?
Hinweis zum Aufbau: Verwenden Sie die Schiebe-Einheit hwp_shifter. Das XFlag soll als positiv flankengesteuertes D-Flipflop realisiert werden. Benutzen Sie
den Baustein hwp_dff.
b) Welchen arithmetischen Funktionen entsprechen das hier realisierte Links- bzw.
Rechtsschieben? Wie sieht es mit Zahlen in Zweierkomplementdarstellung aus?
45
Grundpraktikum für Ingenieure
Sprungbefehle
Bisher gab es keine Möglichkeit im Mikroprogramm Verzweigungen durchzuführen, wie
sie beispielsweise für Schleifen benötigt werden. Das Steuerwerk soll nun so erweitert
werden, dass Sprungbefehle unterstützt werden.
Ein Sprungbefehl besteht aus dem Befehl selbst, der angibt, dass eine Programmverzweigung stattfinden soll, und der Zieladresse, an der die Ausführung des Mikroprogramms
fortgesetzt werden soll, vorausgesetzt die evtl. vorhandene Bedingung für den Sprung ist
erfüllt. Im Fall eines Mikroprogramms sind Sprungbefehl und neue Zieladresse in einer
einzigen Zelle des Mikroprogrammspeichers abgelegt. Die Ausführung des Sprungbefehls
besteht dann im wesentlichen darin, den Mikroprogrammzähler mit dieser neuen Adresse
zu laden.
Der verwendete 5-Bit-Zähler cnt-32 kann dazu parallel geladen werden. Es werden somit fünf Ausgangsleitungen des Mikroprogrammspeichers, die die parallelen Eingänge
des Mikroprogrammzählers mit der Sprungadresse versorgen, benötigt. Da während der
Ausführung eines Sprungbefehls der Einfachheit halber keinerlei Rechenoperationen ausgeführt werden sollen, können die Ausgänge des Mikroprogrammspeichers, die die Steuerleitungen der ALU mit Werten versorgen, ebenfalls mit den parallelen Eingängen des
Zählers verbunden werden.
Grundsätzlich gibt es zwei Arten von Sprungbefehlen: unbedingte und bedingte Sprungbefehle. Im Fall der unbedingten Sprungbefehle erfolgt stets eine Verzweigung zur angegebenen Adresse. Dagegen hängt die Ausführung des Sprunges im Fall der bedingten
Sprungbefehle von den Werten bestimmter Flags ab. Im Folgenden sollen drei verschiedene Sprungbefehle realisiert werden.
46
I206: Prozessor: Mikroprogrammierung
I206 A2: Software-Multiplikation
a) Erweitern Sie zunächst das Steuerwerk um eine Schaltung, die drei verschiedene
Sprünge unterstützt:
1. Eine unbedingte Verzweigung (J – jump).
2. Eine Verzweigung, falls das X-Flag nicht gesetzt ist (JNX – jump if not x )
3. Eine Verzweigung, falls das Z-Flag nicht gesetzt ist (JNZ – jump if not zero)
Hierzu wird zusätzlich ein D-Flipflop benötigt, welches den Z-Ausgang der
ALU speichert. Dieses muss mit dem Takt (CLK · JNZ) betrieben werden,
damit es den Z-Ausgang automatisch jeden Takt speichert, außer bei einem
Sprung selbst.
Hinweis zum Aufbau: Orientieren Sie sich an nachfolgend aufgeführter Skizze. Die
Steuerleitungen, die den Zähler mit der Sprungadresse versorgen, sollen (bitte ohne Permutation der Stellen) [Csel, Cin, OP2 , OP1 , OP0 ] sein.
X−Flag
Q
Z−Flag
Q
J
JNX
JNZ
&
&
DSBL
1
NReset
CLK
ROM
32x24
ZP
NReset
24
Daten
5
Q
Adressen
E
Zähler
5
(Steuerleitungen für ALU)
47
Grundpraktikum für Ingenieure
Multiplikationsverfahren: Ein bekanntes Verfahren, zwei Zahlen zu multiplizieren, ist
das der Multiplikation durch stellenversetzte Addition. Dabei wird der Multiplikand stellenversetzt auf das Ergebnis addiert. Statt den Multiplikanden zu verschieben, kann aber
auch das Ergebnis verschoben werden.Um die Multiplikation mit der Beschränkung auf
vier Register durchführen zu können, soll folgender Trick angewendet werden:
Der Zugriff auf die einzelnen Bits des Multiplikators wird durch eine Schiebeoperation
realisiert. Der Multiplikator liegt dabei zunächst in den oberen (am Anfang nicht benötigten) vier Bit des Registerpaares für das Ergebnis.
Die Register werden also wie folgt verwendet: R0 nimmt den Multiplikanden auf. In
R1 wird der Zähler abgespeichert. Das Registerpaar R3 , R2 steht für das Ergebnis zur
Verfügung, wobei am Anfang in R3 der Multiplikator abgelegt wird.
Es ergibt sich das folgende Verfahren im Pseudocode:
R0 := Multiplikand;
R1 := 4;
(Initialisierung des Zählers)
R2 := 0;
(niederwertige 4 Bit des Ergebnisses)
R3 := Multiplikator; (später höherwertige 4 Bit des Ergebnisses)
repeat
Registerpaar R3 , R2 um eine Stelle nach links verschieben,
dabei das herausgeschobene Bit im X-Flag ablegen;
if X-Flag = 1 then
addiere zum Registerpaar R3 , R2 den Inhalt von R0 ;
end if;
R1 := R1 − 1;
until R1 = 0;
b) Entwickeln Sie ein Mikroprogramm, das das obige Verfahren realisiert und führen
Sie folgende Rechnungen durch: 5 · 7, 7 · 5, 0 · 7 und 11 · 13.
Was sind die Besonderheiten für jede dieser Aufgaben?
Hinweise: Die repeat-until-Schleife soll, ebenso wie die if-then-Bedingung, mit
Hilfe von Sprungbefehlen realisiert werden. Um die Dekrementierung des Registers
R1 effizient zu lösen, können Sie das Nullregister R4 in geeigneter Weise nutzen.
Empfehlung: Um das Prinzip besser zu verstehen, empfiehlt es sich die Multiplikation einmal auf Papier durchzuspielen.
48
I206: Prozessor: Mikroprogrammierung
I206 A3: Hardware-Multiplikation
X
P0
Op−Code
MUL
P1
Y
X
Funktion
000
and
001
or
010
add
100
mul1
101
mul2
110
sub
F
SHIFTER
Y
ALU
Op−Code
In dieser Aufgabe soll das eben entwickelte Mikroprogramm durch einen 4 · 4-Bit Multiplizierer in Hardware ersetzt werden. Dieser soll nach dem Verfahren der stellenversetzten Addition der Partialprodukte arbeiten.
p7
b3 · a3
p6
b3 · a2
b2 · a3
p5
b3 · a1
b2 · a2
b1 · a3
p4
b3 · a0
b2 · a1
b1 · a2
b0 · a3
p3
b2 · a0
b1 · a1
b0 · a2
b1 · a0
b0 · a1
b0 · a0
p2
p1
p0
Jeder UND-Term stellt ein Partialprodukt dar. Das Produkt ergibt sich aus der Addition
der Spalten mit geeigneter Weitergabe der Überträge.
49
Grundpraktikum für Ingenieure
a) Wie sieht ein 1-Bit-Multiplizierer aus?
b) Welche Funktion muss eine Grundzelle, die das lokale Partialprodukt (a · b) berechnet, zusätzlich erfüllen? Wie wird das Ergebnis gebildet?
c) Bauen Sie den 4 · 4-Bit Multiplizierer (nach dem Verfahren der stellenversetzten
Addition der Partialprodukte) aus den Bauteilen hwp_mul1 auf (16 x hwp_mul1
und 2 x hwp_gnd ). Die Ausgänge A_o und B_o dienen dabei nur einem übersichtlicheren Aufbau. Testen Sie die Schaltung mit der Berechnung 11 · 15. Verpacken
Sie sie in das Symbol mul_4. Auch hier ist die Namensvergabe der Ports wie beim
Symbol wählen.
d) Fügen Sie entsprechend der Skizze den Multiplizierer mul_4 parallel zur ALU vor
dem Shifter ein. Die Daten werden über einen Multiplexer hwp_mux12 entsprechend weitergegeben. Wegen der 4-Bit-Struktur muss das Ergebnis der Multiplikation in zwei Portionen zu 4 Bit über den Datenbus in die Register übernommen
werden. Die Adressierung des Multiplexers erfolgt in geeigneter Weise über den
Op-Code.
e) Testen Sie mit einer beliebigen 4 · 4-Bit Multiplikation.
50
I206: Prozessor: Mikroprogrammierung
Befehlsausführung in CISC-Architekturen
Abschließend sollen noch einmal die Ausführung eines Maschinenbefehls durch einen
CISC-Prozessor betrachtet werden. Es wird davon ausgegangen, dass der Prozessor mit
einem Steuerwerk ausgestattet ist, wie es oben entwickelt und realisiert worden ist.
In den gestellten Aufgaben sind Mikroprogramme für die Ausführung einzelner Maschinenbefehle entwickelt worden, so z.B. ein Mikroprogramm, das den Maschinenbefehl mult,
den Multiplikationsbefehl, ausführen kann.
Der Mikroprogrammspeicher eines Prozessors enthält nun für jeden Maschinenbefehl,
den der Prozessor zur Verfügung stellt, ein entsprechendes Mikroprogramm. Soll nun
ein bestimmter Maschinenbefehl ausgeführt werden, wird das diesen Befehl realisierende
Mikroprogramm ausgeführt. Dazu wird der Mikroprogrammzähler auf die Startadresse
dieses Mikroprogrammes gesetzt.
Damit die Startadresse des zu einem Maschinenbefehl gehörenden Mikroprogrammes
schnell bestimmt werden kann, dient der Maschinenbefehl oder Teile dieses Befehls (in
der Regel der sog. Operationscode, der die auszuführende Operation angibt) als Startadresse. In diesem Sinne sind Maschinenbefehle (bzw. Teile von Maschinenbefehlen) Mikroprogrammspeicheradressen.
Ähnlich funktionieren heutige Prozessorarchitekturen immer noch. Der zur Verfügung
stehende CISC-Befehlssatz wird in eine Folge von RISC-Befehlen übersetzt und direkt
auf dem Prozessor ausgeführt. Dieses entspricht in entfernter Weise der Ausführung eines
Mikroprogramms, wie die hier vorgestellten, auf einer klassischen CISC-Architektur.
51
Grundpraktikum für Ingenieure
A. Bausteine für die Digitaltechnik
Für die digitale Simulation der Versuche aus der Serie I200 stehen Ihnen eine Anzahl
von digitalen Bausteinen Verfügung. Es folgt eine kurzgefasste Funktionsbeschreibung,
die Ihnen bei der Vorbereitung der Versuche helfen soll.
Symbolname
hwp_nand2
hwp_nand3
hwp_nand4
hwp_nand8
hwp_and2
hwp_and3
hwp_and4
hwp_nor2
hwp_nor3
hwp_nor4
hwp_or2
hwp_xor2
hwp_inv
hwp_invninv
hwp_treiber
hwp_mux12
hwp_mux20
hwp_dff
hwp_jkff
hwp_register
hwp_ROM3224
hwp_pwr
hwp_gnd
Eigenschaften
Nand-Gatter mit 2 Eingängen
Nand-Gatter mit 3 Eingängen
Nand-Gatter mit 4 Eingängen
Nand-Gatter mit 8 Eingängen
And-Gatter mit 2 Eingängen
And-Gatter mit 3 Eingängen
And-Gatter mit 4 Eingängen
Nor-Gatter mit 2 Eingängen
Nor-Gatter mit 3 Eingängen
Nor-Gatter mit 4 Eingängen
Or-Gatter mit 2 Eingängen
Exclusiv-Oder-Gatter mit 2 Eingängen
Inverter
invertierender / nichtinvertierender Treiber
nichtinvertierender Treiber mit Tristate-Ausgang
(3*4)-zu-4-Multiplexer
(5*4)-zu-4-Multiplexer mit Konstante 0000
D-FlipFlop, pos. flankengesteuert, mit async. Setz- und Rücksetz-Eingang
JK-FlipFlop, neg. flankengesteuert, mit async. Setz- und Rücksetz-Eingang
4-bit D-Register, pos. flankengesteuert, mit async. Rücksetz-Eingang
Lesespeicher (ROM), 768 Bit in 32 Worten zu 24 Bit
Power, Symbol für die Versorgungsspannung (+ 5V), entspricht [1]
Ground, Symbol für Masse (0V), entspricht [0]
Wichtiger Hinweis:
Nicht benutzte Eingänge von digitalen Schaltkreisen sollten nicht unbeschaltet bleiben,
da sie i.d.R. ein unerwünschtes Verhalten hervorrufen. Sie müssen je nach Erfordernis
mit PWR oder GND verbunden werden.
Für die Darstellung der Symbole wird die IEC–Norm (International Electrotechnical
Commission) benutzt.
52
Beispiele für die Signalgenerierung
B. Beispiele für die Signalgenerierung
Für die Simulation braucht man häufig Signale, die einen vorgegebenen Zeitverlauf haben
sollen. In diesem Abschnitt werden einige einfache Beispiele gezeigt, wie man Signale
generieren kann.
Unsymmetrisches Rechtecksignal
Falls für eine Aufgabe ein unsymmetrisches Signal verlangt wird, könnte man es durch
folgende Befehlsfolge erzeugen:
tb : PROCESS
BEGIN
Sig_A <= ’0’;
wait for 10ns;
Sig_A <= ’1’;
wait for 20ns;
Sig_A <= ’0’;
wait for 5ns;
Sig_A <= ’1’;
wait for 15ns;
Sig_A <= ’0’;
wait for 25ns;
Sig_A <= ’1’;
wait for 30ns;
Sig_A <= ’0’;
wait for 10ns;
Sig_A <= ’1’;
wait for 15ns;
Sig_A <= ’0’;
wait for 5ns;
Sig_A <= ’1’;
wait for 25ns;
WAIT; -- will wait forever
END PROCESS;
Das Simulationsergebnis sieht so aus:
Rechtecksignal ohne Verzögerung
Am einfachsten lässt sich ein symmetrisches Rechtecksignal durch folgende Testsequenz
erzeugen:
53
Grundpraktikum für Ingenieure
tb : PROCESS
BEGIN
Sig_B <=
wait for
Sig_B <=
wait for
END PROCESS;
’1’;
15ns;
’0’;
15ns;
Das Simulationsergebnis sieht so aus:
Rechtecksignal mit Verzögerung (Loop)
Ein symmetrisches Rechtecksignal mit einer Startverzögerung (Delay) kann man auch
mit einer Schleife (Loop)generieren:
tb : PROCESS
BEGIN
Sig_C <= ’1’;
wait for 10ns;
loop
Sig_C <= not Sig_C;
wait for 30 ns;
end loop;
WAIT; -- will wait forever
END PROCESS;
Das Simulationsergebnis sieht so aus:
Rechtecksignal mit Verzögerung (for-Schleife)
Möchte man nur eine bestimmte Anzahl an Rechtecksignalen erzeugen, bietet sich eine for-Schleife an. Eine for-Schleife kann man ebenfalls mit einer Anfangsverzögerung
kombinieren.
tb : PROCESS
BEGIN
Sig_D <= ’0’;
wait for 30ns;
54
Beispiele für die Signalgenerierung
for i in
Sig_D <=
wait for
Sig_D <=
wait for
end loop;
0 to 4 loop
’1’;
10 ns;
’0’;
10ns;
WAIT; -- will wait forever
END PROCESS;
Das Simulationsergebnis sieht so aus:
Mehrere Prozesse gleichzeitig
Natürlich ist es möglich mehrere Prozesse parallel ablaufen zulassen, um so mehrere
Signale zu generieren.
a1 : PROCESS
BEGIN
Sig_B <=
wait for
Sig_B <=
wait for
END PROCESS;
’1’;
15ns;
’0’;
15ns;
a2 : PROCESS
BEGIN
Sig_C <= ’1’;
wait for 10ns;
loop
Sig_C <= not Sig_C;
wait for 30 ns;
end loop;
WAIT; -- will wait forever
END PROCESS;
a3 : PROCESS
BEGIN
Sig_D <= ’0’;
wait for 30ns;
for i in 0 to 4 loop
55
Grundpraktikum für Ingenieure
Sig_D <=
wait for
Sig_D <=
wait for
end loop;
’1’;
10 ns;
’0’;
10ns;
Das Simulationsergebnis sieht so aus:
56
Verwendung eines Vektors aus Einzelsignalen in einer Testbench
C. Verwendung eines Vektors aus Einzelsignalen in einer
Testbench
Hat man in seiner Schaltung mehrere Einzelsignale und möchte sie in der Testbench in
der Vektorschreibweise verwenden, muss man folgendes machen.
Man definiert in der Testbench erst einen Vektor. Anschließend wird dem Signal ein Vektor zugewiesen. Danach kann man dann die Wertzuweisung in der Vektorschreibweise
durchführen.
Die grau unterlegten Zeilen in der Testbench (siehe unten) sorgen dafür, dass man aus
z.B. vier Einzelsignalen in der Schaltung, einen Vektor in der Testbench machen kann.
Siehe dazu auch Seite 4.
So wie im Hardwarepraktikum die Testbench verwendet wird, macht es keinen so großen
Sinn, auch Ausgangssignale als Vektor in der Testbench zu definieren. Da ist es besser,
in der Simulation einen Virtual Bus zu definieren. Trotzdem zeigt das Beispiel, wie man
auch Ausgangssignale als Vektor definieren kann. Der Unterschied besteht eigentlich nur
in der Zuweisung vom Signal zu dem Vektor.
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
LIBRARY UNISIM;
USE UNISIM.Vcomponents.ALL;
ENTITY test12_test12_sch_tb IS
END test12_test12_sch_tb;
ARCHITECTURE behavioral OF test12_test12_sch_tb IS
COMPONENT test12
PORT( SH0
:
SH1
:
E0
:
E1
:
E2
:
E3
:
Xin
:
A0
:
A1
:
A2
:
A3
:
Xout :
END COMPONENT;
IN
IN
IN
IN
IN
IN
IN
OUT
OUT
OUT
OUT
OUT
SIGNAL
SIGNAL
SIGNAL
SIGNAL
SIGNAL
SIGNAL
SIGNAL
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
SH0
SH1
E0
E1
E2
E3
Xin
:
:
:
:
:
:
:
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC);
57
Grundpraktikum für Ingenieure
SIGNAL
SIGNAL
SIGNAL
SIGNAL
SIGNAL
A0
A1
A2
A3
Xout
:
:
:
:
:
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
SIGNAL E : std_logic_vector(3 downto 0);
SIGNAL A : std_logic_vector(3 downto 0);
BEGIN
UUT: test12 PORT MAP(
SH0 => SH0,
SH1 => SH1,
E0 => E0,
E1 => E1,
E2 => E2,
E3 => E3,
Xin => Xin,
A0 => A0,
A1 => A1,
A2 => A2,
A3 => A3,
Xout => Xout
);
--Eingänge
E0 <= E(0);
E1 <= E(1);
E2 <= E(2);
E3 <= E(3);
--Ausgänge
A(0) <= A0;
A(1) <= A1;
A(2) <= A2;
A(3) <= A3;
-- *** Test Bench - User Defined Section ***
tb : PROCESS
BEGIN
-- No shift
SH0 <= ’0’;
SH1 <= ’0’;
E <= "0101";
Xin <= ’0’;
58
Verwendung eines Vektors aus Einzelsignalen in einer Testbench
wait for 50ns;
END PROCESS;
-- *** End Test Bench - User Defined Section ***
END;
59
Grundpraktikum für Ingenieure
D. Simulations Konfigurationsdatei
Die Simulations-Konfigurationsdatei (.wcfg Datein) kann von dem Benutzer des Simulators selbständig konfiguriert werden. In dieser Konfigurationsdatei stehen z.B. die Signale,
die man darstellen möchte, die Farbe der Signale, die Zahlendarstellung etc. Des weiteren
enthält diese Datei eventuell vorhandene Divider, Markers, Cursors etc. .
Das Schreiben einer Konfigurationsdatei läuft im Hintergrund ab. Sobald man im Simulationsfenster ein Signal hinzufügt, löscht, verändert etc. merkt sich die Software diese
Veränderungen. Beim schließen des Simulationsfensters wird man gefragt, ob man die
Änderungen in der Default.wcfg abspeichern möchte. Diese Frage beantwortet man man
„Yes“ . Im anschließendem Fenster kann man dann einen Dateinamen angeben, der identisch zu den Versuchsnamen sein sollte. Wenn man dann die Simulation wiederholt, kann
man diese Konfigurationsdatei wieder aufrufen und erhält dann die identische Anordnung
im Simulationsfenster.
Bei den Versuchen IP205-IP206 und der 300er Serie werden die Simulationen aufwendiger. Sowohl für den Versuch IP205A1 als auch für den Versuch IP301A1 gibt es schon
vorgegebene Simulations-Konfigurationsdateien (ip205a1.wcfg und ip301a1.wcfg).
Damit man für die jeweils folgenden Versuche nicht jedes mal in der Simulation die Signale
neu anordnen muss, empfiehlt es sich das Shell-Skript new-wcfg zu benutzen. Durch
das Skript wird eine vorhandene Konfigurationsdatei auf eine neue Konfigurationsdatei
kopiert und angepasst.
Der Aufruf des Shell-Skriptes sieht folgendermaßen aus:
new-wcfg [alte.wcfg] [neue.wcfg]
Dabei ist [alte.wcfg] eine schon vorhandene Konfigurationsdatei und [neue.wcfg] die zu
erzeugende Konfigurationsdatei.
Damit man dieses Skript ausführen kann öffnet man ein Terminal-Fenster und wechselt
in sein Projektverzeichnis. Im Projektverzeichnis wird dann der Befehl ausgeführt. (siehe
Bild)
60
In den Datenblättern benutzte Begriffe und Abkürzungen
E. In den Datenblättern benutzte Begriffe und Abkürzungen
Die Ihnen zur Verfügung gestellten Bausteine sind der Serie 74LSxxxx entnommen.
In der Typenbezeichnung bedeutet 74, dass es sich um einen TTL-Baustein (TTL →
Transistor-Transistor-Logik) für den Temperaturbereich 0˚C bis 70˚C handelt, L (Low
Power) weist auf den relativ niedrigen Stromverbrauch hin und S (Schottky) auf die
Verwendung von schnell schaltenden Halbleitern in Schottky-Technologie. Für xxxx ist
eine bis zu vierstellige Ziffer einzusetzen, die die verschiedenen Typen unterscheidet. Die
Betriebsspannung beträgt +5 Volt, [0] entspricht einer Spannung zwischen 0 und 0,8
Volt und [1] einer Spannung zwischen 2,4 Volt und 5 Volt. Zur Vereinfachung wurde die
Typenbezeichnung durch einen Namen ersetzt, der die Funktion beschreibt (z.B. 74LS00
→ nand-2 ).
Besondere Beachtung verdient das zeitliche Verhalten der Bausteine. Bei nichtgetakteten
Bausteinen ist die je nach Pegelwechsel unterschiedliche Verzögerungszeit zu beachten,
bei getakteten Bausteinen
1. die maximale Taktfrequenz,
2. die minimale Impulsbreite,
3. die Setzzeit (set-up time) (die Zeit, während der die Eingangsinformation vor der
schaltenden Flanke des Taktimpulses an den Eingängen bereitstehen muss),
4. die Haltezeit (hold time) (die Zeit, die die Eingangsinformation nach der schaltenden Flanke des Taktimpulses an den Eingängen anstehen muss).
Es folgen einige der in Datenblättern benutzten Abkürzungen:
tpd
propagation delay time, die Verzögerungs- oder Schaltzeit.
tP HL
propagation delay time, high-to-low-level output, die Verzögerungszeit beim Übergang
von [1] zu [0].
tP LH
propagation delay time, low-to-high-level output, die Verzögerungszeit beim Übergang
von [0] zu [1].
tw
pulse duration (width), die minimale Impulsbreite.
tsu
setup time, die Setzzeit.
th
hold time, die Haltezeit.
61
Grundpraktikum für Ingenieure
F. Literatur zum Grundpraktikum Informatik
Schimmler Skriptum zur Vorlesung Digitale Systeme
http://www.techinf.informatik.uni-kiel.de/de/lehre/vorlesungen/inf-digisys-digitale-sy
Schiffmann, Schmitz Technische Informatik, 1. Grundlagen der digitalen Elektronik
Springer–Verlag, 2004
Tietze, Schenk Halbleiter–Schaltungstechnik
Springer–Verlag, 2002
Paul Elektrotechnik und Elektronik für Informatiker
Band 2: Grundgebiete der Elektronik
B.G. Teubner, 1995
Liebig, Thome Logischer Entwurf digitaler Systeme
Springer–Verlag, 1996
Hinweise zu den Protokollen:
http://www.techinf.informatik.uni-kiel.de/de/lehre/praktika-1/hardwarepraktikum/
protokolle-1
Homepage des Praktikums:
http://www.techinf.informatik.uni-kiel.de/de/lehre/praktika-1
62