Digitaltechnik II Zellenlogik/Iterative Schaltungen

ZL-01

2004()05 C 2006()05 • 2007()06 • 2008()05

Iterative Schaltungen Grundtypen Unter eine “Zelle“ verstehen wir eine Logikschaltung, die durch das folgende 5-Tupel beschrieben wird: (X, U, Y, f, g) mit X U Y f: X×U 6 Y g: X×U 6 U

Eingabevektor Übergabevektor Ausgabevektor Ausgabefunktion Übergabefunktion

Besteht eine Logikschaltung mit n Eingangsvariablen ausschließlich aus n/k untereinander gleichen Zellen mit Eingangsvektoren der Länge k, nennt man sie eine (ortssequentielle) k-iterative Logikschaltung; sie stellt eine sogenannte Zellenlogik dar. Die Festlegung U0=const heißt auch Anfangsbelegung; sie muß für die erste Zelle geeignet festgelegt werden, d.h. in aller Regel mit den neutralen Elementen bezüglich der jeweiligen Verknüpfungen f und g. Mitunter interessieren die Teilausgaben Y0,... Yn-1 nicht, sondern nur ein Gesamtergebnis Y=f(Xn!1,Un!1); die Zellenlogik besteht dann aus nur n/k-1 gleichen Zellen, die n/k-te Zelle ist mit Y=f(Xn/k-1,Un/k-1) gegenüber diesen modifiziert.

Bild 1: Zelle mit Ausgabevektor

Bild 2: Endzelle für die Ausgabe einer Gesamtfunktion

Mit diesen Zellentypen lassen sich demnach die in Bild 3 und Bild 4 wiedergegebenen beiden Typen k-iterativer Schaltungen aufbauen, zu denen wir im Anschluß jeweils ein Beispiel geben werden.

Prof. T. Drescher

Digitaltechnik II: Zellenlogik/Iterative Schaltungen

ZL-2

Bild 3: k-iteratives Schaltnetz mit Ausgabezelle für Ergebnisvektor (Typ 1)

Bild 4: Allgemeines k-iteratives Schaltnetz (Typ 2)

Systematischer Entwurf iterativer Schaltnetze Für den Entwurf eines iterativen Schaltnetzes empfiehlt sich folgende Vorgehensweise: (1) Festlegung der Dimension des Eingabevektors einer Zelle, also von k. Je kleiner dessen Wert ist, desto höher wird die Gesamtverzögerung der Schaltung. (2) Bestimmung der Menge der Übergabevariablen. Dies erfolgt, indem man die Werte der (Xi-1, ... X0) so in Klassen zerlegt, daß sich alle Werte einer Klasse bezüglich Yj mit j#i gleich verhalten. (3) Nun können die Funktionen f und g ermittelt werden. Dazu wird empfohlen, zunächst eine Beschreibung auf höherer Ebene (allgemeine mathematische Formulierungen) vorzunehmen und dann die Variablen auf Binärvektoren abzubilden, so daß dann im Detail die einzelnen Logikfunktionen ermittelt werden können. (4) Die Anfangszelle ist für den eingehenden Übergabevektor geeignet mit Konstanten zu initialisieren. (5) Gegebenenfalls ist die Kopfzelle entsprechend der Ausgabefunktion zu vereinfachen. Das vorgeschlagene Verfahren deuten wir in den folgenden Beispielen an.

Prof. T. Drescher

Digitaltechnik II: Zellenlogik/Iterative Schaltungen

ZL-3

Beispiel für eine Schaltung vom Typ 1 Hierfür eignen sich insbesondere Funktionen, die kommutativ sind, also beispielsweise die Konjunktion. Wir zeigen dies an der UND12-Funktion Y = x11x10x9x8x7x6x5x4x3x2x1x0. (1), (2)

Wir wählen k=3, wobei sich folgende Partitionierung (n/k=4) ergibt: Y = x11x10x9x8x7x6x5x4x3x2x1x0 = (x11x10x9)(x8x7x6)(x5x4x3)(x2x1x0).

(3), (4)

Wir definieren: X0 = (x2,x1,x0), X1 = (x5,x4,x3), X2 = (x8,x7,x6), X3 = (x11,x10,x9),

U0 = '1', (Anfangsbelegung) U1 = X0 vU0, U2 = X1 vU1, und U3 = X2 vU2.

Somit ergibt sich Y zu Y = X3 vU3 (UND4-Baustein), wobei wir vereinfachend X0 vU0 für x2x1x0 vU0 usw. geschrieben haben. Schritt (5) entfällt.

Bild 5: 3-iteratives UND-Schaltnetz zur Realisierung einer UND12Funktion

Als weiteres, komplexeres Beispiel sei ein k-iterativer n-bit-Daten-Vergleicher genannt. Im Praktikum werden Sie sich mit weiteren Anwendungen beschäftigen. ! Beispiele für eine Schaltung vom Typ 2 Es ist eine 1-iterative Schaltung zur Prüfung zweier Tetraden a und b auf Gleichheit zu entwickeln (je Tetrade k=1), die es gestattet, die nicht übereinstimmenden Stellen zu erkennen. Für die i-te Zelle gelten offenbar: xi = ai: * bi und ui+1 = & x&i ui ,

