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
© Copyright 2024 ExpyDoc