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 Lösungsvorschlag zur Zentralübung 10 13.01.2017 Antworten auf die Fragen im Text (Flipflops und Schaltwerke) Wandeln Sie diese Schaltung durch Einfügen von Invertern in ein rein NOR-basiertes RS-Flipflop um. S R Durch Einfügen von zwei Invertern (am Ausgang des OR-Flipflops und am nachfolgenden AND-Eingang) wird die Funktion des Flipflops nicht beeinflusst, lediglich das Ausgangsignal invertiert. Ein weiterer Inverter am R-Eingang macht diesen genauso High-aktiv wie den S-Eingang. Das daraus folgende AND-Gatter mit zwei invertierten Eingängen kann nach der De Morganschen Regel in ein NOR umgewandelt werden. (Die übliche Über-Kreuz-Zeichnung der Verbindungen kann leicht durch Umdrehen des unteren Gatters verwirklicht werden.) Wie könnte ein Flipflop aussehen, das nur dann seinen Wert ändern kann, wenn ein zusätzlicher Takteingang aktiv (log. 1) ist? (Sogenanntes taktgesteuertes Flipflop.) Ein NOR-basiertes RS-Flipflop hat seinen (inaktiven) Speicherzustand, wenn an den Eingängen (R,S) = (0,0) anliegt. Es liegt daher nahe, die Signale R und S über Datenwegsschalter mit dem Taktsignal zu verknüpfen: 1
S R Durch geschicktes Einfügen von Invertern kann man ein solches getaktetes Flipflop auch ausschließlich aus NAND-Gattern aufbauen. Bitte selbst probieren! Tip: Zunächst die Datenwegsschalter umwandeln, danach ergeben sich die Konsequenzen für das Flipflop von selbst. Da die Schaltung symmetrisch bezüglich der Wahl der Ein- und Ausgänge ist, wird sich am Ende eine umgekehrte Bezeichnung der Ausgänge ergeben. Wie müsste man das Flipflop zusätzlich beschalten, wenn nur ein Eingang (genannt D) zum Datenspeichern neben dem Takteingang vorhanden sein soll? (Sogenanntes D-Flipflop.) Jedes Flipflop mit einem Setz- und einem Rücksetzeingang hat mindestens die beiden gültigen Eingangswerte (0, 1) und (1, 0), die den Vorgang des Setzens oder Rücksetzens auslösen. Eine Umwandlung in ein ausschliesslich speicherndes Flipflop kann somit durch Einfügen eines Inverters geschehen, im Beispiel bei einem NAND-basierten getakteten RS-Fliplflop, welches dadurch zu einem getakteten D-Flipflop wird: S Aufgabe 10.1 1) Wie lässt sich ein RS-Flipflop (z.b. die NAND-Variante) in VHDL vom Verhalten her beschreiben? Wir gehen zunächst nur vom -Ausgang aus. Dieser behält seinen alten Wert, wenn R und S 1 sind, wird mit S=0 auf 1 und mit R=0 auf 0 gezwungen. q <= 1 when s= 0 else 0 when r= 0 else q; Interessanterweise benötigen wir hier den invertierten -Ausgang nicht, um die Speicherfunktion zu erhalten. Dies geschieht allein schon über die Rückkopplung (d. h. q taucht auf der 2
rechten Seite auf). 2) Wie lässt sich ein NOR-RS-Flipflop in VHDL strukturell (d. h. als Netzliste mit Gatterkomponenten und Verdrahtung) beschreiben? Zunächst die Interfacebeschreibung der Entity: entity nor_rs is port (r,s : in std_logic; q,qn : out std_logic ) end entity; Für die Architecture ist zu beachten, dass q bzw. qn mit dem Modus OUT nicht intern wieder gelesen werden können. Daher müssen wir interne Signale iq und iqn einführen. architecture structural of nor_rs is signal iq,iqn: std_logic; -- interne Signale component nor2 -- Def. des NORs mit zwei Eingängen port (a,b : in std_logic; x : out std_logic ); end component; q<=iq; qn<=iqn; -- Ausgabe der internen Signale NOR_1: nor2 port map (s, iq, iqn); -- SET ist am NOR mit /! NOR_2: nor2 port map (r, iqn, iq); end structural; Aufgabe 10.2 1) Machen Sie sich anhand des Impulsverlaufes des Taktsignales klar, wann jeweils die einzelnen Teilflipflops schalten. (2) (3) (1) (4) 1. Das Signal ist gerade nicht mehr Low, d.h. für den Slave gerade nicht mehr aktiv. Folge ist, dass das Slave-Flipflop sperrt und somit keine Zustandswechsel an seinem Ausgang vorkommen können. 3
2. ist jetzt vollständig aktiv, d. h. das Master-Flipflop öffnet und kann somit gesetzt werden. 3. Nun ist nicht mehr aktiv, so dass das Master-Flipflop wieder sperrt und seinen letzten gesetzten Wert behält. 4. Schließlich wird für das Slave-Flipflop wieder aktiv und kann somit den Wert des Master-Flipflops übernehmen. In der letzten Phase findet der eigentliche, nach außen sichtbare Wechsel des Zustandes eines Master-Slave-Flipflops statt. Ein MS-Flipflop mit einem solchen Taktverlauf nennt man daher negativ flankengesteuert, da die negative (d. h. die abfallende) Flanke für den eigentlichen Zustandswechsel sorgt. Mit einem Inverter für kann auf die steigende Flanke reagiert werden. Kann es bei schnellen Signalwechseln Probleme geben? Ist das Eingangssignal in der Umgebung der übernehmenden Taktflanke instabil, kann zunächst ein falscher Zustand abgespeichert werden. In einem noch engeren Fenster um diese Taktflanke herum ist es aber auch möglich, dass das Flipflop zwar einen Wert annimmt, nach einiger Zeit aber spontan zurückfällt, zwischen 0 und 1 oszilliert oder sogar konstante Spannungspegel ausgibt, die weder 1 noch 0 zuzuordnen sind. Dieser Zustand kann relativ lange anhalten und wird Metastabilität genannt. Ein Auftreten kann schwerste Probleme nach sich ziehen und potentiell durch Folgefehler sogar dauerhafte Hardwareschäden verursachen. Besonders gravierend kann das bei der Zustandspeicherung von Automaten sein, wo z.b. ungültige Zustände entstehen, die durch keinen in dem Kontext möglichen Übergang verlassen werden können. Die Wahrscheinlichkeit für ein metastabiles Ereignis steigt rapide an, wenn die sogenannte Setup- und Holdzeiten um die Taktflanke verletzt werden. Man kann durch verschiedene technische Tricks dieses Zeitfenster verkleinern, aber nicht völlig eliminieren. Es gibt kein Flipflop, das keine Metastabilität besitzt! Die einzige Möglichkeit, den Effekt extrem unwahrscheinlich (< 10 30 ) auftreten zu lassen, ist die strikte Einhaltung der Setup/Hold-Zeiten. Anwendung: JK-Flipflop Wenn man sich die Funktionstabelle eines RS-Flipflops genau anschaut, stellt man fest, dass die Eingangkombination (R,S) = (1,1) (bzw. (R,S) = (0,0) beim NAND-basierten Flipflop) eine Ausgangskombination von (, ) = (1, 1) erzeugt und somit eigentlich nicht gültig ist, da NOT ist. Um zu verhindern, dass die besagte Eingangskombination versehentlich genutzt wird, kann man nun dafür sorgen, dass ihr eine neue Funktion zugeordnet wird. Üblicherweise wählt man dafür den Wechsel des aktuellen Zustandes (Toggle, daher auch T-Flipflop). Die neue Funktionstabelle sieht also z.b. folgendermaßen aus, wobei nun R und S als J und K (Jump and Kill) bezeichnet werden: 4
J K 0 x x alt alt 1 0 0 alt alt 1 0 1 0 1 1 1 0 1 0 1 1 1 alt alt Diese Funktionalität wird üblicherweise dadurch implementiert, dass im Fall (J, K) = (1, 1) die Ausgänge kreuzweise über Datenwegsschalter an die Eingänge eines herkömmlichen RS-Flipflips zurückgeführt werden: J K Voraussetzung für diese Form der Rückkopplung ist allerdings die Verwendung eines nichttransparenten Systemflipflops, hier angedeutet durch das Dreieck am Takteingang (= Flankensteuerung) sowie den senkrechten uerstrich im Flipflopsymbol (= Master-Slave-Technik). Auch das JK-Flipflop kann natürlich Metastabilität aufweisen! 2) Entwerfen Sie ein sogenanntes D-Master-Slave-Flipflop durch (graphische) Verschaltung von Gattersymbolen. D Master-Latch Slave-Latch 5
3) Schaltbild (vereinfachte Darstellung der D-FFs): 1 2 3 4 D1 FF1 FF2 FF3 FF4 D D D D Ausgangswerte: D1 1 2 3 4 undefinierter Wert Obige Anordnung ist ein Schieberegister. Dies kann z. B. benutzt werden, um serielle Daten zu parallelisieren. Wenn die Flipflopeingänge auch über einen Umschalter mit einem bestimmten Wert geladen werden können, ist es zusätzlich möglich, parallele Bitworte durch das Schieben zu serialisieren. Die Anwendungen sind damit z. B. in der gesamten Übertragungstechnik, bei seriellen Schnittstellen wie RS232, USB, Firewire, Serial ATA, Displayansteuerung (TFT) etc. Aufgabe 10.3 1) Darstellung des Verhaltens eines D-Master-Slave-Flipflops in VHDL: process(clk) -- in architecture eingebunden if rising_edge(clk) then -- steigende Flanke q<=d; end if; end process; 2) Um nicht jedes Bit einzeln beschreiben zu müssen, werden jetzt Vektoren benutzt. Wie bei Aufgabe 9.1 wird ein internes Signal benutzt. entity shift_register is port (d,clk: in std_logic; q : out std_logic_vector(4 downto 1) ); end entity; 6
architecture simpel of shift_register is signal iq: std_logic_vector(4 downto 1); q<=iq; process(clk) if rising_edge(clk) then iq(1)<=d; iq(4 downto 2)<=iq(3 downto 1); end if; end process; end simpel; 3) 8Bit-Addierer mit zwei Takten Verzögerung. Eingänge a, b und Ausgang z sind in der Entity als unsigned(7 downto 0) definiert. architecture beispiel of adder is -- Wir brauchen wieder interne Zwischenspeicher für a und b -- Diese Signale sind ausserhalb der Entity NICHT sichtbar! signal a_ff,b_ff: unsigned(7 downto 0); process(clk) if rising_edge(clk) then a_ff <= a; b_ff <= b; z <= a_ff + b_ff; end if; end process; end beispiel; Funktionsweise: a und b werden mit der steigenden Taktflanke in den Entity-internen Signalen a ff und b ff zwischengespeichert. Diese Zwischenspeicher werden auch Register genannt. Das Ergebnis der Addition von a ff und b ff wird in Flipflops gespeichert, deren Ausgang auf das Signal z gegeben wird. Durch die Semantik des Prozesses (Zuweisungen erst am Ende) entsteht damit eine Verzögerung des Ausgangs zu den Eingangswerten um insgesamt zwei Takte. Diese Verzögerungskonstruktion mit zusätzlichen Flipflops ist sinnvoll, um reale Gatterlaufzeiten zu entzerren (Stichwort Pipelining). Beispielsweise können somit Berechnungen, die für einen Takt zu lange dauern, in Zwischenstufen aufgeteilt werden, die durch Flipflops getrennt werden. Dieser Aufbau erlaubt höhere Taktraten auf Kosten der Verzögerung (Latenz). 7