SS 2004 VAK 18.004 Musterlösungen Technische Informatik 2 (T2) Prof. Dr.-Ing. D. P. F. Möller Aufgabenblatt 2.5 Lösung 2.5.1 Befehlszähler (Program Counter, PC) enthält Adresse des nächsten auszuführenden Befehls. Nach Aussenden Adresse wird Befehl über interne Eingangsschaltung in Befehlsregister (InstructionRegister, IC) gebracht, entschlüsselt und ausgeführt. Register ist Speicherelement für ein Datenwort. Register sind aus FF s zusammengesetzt, besitzen so viele parallele Bitstellen, wie es spezielle Funktion innerhalb der Architektur erfordert. Befehlsdekoder interpretiert Bit-Information des Operations-Code, dahingehend, ob es sich um Konstante-Register-Transferbefehle (MVI) und andere Befehle (00) Register-Register-Transferbefehle (MOV) und HLT-Befehl (01) arithmetische und logische 1-Byte-Befehle () Sprungbefehle (JMP, I/0-Befehle (IN/OUT) und andere Befehle (11) handelt. Es werden jeweils die beiden höchstwertigen Bit des OP-Codes verwendet (bei 8 Bit Befehlsregister das Bit 7 und 6).
Lösung 2.5.2 Fetch: Trage nächste Instruktion ins IR ein; PC zeigt auf nächste Instruktion; IR: hält die abgeholte Instruktion Prozessor Steuerwerk Controller Control /Status Rechenwerk ALU Registers PC 0 IR load R0, M[500] R0 R1 0 load R0, M[500] 1 inc R1, R0 2 store M[501], R1 I/O Speicher 500 501
Decode: Bestimme Aussage (Inhalt) der Instruktion Prozessor Steuerwerk Controller Control /Status Rechenwerk ALU Registers PC 0 IR load R0, M[500] R0 R1 0 load R0, M[500] 1 inc R1, R0 2 store M[501], R1 I/O Speicher 500 501
Fetch Operanden: Verschiebe Daten aus dem Speicher ins RW Register Prozessor Steuerwerk Controller Control /Status Rechenwerk ALU Registers PC 0 IR load R0, M[500] R0 R1 0 load R0, M[500] 1 inc R1, R0 2 store M[501], R1 I/O Speicher 500 501
Execute: Transferiert Daten durch ALU Register. Die Instruktion ist nicht aktiv während dieser Sub-Operation Prozessor Steuerwerk Controller Control /Status Rechenwerk ALU Registers PC 0 IR load R0, M[500] R0 R1 0 load R0, M[500] 1 inc R1, R0 2 store M[501], R1 I/O Speicher 500 501
Store results: Schreibe Daten aus Registern in den Speicher zurück. Die Instruktion ist nicht aktiv während dieser Sub-Operation Prozessor Steuerwerk Controller Control /Status Rechenwerk ALU Registers PC 0 IR load R0, M[500] R0 R1 0 load R0, M[500] 1 inc R1, R0 2 store M[501], R1 I/O Speicher 500 501 Aufgabe 2.5.3 In Mikroprozessorentwicklungssystemen werden Daten häufig auf einem Display mit hexadezimalem Format (0 bis 9 und A bis F) dargestellt. Mit Hilfe eines GAL soll die hexadezimalen Werte eines 4-Bit-Datenwortes (D0 bis D3) im 7-Segmentcode dargestellt werden. Die Schaltung verfügt über einen Segmenttest (ST). Die Wahrheitstabelle lautet wie folgt:
Hex ST D3 D2 D1 D0 Segmente 0 0 0 0 0 0 A B C D E F 1 0 0 0 0 1 B C 2 0 0 0 1 0 A B D E G 3 0 0 0 1 1 A B C D G 4 0 0 1 0 0 B C F G 5 0 0 1 0 1 A C D F G 6 0 0 1 1 0 A C D E F G 7 0 0 1 1 1 A B C 8 0 1 0 0 0 A B C D E F G 9 0 1 0 0 1 A B C D F G A 0 1 0 1 0 A B C E F G B 0 1 0 1 1 C D E F G C 0 1 1 0 0 A D E F D 0 1 1 0 1 B C D E G E 0 1 1 1 0 A D E F G F 0 1 1 1 1 A E F G 1 x x x x A B C D E F G Geben Sie die Eingabedatei des hexadezimal Siebensegmentdecoders an, wenn der Segmenttest an Pin 8 anliegt, das 4-Bit-Datenwort folgende Zuordnung aufweist: D0 = Pin 1, D1 = Pin 2, D2 = Pin 3 und D3 = Pin 4 und zur Ansteuerung der Segmente A bis kombinatorische Ausgänge im Betriebsmodus 1 verwendet werden mit der Zuordnung A = Pin 18, B = Pin 19, C = Pin 13, D = Pin 14, E = Pin 15, F = Pin 17 und G = Pin 16. Lösung: Um die Logik-Gleichungen in einer angenehmen Form zu erhalten müssen wir eine Optimierung per KV- Diagrammen durchführen. Dies erfordert für A-G jeweils ein KV-Diagramm: A D2-D3 \\ D0-D1 D0 & /D1 D0 & D1 /D0 & D1 /D0 & /D1 D2 & /D3 1 1 1 0 D2 & D3 0 1 1 1 /D2 & D3 1 0 1 1 /D2 & /D3 0 1 1 1 B D2-D3 \\ D0-D1 D0 & /D1 D0 & D1 /D0 & D1 /D0 & /D1 D2 & /D3 0 1 0 1 D2 & D3 1 0 0 0 /D2 & D3 1 0 1 1 /D2 & /D3 1 1 1 1 C D2-D3 \\ D0-D1 D0 & /D1 D0 & D1 /D0 & D1 /D0 & /D1 D2 & /D3 1 1 1 1 D2 & D3 1 0 0 0 /D2 & D3 1 1 1 1 /D2 & /D3 1 1 0 1
D D2-D3 \\ D0-D1 D0 & /D1 D0 & D1 /D0 & D1 /D0 & /D1 D2 & /D3 1 0 1 0 D2 & D3 1 0 1 1 /D2 & D3 1 1 0 1 /D2 & /D3 0 1 1 1 E D2-D3 \\ D0-D1 D0 & /D1 D0 & D1 /D0 & D1 /D0 & /D1 D2 & /D3 0 0 1 0 D2 & D3 1 1 1 1 /D2 & D3 0 1 1 1 /D2 & /D3 0 0 1 1 F D2-D3 \\ D0-D1 D0 & /D1 D0 & D1 /D0 & D1 /D0 & /D1 D2 & /D3 1 0 1 1 D2 & D3 0 1 1 1 /D2 & D3 1 1 1 1 /D2 & /D3 0 0 0 1 G D2-D3 \\ D0-D1 D0 & /D1 D0 & D1 /D0 & D1 /D0 & /D1 D2 & /D3 1 0 1 1 D2 & D3 1 1 1 0 /D2 & D3 1 1 1 1 /D2 & /D3 0 1 1 0 *IDENTIFICATION HEXDEZSIEBEBSEGMENT; *TYPE GAL16V8; *PINS D0 = 1, D1 = 2, D2 = 3, D3 = 4, ST = 8, C.0 = 13, D.0 = 14, E.0 = 15, G.0 = 16, F.0 = 17, A.0 = 18, B.0 = 19; *BOOLEAN EQUATION /A = D0 & D2 & /D3 + /D1 & /D2 & D3 + D1 & /D3 + /D0 & /D2 + D1 & D2 + /D0 & D3 + ST; /B = D0 & D1 & /D3 + /D0 & /D1 & /D3 + D0 & /D1 & D3 + /D2 & /D3 + /D0 & /D2 + ST; /C = D0 & /D3 + /D1 & /D3 + D0 & /D1 + D2 & /D3 + /D2 & D3 + ST; /D = D1 & /D2 & /D3 + /D0 & /D2 & /D3 + D0 & D1 & /D2 + D0 & /D1 & D2 + /D0 & D1 & D2 + /D1 & D3 + ST; /E = /D0 & D1 + /D0 & /D2 + D1 & D3 + D2 & D3 + ST; /F = /D1 & D2 & /D3 + /D0 & D2 + /D0 & /D1 + /D2 & D3 + D1 & D3 + ST; /G = /D1 &D2 & /D3 + D1 & /D2 + /D0 & D1 + /D2 & D3 + D0 & D3 + ST; *END
Aufgabe 2.5.4 Entwerfen Sie einen BCD Code Tester welcher seriell empfangene 4-stellige Bi-närworte auf 8421-BCD-Zahlen überprüft. Die Eingabe beginnt mit der höchstwerten Stelle (MSB). Wird eine 8421-BCD-Zahl erkannt, soll das durch ein 1-Signal am Ausgang angezeigt werden. Lösung: Zuerst muß überlegt werden welche Funktion ein BCD-Tester zu erfüllen hat. Der BCD-Code ist eine Codierung der Dezimalzahlen durch die zugehörigen Binärzahlen der Länge 4 (siehe T1). Diese Codierung wird durch die folgende Tabelle dargestellt: Dezimalzahl BCD-Code(c 3 c 0 ) 0 0000 1 0001 2 00 3 0011 4 00 5 01 6 01 7 0111 8 00 9 01 - - 11-10 - 11-11 - 1111 Wobei die letzten 6 Zeilen der Tabelle die als falsch zu erkennenden Codes enthält, da ihnen keine Dezimalziffern zugeordnet sind. Es sind nun die gemeinsamkeiten der richtigen oder falschen Kombinationen zu analysieren um den Automaten zu konzipieren. Es ergibt sich, dass Falsch durch ( c3 c1 ) ( c3 c2 ) gegeben ist. Da die Verarbeitung seriell erfolgen soll benötigen wir Zustände um die momentane Position im Codewort und den momentanen Fehlerstatus zu speichern. Der Automatentyp ist erstens mit Ausgabe und zweitens mit Ausgabe im Zustand (Moore-Automat) zu wählen, damit unser Automat nach Erhalt des BCD-Codes durch den Wert seines Endzustands das Ergebnis der Prüfung signalisiert. Die Anzahl der Zustände wird zusätzlich erhöht durch die implizite Forderung, dass nach dem ersten Codewort auch ein zweites,.. geprüft werden kann. Somit ist beim 5.Zeichen wieder neu mit der Prüfung zu beginnen. Dazu ist es notwendig, dass alle Zustände die Stellenzahl gespeichert haben.
Brainstorming der Zustände: S0 Startzustand S1 2.Stelle mit 1.Stelle Null S2 2.Stelle mit 1.Stelle Eins S3 3.Stelle Fehler S4 3.Stelle kein Fehler, führend S5 3.Stelle kein Fehler S6 4.Stelle kein Fehler S7 4.Stelle Fehler S8 Eingabe komplett, kein Fehler Ausgabe 0 S9 Eingabe komplett, FEHLER Ausgabe 1 Aufgabe 2.5.5 Konstruieren Sie mit einen GAL einen elektronischen Würfel Die Ausgänge des GAL sind dazu al Registerausgänge zu definieren, da für eine Änderung der Ausgangszustände das Taktsignal an Pin 1 maßgebend ist. Die Wahrheitstabelle des Würfels ist nachfolgend angegeben, wobei zu beachten ist, das die Ausgänge Q1 bis Q4 mit Hilfe der disjunktiven Normalform ermittelt werden können. Zahl Momentaner Zustand Folgezustand Start Q1 Q2 Q3 Q4 Q1+ Q2+ Q3+ Q4+ 1 0 1 1 1 0 1 0 1 1 2 0 1 0 1 1 1 0 1 0 3 0 1 0 1 0 0 0 1 1 4 0 0 0 1 1 0 0 1 0 5 0 0 0 1 0 0 0 0 1 6 0 0 0 0 1 1 1 1 0 Ablesen 1 x x x x Q1 Q2 Q3 Q4 Geben Sie die Eingabedatei des elektronischen Würfels an, wenn der Takt an Pin1 anliegt, das Startsignal an Pin 2 und die Ausgänge folgend Zuordnung aufweisen: Q1 = Pin 19, Q2 = Pin 18, Q3 = Pin 17 und Q4 = Pin 16.
Lösung: *IDENTIFICATION WÜRFEL; *TYPE GAL16V8; *PINS TAKT = 1, START = 2, Q1.R = 19, Q2.R = 18, Q3.R = 17, Q4.R = 16 ; *BOOLEAN EQUATION Q1 = Q1 & Q2 & Q3 & /Q4 & /START + Q1 & /Q2 & /Q3 & Q4 & /START + /Q1 & /Q2 & /Q3 & Q4 & /START + Q1 & START; Q2 = /Q1 & /Q2 & /Q3 & Q4 & /START + Q2 & START; Q3 = /Q1 & /Q2 & Q3 & /Q4 & /START + /Q3 & START; Q4 = Q1 & Q2 & Q3 & /Q4 & /START + Q1 & /Q2 & Q3 & /Q4 & /START + Q1 & /Q2 & Q3 & /Q4 & /START + Q4 & START; *END