09.08.2013 Aufrufe

Versuch 4: Mikroprogrammierung - Technische Informatik

Versuch 4: Mikroprogrammierung - Technische Informatik

Versuch 4: Mikroprogrammierung - Technische Informatik

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

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 4­Bit 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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!