und u0 muß mit dem neutralen Element bezüglich der Konjunktion abgeschlossen werden, also mit '1'. Bild 6: 1-iterativer TetradenVergleicher ge=ue0, ga=ua3

Verzichtet man auf die bitweise Signalisierung von Ungleichheiten (x0,...x3) , gelangt man wieder zum Typ 1.

Prof. T. Drescher

Digitaltechnik II: Zellenlogik/Iterative Schaltungen

ZL-4

Auch tetradische Volladdierer lassen sich beispielsweise aus vier Volladdierern 1-iterativ aufbauen (je Summand ist k=1), Beispiele sind der Literatur zu entnehmen.

Eine weitere, viel zitierte Anwendung ist die Umsetzung eines n-stelligen GRAY-Kodes in den Dualkode, wie wir am Beispiel n=4 demonstrieren werden. Z 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

GRAY dcba

Dual DCBA

0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

Es ergeben sich folgende Umsetzungsgleichungen: D=d C = c: *d B = b: * c: *d A = a: * b: * c: *d Durch schrittweises Einsetzen erhält man die Rekursionen C = c: * D, B = b: * C und A = a: * B; das MSB-Gatter muß mit dem neutralen Element bezüglich der Antivalenz, also mit '0', abgeschlossen werden: D = d: * 0.

!

Die iterativen Schaltungen lassen sich wiederum als Zellen auffassen und erweitern, d.h. (ortssequentiell) iterieren. Allerdings nimmt dabei das Laufzeitproblem immer ernsthaftere Formen an: Die sich zwangsweise ergebenden Laufzeiten der Übergabesignale addieren sich. Bekannt ist dies bei n-bit-Volladdierern, die als sogenannte ripple-carry adder aufgebaut sind und in der Literatur gut beschrieben werden. Folge sind dynamische Hasards auf den Ergebnisleitungen infolge der Laufzeitprobleme bei den Übertragssignalen (=Übergabesignalen), die zu temporär falschen Zwischenergebnissen führen; solche Zwischenwerte werden auch glitches genannt. Im Praktikum haben Sie Gelegenheit, dies an Ihren selbst entwickelten Schaltungen zu studieren. Man kann dieses Problem entschärfen, indem man (1) k-iterative Zellen mit großem k und diese (2) auch noch zweistufig (also beispielsweise als DNF oder als KNF) entwickelt. Wir zeigen dies am ersten Beispiel zu Typ 2. Beispiel für eine zweistufige Zelle: (Beispiel siehe oben: n=4, k=1.) Für Bit i galten: xi = ai: * bi und ui+1 =x &i & ui . Zweistufige Realisierung dieser Zelle: xi = & bi & a i v bi ai und ui+1 = & bi & a i ui v bi aiui.

Prof. T. Drescher

Digitaltechnik II: Zellenlogik/Iterative Schaltungen

ZL-5

Dies erweitern wir auf 2-bit-Daten (k=2) in Zelle i und bilden nun zweistufig: xi0 = ai 0: * bi 0 = & b&i & a&i & 0 ai 0 v b i 0 & 0 ,

xi1 = ai 1: * bi 1 = & b&i & a&i & 1 ai 1 v b i 1 & 1 . b&i & b&i & a&i & a&i & b&i & a&i & b&i & a&i & ui+ = & 1 & 0 & 1 & 0 ui v & 1 bi 0 & 1 ai 0 ui v bi1 & 0 ai 1 & 0 ui v bi 1 bi 0 ai 1 ai 0 ui . Aufgrund der gleichen Stufigkeit innerhalb der Zelle treten dort keine nennenswerten Laufzeitprobleme mehr auf; sie entstehen aber bei der Iterierung dann natürlich aufs Neue.

Vorweg-Berechnung von Übergabefunktionen Ein anderes Verfahren, Laufzeitprobleme zu verringern, besteht darin, in den Zellen bzw. in besonderen Zellen die Übergabefunktion für m Zellen zweistufig vorweg (look-ahead) zu bilden. Das Verfahren (Kaskadierung) wird u.a. bei Addierern mit einer Schaltung zur Vorweg-Bildung des Übertrags (look-ahead carry generator) angewandt. Die Funktionen einer iterativen Zelle sind ja: Yi = f(Xi,Ui) und Ui+1 = g(Xi,Ui). Wir entwickeln nun Ui+1 für die vorhergehenden m Zellen und erhalten: Ui+1 = g(Xi,Ui) = g(Xi,g(Xi-1,Ui-1)) ... = g(Xi,g(Xi-1, ... g(Xi-m+1,Ui-m+1) ... )). Wir substituieren nun so, daß ein zweistufiges Schaltnetz mit der Funktion h entsteht: Ui+1 = h(Xi,Xi-1,... Xi-m+1,Ui,Ui-1,... Ui-m+1). Es zeigt sich, daß es sinnvoll sein kann, h nicht direkt über die Xi zu bilden, sondern über Zwischenvariable Ri: Ui+1 = h(Ri,Ri-1,... Ri-m+1,Ui-m+1) mit Ri = g(Xi).

