i-438e2d45045142363ce89ced1b51c379-Table-RS.png

Wie so oft ist ein Bild (noch dazu eines, auf dem man herumklicken kann) weitaus aussagekräftiger als eine textuelle Beschreibung; hier also noch das interaktive Schaltbild eines einfachen RS-Flipflops (wir erinnern uns: der kleine Kreis direkt am Ein- oder Ausgang eines Gatters zeigt an, dass der entsprechende Wert negiert wird*):

Der Nachteil des RS-Flipflops ist, dass es ungetaktet arbeitet, das heißt, dass jede Änderung an den Eingängen sofort eine Änderung der Ausgänge nach sich zieht. Dieses Verhalten ist aber in der Regel nicht erwünscht, erst recht nicht bei Computern, die ja immer getaktet arbeiten. Getaktet heißt einfach, dass Operationen (wie die Addition oder das Speichern von Bits) nicht zu beliebigen Zeitpunkten stattfinden, sondern gebunden an einen regelmäßigen Takt (der entspricht der Gigahertz-Zahl, mit welcher für Computer immer so schön geworben wird).

Es gibt zahlreiche Flipflop-Varianten, welche ein getaktetes Verhalten aufweisen – selbst das bereits vorgestellte RS-FF lässt sich in ein sogenanntes taktpegelgesteuertes Flipflop umwandeln. Der Vielfalt halber aber zeige ich hier jedoch einen anderen Flipflop-Typ, welcher als Grundlage für weitere Bauteile dienen wird, vor allem auch, da RS-Flipflops den Nachteil haben, dass sie immer 2 Eingänge – Set und Reset – benötigen, wo doch in der Theorie ein einziger reichen würde. Daher wurden die sogenannten D-Flipflops entwickelt, welche mit einem Eingang D für die Daten auskommen. An einen zweiten Eingang C (für englisch “clock”) wird der sogenannte Takt angelegt – das ist eine konstante Folge von 0-1-Werten, die wie ein Metronom (tick-links, tick-rechts, tink-links, tick-rechts) die Zeit angeben. Der an D liegende Wert soll nur im Einklang mit dem Takt übernommen werden.

Hier lassen sich wiederum zwei verschiedene Möglichkeiten unterscheiden. D-Flipflops, die den Wert von D so lange auf den Ausgang Q abbilden, wie der Clock-Eingang C auf “1” gesetzt ist, werden taktzustandsgesteuerte oder transparente Flipflops (transparent, weil der D-Eingang sofort auf den Q-Ausgang abgebildet wird) genannt; im englischen Raum spricht man zur Unterscheidung hier nicht von Flipflops, sondern von Latches. Die zweite Möglichkeit besteht darin, den Eingangswert von D nur genau in dem Moment zu übernehmen, in dem an C eine positive Taktflanke anliegt, das heißt, wenn der Wert an C von “0” auf “1” wechselt; im englischen Raum sind das die eigentlichen D-Flipflops. Das folgende Schaltbild zeigt ein D-Latch; die zugehörige Schalttabelle spare ich mir diesmal, die kann ja anhand der Schaltung selbst hergeleitet werden:

An dieser Stelle müsste jetzt eigentlich die Erklärung folgen, wie denn ein D-Flipflop nun genau aussieht und wie man ein Register (das Ding, das ganze Bitketten speichert) aus Flipflops aufbaut. Da der Artikel aber schon viel länger geworden ist, als geplant, kommt hier erst einmal ein Schnitt und das Versprechen, dass die fehlenden Erklärungen im nächsten Artikel nachgereicht werden.


*Kennern wird auffallen, dass die Eingänge der beiden NAND-Gatter in der Schaltung invertiert und die Eingänge S und R in der bei RS-Flipflops sonst vielleicht unüblichen nicht-negativen Logik benutzt werden. Der Grund hierfür ist ganz einfach: so notiert ist das RS-FF leichter zu verstehen als in der Variante mit negierten Eingangssignalen.

1 / 2

