Kap.2 Befehlsschnittstelle

Werbung
Kap.2
Befehlsschnittstelle
Prozessoren,
externe Sicht
RA
z
z
z
z
z
z
Überblick
Einleitung
Befehlsschnittstelle
Mikroarchitektur
Speicherarchitektur
Ein-/Ausgabe
Multiprozessorsysteme, ...
CS - RA - SS01
Kap. 2.1
2.1/2
von Neumann-Architektur
Speichereinheit
CPU
RAM/ROM
Steuerbus
Adressbus
Datenbus
CS - RA - SS01
Ein-/Ausgabeeinheit
Kap. 2.1
2.1/3
2 Befehlsschnittstelle
z
z
z
z
z
z
2.1 elementare Datentypen, Operationen
2.2 logische Speicherorganisation
2.3 Maschinenbefehlssatz
2.4 Klassifikation von Befehlssätzen
2.5 Unterbrechungen
2.6 Prozesse
CS - RA - SS01
Kap. 2.1
2.1/4
2.1 Elementare Datentypen,
Operationen
z Bitvektoren
z Natürliche Zahlen, ganze Zahlen
z Gleitkommazahlen
CS - RA - SS01
Kap. 2.1
2.1/5
2.1.1 Bitvektoren,
natürliche Zahlen,
ganze Zahlen
Bitvektoren
z Befehlssätze unterstützen Operationen auf
auf Bitvektoren begrenzter Länge
y Schiebeoperationen
y Test Bit i, Set Bit i, Clear Bit i,
Kopieroperationen, Mustersuche
CS - RA - SS01
Kap. 2.1
2.1/7
Schiebeoperationen
z Verschieben eines Operanden um k
Bitstellen
z Man unterscheidet (gemäß Behandlung
der Datenformatgrenzen)
y logisches Schieben
y arithmetisches Schieben
CS - RA - SS01
Kap. 2.1
2.1/8
z srl/sll (shift right/left logical)
y Verschieben um k Stellen
y Nachziehen von Nullen
z sra/sla (shift right/left arithmetic)
y Verschieben um k Stellen
y sra zieht von links das Bit mit höchster
Wertigkeit nach
y sla behält Vorzeichen bei.
k
k
y sra=Div durch 2 , sla=Mult mit 2
y overflow-Bit muß bei sla geeignet gesetzt
werden
CS - RA - SS01
Kap. 2.1
2.1/9
Schieben um 1 Bit
z
srl1 ( an −1 ,..., a0 ) = (0, an −1 ,..., a1 )
z
sll1 ( an −1 ,..., a0 ) = ( an −2 ,..., a0 ,0)
z sra1 ( an −1 ,..., a0 )
= ( an −1 , an −1 ,..., a1 )
z sla1 ( an −1 ,..., a0 )
= ( an −1 , an −3 ..., a0 ,0)
CS - RA - SS01
Kap. 2.1
2.1/10
Arithmetisches Schieben um 1 Bit
z sra1 ( an −1 ,..., a0 ) = ( an −1 , an −1 ,..., a1 )
z Es gilt:
[ sra1 ( an −1 ,..., a0 )]2 = [an−1 ,..., a0 ]2 / 2
z sla1 ( a n −1 ,..., a0 ) = ( an −1 , an −3 ..., a0 ,0)
z Bei sla muß gegebenfalls ein overflow-Flag im
Statusregister des Prozessors gesetzt werden.
(Nebenbem.: Arithmetische Operationen führen zu
Setzen bzw. Rücksetzen von Statusbits in einem
Statusregister.
Bsp.: overflow flag, carry flag, zero flag, sign flag)
CS - RA - SS01
Kap. 2.1
2.1/11
Arithmetisches Schieben um 1 Bit
z sla1 (a n −1 ,..., a0 ) = ( a n −1 , an − 3 ..., a0 ,0)
z Lemma:
y Es gilt: [ sla1 (an−1 ,..., a0 )]2 = 2 ⋅ [an−1 ,..., a0 ]2
falls an −1 = an −2 .
y Bei sla1 muß overflow-Flag gesetzt werden, genau
dann wenn an −1 ≠ an − 2 .
y Es gilt:
[sla1 (an −1 ,..., a0 )]2 = (2 ⋅ [an−1 ,..., a0 ]2 ) mod 2 n−1
falls ( an−1 ,..., a0 ) ≠ (1,1,0,...,0), (1,0,...,0)
n−1
−
2
(Sonderfall, da
noch im darstellbaren
Zahlenbereich liegt.)
CS - RA - SS01
Kap. 2.1
2.1/12
Fragen zur internen Sicht
z Wie kann man das durch HW realisieren?
z 1-bit Shift --> k-bit Shift ?
y k-bit Shift durch Folge von k 1-bit Shifts
y „Barrel-Shifter“ zum „direkten“ Shiften um k
Bits
CS - RA - SS01
Kap. 2.1
2.1/13
Barrel-Shifter für logischen Linksshift
z Gesucht: Realisierung der Funktion
shift : B n + k → B n , ( an −1 ,..., a0 , wk −1 ,..., w0 ) a (bn −1 ,..., b0 )
wobei sich (bn−1 ,..., b0 ) aus ( an−1 ,..., a0 ) ergibt durch
< wk −1 ,..., w0 > 2-fachen logischen Linksshift (n = 2k ).
k −1
i
z Idee: < wk −1 ,..., w0 > 2 = ∑i = 0 wi 2
Zerlege in Folge von k=log n „potentiellen Shifts“.
y Falls wi = 1 , shifte in Schritt i um 2i Bit
y Falls wi = 0 , shifte in Schritt i nicht.
Ô Multiplexer-Schaltkreis mit k=log n Stufen und
O(n log n) Gattern.
CS - RA - SS01
Kap. 2.1
2.1/14
Barrel-Shifter für logischen Linksshift
Schritt i:
c
n
PSLL2i
wi
n
d
cn-1-2i
c0
cn-1
1
0
MUX
0
c2i
...
1
0
MUX
0
c2i-1
1
0
MUX
c0
...
1
0
MUX
wi
dn-1
d2i
d2i-1
d0
Falls wi = 0 , liefert PSLL2i die Eingabe c, sonst sll2i (c)
CS - RA - SS01
Kap. 2.1
2.1/15
Barrel-Shifter für logischen Linksshift
a
n
w0
PSLL20
n
w1
PSLL21
...
...
...
n
PSLL2n-1
wk-1
n
b
CS - RA - SS01
Kap. 2.1
2.1/16
Natürliche und ganze Zahlen
Sei a = (an −1 ,..., a0 )
z Natürliche Zahlen:
n −1
i
< an −1 ,..., a0 > = ∑ ai ⋅ 2
i =0
z Ganze Zahlen:
Darstellung im Zweierkomplement
n−2
[an −1 ,..., a0 ] = ∑ ai ⋅ 2 − 2
i
i=0
CS - RA - SS01
Kap. 2.1
n −1
⋅ an−1
2.1/17
Im Vergleich zu anderen Darstellungen
Darstellung
redundant /
irredundant
symmetrischer
Zahlenbereich
geeignet zum
Rechnen
Betrag und
Vorzeichen
redundant
ja
bedingt
EinerKomplement
redundant
ja
gut
Zweierkomplement
irredundant
nein
sehr gut
CS - RA - SS01
Kap. 2.1
2.1/18
Operationen
z
z
z
z
z
Addition (vgl. TI 2)
Subtraktion (vgl. TI 2)
Größenvergleich
Multiplikation (z.T. vgl. TI 2)
Division
z Zusätzlich zu beachten:
Bei allen Operationen muß eine Überlauferkennung
gewährleistet werden, um das overflow flag korrekt zu
setzen.
CS - RA - SS01
Kap. 2.1
2.1/19
Addition (Wiederholung)
z Carry-Ripple-Addierer:
Addition von n-Bit-Zahlen mit O(n) Gattern und
Tiefe O(n).
z Conditional-Sum-Addierer:
Addition von n-Bit-Zahlen mit O(nlog 3) Gattern
und Tiefe O(log n) (bzw. in modifizierter Version
mit O(n log n) Gattern).
z Carry-Lookahead-Addierer:
Addition von n-Bit-Zahlen mit O(n) Gattern und
Tiefe O(log n).
CS - RA - SS01
Kap. 2.1
2.1/20
Carry-Ripple-Addierer (Wdh.)
z Volladdierer zur Addition von „1-Bit-Zahlen“
Inputs
Outputs
A
B
CarryIn
CarryOut
Sum
Comments
0
0
0
0
0
0 + 0 + 0 = 00
0
0
1
0
1
0 + 0 + 1 = 01
0
1
0
0
1
0 + 1 + 0 = 01
0
1
1
1
0
0 + 1 + 1 = 10
1
0
0
0
1
1 + 0 + 0 = 01
1
0
1
1
0
1 + 0 + 1 = 10
1
1
0
1
0
1 + 1 + 0 = 10
1
1
1
1
1
1 + 1 + 1 = 11
EXOR-Gatter
( out=in 1⊕in2 )
OR-Gatter
(out=in1∨in2 )
cin
A
B
Sum
AND-Gatter
(out=in1∧in2 )
cout
z Carry-Ripple-Addierer als Kette von Volladdierern
CS - RA - SS01
Kap. 2.1
2.1/21
Conditional-Sum-Addierer (Wdh.)
A[3:0]
4
ALU
0
B[3:0]
4
A[7:4]
4
X[7:4]
4
B[7:4]
A[7:4]
4
4
C0
Y[7:4]
ALU
B[7:4]
4
0
0
1
2 to 1 MUX
4
1
1 Sel
C4
Result[3:0]
4
C4
Sel
2 to 1 MUX
ALU
berechnet auf den
höherwertigen Bitstellen
sowohl die Summe als
auch die Summe+1
CarryIn
Result[7:4]
4
C1
CarryOut
CS - RA - SS01
Kap. 2.1
2.1/22
Carry-Lookahead-Addierer (Wdh.)
z Addition wird zurückgeführt auf schnelle Berechnung der
Carry-Bits.
z Parallele Präfix-Berechnung, um schnelle Berechnung
von generate-/propagate-Signalen durchzuführen.
z Carry-Bits ergeben sich aus generate-/propagateSignalen.
CS - RA - SS01
Kap. 2.1
2.1/23
Addierer für natürliche Zahlen
z Es muß noch erkannt werden, ob ein Ausgangscarry /
Überlauf vorliegt!
z Situation 1:
Addierer liefert Ausgangscarry cn-1
→ klar
z Situation 2:
Addierer liefert cn-1 nicht, aber cn-2
→ cn −1 = (an −1bn −1 ) + (an−1 ⊕ bn−1 ) ⋅ cn − 2
z Situation 3:
Addierer liefert weder cn-1 nochcn-2
→ cn −1 = ( an −1bn−1 ) + (an −1 ⊕ bn −1 ) ⋅ sn −1
CS - RA - SS01
Kap. 2.1
2.1/24
Addierer für natürliche Zahlen:
Weiterrechnen bei Überläufen
z wrap-around Arithmetik: Überträge werden
weggelassen
z bei Audio-, Videoanwendungen: Ausgabe des
größten darstellbaren Wertes besser
---> Sättigungsarithmetik
auf sie kann bei vielen Prozessoren für die
digitale Signalverarbeitung umgeschaltet werden
CS - RA - SS01
Kap. 2.1
2.1/25
Wrap-around vs. Sättigungsarithmetik
Wrap-around
Arithmetik
SättigungsArithmetik
a
‘‘1000“
‘‘1000“
b
‘‘1000‘‘
‘‘1000‘‘
a+b
‘‘0000‘‘
‘‘1111‘‘
Bei Bereichsüberlauf wird der größte darstellbare Wert
zurückgeliefert.
CS - RA - SS01
Kap. 2.1
2.1/26
Wrap-around vs. Sättigungsarithmetik
Wrap-around
Arithmetik
SättigungsArithmetik
a
‘‘0001“
‘‘0001“
b
‘‘0011‘‘
‘‘0011‘‘
a-b
‘‘1110‘‘
‘‘0000‘‘
Bei Bereichsunterlauf wird der kleinste darstellbare Wert
zurückgeliefert.
CS - RA - SS01
Kap. 2.1
2.1/27
Addierer für ganze Zahlen im Zweierkomplement (1)
z Es kann ein Addierer für natürliche Zahlen verwendet
werden, abzuändern ist lediglich die Überlaufserkennung
(vgl. TI 2).
z Situation 1: Addierer liefert cn-1 und cn-2
→ overflow = cn −1 ⊕ cn −2
(vgl. TI 2, Vorlesung)
z Situation 2: Addierer liefert cn-1 und cn-2 nicht
→ overflow = ( an −1 ≡ bn−1 ) ⋅ ( sn −1 ⊕ an−1 )
(vgl. TI 2, Übung)
z Also gilt: Überlauf ist unabhängig vom Ausgangscarry
cn-1 !
CS - RA - SS01
Kap. 2.1
2.1/28
Addierer für ganze Zahlen im Zweierkomplement (2)
z Sättigungsarithmetik ähnlich wie bei natürlichen Zahlen.
z Fallunterscheidung bei Überlauf:
y Fall 1: a n −1 = bn −1 = 0
Liefere bei Überlauf 011..11 als Ergebnis (größte darstellbare
Zahl).
y Fall 2: an −1 = bn −1 = 1
Liefere bei Überlauf 100..00 als Ergebnis (kleinste darstellbare
Zahl).
CS - RA - SS01
Kap. 2.1
2.1/29
Subtrahierer
z Ganze Zahlen im Zweierkomplement:
Verwende Zweierkomplementaddierer wegen
y a − b = a + ( −b)
y − [bn −1 ,..., b0 ] = [bn−1 ,..., b0 ] + 1
z Natürliche Zahlen mit n Bit:
y Verwende (n+1)-Bit-Subtrahierer für ganze Zahlen (ergänze vor
der Subtraktion jeweils 0 als Vorzeichenbit)
y Überlauf, wenn sn = 1 (wenn Ergebnis negativ).
y Genauere Betrachtung zeigt:
n-Bit-Subtrahierer für ganze Zahlen genügt!
Grund: sn läßt sich rekonstruieren aus an-1, bn-1 und sn-1
(siehe Übung)
CS - RA - SS01
Kap. 2.1
2.1/30
Größenvergleich für ganze Zahlen
z Bei vielen Rechnern führen arithmetische Operationen
zu Setzen bzw. Rücksetzen von Statusbits in einem
Statusregister (Condition Code Register).
z Hier: Vergleiche zwei Zweierkomplementzahlen a und b
durch
y Subtraktion a-b
y Verwendung von overflow flag, zero flag und sign flag, um
Vergleichergebnis zu bestimmen
y Insbesondere soll Vergleichsergebnis auch beim Auftreten eines
Overflows berechenbar sein!
y ov:= overflow flag
y sf := sign flag, sf = 1 gdw. sn-1=1
y zf := zero flag, zf = 1 gdw. si = 0 für i=0,...,n-1
CS - RA - SS01
Kap. 2.1
2.1/31
Größenvergleich für ganze Zahlen
ov = ( an−1 ≡ bn−1 ) ⋅ ( sn −1 ⊕ an −1 ) = ( an −1 ⊕ bn −1 ) ⋅ ( sf ⊕ an −1 )
⇒
sf = 1 ⇔ ov = an −1bn −1
sf = 0 ⇔ ov = an −1 bn −1
ov sf
0 0
0 1
1 0
1 1
Kommentar
kein Überlauf, s = a-b ≥ 0
Kein Überlauf, s = a-b neg.
an −1 = 1, bn −1 = 0 , a neg., b ≥ 0
an −1 = 0, bn−1 = 1 , a ≥ 0, b neg.
Ergebnis
a≥b
a<b
a<b
a>b
a < b ⇔ ov ⊕ sf
a ≤ b ⇔ (a < b) ∨ (a = b) ⇔ (ov ⊕ sf ) ∨ zf
a > b ⇔ (a ≤ b) ⇔ (ov ⊕ sf ) ∨ zf ⇔ (ov ≡ sf ) ⋅ zf
a ≥ b ⇔ a < b ⇔ ov ≡ sf
CS - RA - SS01
Kap. 2.1
2.1/32
Größenvergleich
z Die erwähnten Beziehungen werden vielfach genutzt,
um anhand der Werte im Condition-Code-Register
Verzweigungsbedingungen abzutesten, die vom
Größenvergleich zweier ganzer Zahlen abhängen.
(Hierbei ist zu beachten, daß Größenvergleiche wegen
der möglichen Überläufe nicht einfach durch Subtraktion
und Vorzeichentest des Ergebnisses erfolgen dürfen.)
z Größenvergleich natürlicher Zahlen: Analog.
CS - RA - SS01
Kap. 2.1
2.1/33
Multiplikation natürlicher und ganzer
Zahlen
z ... liefert Produkt natürlicher bzw. ganzer Zahlen, soweit
dies aufgrund der üblichen festen Datenwortlänge
möglich ist
n
{
0
,...,
2
− 1}
z Natürliche Zahlen mit n Bit liegen im Bereich
2n
n+1
⇒ Produkt liegt im Bereich {0,...,2 − 2 + 1}
⇒ Produkt darstellbar mit 2n Bit
z Ganze Zweierkomplementzahlen mit n Bit liegen im
n −1
n−1
Bereich {−2 ,...,2 − 1}
2 n −2
+ 2 n−1 ,...,2 2n −2 − 2 n + 1}
⇒ Produkt liegt im Bereich {−2
⇒ Produkt darstellbar mit 2n-1 Bit
CS - RA - SS01
Kap. 2.1
2.1/34
Multiplikation natürlicher und ganzer
Zahlen
z Lösung auf Maschinenspracheebene:
y Produkt wird meist durch einen Bitvektor dargestellt, der
doppelte Länge wie Argumente hat
y Auf niederwertige und höherwertige Hälfte des Produkts kann
getrennt zugegriffen werden (Kopieren, Abspeichern etc.)
y Grund für Darstellung des vollen Ergebnisses:
Bei softwaremäßigem Multiplizieren sehr großer Zahlen (> n Bit)
ist es von Vorteil, das volle Ergebnis der Multiplikation von n-BitZahlen zur Verfügung zu haben.
z Höhere Programmiersprachen:
y Vergrößerter Zahlenbereich steht meist nicht zur Verfügung
y Overflow-Behandlung nötig!
CS - RA - SS01
Kap. 2.1
2.1/35
Multiplikation natürlicher und ganzer
Zahlen
z Multiplikation ganzer Zahlen wird meist zurückgeführt
auf die Multiplikation natürlicher Zahlen.
y
y
y
y
Berechnung der Beträge
Multiplikation
Berechnung des Vorzeichens des Produkts (an−1 ⊕ bn −1 )
Bei negativem Ergebnis: Berechnung des Inversen im
Zweierkomplement
z Ausnahme: Verfahren von Booth
CS - RA - SS01
Kap. 2.1
2.1/36
Zur Erinnerung:
Multiplikation natürlicher Zahlen
z „Parallele“ (kombinatorische) Multiplizierer (TI 2):
(∑
n −1
) (∑
a2 ⋅
i=0 i
i
)
n−1
j
b
2
=
j =0 j
(
)
=< a > ⋅ ∑ j =0 b j 2 j = ∑ j =0 < a > b j 2 j
n −1
n −1
= ∑ j =0 < an−1b j ,..., a0b j > 2 = ∑ j =0 Pj
144424443
Pj
n −1
j
n −1
y Berechne Partialprodukte Pj parallel durch n2 AND-Gatter.
y „Lineares“ Aufsummieren: O(n2) Gatter, Tiefe O(n logn)
y „Baumartiges“ Ausummieren: O(n2) Gatter, Tiefe O(log2n)
y „Wallace-Tree“: O(n2) Gatter, Tiefe O(log n)
CS - RA - SS01
Kap. 2.1
2.1/37
Multiplikation natürlicher Zahlen
z „Sequentielle Multiplizierer“:
y Faktoren und Zwischenergebnisse sind in Registern
abgespeichert
y Nutze 1 vorhandenen Addierer zum Aufsummieren
CS - RA - SS01
Kap. 2.1
2.1/38
Booth-Verfahren als Verbesserung der
Multiplikation nach der Schulmethode
Sequentielle Multiplikation
nach der Schulmethode
x
y
0
0
0
1
1
0
1
1
x⋅y0
0
0
1
1
shift
x⋅y1
add
0
0
0
0
0
0
0
0
0
1
0
1
1
shift
x⋅y2
add
0
0
0
0
0
0
0
1
1
0
1
1
1
1
1
1
shift
x⋅y3
add
0
0
0
0
0
0
0
0
0
1
0
1
1
1
1
1
1
1
CS - RA - SS01
z Insgesamt werden n
Additionen in n Takten
ausgeführt, insbesondere
Additionen mit Null sind
überflüssig.
1
Kap. 2.1
2.1/39
Verfahren von Booth
A. Booth. A Signed Binary Multiplication Scheme. Q.J.Mech.Appl.Math.
4:236:240 (1951)
Beobachtung
z Enthält der Multiplikator y einen Nullblock der Länge k, so kann die
Multiplikation durch ein Shift der Zwischensumme um k Stellen
beschleunigt werden.
z Enthält der Multiplikator y einen Einsblock von Stelle u bis Stelle v,
z.B.:
0.....01........10............0
v
u
so können die zum Einsblock gehörigen (v-u+1)
Additionen der Multiplikation nach Schulmethode wegen
<0...01...10...0>=2v+1-2u durch eine Addition an der Stelle v+1
und eine Substraktion an der Stelle u ersetzt werden
CS - RA - SS01
Kap. 2.1
2.1/40
Verfahren von Booth
z Arithmetische Operationen sind nur bei 0→1 und 1→0 Wechsel im
Multiplikator erforderlich.
z Um diese Wechsel zu erkennen, muß man in Schritt i noch das Bit
yi-1 des Multiplikators zusätzlich betrachten.
z
Man erhält die Rechenvorschrift
yi yi-1 Operation
0
0
1
1
0
1
0
1
shift
add; shift
sub; shift
shift
mit y-1=0
CS - RA - SS01
Kap. 2.1
2.1/41
Verfahren von Booth: Beispiel
x
y3
y2
y1
y0
0010
0
1
1
0
↑
Operation
Zwischenergebnis
0000
shift
0000 0
↑
sub (add 1110)
1110 0
↑
shift
1111 00
↑
shift
add 0010
1111 100
0001 100
↑
shift
0000 1100
↑
Daß das Verfahren von Booth auch für Zweierkomplementzahlen das
richtige Ergebnis liefert, ist nicht unmittelbar einsichtig ...
CS - RA - SS01
Kap. 2.1
2.1/42
Korrektheit des Verfahrens von Booth
Satz
Das Verfahren von Booth multipliziert sowohl positive als auch negative
Zahlen im Zweierkomplement.
Beweis
Wir betrachten im Verfahren von Booth an jeder Stelle die Differenz
(yi-1-yi) und berechnen das Multiplikationsergebnisses durch die Summe
S = (y-1-y0)⋅20⋅ <x> +
(y0 -y1)⋅21⋅ <x> +
...
(yn-3 -yn-2)⋅2n-2 ⋅ <x> +
(yn-2 -yn-1)⋅2n-1 ⋅<x>
= <x>⋅(-yn-1⋅2n-1 + yn-2 ⋅2n-2 +...+ y1⋅21 + y0⋅20)
= <x> ⋅ <y>
CS - RA - SS01
Kap. 2.1
yi
yi-1
Operation
0
0
1
1
0
1
0
1
shift
add; shift
sub; shift
shift
mit y-1=0
2.1/43
Hardwarerealisierung der Methode von
Booth
z Multiplikation wird unter der Verwendung der Additionshardware
implementiert:
Multiplicand
32 bits
Multiplier Shift
right
32-bit ALU
32 bits
32 bits
Product
Shift right
Control
write
64 bits
32 bits
CS - RA - SS01
Vor der j-ten Iteration nur die Belegung
der j signifikantesten Bitstellen von Bedeutung
Kap. 2.1
2.1/44
Billigere Realisierung
Multiplicand
32 bits
32-bit ALU
32 bits
Product
Shift right
write
Control
64 bits
32 bits
CS - RA - SS01
Speichere den Multiplikator
in die hinteren 32 Bitstellen
Kap. 2.1
2.1/45
Verfahren von Booth
z Was haben wir bisher durch das Verfahren von Booth
gewonnen?
y Einsparung von Additionen bzw. Subtraktionen durch
Berücksichtigung von 0-Blöcken bzw. 1-Blöcken
y Aber: Weiterhin n Takte (n Shifts) nötig!
z Verbesserung:
y Zusammenfassen von k 1-Bit-Shifts in k Takten zu k-Bit-Shifts in
einem Takt
Ô Barrelshifter
Ô Dazu muß am Ende des (geshifteten) Multiplikators die Länge
des aktuellen 0- bzw. 1-Blocks bestimmt werden.
Ô Benutze dazu Prioritätsencoder
CS - RA - SS01
Kap. 2.1
2.1/46
Prioritätsencoder
xn-1
n = 2k
....
x0
xn-1
....
x0
PE_FIRST_0
PE_FIRST_1
...
...
z
yk-1
y0
z
yk-1
y0
z = 1, < y >= i , falls ∃i : xi = 0
z = 1, < y >= i , falls ∃i : xi = 1
und ∀j < i : x j = 1
z = 0, y bel., falls xi = 1 ∀i
und ∀j < i : x j = 0
z = 0, y bel., falls xi = 0 ∀i
Prioritätsencoder lassen sich mit O(n) Gattern in Tiefe O(log n)
realisieren.
CS - RA - SS01
Kap. 2.1
2.1/47
Herunterladen