Versuch 4: Mikroprogrammierung - Technische Informatik
Versuch 4: Mikroprogrammierung - Technische Informatik
Versuch 4: Mikroprogrammierung - Technische Informatik
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Copyright (C) <strong>Technische</strong> <strong>Informatik</strong><br />
Universität Duisburg-Essen<br />
PRAKTIKUM<br />
Grundlagen der<br />
<strong>Technische</strong>n <strong>Informatik</strong><br />
VERSUCH 4<br />
<strong>Mikroprogrammierung</strong><br />
Name: Matrikelnummer:<br />
Vorname: Gruppennummer:<br />
Betreuer: Datum:<br />
Vor Beginn des <strong>Versuch</strong>s sind die Fragen, die mit F1 bis Fn gekennzeichnet<br />
sind, zu beantworten. Die mit A1 bis An gekennzeichneten Aufgaben sind<br />
während des Praktikums zu bearbeiten.<br />
Prof. Dr.-Ing. Axel Hunger<br />
Dipl.-Ing. Joachim Zumbrägel<br />
Universität Duisburg-Essen<br />
Fakultät Ingenieurwissenschaften<br />
Fachgebiet <strong>Technische</strong> <strong>Informatik</strong>
Praktikum GTI <strong>Versuch</strong> 4: <strong>Mikroprogrammierung</strong><br />
Einführung<br />
In den bisherigen <strong>Versuch</strong>en haben wir uns mit einfachen Gatterbausteinen sowie FlipFlops<br />
beschäftigt. Im vorliegenden <strong>Versuch</strong> wollen wir uns mit einem weiteren Typ von digitalen<br />
Bausteilen auseinandersetzen, dem ROM. Anhand einer Ampelsteuerung soll das Prinzip<br />
sowie die Programmierung eines ROMs verdeutlicht werden.<br />
1 Spezifikation der Ampelsteuerung<br />
Im Rahmen des vorliegenden <strong>Versuch</strong>s soll eine Steuerung für 4 Ampeln entwickelt und<br />
simuliert werden. Die Ampelanlage (gemeint sind alle 4 Ampeln) befindet sich an einer<br />
Kreuzung (siehe Abbildung 1.1 ) und durchläuft periodisch eine wohldefinierte Sequenz von<br />
insgesamt 16 Zuständen. Das bedeutet, dass – gemäß dem normalen Verhalten einer<br />
Ampelanlage - die Sequenz immer wieder durchlaufen wird, so dass folglich nach Zustand 16<br />
wieder der 1. Zustand eingenommen wird. Jede Ampel verfügt über 3 Signallampen (Rot,<br />
Gelb, Grün), wobei jede der Ampeln die uns wohlbekannten 4 Phasen rt (rot), rtge (rot und<br />
gelb), gn (grün) und ge (gelb) durchläuft.<br />
Abbildung 1.1: Kreuzung mit 4 Ampeln<br />
Wenn unter Beachtung der Verkehrsregeln die verschiedenen Phasen der Ampeln notiert<br />
werden, erhält man das folgende in Tabelle 1-1 dargestellte Schema. So beschreibt z.B. der<br />
unter Nummer 1 angegebene Zustand den Fall, dass die beiden Ampeln A und B auf rot<br />
stehen und die Ampeln C und D grün zeigen. Entsprechend wurde der Zustand 3 für die<br />
Linksabbieger, die von der Straße mit der Ampel D kommen, vorgesehen.<br />
Um die Kreuzung zu räumen, wurde der Zustand Nr. 5 eingeführt.<br />
Wie der Tabelle 2-1 ebenfalls zu entnehmen ist, liegen die verschiedenen Zustände der<br />
Ampelanlage für eine bestimme Zeitdauer vor. Die Zeitdauer für jeden Zustand ist in der<br />
Spalte "Zeitdauer" eingetragen. Da in der Realität bei einer Ampelanlage für die<br />
verschiedenen Ampelphasen unterschiedliche Zeitdauern vorliegen, wurden die fünf<br />
verschiedenen Zeiten<br />
t1, t2, t3, t4, t5. definiert, wobei ausgehend von der Zeitbasis t1 folgendes gilt:<br />
t 2 = 2 t 1 t 4 = 5 t 1 t 3 = 4 t 1 t 5 = 20 t 1<br />
2/14
Praktikum GTI <strong>Versuch</strong> 4: <strong>Mikroprogrammierung</strong><br />
Bei der Realisierung der Ampelsteuerung ist darauf zu achten, dass die verschiedenen<br />
Ampelphasen-Kombinationen jeweils für die angegebene Zeitdauer angezeigt werden.<br />
Ampel<br />
Nr.<br />
A B C D Zeitdauer<br />
1 rt rt gn gn t5<br />
2 rt rt ge gn t2<br />
3 rt rt rt gn t4<br />
4 rt rt rt ge t2<br />
5 rt rt rt rt t3<br />
6 rt rtge rt rt t1<br />
7 rt gn rt rt t4<br />
8 rtge gn rt rt t1<br />
9 gn gn rt rt t5<br />
10 gn ge rt rt t2<br />
11 gn rt rt rt t4<br />
12 ge rt rt rt t2<br />
13 rt rt rt rt t3<br />
14 rt rt rtge rt t1<br />
15 rt rt gn rt t4<br />
16 rt rt gn rtge t1<br />
Tabelle 1-1:Ampelphasen für den Normalbetrieb<br />
F 1: Wie viele unterschiedliche Kombinationen von Ampelphasen treten überhaupt auf? Wie<br />
viele Bits sind notwendig, um diese zu codieren?<br />
F 2: Wie viele verschiedene Leuchtkombinationen treten bei einer einzigen Ampel auf? Wie<br />
viele Bits sind notwendig, um diese Kombinationen zu codieren?<br />
2 Entwicklung der Ampelsteuerung<br />
Die Steuerung der zuvor beschriebenen Ampelanlage soll nun u.a. unter Verwendung eines<br />
Festwertspeichers (ROM=Read Only Memory) entwickelt werden. Anhand der Spezifikation<br />
der einzelnen Ampelphasen ist das ROM so zu programmieren, dass es die Steuersignale für<br />
die einzelnen Ampeln enthält bzw. als Ausgangssignal zur Verfügung stellt. Die Adressierung<br />
des ROM soll durch einen Zähler realisiert werden. Die Ansteuerung der einzelnen Ampeln<br />
soll jeweils über einen Decoder erfolgen, der die Ausgangssignale des ROMS als<br />
Eingangssignal erhält und diese so decodiert, dass mit den daraus resultierenden<br />
Ausgangssignalen direkt die einzelnen Lampen einer Ampel (Rot, Gelb, Grün) angesprochen<br />
werden können. Für die zu entwickelnde Ampelsteuerung ergibt sich somit das in Abbildung<br />
2.1 gezeichnete Blockschaltbild.<br />
3/14
Praktikum GTI <strong>Versuch</strong> 4: <strong>Mikroprogrammierung</strong><br />
OE<br />
Abbildung 2.1: Blockschaltbild der Ampelsteuerung<br />
2.1 Grundlagen zu den verwendeten Bauelementen<br />
Bevor wir mit der Entwicklung der Schaltung beginnen, sollen zuvor die in der Schaltung<br />
verwendeten Bauelemente kurz erläutert werden.<br />
2.1.1 ROM<br />
Bei einem ROM (Read Only Memory) handelt es sich um einen Festwertspeicher, der<br />
gelesen, aber im normalen Betrieb nicht beschrieben werden kann. Festwertspeicher werden<br />
in der Regel einmalig programmiert und sind in der Lage, eine bestimmte Anzahl (2 n<br />
) von<br />
Daten-Worten der Länge m (z.B. m=8 => Speicherung eines Wortes mit 8-Bit Wortbreite)<br />
dauerhaft zu speichern. Diese Datenworte werden im ROM in adressierbaren Speicherzellen<br />
abgelegt. Um den Inhalt einer Speicherzelle an den Ausgängen des ROMs auslesen zu<br />
können, muss lediglich die entsprechende Adresse im Dualcode an den Adresseingängen des<br />
ROMs angelegt werden. Zur Kennzeichnung der Speicherkapazität verwendet man den<br />
Ausdruck 2 n<br />
x m, so kennzeichnet beispielsweise die Bezeichnung 1024 x 8 einen Baustein,<br />
der 2 10<br />
= 1024 Worte mit einer Breite von 8-Bit speichern kann. Folglich muss ein solcher<br />
Baustein über 10 Adresseingänge (A0-A9) verfügen, um den gesamten Adressraum<br />
ansprechen zu können, sowie über 8 Datenausgänge O0-O7, um das gespeicherte Wort am<br />
Ausgang zur Verfügung stellen zu können.<br />
2.1.2 4Bit Zähler<br />
Zur Realisierung der ROM-Adressierung soll ein Zähler genutzt werden, der mit Hilfe des<br />
Bausteins 74177 aufgebaut werden soll. Bei diesem Baustein handelt es sich um einen<br />
programmierbaren Baustein, der bei entsprechender Beschaltung in verschiedene Modi<br />
versetzt werden kann. So kann dieser Baustein beispielsweise als 4 Bit-Zähler arbeiten, wobei<br />
an den Ausgängen Qa – Qd (niederwertigstes Bit Qa, höchstwertigstes Bit Qd) alle Werte<br />
von 0-15 im Dualcode realisiert werden (siehe dazu auch die Funktionstabelle im Datenblatt).<br />
2.1.3 Decoder<br />
Unter einem Decoder oder Dekodierer versteht man einen Umsetzer (Konverter), wobei<br />
dessen Realisierung je nach Anwendungsgebiet in Hard- oder Software erfolgen kann. In der<br />
4/14
Praktikum GTI <strong>Versuch</strong> 4: <strong>Mikroprogrammierung</strong><br />
digitalen Schaltungstechnik beispielsweise, kann ein Dekodierer ein Schaltnetz sein, das dem<br />
Aufspalten von Datenpfaden dient. So kann ein Dekodierer, der über n Eingänge verfügt, die<br />
2 n<br />
möglichen Bitkombinationen (die am Eingang anliegen können) separieren und auf 2 n<br />
Ausgangsleitungen verteilen.<br />
X1 X2 Y1 Y2 Y3 Y4<br />
0 0 1 0 0 0<br />
0 1 0 1 0 0<br />
1 0 0 0 1 0<br />
1 1 0 0 0 1<br />
Tabelle 2-1: Wertetabelle eines 2x4 Decoders Abbildung 2.2: 2x4 Decoder<br />
2.2 Codierung der Ampelzustände und -phasen für das ROM<br />
Die Aufgabe besteht nun darin, die verschiedenen Zustände der Ampelanlage bzw. die<br />
Ampelphasen-Kombinationen aus Tabelle 1-1 so zu codieren, dass wir sie in einem ROM<br />
abspeichern können, wobei die jeweilige Zeitdauer der einzelnen Ampelphasen-Kombination<br />
entsprechend berücksichtigt werden muss. Bevor wir mit der Codierung der verschiedenen<br />
Zustände der Ampelanlage beginnen, müssen wir uns zunächst der Codierung der<br />
Ampelphasen einer einzelnen Ampel widmen. Dazu wird die in Tabelle 2-2 angegebene<br />
Vereinbarung getroffen. Folglich benötigen wir 2 Bit zur Codierung der 4 Phasen einer<br />
Ampel .<br />
D1 D0 rot 0 0<br />
gelb 1 1<br />
grün 0 1<br />
rotgelb 1 0<br />
Tabelle 2-2: Codierung der Phasen einer Ampel<br />
F 3: Wie viele Bits werden benötigt, um die Phasen von 4 Ampeln zu codieren? Welche<br />
Wortbreite muss folglich unser ROM umfassen?<br />
Die unterschiedliche Dauer der verschieden Ampelphasenkombinationen (siehe Tabelle 1-1)<br />
lässt sich einfach realisieren, indem wir ausgehend von der kleinsten Zeiteinheit t 1, die länger<br />
andauernden Ampelphasen entsprechend mehrfach speichern und zwar gemäß ihrem Faktor<br />
bezogen auf t 1. Das heißt die 1. Phase (Nr.1) aus Tabelle 1-1:Ampelphasen für den<br />
Normalbetrieb wird dementsprechend zwanzigmal in das ROM gespeichert, die 2. Phase<br />
(Nr.2) nur zweimal. Die nachfolgende Tabelle erläutert dieses Prinzip:<br />
X1<br />
X2<br />
Adresse Inhalt<br />
0 Nr. 1<br />
1 Nr. 1<br />
: :<br />
19 Nr.1<br />
20 Nr. 2<br />
21 Nr. 2<br />
22 Nr. 3<br />
23 Nr. 3<br />
: :<br />
2x4<br />
Decoder<br />
Y1<br />
Y2<br />
Y3<br />
Y4<br />
5/14
Praktikum GTI <strong>Versuch</strong> 4: <strong>Mikroprogrammierung</strong><br />
F 4: Wie viele Speicherplätze sind notwendig, um die gesamten in Tabelle 1-1 angegebenen<br />
Kombinationen in einem ROM speichern zu können?<br />
F 5: Codieren Sie die in Tabelle 1-1 angegebenen Kombinationen unter Verwendung von<br />
Tabelle 2-2!<br />
Ampel D C B A<br />
DEZ. ADR.<br />
Ausgang<br />
ROM<br />
O7 O6 O5 O4 O3 O2 O1 O0 Eingang<br />
Decoder<br />
D1 D0 D1 D0 D1 D0 D1 D0 1 0 1 0 1 0 0 0 0 80 0-19<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
10<br />
11<br />
12<br />
13<br />
14<br />
15<br />
16<br />
0 1 1 1 0 0 0 0 112 20-21<br />
Tabelle 2-3: Codierung der verschiedenen Ampelphasen<br />
Für die einwandfreie Steuerung der Ampel sind jedoch noch weitere Schaltungsteile<br />
notwendig. Dazu gehört ein Zähler, der die Adressen des ROM nacheinander anlegt, sowie<br />
eine Schaltung, die den Endzustand erkennt und den gesamten Vorgang von Neuem startet<br />
und die Decoderschaltung.<br />
2.3 Programmierung eines ROMs in OrCAD<br />
Nachfolgend wird erläutert, wie unter OrCAD ein ROM zu programmieren ist. Um die Daten<br />
in das ROM zu laden, benötigen wir eine Datei, in der die Daten in einem bestimmten Format<br />
vorliegen, dem Intel-HEX-Format. Dieses Format dient zur Speicherung und zur<br />
Übertragung von binären Daten und wird in erster Linie verwendet, um Programmierdaten für<br />
Mikrocontroller, EPROMS, etc. zu speichern. Bei dem HEX-Format handelt es sich um ein<br />
ASCII-Format, das bis auf das Zeichen für den Start Code „:“ ausschließlich aus<br />
hexadezimalen Zeichen besteht. Jede neue Zeile beschreibt einen neuen Datensatz, wobei jede<br />
Zeile aus sechs Teilen besteht:<br />
• Start code;<br />
• Data length;<br />
• Address;<br />
6/14
Praktikum GTI <strong>Versuch</strong> 4: <strong>Mikroprogrammierung</strong><br />
• Record type;<br />
• Data block;<br />
• Checksum;<br />
Abbildung 2.3 zeigt die Struktur einer Zeile (Datensatz) im HEX-Format. Jedes Feld hat eine<br />
Größe von 1 Byte respektive 8 Bits, wobei jedes Feld, bis auf das erste, ausschließlich<br />
hexadezimale Zeichen enthält.<br />
: n n n n n … … … … … n n<br />
Start code<br />
Data length<br />
Address<br />
Record type<br />
Data block<br />
Abbildung 2.3: Struktur einer Zeile im Intel-Hex-File<br />
Checksum<br />
Jede Zeile beginnt mit einem Start code, einem „:”. Das Feld Data length beschreibt die<br />
Anzahl der Bytes, die in dem Bereich Data block abgelegt werden sollen. Die nächsten<br />
beiden Bytes (Address) definieren die Adresse, wo die Daten abgelegt werden sollen. Das<br />
Feld Record type beschreibt den Datensatztyp. Wir benötigen im Rahmen unseres Praktikums<br />
die Datensatztypen „00“ (Binärdaten) und „01“ (letzte Zeile der Datei). Der Bereich Data<br />
block beinhaltet die zu speichernden Daten. Das Feld Checksum beinhaltet die Prüfsumme,<br />
die aus allen Bytes des Datensatzes gebildet wird, ausschließlich dem Start code und der<br />
Checksum selbst. Die Prüfsumme wird wie folgt gebildet:<br />
- Bilde die Summe aller Bytes (Start code ausgenommen)<br />
- Bilde das 2’er Komplement mit dem niederwertigsten Byte der Summe.<br />
Mit Hilfe der so gebildeten Prüfsumme lässt sich nun die Korrektheit des Datensatzes<br />
überprüfen. Addiert man die Prüfsumme mit dem niederwertigsten Byte der Summe aller<br />
Bytes, so muss das Ergebnisbyte 0 sein, andernfalls ist der Datensatz inkorrekt.<br />
Wurden aller Datensätze angegeben, so muss das Ende der Datensätze mit einer letzten Zeile<br />
abgeschlossen werden. Diese muss wie folgt lauten:<br />
:00000001FF<br />
Das Feld Data length ist „00“, da wir keine Daten mehr speichern wollen, die beiden<br />
Adressfelder (Address) beinhalten „0000“ und das Feld Recordtype wird mit dem Wert „01“<br />
gefüllt und definiert somit das Dateiende.<br />
Beispiel: Wir wollen das Datum „1100001“ unter der Adresse „0101“ speichern!<br />
1. Konvertierung des Binärformats ins Hexadezimale Format.<br />
11000012=6116 and 01012=516 2. Bestimme das Feld Data length . Da unsere zu speichernden Daten nur 7 Bits haben<br />
(1100001), benötigen wir insgesamt nur 1 Byte, um die Daten zu speichern.<br />
Folglich muss das Feld Data length mit “01” (110=116) beschrieben werden.<br />
3. Bestimme das Feld Record type. Der Wert für dieses Feld ist “00”, da wir Daten speichern<br />
und nicht das Ende der Datensätze definieren wollen.<br />
7/14
Praktikum GTI <strong>Versuch</strong> 4: <strong>Mikroprogrammierung</strong><br />
4. Bestimme das Feld Checksum.<br />
• Bilde die Summe aller Bytes einer Zeile:<br />
Data Length Byte + Address Bytes + Record Type Byte + Data Bytes:<br />
01 + 00 + 05 + 00 + 61<br />
Das Ergebnis der Addition beträgt 67H (Hexadezimal !!!) und stellt somit automatisch<br />
das niederwertigste Byte dar, dass wir im nächsten Schritt benötigen.<br />
• Bilden des 2er Komplements<br />
Wir wandeln zunächst den Wert 67H in die entsprechende Dualzahl um. Das Resultat<br />
ist 01100111. Bilden wir aus dieser Zahl das 2er Komplement, so erhalten wir<br />
10011001.<br />
• Wandeln wir den Wert aus dem vorherigen Schritt wieder ins Hexadezimale Format<br />
um, so erhalten wir unsere Prüfsumme: 99<br />
Die gesamte Zeile lautet folglich:<br />
010005006199<br />
Data length Address Record type Data checksum<br />
F 6: Definieren Sie nun die Zeilen im HEX-Format, die notwendig sind, um ein ROM so zu<br />
programmieren, dass es die aus Tabelle 2-3 codierten Ampelphasenkombinationen speichert.<br />
8/14
Praktikum GTI <strong>Versuch</strong> 4: <strong>Mikroprogrammierung</strong><br />
2.4 Zähler zur Adressierung des ROMs<br />
Da die Anzahl der notwendigen Speicherplätze sicherlich größer als 16 ist, wird ein Zähler<br />
mit mehr als vier Bit benötigt. Mit Hilfe des Bausteins 74177 wird ein 8-Bit-Zähler aufgebaut.<br />
(Die weitere Spezifikation des Bausteins 74177 können Sie dem Datenblatt entnehmen.)<br />
F 7: Wie wird der Baustein 74177 beschaltet, damit er als binärer Zähler funktioniert?<br />
F 8: Wozu dient der Pin Nr. 1?<br />
F 9: Wozu dienen die Pins 3, 4, 10, 11?<br />
F 10: Welcher Pin dient am Baustein 74177 zum Zurücksetzen des Zählers ?<br />
F 11: Welche Pins dienen als Ausgänge ? Welches ist das niederwertigste und welches das<br />
höchstwertigste Bit?<br />
F 12: Bis zu welcher Dezimalzahl kann ein 8-Bit-Binärzähler zählen?<br />
F 13: Der Baustein 74177 ist ein 4-Bit-Zähler. Wie kann aus zwei Bausteinen dieses Typs ein<br />
8-Bit-Zähler entworfen werden? Tip: Führen Sie sich vor Augen, wann der zweite Zähler zum<br />
ersten Mal zählen soll.<br />
9/14
Praktikum GTI <strong>Versuch</strong> 4: <strong>Mikroprogrammierung</strong><br />
F 14: Vervollständigen Sie die folgende Schaltung zu einem 8-Bit-Zähler!<br />
Abbildung 2.4: Ein 8-Bit Zähler aus zwei 4-Bit-Zählern<br />
2.5 Schaltung zur Erkennung des Schleifenendes<br />
Da ein 8-Bit-Binärzähler in der Lage ist, weit über den Bedarf an Adressen zu zählen, soll<br />
eine Schaltung entworfen werden, die den Zähler zum richtigen Zeitpunkt zurücksetzt.<br />
F 15: Bei welcher Adresse soll der 8-Bit-Zähler den Rücksetzimpuls erhalten? Geben Sie<br />
diese Zahl dezimal und binär an! (Beachten Sie, dass die letzte definierte Adresse noch eine<br />
volle Taktlänge anliegen muss!)<br />
F 16: Entwerfen Sie nun die Schaltung, die einen Rücksetzimpuls -Impuls für den 8-Bit-<br />
Zähler erzeugt, wenn die von Ihnen unter F 15: angegebene Adresse erreicht wurde.<br />
F 17: An welche PINs soll der Ausgang dieser Schaltung angeschlossen werden?<br />
10/14
Praktikum GTI <strong>Versuch</strong> 4: <strong>Mikroprogrammierung</strong><br />
2.6 Decoderschaltung zur Steuerung der Ampellampen<br />
Da die Daten, die am Ausgang des ROM zur Verfügung stehen, nach Tabelle 2-2 codiert<br />
wurden, eignen sie sich nicht zur direkten Steuerung der Ampellampen (rot, gelb, grün). Zu<br />
diesem Zweck wird ein Decoder entworfen, der in der Lage ist die einzelnen Ampeln durch 2<br />
Bits anzusteuern. Für jede der 4 Ampeln ist ein Decoder notwendig.<br />
Abbildung 2.5: Decoder<br />
F 18: Entwerfen Sie diese Decoder-Schaltung und geben Sie sie an!<br />
3 Design, Programmierung und Simulation<br />
Die Schaltung soll nun mit Hilfe von OrCAD erstellt und simuliert werden.<br />
A 1: Erstellen Sie ein Analog or mixed A/D Projekt und nennen Sie es Lab3. Benennen Sie<br />
den „Schematic Folder“ von SCHEMATIC1 nach TrafficLightSystem um.<br />
Die „Schematic Page“ Datei im „Schematic Folder“ benennen sie bitte von PAGE1 nach<br />
TrafficLightCircuit um.<br />
Wir werden nun die Schaltung des Counters erzeugen.<br />
A 2: Erstellen Sie einen neuen „Schematic Folder“ namens Counter. In dem Ordner Counter<br />
erstellen Sie eine neue Datei (new page) namens CounterCircuit. Erstellen Sie in dem<br />
Schematic-Fenster der Schaltung CounterCircuit die Schaltung, die Sie in Aufgabe F 14:<br />
sowie F 16: gezeichnet haben. Denken Sie daran, die beiden Schaltungen korrekt miteinander<br />
zu verbinden. Platzieren und benennen sie die Ports an den Ein- und Ausgängen der<br />
Schaltung.<br />
Hinweis: Für die input ports verwenden Sie bitte PORTRIGHT-R und für die output<br />
ports PORTLEFT-L.<br />
Nun widmen wir uns der Decoderschaltung.<br />
11/14
Praktikum GTI <strong>Versuch</strong> 4: <strong>Mikroprogrammierung</strong><br />
A 3: Erstellen Sie einen neuen „Schematic Folder“ namens Decoder. In dem Ordner Decoder<br />
erstellen Sie eine neue Datei (new page) namens DecoderCircuit. Erstellen Sie in dem<br />
Schematic-Fenster der Schaltung DecoderCircuit die Schaltung, die Sie in Aufgabe F 18:<br />
gezeichnet haben. Platzieren und benennen sie die Ports an den Ein- und Ausgängen der<br />
Schaltung.<br />
Nun haben wir die benötigten Teilschaltungen erzeugt und können mit der Gesamtschaltung<br />
beginnen.<br />
A 4: Öffnen Sie die Schaltung TrafficLightCircuit und erzeugen sie innerhalb dieser<br />
Schaltung die benötigten hierarchischen Blöcke für den Counter sowie für die Decoder.<br />
Hinweis: Um mehrere hierarchische Blöcke für die gleiche Schaltung zu erzeugen,<br />
müssen Sie lediglich unterschiedliche Namen im Feld “Reference” vergeben.<br />
A 5: Platzieren Sie nun den ROM-Baustein ROM32KX8break. Den Baustein finden Sie in der<br />
Bibliothek BREAKOUT.OLB.<br />
Die nachfolgende Abbildung stellt die Gesamtschaltung dar, die aus den vorangegangenen<br />
Arbeitsschritten resultiert.<br />
Abbildung 3.1: Gesamtschaltung<br />
Die Ausgänge O0 bis O7 des Bausteins ROM32KX8break werden verwendet, um direkt die<br />
Decoder anzusteuern, die ihrerseits die einzelnen Ampellampen schalten. Die Ausgänge des<br />
CounterCircuit dienen der Adressierung des ROMs. Die Eingänge A8 bis A14 des ROMS<br />
müssen auf 0 gesetzt werden, da der damit angesprochene Adressraum nicht verwendet wird.<br />
12/14
Praktikum GTI <strong>Versuch</strong> 4: <strong>Mikroprogrammierung</strong><br />
Hinweis: Verwenden Sie Place → Power → $D_LO (Bibliothek source.olb) um ein<br />
dauerhaftes LOW-Signal zu generieren .<br />
A 6: Erzeugen Sie nun eine Datei ROM.txt, mit Hilfe des Notepad Texteditors und speichern<br />
Sie dort die Lösung von Aufgabe F 6:.<br />
A 7: Um das ROM nun mit dem Inhalt der Datei zu programmieren, gehen Sie wie folgt vor:<br />
Selektieren sie das ROM. Wählen Sie nun über das Menü den Eintrag Edit → PSpice Model.<br />
Es öffnet sich nun der OrCAD PSpice Model Editor mit der Beschreibung des ROMs. Sie<br />
müssen dieses Modell nun so modifizieren, dass ihre Datei „ROM.txt“ referenziert wird.<br />
Verändern Sie dazu die Zeile:<br />
*+ FILE=<br />
Löschen Sie das Zeichen „*“ am Anfang der Zeile und ergänzen Sie die Zeile mit dem Namen<br />
Ihrer HEX-Datei (sollte ROM.txt sein), wobei der Name der Datei in Anführungszeichen zu<br />
setzen ist. Die resultierende Zeile lautet dann.<br />
+ FILE=“ROM.txt”<br />
Sie müssen nun noch Ihre HEX-Datei in das korrekte Verzeichnis kopieren, damit die Datei<br />
auch während der Simulation gefunden wird.<br />
A 8: Erzeugen Sie ein neues Simulationsprofil über das Menü PSpice→ NewSimulation und<br />
speichern Sie anschließend das gesamt Projekt. Damit ist sicher gestellt, dass alle<br />
notwendigen Verzeichnisse vorhanden sind. Kopieren Sie nun die HEX-Datei (ROM.txt) in<br />
das Verzeichnis Lab3-PSpiceFiles, welches sich unterhalb ihres Projektverzeichnisses (z.B.:<br />
C:\ORCAD_DATA) befindet.<br />
A 9: Simulieren Sie die Schaltung mit entsprechenden Eingangssignalen und prüfen Sie, ob<br />
ihre Schaltung die gewünschte Funktionalität aufweist.<br />
F 19: Wie muss der Eingang OE (DSBL) des ROMs belegt werden?<br />
13/14
Praktikum GTI <strong>Versuch</strong> 4: <strong>Mikroprogrammierung</strong><br />
Digitale Komponenten<br />
Symbol-Name Type-Number Library<br />
NOT 7404 7400<br />
AND<br />
2-Input<br />
AND<br />
3-Input<br />
NAND<br />
2-Input<br />
NAND<br />
3-Input<br />
NAND<br />
4-Input<br />
OR<br />
2-Input<br />
NOR<br />
2-Input<br />
NOR<br />
3-Input<br />
7408 7400<br />
7411 7400<br />
7400 7400<br />
7410 7400<br />
7420 7400<br />
7432 7400<br />
7402 7400<br />
7427 7400<br />
XOR 7486 7400<br />
JK-FF<br />
with CLR<br />
7473 7400<br />
JK-FF<br />
with PRE/CLR<br />
7476 7400<br />
JK-FF<br />
with CLR<br />
74107 7400<br />
JK-FF<br />
with PRE/CLR<br />
74109 7400<br />
D-FF<br />
with PRE/CLR<br />
7474 7400<br />
D-FF 7474 7400<br />
D-TYPE<br />
REGISTER<br />
74LS173A 74ls<br />
REGISTER<br />
FILE O.C.<br />
74170 7400<br />
PRESETTABLE<br />
BINARY COUNTER<br />
74LS197 74ls<br />
BINARY<br />
COUNTER<br />
ROM 32⋅8<br />
7493A<br />
74293<br />
74177<br />
7400<br />
5 Input, 8 Output<br />
32 bytes memory<br />
ROM 32⋅8 BREAKOUT<br />
14/14