Kommentare (20)

  1. #1 rolak
    Juni 28, 2011

    🙂 Früher war beim Beantworten von ‘wie geht das?’ spätestens dann das Ende des Ernstnehmens erreicht, wenn ich genötigt war, das Wort ‘Flip-Flop’ zu benutzen. Wurde noch schlechter, als die Badelatschen entsprechend umgetauft wurden…

  2. #2 Marcus Frenkel
    Juni 28, 2011

    Ach…ich bin optimistisch, dass die Leser aus lauter Interesse weiter folgen…egal, wie wild es noch wird. 😉

  3. #3 Engywuck
    Juni 28, 2011

    kann es sein, dass so ein Register leicht viele Transistoren benötigt?
    Aus Teil 1 ist ja bekannt, dass ein NAND aus 4 Transistoren besteht, ein NOT aus zweien.
    Das heißt doch, dass so ein primitiver RS-Flipflop schon 8 Transistoren (bzw. 12, wie bei Dir gezeichnet mit nichtinvertierten Eingängen) benötigt, ein D-Latch wie gezeichnet 20.
    Für ein(!) Bit!

    Damit ist dann klar, wieso Register (und letztlich on-die-Cache) recht “teuer” ist…

    Zwei Fragen noch:
    – zu meinen Löterzeiten (early teens, also etwas her) hab ich flipflops aus zwei Bipolartransitoren (plus Widerstände und Lämpchen zur Anzeige) gebaut. Das ist in FET-Technik (oder nur CMOS?) nicht möglich?
    – wieso baust Du im Bild des D-Latch links unten einen NAND rein, wenn der letzlich “nur” als Inverter wirkt?

  4. #4 Marcus Frenkel
    Juni 28, 2011

    Es werden sehr viele Transistoren benötigt, das ist richtig. Nicht umsonst sitzen auf modernen CPUs bis zu mehrere Milliarden Transistoren (z.B. in den Intel-Itanium-Prozessoren).

    Zu den Fragen:

    zu 1.: Die Frage kann ich nicht einmal beantworten. Es wird Gründe geben, warum selbst ein einfaches RS-FF aus relativ vielen Transistoren besteht; entweder, weil es die CMOS-Technik nicht anders hergibt oder weil es anderweitige physikalische Vorteile hat – oder weil es leichter ist, eine CPU mit NANDs zu planen anstatt mit einzelnen Transistoren. 😉
    Vielleicht weiß ein Mitleser eine Antwort darauf – mein Internet gibt es im Moment leider nicht her, dass ich selber schaue.

    zu 2.: Ah…hätte ich wohl doch noch etwas zum D-Latch schreiben müssen. Das D-Latch basiert auf der Annahme, dass zur Benutzung eines Flipflops ein Dateneingang reicht und nicht, wie beim RS-Flipflop, zwei mehr oder weniger komplementäre Eingänge benötigt werden. Daher wird der eine Dateneingang noch einmal invertiert, so dass quasi die RS-FF-Funktionsweise intern wiederhergestellt wird. Wer sich das D-Latch genau anschaut, wird darin auch das RS-FF wiedererkennen – lediglich mit einer vorgeschalteten Stufe, um den Takt noch mit einfließen zu lassen. Der explizite Inverter unten links hat eigentlich keinen speziellen Grund – genauso hätte man den Eingang am nachfolgenden NAND invertieren können. Aber er regt vielleicht zum Nachdenken an. 😉

    Übrigens erkennt man am D-Latch auch gut die negative Eingangs-Logik des RS-FF, da die Ergebnisse der Taktstufe immer noch negiert werden.

  5. #5 michi
    Juni 29, 2011

    Danke! Warte immer schon auf den nächsten Teil.

  6. #6 Engywuck
    Juni 29, 2011

    *hüstel*
    Itanic als “modern” zu bezeichnen… eine Prozessorarchitektur, bei der nun so langsam auch die letzten Softwareproduzenten abspringen, obwohl sie vertraglich gebunden sind..

    Aber nehmen wir doch mal den erst neulich vorgestellten Llano: 4 Rechenkerne zu je 1MB Level-2-Cache, plus Grafikkern. für “grade mal” 1450 Millionen Transistoren laut https://www.3dcenter.org/artikel/launch-analyse-amd-llano
    Bei 20 Transistoren je Bit wären das allein für die 4MB L2-Cache 640 Millionen Transistoren für den Cache. Ohne Taktversorgung, L1, Register und sowas.
    Ja, Cache geht “eng zusammen” auf dem Die wegen der gleichförmigen Strukturen [deshalb auch NAND-Blöcke überall?], aber irgendwie scheint mir das relativ zum realen Chipflächenverbrauch (großzügig geschätzt: 10-15%) doch arg viel (Die-Shot z.B. auf https://semiaccurate.com/2011/06/20/a-llook-at-the-llano-architecture/ )

    Gibt’s für “echten” Cache da effizienteres als für Register? In letzteren ist’s ja fast egal, das sind ja trotz register renaming und solchen Späßen grad mal ein paar hundert (evtl. niedrige tausend) Byte pro Kern.

  7. #7 Engywuck
    Juni 29, 2011

    Nachtrag:
    Ich konnts nicht lassen und hab nachgelesen (bzw. vorgearbeitet, falls Du das demnächst ohnehin bringen wolltest): laut https://en.wikipedia.org/wiki/Static_random-access_memory ist der Cache in Prozessoren SRAM mit 6 Transistoren pro Bit. Klingt vom Platzbedarf her vernünftiger 😀
    Interessant finde ich, dass über dieselben Leitungen sowohl der Zustand geändert als auch dieser ausgelesen wird 😀

  8. #8 rolak
    Juni 29, 2011

    Die Antwort auf Engywucks 1) dürfte darin zu finden sein, daß solche Schaltungen wie die oben in den flashs zu bewundernden gemeinhin den Namen ‘Ersatzschaltbild’ tragen. D.h. es ist möglich, sie mit Standardlogik (~74HC*) nachzubauen und die gewünschte Funktionalität zu erhalten – allerdings haben sie gemeinhin nichts mit der letztendlichen Implementierung zu tun (schöne Beispiele sind unter dem Stichwort ‘Komplexgatter’ zu finden).

    Der (zumindest damals so genannte) bistabile Multivibrator aus nicht nur Engywucks Vergangenheit, zwei gegengekoppelte Inverter, wurde ja mit dem technologischen Übergang (T+R)->(cmos-pair) direkt in die übliche sram-Zelle umgesetzt. Aus/Einkopplung der Daten erfordert (bei komplementären Leitungen) noch zwei abgespeckte Transmission-Gates. Da wegen der benötigten unterschiedlichen Dimensionierung der Ausgangsstufen für Bitleitungstreiber und sram-Inverter nicht direkt mit Teilen aus dem Bastelladen umsetzbar, würden also für die funktional identische Ersatzschaltung ein halber 4011 und ein ganzer 4066 benötigt, was eine enorme Vermehrung der Anzahl der involvierten Transistoren mit sich brächte.

  9. #9 Marcus Frenkel
    Juni 29, 2011

    @Engywuck
    Korrekt recherchiert – Caches sind anders aufgebaut als Register und benötigen daher weniger Transistoren. Trotzdem ist es schon richtig, dass in einem Prozessor sehr viele Transistoren für den Cache benutzt werden – hier eine unseriöse Quelle, genaue Zahlen finde ich leider gerade nicht.

    Aber wenn man sich das Bild eines Core i7 z.B. anschaut, sieht man, dass die Aussage korrekt ist:

    Ganzer Prozessor:
    https://www.legitreviews.com/images/reviews/824/Nehalem_Die_callout.jpg

    Einzelner Core (schematisch):
    https://www.legitreviews.com/images/reviews/824/performance.jpg

    Ich würde schätzen, dass dort mindestens ein Drittel der Chipfläche dem Cache entspricht.

  10. #10 Engywuck
    Juni 29, 2011

    wobei bei Intel-Chips zu beachten ist, dass diese Firma gerne inklusive Caches benutzt, also den Inhalt des L2 im L3 nochmal komplett vorhält. Das vereinfacht die Logik, gerade in Multi-Core-Dies, erfordert aber einfach riesige Chipgrößen bei 4MB L2 und 8MB L3 (Beispiel) würden dann nur noch “echte” 4MB L3 übrigbleiben, der Rest ist identisch zum L2. Der Transistor Count steigt entsprechend….

  11. #11 rolak
    Juni 29, 2011

    Der zitierten unseriösen Quelle ist auch zu entnehmen, daß just das hinterfragte getaktete D-Latch mit schlanken 8 Transistoren aufgebaut ist. Statt (Inverter+4*Nand2)=18.

    Die Nehalem-Schätzung läßt sich mit Pixelzählen bestätigen: ~40% (wobei bei IF/L1 2/3 dem cache zugeschlagen wurden).
    Dort (p15) ist sogar von 50-60% Cache-Flächenanteil die Rede.
    Wenn ich diesem Core2-Beispiel folge, ist die Grobschätzung 6T/Bit mit Vorsicht zu genießen: 2MiB Cache verbraten anscheinend 130Mio Transistoren, also wären noch ca 30% Aufschlag für ‘diverses’ einzukalkulieren, wesentlich mehr, als ich auf Anhieb für Adressdekodierung, Treiber und Latches reserviert hätte. Liegt wohl an der gegenüber ‘normalem’ Speicher erhöhten Logik, aber trotzdem…

  12. #12 Jan von nebenan
    Juni 29, 2011

    Gute Arbeit, Engywuck! Ich hatte mich bislang noch nicht mit SRAM und dergleichen beschäftigt, aber dass nur 6 Transistoren benötigt werden ist wirklich interessant. Zumal die Implementierung auch äußerst geschickt gewählt wurde.

    @Marcus: So langsam wird deine Artikelreihe ja auch für mich interessant. 😉 Ich freue mich auch schon auf die Fortsetzungen, weiter so!

  13. #13 Joe Dramiga
    Juni 30, 2011

    Ich habe beim TED Talk von Kwabena Boahen gelernt, dass Transistoren nicht beliebig klein werden können, weil sonst Fehler in der binären Arithmetik entstehen. Er versucht deshalb versucht einen Computer zu bauen, der wie das menschliche Gehirn rechnet und Daten speichert.

    Kwabena Boahen on a computer that works like the brain

    https://www.ted.com/index.php/talks/kwabena_boahen_on_a_computer_that_works_like_the_brain.html

  14. #14 Marcus Frenkel
    Juni 30, 2011

    @Joe Dramiga

    Was genau trägt die Information zum diskutierten Thema bei?

    PS: Ich habe mir einmal erlaubt, die anderen (identischen) Kommentare von Ihnen zum gleichen Thema zu löschen…

  15. #15 Engywuck
    Juli 1, 2011

    ja, Transistoren können nicht “beliebig klein” werden. Zumindest nicht solche, wie wir sie bisher bauen. Das liegt einfach daran, dass subatomare Transistoren bisher icht erfunden wurden 😉
    Bei einer Strukturbreite von 22nm (Flashspeicher hat das derzeit meines Wissens) sind wir aber immer noch “etwas” oberhalb des kovalenten Radius eines Siliciumatoms (0,111nm).
    Momentan sind daher noch(!) andere Probleme begrenzend: Quantenmechanische Effekte (Tunneleffekt u.a.) zwischen den Leitungen und Bauelementen, Beugungseffekte bei der verwendeten Lithographie, Glattheit des Siliciumwafers in allen Bauschritten, die Hohe Zahl an Einzelschritten bis zum fertigen Produkt, die alle perfekt “sitzen” müssen (einige hundert Schritte mit Genauigkeit im nm-Bereich) etc

    Fehler in der Arithmetik *außer* durch falsche Bauweise sind mir bisher nicht bekannt und das ganze riecht in der von dir zitierten Form nach Crank.
    Dass es andere Methoden als die bisher verwendeten gibt, um Ergebnisse zu “errechnen” steht dabei natürlich außer Frage. Stichworte: clockless computer und massiv parallele Rechner.
    Um aber wirklich “wie ein Gehirn” rechnen zu können müsste es möglich sein, Verbindungen zwischen den Bauelementen je nach Bedarf neu herzustellen, zu intensivieren, zu unterbrechen… So ein Neuron ist ja tendentiell ein multi-input multi-output device mit im Lauf der Zeit variabler Anzahl an Verbindungen. Und evtl. sollte man das Gehirn erstmal besser verstehen, bevor man es nachzubauen versucht 🙂 Mal ganz abgesehen davon, dass ein gehirn ganz andere Beschränkungen hat als ein Rechner. Beweis: berechne mit deinen Milliarden Neuronen die Fourier-transformierte eines eine Sekunde dauernden Eingangssignals im nicht-trivialen Fall. Ein “klassischer” Rechner braucht dazu Bruchteile einer Sekunde…

  16. #16 mi fhèin
    Juli 1, 2011

    Um aber wirklich “wie ein Gehirn” rechnen zu können müsste es möglich sein, Verbindungen zwischen den Bauelementen je nach Bedarf neu herzustellen, zu intensivieren, zu unterbrechen.

    Das gibt’s doch schon. Nennt sich neuronale Netze. M.W. gibt es da sowohl SW- als auch HW-Implementierungen.

  17. #17 rolak
    Juli 1, 2011

    Wenn ich das verlinkte Video richtig verstanden habe, geht es um Anfälligkeit gegenüber (räumlich oder zeitlich) lokalen Ausfällen. Und die ist bei einer klassischen CPU wg des Flaschenhalses ALU drastisch höher als bei einem neuronalen Netz mit seinen möglichen Nebenwegen.
    Der Transistor kam -wenn ich mich recht erinnere (war ja schon gestern ;-)- nur als Marke des einen Endes vom Weg (zeitlich ausreichend stabiler Zustand)=>(stochastischer Zustand) vor, also dem Übergang vom idealen Schalter(man made hardware) zum Ionenkanal(neuron).

  18. #18 Engywuck
    Juli 1, 2011

    neuronale Netze, in Hardware implementiert, können maximal Verbindungen kappen (indem sie die Eingangsrelevanz oder die Ausgabe auf 0 setzen), aber keine neuen Verbindungen bauen, wie dies ein Gehirn kann.

    Abgesehen davon haben neuronale Netze nie auch nur annähernd das gezeigt, was von Ihnen erwartet worden ist. Ja, man kann sie zu vielem gebrauchen, aber nicht, um ein Gehirn damit zu erklären, geschweige denn nachzubauen.

    Im übrigen *kann* man prinzipiell CPUs (relativ) ausfallsicher machen — “einfach” hunderte Prozessorkerne auf einen Chip und dann Ergebnisse mehrfach berechnen und vergleichen. Wenn ein teil ausfällt kann man ja dynamisch die Zuteilung umändern und langsamer rechnen (weniger Parallelität). Macht nur keiner, weil’s weitgehend unsinnig ist. Chips mit hunderten Rechenkernen gibt es allerdings: Grafikkarten sind massiv parallel und im general-purpose-Rechenkernansatz kann z.B. Tileras Tile-100 mit 100 Rechenkernen auf einem Chip aufwarten. Einfach einen Teil der Kerne zu Komparatoren ernennen und auf den Rest die Arbeit verteilen.
    Bei spezialisierten Rechnern, zB. für Banken, gab es schon vor Jahren Prozessoren auf Steckkarten, jeweils zwei davon berechneten dasselbe und wurden überwacht. Bei dauerhaften Fehlern (wenn die beiden also bei Neuberechnung wieder verschiedene Ergebnisse liefern) werden beide abgeschaltet und ein Reservepaar springt ein. Damit geht keine Rechnung verloren, das Ganze ist ausfallsicher. Nur halt “leicht” teuer… 😀

  19. #19 Engywuck
    Juli 11, 2011

    halbwegs zum Thema “Neuronale Netze” passend: https://hardware.slashdot.org/story/11/07/07/1436259/A-Million-Node-Supercomputer
    Die Idee: das gehirn besteht aus Clustern an eng verbundenen Zellen mit langsamen Verbindungen zu Nachbarcustern, also nehmen wir zehntausende CPUs zu jeweils einigen schnell verbundenen Kernen, verbinden diese Cluster torusförmig und hoffen dann, dass wir damit ein kleines Gehirn in Echtzeit analysieren können.

    Selbst *wenn* das funktioniert rechnet das trotzdem noch nicht “wie” ein Gehirn und schon gar nicht wie ein menschliches: das wäre ein hochspezielles Projekt. Ohne auch nur die geringste Ahnung, dass es wirklich klappt. “Wir machen das wie die Natur und schon können wir sie simulieren” ist schon oft schiefgegangen in der Informatik

  20. #20 Marcus Frenkel
    Juli 11, 2011

    Selbst *wenn* das funktioniert rechnet das trotzdem noch nicht “wie” ein Gehirn und schon gar nicht wie ein menschliches

    Richtig. Zumal beim menschlichen Gehirn ja noch viel mehr Signale von außen kommen und wichtig sind, also motorische/sensorische Reize, Hormonausschüttungen usw. usw. Hat ja alles einen Einfluss.

    Interessant ist es trotzdem. Vielleicht kann man kein menschliches Gehirn nachbilden, aber etwas anderes damit erschaffen.