FAKULTÄT FÜR INFORMATIK TECHNISCHE UNIVERSITÄT MÜNCHEN Lehrstuhl für Rechnertechnik und Rechnerorganisation Prof. Dr. Arndt Bode Einführung in die Rechnerarchitektur Wintersemester 2016/2017 Tutorübung 13 30.01–03.02.2017 1) Parallel/Seriell-Wandlung Im folgenden sollen die einzelnen Bits eines 4 Bit Wertes D mit der steigenden Flanke eines Takts CLK hintereinander (seriell) auf das Signal S ausgegeben werden. Dazu sind zwei Methoden möglich. 1a) Serialisierung mit gesteuertem Multiplexer Der Ausgang eines 2-Bit-Zähler wird an die Steuereingänge eines 4-zu-1 Multiplexers angeschlossen. Der Zähler kann mit dem Signal LOAD=1 auf den Zählerstand 0 gezwungen werden, andernfalls zählt er jeden Takt modulo 4. Die 4 Bits von D gehen auf die Dateneingänge des Multiplexers. Skizzieren Sie die Verschaltung. Den Zähler können Sie als gegeben annehmen. 1b) Implementieren Sie die Schaltung (inkl. Zähler) von 1a in einer VHDL-Architecture. 1c) Serialisierung über ein Schieberegister Hierzu wird ein 4-Bit Schieberegister benutzt, in das D geladen wird, wenn das Signal LOAD 1 ist. Ist es 0, wird mit jedem Takt geschoben. S wird dann mit einem (welchem?) Ausgang des Schieberegisters verbunden. Skizzieren Sie die Schaltung, beachten Sie dabei, dass für das Laden eine bestimmte Standardschaltnetz notwendig ist. 1d) Implementieren Sie die Schaltung on 1c in einer VHDL-Architecture. 2) Gassteuerung (alte Klausuraufgabe) Im folgenden soll eine einfache Steuerung zur sicheren Zündung und Brennüberwachung eines Gasofens entwickelt werden. Dazu muss eine Funkenzündung (Signal IGNITE, ’1’=Zündung) und ein Gasventil (Signal GAS, ’1’=Gas strömt aus) angesteuert werden. Ein Sensor misst, ob das Gas brennt (Signal FLAME, ’1’=Flamme vorhanden). Beschreibung des Ablaufs: A) Auf das Eingangssignal START=’1’ wird der Zündvorgang gestartet. B) Für den Zündvorgang wird der Zündfunke angeschaltet und bleibt an. C) 1 Sekunde später wird das Gasventil angeschaltet. Die Flamme entzündet sich (hoffentlich). 1 D) 1 Sekunde später wird überprüft, ob der Sensor das Brennen der Flamme meldet. Brennt die Flamme nicht, werden Zündung und Gas abgeschaltet und die Steuerung geht und verbleibt in einem Fehlerzustand (Ausgangssignal ALARM=’1’). Dieser Zustand kann nur durch das Eingangssignal RESET=’1’ verlassen werden. Brennt die Flamme dagegen, wird die Zündung abgeschaltet. E) Das Gas bleibt solange an, wie START=’1’ ist und die Flamme brennt. Verlischt die Flamme bei START=’1’, wird ein erneuter Zündversuch ab B) unternommen. Zur Zeitsteuerung wird die Schaltung mit einem Takt CLK mit der Periode 1s versorgt. 2a) Erstellen Sie die VHDL-Entity der Gassteuerung. Verwenden Sie dazu die oben beschriebenen Signalnamen. 2b) Zeichnen Sie ein Zustandsübergangsdiagramm für diese Gassteuerung. Achten Sie darauf, dass unter keinen Umständen das Gas länger als max. zwei Sekunden ohne Flamme austritt. 2c) Beschreiben Sie die VHDL-Architecture der Steuerung. Hinweise: • Die Zustände können z.B. mit einem 3Bit-Zähler realisiert werden. • Sie können davon ausgehen, dass die Schaltung “beim Einschalten” automatisch einen RESET-Impuls bekommt. 3) VHDL: Sender für Infrarot-Fernbedienung (alte Klausuraufgabe) Im folgenden soll in mehreren Schritten ein einfacher Sender für Signale einer InfrarotFernbedienung entwickelt werden. Die Fernbedienung übermittelt dabei einen Wert bestehend aus einem Datenwort von 4 Bits, das z.B. die gedrückten Tasten kodiert. Die Übertragung der einzelne Bits geschieht dabei über Lichtimpulse und Pausen mit verschiedenen definierten zeitlichen Längen. Diese Zeiten sind immer Vielfache einer Grunddauer t. • Um zu erkennen, daß eine Übertragung anfängt, wird ein Lichtimpuls der Länge 4*t gesendet. Das ist das “Startbit”. • Die Datenübertragung beginnt mit dem höchstwertigsten Bit des Datenworts • Für jedes ’0’-Bit wird eine Pause von 3*t gefolgt von einem Lichtimpuls der Länge t gesendet • Für jedes ’1’-Bit wird eine Pause von 2*t gefolgt von einem Lichtimpuls der Länge 2*t gesendet • Zur Erkennung von Fehlern wird ein 5tes Bit (Paritätsbit) gesendet. Dieses ist ’0’, wenn die Anzahl der 1er in den 4Bit gerade ist, ansonsten ist es ’1’. Die Kodierung der ’0’ bzw. ’1’ erfolgt wie vorher beschrieben. 3.1) Zeichnen Sie den zeitlichen Verlauf der Lichtaussendung eines Datenworts mit dem Wert 0011. Ein Kästchen soll dabei der Grunddauer t entsprechen. 2 3.2) Es soll die Teilschaltung entwickelt werden, die die Parität des 4Bit-Worts bestimmt. Die Ausgabe des Bauteils soll der für die Aussendung passende Paritätswert sein. 3.2.1) Beschreiben Sie die Entity dieses Bauteils in VHDL 3.2.2) Implementieren Sie dieses Bauteil in einer VHDL-Architecture mit Concurrent Statements. 3.3) Es soll nun die Schaltung entwickelt werden, die die Sende-Impulsfolge ausgibt. Folgende Eingabesignale werden erwartet: • Takt CLK mit der Periodendauer t • Datenwort und Paritätsbit zusammengefasst als DATA, das Paritätsbit ist das niederwertigste Bit • Sendeauslösung SEND Als Ausgabe soll das Steuersignal IR für den Infrarot-Sender vorhanden sein. Die Signale SEND und DATA werden rechtzeitig vor einer steigenden Flanke gesetzt. Ist dabei SEND=’1’, wird DATA in ein internes Schieberegister geladen und die Aussendung und damit der Automat zu Erzeugung der Zeitabläufe gestartet. Eine Verzögerung von bis zu 4*t, bevor das Startbit gesendet wird, ist erlaubt. 3.3.1) Zeichnen Sie das Zustandsübergangsdiagramm für die gesamte Aussendung. Für jeden Zustand soll dabei der Wert von IR angegeben werden. Hinweis: Mit 5 zu sendenden Bits hat das Diagramm sehr viele, fast identische Zustände. Damit das Diagramm einfacher wird, können Sie sich auf das Startbit und die Aussendung des ersten Datenbits beschränken. Kennzeichnen Sie dabei den Teil des Automaten, der für jedes Datenbit identisch durchlaufen werden kann. 3.3.2) Die Implementierung des Automaten wird mit folgendem Trick stark vereinfacht: Man nutzt nur einen 5Bit-Binärzähler, der den “Hauptzustand” zum Abzählen der Sendebits und den “Unterzustand” zur Erzeugung der Impulsmuster zusammenfasst. Welche Zustände kodieren dabei die drei höchstwertigen Bits des Zählers? Welche Bedeutung haben dann jeweils die beiden niederwertigen Bits? (Beschreibung in Stichpunkten). 3.3.3) Beschreiben Sie die Entity der Sendesteuerung in VHDL. 3.3.4) Implementieren Sie die Sendesteuerung in einer VHDL-Architecture. Hinweise: • Nutzen Sie wie in 1.3.2) beschrieben, einen 5Bit-Zähler zur Zustandsspeicherung • Verwenden Sie ein Schieberegister, um das jeweils aktuelle Sendebit zu bestimmen. 4) Bugfixing (entfernt ähnlich alter Klausuraufgabe) 3 Gegeben ist folgende Spezifikation und ein Versuch einer Implementierung in VHDL. Spezifikation: Mit steigender Flanke von A getakteter Zähler mit 4-Bit Ausgängen B, Zählbereich von 0 bis einschliesslich 1210 , Ausgang C wird gleichzeitig mit B=1010 auf ’1’ gesetzt, ’0’ sonst. Synchroner Reset auf B=0 und C=’0’ wenn D=’0’, bei D=’1’ normales Zählen. Implementierung: entity of zaehler is port ( A : in STD_LOGIC; B: out UNSIGNED(3 downto 0); C: in STD_LOGIC; D : in STD_LOGIC ); end zaehler; architecture total_daneben of zaehler is signal B_int: UNSIGNED(4 downto 0); begin B_int<=B; process(A,D) begin if D='1' then B_int<="0000"; C<='0'; elsif falling_edge(A) then C<='0'; A<=A+1; if B_int="1100" then A<="0000"; else if A="1010" then C<='1'; end if; end if; end if; end process; end total_daneben; 4.1) Schreiben Sie obige VHDL-Implementierung so um, dass die Spezifikation erfüllt wird und das Programm syntaktisch korrekt ist. Behalten Sie dabei alle Signalnamen bei und verändern Sie das Programm so wenig wie möglich! 4