Xi

Xi-m+2

g Xi

Xi-m+2

Ui

Xi-m+1 Ui-m

h Ui-1

Xi

f

Xi-m+2

Ui-m+1 Xi-m+1

f Yi-1

Yi-m+1

Bild 7: Vorweg-Bildung des Übergabevektors

g

Ri-m+2

Ui

Ri-m+1 Ui-m

h Ui-1

Xi

f

f Yi-m+2

g

Ri

Xi-m+1

Xi-m+2

Ui-m+1 Xi-m+1

f Yi-1

f Yi-m+2

Yi-m+1

Bild 8: Vorweg-Bildung des Übergabevektors

Prof. T. Drescher

Digitaltechnik II: Zellenlogik/Iterative Schaltungen

ZL-6

über Zwischenvariable Technische Realisierungen sehen zwei Bauelemente vor: ein Bauelement zur Berechnung von f und g sowie ein weiteres zur Berechnung von h. Bei look-ahead carry-Generatoren (realisieren h) werden außerdem die Zwischenvariablen in zwei Anteile G (generate) und P (propagate) aufgespalten. Beide Bauelemente können ihrerseits erweitert werden, so daß eine Kaskadenschaltung entsteht. Beispiel: nochmals 2-iterativer Vergleicher Für Bit i hatten wir ja gefunden: xi = ai: * bi und ui+1 = & x&i ui , so daß sich für 2-bit-Werte ergeben (s.o.):& x&i & 0 i10 xi0 = ai 0: * bi 0 = & b&i & a v b & a & & , 0 i0 i0 i 0 xi1 = ai 1: * bi 1 = & b&i & a v b a&i & 1 i1 i1& 1 . Die Übergabesignale ui+ können wir auch so bilden: ui+ = & x&i & x&i & 1 & 0 ui .

In diesem Fall sind unsere Zwischenvariablen xi0 und xi1. Setzen wir Gi= & x&i & x&i& 1 & 0 , so würde ein look-ahead generator beispielsweise G=G3G2G1G0 bilden, woraus sich dann ui+ = Gui bilden läßt. !

Beispiel: 2-bit-Volladdierer mit Vorweg-Berechnung des Übertrages (n=2, k=2; technisch nicht realisiert) 1. Volladdierer:

C1/2 = A0B0 v (A0 :, B0)C0 = G0 v P0C0

mit G0=A0B0 und P0=A0 :, B0

2. Volladdierer: C1

= A1B1 v (A1 :, B1)C1/2 = A1B1 v (A1 :, B1)G0 v (A1 :, B1)P0C0 = G1 v P1G0 v P1P0C0

mit G1=A1B1 und P1=A1 :, B1

Die Übergabefunktion (der Übertrag) C1= G1 v P1G0 v P1P0C0 wird in einem (kaskadierbaren) look-ahead carry-Generator aus C0, (G0,P0) und (G1,P1) realisiert. Die Terme Pi können zur Bildung der Ergebnisse mitbenutzt werden, so daß wir haben: Xi = Ai :, Bi :, Ci = Pi :, Ci und Ci+1 = Gi1 v Pi1Gi0 v Pi1Pi0Ci.

Prof. T. Drescher

Digitaltechnik II: Zellenlogik/Iterative Schaltungen

ZL-7

Zeitsequentielle Schaltwerke Durch serielle (zeitsequentielle) Zuführung der Eingabevektoren und Zwischenspeicherung der Übergabevektoren in Registern (D-Zählflipflops) entsteht der Ausgabevektor seriell. Das Quintupel sieht dann genau so aus, wie wir es bereits kennen, aber es wird nicht mehr zwischen Ui und Ui+1, sondern zwischen U und U+ unterschieden, d. h. unsere serielle Lösung ist ein Automat, wobei U als Zustandsvektor zu interpretieren ist. Solche Schaltwerke sind umso langsamer je kleiner k ist; Laufzeitprobleme können durch Zweistufigkeit der Zelle bzw. geeignete Taktfrequenzen vermieden werden.

Bild 9: zeitsequentielles Schaltwerk als Automat

Ein typisches Beispiel hierfür ist die n-byte-Addition/Subtraktion in Mikrorechnern mit 8 bit Datenbreite, wobei das Übertragsbit als Zustandsbit zwischengespeichert und beim nächsten Rechenschritt (adc, sbc) berücksichtigt wird; Eingabe- und Ergebnisdaten liegen im RAM-Speicher vor. Beim ersten Rechenschritt muß natürlich auch hier initialisiert werden; beispielsweise bei Prozessoren 65xx mit clc vor dem Addieren (bei anderen Prozessoren auch add (Addition mit Übertrag=0) statt clc und adc) und sec vor dem Subtrahieren (sub (Subtraktion ohne Entleihung) statt sec und sbc). 