Praktische Informatik 2
Vorlesungsfolien SS 2000
Prof. Dr. W. Effelsberg Lehrstuhl für Praktische Informatik IV
Universität Mannheim
Inhaltsverzeichnis (1)
1. Grundlagen der Digitaltechnik 1.1 Mikroelektronik
1.2 Gatter
1.3 Schaltnetze und Schaltwerke
2. Zahlendarstellung und Codierungstechniken 2.1 Maschineninterne Darstellung von Zahlen und
Zeichen
2.2 Fehlererkennende Codes 2.3 Fehlerkorrigierende Codes
3. Grundlagen der Rechnerarchitektur 3.1 Architektur des Von-Neumann-Rechners 3.2 Maschinentypen: Einadressmaschine,
Zweiadressmaschine
3.3 Befehlsformate und Adressierungstechniken 3.4 Beispiel: Motorola 68000
3.5 CISC vs. RISC
Inhaltsverzeichnis (2)
4. Mikroprogrammierung
4.1 Ein mikroprogrammgesteuerter Computer 4.2 Mikroprogramm - Beispiel: Ganzzahl -
Multiplikation
4.3 Das Laden von Mikroprogrammen 5. Programmierung in Maschinensprache
(Assembler)
5.1 Einführung in den Motorola-68000 -Assembler 5.2 Adressierung von Feldern (Arrays)
5.3 Unterprogrammtechnik 6. Sprachübersetzer (Compiler) 6.1 Syntaxdefinition einer Sprache
6.2 Aufbau und Wirkungsweise eines Compilers 6.3 Automatisches Generieren von Parsern
6.4 Compilierung vs. Interpretation von Programmen
Literatur
Dieses Buch sollte jeder haben:
Goldschlager, L. and Lister, A.: Informatik - eine moderne Einführung.
Hanser-Verlag, München, 1990 Weitere Bücher zur Vorlesung:
Aho, Alfred V.; Sethi, Ravi; Ullman, Jeffrey D.: Compilerbau. 2 Bände, Oldenbourg-Verlag, 1997
Baer, J. L.: Computer Systems Architecture. Computer Science Press, Rockville, 1980.
Giloi, W.: Rechnerarchitektur, Springer, Berlin 1981
Hayes, J.: Computer Architecture and Organization. McGraw Hill, 1985 Hilf, W., Nausch, A.: MC 68000 - Familie - Teil 1, Teil 2. te-wi-Verlag,
München 1984
Klar, R.: Digitale Rechenautomaten. de Gruyter, Berlin 1990 Mano, M.: Digital Logic and Computer Design. Prentice-Hall, Engle-
wood Cliffs 1980
Oberschelp, W., Vossen, G.: Rechneraufbau und Rechnerstrukturen.
Oldenburg, München 1987
Waite, W. Goos, G.; Compiler Construction, Springer, New York 1984 Tanenbaum, A.: Structured Computer Organization, 4th edition,
Prentice Hall, 1999
Manual zum Motorola-Assembler:
Motorola (1992). Motorola M68000 Family, Program-mer's Reference Manual.
http://www.informatik.uni-mannheim.de/informatik/pi4/stud...
/veranstaltungen/ss2000/pi2/68kprm.pdf
1. Grundlagen der Digitaltechnik
1.1 Mikroelektronik 1.2 Gatter
1.3 Schaltnetze und Schaltwerke
Abstraktionsebenen bei der Hardware- Beschreibung
• Blockschaltbild des Rechners
• Blockschaltbild des Prozessors
• Registertransfer-Ebene (Mikroprogramm-Ebene)
• Gatterebene
1.1 Mikroelektronik
Moderne Computer bestehen fast ausschließlich aus elektronischen Halbleiter-Bauteilen. Dies betrifft sowohl den Prozessor (CPU) als auch den Hauptspeicher. Die meisten Bauelemente sind hochintegrierte Halbleiter- Bausteine (Chips).
Computer früherer Generationen hatten auch andere Bauteile:
• Röhren und Relais
• diskrete Transistor-Schaltungen
• magnetische Bauteile (z.B. Magnetkernspeicher)
Halbleiter
Wichtigstes aktives Halbleiter-Bauelement ist der Transistor. Er entsteht durch die Dotierung von Silikon, z.B. mit
• Phosphor oder Arsen (n - Halbleiter)
• Brom (p - Halbleiter).
Ein Transistor hat drei Schichten mit zwei Übergängen:
p - n - p oder n - p - n. Jede Schicht ist mit einer Leiterbahn kontaktiert, durch die Verbindungen zu benachbarten Bauelementen hergestellt werden.
Der Transistor
Halbleiter-TransistorAufbau des Halbleiters Transistor-Symbol
Der Herstellungsprozess für Halbleiter-Bauelemente (1)
(stark vereinfacht, für eine Schicht Transistoren)
· Basis: Silikon-Scheibe (Wafer), Durchmesser 8 - 20 cm, für viele Chips gleichzeitig), p-dotiert.
· Chip-Größe: ca 2 x 2 mm bis 10 x 20 mm
· Aufdampfen einer n-dotierten Schicht
· Beschichten mit Photoresist-Lack
· Belichten unter einer Maske, die die gewünschten Strukturen enthält. Dadurch Härten des Photoresist- Lacks im belichteten Bereich
· Entfernen der "weichen" Bereiche des Photoresist- Lacks im Ätzbad. Dadurch entsteht das Abbild der Maske auf dem Chip.
Herstellungsprozess für Halbleiter-Bauelemente (2)
• Maskierung und Diffusion von p-Dotierungen, wo gewünscht. Dadurch entstehen Unterbrechungen der n-dotierten Schicht und damit isolierte Bereiche.
Die p-Dotierungen bilden die Basis des entstehen- den Transistors.
• Maskierung und Diffusion von n-Dotierungen über den p-Dotierungen, wo gewünscht. Diese bilden den Emitter des entstehenden Transistors.
• Testen der Chips auf dem Wafer
• Trennen des Wafers durch Zersägen
• Kontaktieren der einzelnen Chips mit feinen Drähten
• Aufbringen auf Keramiksubstrat und Versiegeln
Geometrie eines fertigen ICs
MOS - FET
(Metal Oxide Semiconductor - Field Effect Transistor)
Ähnlich wie die zuvor beschriebenen bipolaren Transistoren werden auch die Feldeffekt-Transistoren (FETs) hergestellt. Statt Emitter, Basis und Kollektor haben sie Source, Gate und Drain und etwas andere elektrische Eigenschaften. Der Vorteil ist der einfachere Aufbau, der weniger Diffusionschritte erfordert.
Heute sind in der Prozessortechnologie CMOS-Tran- sistoren (Complementary Metal Oxide Semiconductor) üblich, die sich durch einfache Fertigungsprozesse, geringe Stromaufnahme (und damit auch geringe Wärmeabgabe) und mittlere Schaltgeschwindigkeiten auszeichnen.
MOS - Feldeffekttransistor
Aufbau von Speicherelementen aus Transistoren
In analogen Schaltungen (z.B. Transistorradios) werden Transistoren als Verstärker eingesetzt. Ist die Spannung zwischen Basis und Emitter Null oder negativ, so ist der Transistor nichtleitend. Mit steigen- der Spannung zwischen Basis und Emitter steigt der Kollektorstrom überproportional.
In digitalen Schaltungen werden Transistoren immer im Sättigungsbereich betrieben, sie sind also leitend oder nichtleitend, je nach der Spannung an der Basis. Ein Transistor dient also als elektronischer Schalter
Bistabile Kippschaltung
Ein einzelner Schalter ist noch kein Speicher. Ein einfacher Speicher lässt sich aus zwei Transistoren in Form einer bistabilen Kippschaltung aufbauen (FLIP- FLOP). Dabei ist immer ein Transistor leitend, der andere gesperrt.Das Lesen des gespeicherten Bits erfolgt entweder durch einen so schwachen Impuls, dass der Zustand der bistabilen Kippschaltung erhalten bleibt (non- destructive read), oder durch zerstörendes Lesen, gefolgt von erneutem Schreiben des gelesenen Bits (destructive read).
Das Schreiben eines zu speichernden Bits erfolgt durch Anlegen einer hinreichend hohen Spannung, die die Schaltung in den gewünschten Zustand "kippt".
Beispiel für eine einfache bistabile Kippschaltung
Eigenschaften von Transistor- Kippschaltungen
• Man verwendet mindestens zwei, oft mehr Transistoren zur Speicherung von einem Bit.
• Die Schaltung ist nur, solange eine Versorgungs- spannung vorhanden ist. Beim Abschalten geht das gespeicherte Bit verloren (volatiler Speicher).
• Neben der Stromversorgung sind weitere Steuerleitungen zum Lesen und Schreiben nötig.
• Die Schaltgeschwindigkeiten sind abhängig von der gewählten Technologie, den Spannungspegeln usw.
Magnetkernspeicher
In früheren Generationen von Rechenanlagen wurden magnetische Kernspeicher aus Ferrit-Ringkernen eingebaut.
Jeder Ringkern kann rechtsherum oder linksherum magnetisiert werden. Gelesen wird immer durch einen relativ hohen Lesestrom. Entspricht die Magnetisierung dem vom Lesestrom erzeugten Magnetfeld, so wird kein zusätzlicher Strom induziert; geht die Magneti- sierung in entgegengesetzter Richtung, so wird durch das "Umklappen" der Magnetisierung ein deutlich messbarer zusätzlicher Strom induziert.
Lesen ist immer destruktiv. Jedes gelesene Bit muss anschließend neu geschrieben werden.
Eigenschaften
• hohe Stromaufnahme
• langsame Schaltzeiten
• aufwendige Fertigung (Einfädeln der Ringe von Hand!)
• nicht-volatil (speichert auch ohne Stromversorgung)
Magnetkernspeicher
Logik-Bausteine aus Transistoren
Auch beim Aufbau von Logik-Bausteinen werden Transistoren nur in den Zuständen "leitend" oder"gesperrt" betrieben (Digitaltechnik).
Die elementaren Boole'schen Funktionen lassen sich durch Zusammenschalten von Transistoren realisieren!
Eine UND-Schaltung aus zwei Transistoren (stark vereinfacht!)
8.2 Gatter
Transistorschaltungen für die elementaren Funktionen der Logik werden als Gatter bezeichnet (engl.: Gate).
Für die Gatter werden grafische Symbole eingeführt.
Deutsche und amerikanische Normsymbole für Gatter
Normsymbole für Gatter
alte Norm neue Norm
des DIN des DIN
8.3 Schaltnetze und Schaltwerke
Eine digitale Schaltung aus Gattern, die kein Gedächtnis für ihre Vorgeschichte hat, heißt Schaltnetz. Ein Schaltnetz kann entweder grafisch durch vernetzte Gatter oder algebraisch in Form einer Schaltfunktion beschrieben werden.
F: Bn→Bm
(Bn und Bm sind Bit-Vektoren).
B = {0,1}
Eine Schaltfunktion mit skalarem Ergebnis f: Bn→B
heißtBoole’sche Funktion.
Darstellung von Boole’schen Funktionen
a) In Form einer Wertetabellei x1 x2 x3 f(x1, x2, x3)
0 0 0 0 0
1 0 0 1 0
2 0 1 0 0
3 0 1 1 1
4 1 0 0 0
5 1 0 1 1
6 1 1 0 0
7 1 1 1 1
Die Zeilennummern i mit Funktionsergebnis 1 heißen einschlägige Indices(im Beispiel: 3,5,7).
b) In Form der Aussagenlogik
f = (¬ x1∧x2∧x3) ∨(x1∧¬ x2∧x3) ∨(x1∧x2∧x3)
Disjunktive Normalform
Es seien f eine Boole’sche Funktion, i ein Index von f und i1,..,in die Dualdarstellung von i.
Eine Funktion mi: Bn→B mit
mi(x1,..,xn) = l1 ∧ l2∧ l3∧ .. ∧ ln und lj= xj, falls ij= 1
lj= ¬ xj, falls ij= 0 heißt i - ter Minterm von f.
Ein Minterm mi nimmt an genau der Stelle i den Wert 1 an und liefert sonst immer 0.
Beispiel: m5= x1∧ ¬ x2∧ x3
Darstellungssatz (Disjunktive Normalform, kurz: DNF):
Jede Boole'sche Funktion f:Bn→B kann eindeutig als ' ∧' - Verknüpfung der Minterme ihrer einschlägigen Indizes dargestellt werden.
Beispiel von oben (Wertetabelle):
die einschlägigen Indizes sind:
3(011) 5(101) 7(111)
die Minterme dazu sind:
¬ x1∧x2∧x3 x1∧¬x2∧x3 x1∧x2∧x3 die DNF lautet:
f = (¬ x1∧x2∧x3) ∨(x1∧¬ x2∧x3) ∨(x1∧x2∧x3).
Vollständige Operatorensysteme
Definition:Eine Menge von Operatoren heißt vollständiges Operatorensystem, wenn jede beliebige Boole'sche Funktion nur durch Komposition der Operatoren darstellbar ist.
Da jede Boole'sche Funktion in DNF dargestellt werden kann, und dort nur die drei Operatoren ' ¬ ', ' ∧' und ' ∨' verwendet werden, ist {' ¬ ', ' ∧',' ∨'} ein vollständiges Operatorensystem. Wenn es also gelingt, technisch diese drei Operatoren zu realisieren, ist durch Kombination jede Boole'sche Funktion technisch umsetzbar.
Technisch hochinteressant ist es, wenn man mit nur einer Operation auskommen kann, z.B. NAND oder NOR.
Es gilt x NAND y = ¬ (x ∧y) und x NOR y = ¬ (x ∨y)
Analog zur disjunktiven Normalform gibt es auch eine konjunktive Normalform, also eine ' ∧' - Verknüpfung von Maxtermen. Diese soll hier nicht weiter betrachtet werden.
Grundidee des Logikentwurfs
1. Festlegung der Wertetabelle für die gewünschteFunktion.
2. Bildung der disjunktiven Normalform.
3. Umsetzung der disjunktiven Normalform in ein entsprechendes Schaltnetz aus Gattern.
Beispiel
f = (¬x1∧x2∧x3) ∨(x1∧ ¬x2∧x3) ∨ (x1 ∧x2∧x3) Als Schaltnetz
Technische Randbedingungen
Reale technische Gatter verhalten sich nicht immer so, wie die Boole’sche Logik es vorschreibt. Zu berück- sichtigen sind vor allem
• Signallaufzeiten. Das Ausgangssignal eines Gatters ist bei Veränderung des
Eingangssignals erst nach einer Verzögerungszeit stabil.
• "Fan-Out". Die Ausgangsleitung eines Gatters kann nicht beliebig viele Eingänge weiterer Gatter speisen, da sonst die Strom- und Spannungsverhältnisse im Gatter instabil werden.
Schaltnetzbeispiel: Halbaddierer
Ein Ein-Bit-Halbaddierer berechnet die binäre Summe der Eingangsbits:R (x,y) : Resultat (Ergebnis der Addition) Ü (x,y) : Übertrag für die nächste Stelle
Wertetabelle des Halbaddierers
Entsprechend der Addition von Binärziffern ergibt sich folgende Wertetabelle:
i x y R Ü
0 0 0 0 0
1 0 1 1 0
2 1 0 1 0
3 1 1 0 1
Es gilt: R(x,y) = (¬x ∧y) ∨(x ∧ ¬y) = x XOR y Ü = x ∧y
Schaltbild des Halbaddierers
US - NormSchaltbild des Halbaddierers
Deutsche NormSchaltnetzbeispiel: Volladdierer
Ein Volladdierer berechnet die Summe von zwei Bits und kann dabei den Übertrag aus der nächst-niedrige- ren Stelle einbeziehen. Der Volladdierer lässt sich aus Halbaddierern aufbauen.Wertetabelle des Volladdierers
i x y ü R Ü
0 0 0 0 0 0
1 0 0 1 1 0
2 0 1 0 1 0
3 0 1 1 0 1
4 1 0 0 1 0
5 1 0 1 0 1
6 1 1 0 0 1
7 1 1 1 1 1
Es gilt:
R(x,y,ü) = (¬x∧¬y∧ü)∨(¬x∧y∧¬ü)∨(x∧¬y∧¬ü)∨(x∧y∧ü)
= x XOR y XOR ü
Ü(x,y,ü) = (x∧y) ∨(x∧ü) ∨(y∧ü) = (x∧y) ∨((x XOR y) ∧ü)
Schaltbild des Volladdierers
Deutsche NormÜ = (x ∧y) ∨(ü ∧(x XOR y))
Addiernetz
Aus hintereinandergeschalteten Volladdierern lässt sich ein Addiernetz für mehrere Bits bauen.
4-Bit-Addiernetz
Optimierung von Schaltnetzen
Da Schaltnetze und Gatter durch Ausdrücke der Boole'schen Algebra beschrieben werden können, können die Rechenregeln der Boole'schen Algebra zur Vereinfachung von Schaltnetzen herangezogen werden! Denn häufig ist die disjunktive Normalform bzw. die konjunktive Normalform nicht optimal.Ziel der Optimierung ist:
• die Minimalzahl der Gatter
• bei gleicher Gatteranzahl die Minimalzahl der Gattereingänge
Beispiel
g(x1,x2,x3,x4) = (x1∧ ¬x2∧x3∧x4) ∨ !t1 (x1∧ ¬x2∧ ¬x3∧x4) ∧ !t2 (x1∧x2∧x3∧x4) ∨ !t3 (¬x1∧ ¬x2∧ ¬x3∧x4) ∨ !t4 (¬x1∧ ¬x2∧x3∧x4) !t5
= (x1∧ ¬x2∧x4) ∨ !u1:t1,t2
(x1∧x3∧x4) ∨ !u2:t1,t3 (¬x2∧ ¬x3∧x4) ∨ !u3:t2,t4 (¬x1∧ ¬x2∧x4) !u4:t4,t5
= (¬x2∧x4) ∨ !v1:u1,u4
(x1∧x3∧x4) ∨ !v2:u2 (¬x2∧ ¬x3∧x4) !v3: unnötig, da
von v1 absorbiert
= (¬x2∧x4) ∨(x1∧x3∧x4)
Implikanten und Primimplikanten (1)
Implikanten
Gegeben sei eine Boole’sche Funktion f: Bn→B. Eine Funktion M: Bn→B heisst Implikant von f, wenn gilt:
Aus M(x1,..,Xn)=1 folgt f(x1,..,xn)=1 für alle x1,..,xn∈Bn. An allen Stellen, an denen M den Funktionswert 1 liefert, bildet auch f auf 1 ab.
Eine disjunktive Form von f besteht aus per 'Oder' verknüpften Implikanten von f. Und zwar werden so viele Implikanten benötigt, daß alle 1 liefernden Stellen von f durch sie abgedeckt werden.
Primimplikanten
Ein Implikant M einer Boole'schen Funktion f heißt Primimplikant von f, wenn er durch Resolution mit anderen Implikanten von f nicht weiter vereinfacht werden kann.
Wenn eine Boole'sche Funktion in disjunktiver Form mit minimalen Kosten vorliegt, besteht sie aus der 'Oder' - Verknüpfung von Primimplikanten. Die Minimierung von f entspricht also der Bestimmung einer Menge von Primimplikanten, die alle 1 liefernden Stellen von f überdecken.
Anmerkung: (M = 1) →f = 1 M →f
Implikanten und Primimplikanten (2)
Satz
Eine minimale disjunktive Form für eine Funktion f besteht aus einer Disjunktion von Primimplikanten.
Beweis:
Sei E (f) die Zahl der Gattereingänge von f.
Annahme:
(1) f = p1 ∨p2 ∨... ∨pn∨i1 (2) i1 ist kein Primimplikant.
(3) E (p1 ∨p2 ∨... ∨pn∨i1) = Min
Wegen (2) gibt es einen Implikanten i2 mit E(i2) < E(i1) derart, daß
(4) i2 →f = 1
(5) i1 →i2 = 1 , also i1 = g ∧i2 mit irgendeiner Konjunktion g
( i1 ist Teil eines anderen Implikanten)
Implikanten und Primimplikanten (3)
(noch Beweis)wegen (4) gilt
f = f ∨i2 !(1)
= p1∨p2∨... ∨pn∨i1∨i2 !(5)
= p1∨p2∨... ∨pn∨i2
Wegen E(i2) < E(i1) hat i2weniger Gattereingänge als i1. Damit gibt es eine disjunktive Form für f mit weniger Gattereingängen.
Somit ist Annahme (3) verletzt, die ursprünglich rechte Seite war nicht minimal.
Karnaugh - Diagramm
Eine graphische Methode zur Ermittlung eines Boole’schen Ausdruckes, der ein Schaltnetz mit minimaler Gatterzahl beschreibt.Die algebraische Minimierung, beginnend mit der disjunktiven Normalform, ist oft schwer zu überschauen und erfordert viel Erfahrung und Intuition. Hier hilft der Einsatz von Karnaugh-Diagrammen durch eine übersichtliche Darstellung der Wertetabelle, aus der sich die Primimplikanten ablesen lassen.
Ein Karnaugh-Diagramm ist so aufgebaut, daß sich je zwei benachbarte Felder nur in einem Bit
unterscheiden.
Aufbau eines Karnaugh - Diagramms
Karnaugh - Diagramm der Beispielfunktion g
g (x1, x2, x3,x4) = (x1 ∧¬x2 ∧x3 ∧x4) ∨ !t1(x1 ∧¬ x2 ∧¬ x3 ∧x4) ∨ !t2 (x1 ∧x2 ∧x3 ∧x4) ∨ !t3 (¬ x1 ∧¬ x2 ∧¬ x3 ∧x4) ∨ !t4 (¬ x1 ∧¬ x2 ∧x3 ∧x4) !t5
Jedes mit einer 1 belegte Feld des Diagramms entspricht einem Minterm des einschlägigen Index und damit einem Term der disjunktiven Normalform von g.
Ermittlung der Primimplikanten durch Zusammenfassen
• Zweiergruppen von benachbarten Einsen entsprechen Mintermen, die sich nur in einem Argument unterscheiden und die daher zusammengefaßt werden können.
• Vierergruppen von benachbarten Einsen (Quadrate, Zeilen, Spalten) erlauben die zweistufige Resolution (Zusammenfassen unter Wegfall von zwei
Argumenten)
• Man bildet daher im Karnaugh -Diagramm möglichst große Blöcke von zusammenhängenden Einsen und kann dann die entsprechenden minimalen
Ausdrücke (Primimplikanten) unmittelbar aufschreiben. Die Gesamtfunktion f ergibt sich als Disjunktion der Primimplikanten.
Anmerkung: Benachbart im obigen Sinne sind auch das äußerste rechte und linke Feld derselben Zeile bzw. das oberste und das unterste Feld derselben Spalte.
Ermittlung der Primimplikanten für g
Vierer - Spalte: ¬ x2 ∧x4 Zweier - Block: x1 ∧x3 ∧x4
g = (¬ x2 ∧x4) ∨(x1 ∧x3 ∧x4)
Diese disjunktive Form ist minimal, da die beiden Blöcke nicht Teil von größeren Blöcken sind und es sich daher um Primimplikanten handelt.
Unvollständig spezifizierte Funktion
Häufig sind bei einem Schaltnetz bestimmte Eingabekombinationen aufgrund der besonderen Umgebung nicht möglich. An diesen Stellen darf die entsprechende Boole'sche Funktion undefiniert sein.Dies kann zur Vereinfachung genutzt werden. Und zwar kann man an diesen Stellen den Funktionswert freizügig so festlegen, daß sich z.B. im KV - Diagramm möglichst große 1er - Rechtecke ergeben.
Undefinierte Werte werden häufig als "don't care"
bezeichnet und mit d abgekürzt.
Beispiel:
Wertetabelle der Funktion h:
x1 x2 h
0 0 0 0
1 0 1 1
2 1 0 1
3 1 1 d
Unvollständig spezifizierte Funktion
Minimale disjunktive Form: x1 ∨x2
Signallaufzeiten und "Hazards“ (1)
In einem Schaltnetz können unterschiedlicheSignallaufzeiten auftreten. Dies führt dazu, daß an den Gattereingängen die neuen Werte nicht immer gleichzeitig anliegen. Dadurch können die
Ausgangswerte des Schaltnetzes übergangsweise falsche Werte annehmen, die kritisch sein können.
Beispiel
f(x1,x2,x3) = (x1∧x3) ∨(x2∧¬ x3)
x1 x2 x3 f
0 0 0 0
0 0 1 0
0 1 0 1
0 1 1 0
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 1
Signallaufzeiten und "Hazards“ (2)
Der Funktionswert 0 sei kritisch, d.h. er darf nur auftreten, wenn eine entsprechendeEingabekombination vorliegt, weil er in anderen Fällen zu unliebsamen Folgeerscheinungen führen würde.
Wir betrachten den Eingabewechsel von '110' auf '101'.
Beide Kombinationen liefern den Funktionswert 1. Also sollte die Ausgabe auch bei diesem Wechsel stabil auf 1 bleiben. Wenn nun aber der x3- Wechsel im
Vergleich zum Signalwechsel von x2etwas verzögert auftritt, liegt zwischenzeitlich die Kombination '100' an.
In diesem Fall wird die Ausgabe kurz einen Wechsel zu 0 ausführen. Ein Funktionshasard liegt vor.
Schaltungshazards
Beispiel 2Wir betrachten den Eingabewechsel von ’111’ auf ’110’.
Da nur ein Eingabesignal wechselt, kann kein Funktionshasard vorliegen.
Das wechselnde Signal zu x3durchläuft sowohl Gatter A als auch Gatter C. Es werde durch Gatter B verzögert (B und C haben zusammen eine längere Schaltzeit als A). Dann liegt am Ausgang von C noch der alte Wert 0 an, während am Ausgang von A schon der neue Wert 0 ansteht. Das Oder - Gatter D erhält so kurzzeitig die Eingabekombination 00 und die Ausgabe f kippt zwischenzeitlich nach 0. Es liegt ein statischer Schaltungshasard vor.
Vermeidung von Schaltungshazards
In vielen Fällen können Hazards durchSchaltungsmehraufwand vermieden werden.
In Beispiel 2:
Gate Arrays
Eine elegante Methode zur schnellen Realisierung von speziellen Boole’schen Funktionen sind "Programmable Gate Arrays" (PGAs), auch als "Programmable Logic Arrays" (PLAs) bezeichnet.
Ein PGA (PLA) besteht im Prinzip aus einer UND - Matrix und einer ODER - Matrix. Beide sind durch logische Ausdrücke programmierbar und hintereinander geschaltet. So lassen sich Ausdrücke in disjunktiver Normalform durch den Benutzer unmittlelbar in Hardware realisieren.
Beispiel für ein programmierbares Gate Array
(stark vereinfacht)8.4 Schaltwerke
Im Gegensatz zu Schaltnetzen haben Schaltwerke ein Gedächtnis. Die aktuellen Werte an den Ausgängen hängen von den Eingangswerten und dem Zustand des Gedächtnisses ab.
Das Gedächtnis wird durch Speicherbausteine realisiert. Sie halten einen einmal eingegebenen Wert so lange, bis er mit einem neuen Wert überschrieben wird. Die einfachsten Speicherbausteine sind die bereits erwähnten bistabilen Kippschaltungen (Flip - Flops). Speicherbausteine für mehrere Bits entstehen durch Parallelschaltung von Flip - Flops.
Synchrone Schaltwerke
Problem:
Unterschiedliche Signallaufzeiten, Gefahr von Hazards"
Lösung:
Die Auswertung der Schaltnetzfunktionen und der Übergang des gesamten Schaltwerks in einen neuen Zustand erfolgt jeweils zu ganz bestimmten
Zeitpunkten, die so gewählt werden, daß alle Übergangsphänomene in der Netzelektronik abgeklungen sind. Man führt einen Takt ein.
Synchrones Flip - Flop
Flip - Flop mit zusätzlichem Takteingang.Wird als RS - Flip - Flop (Reset/Set) bezeichnet.
Beim RS - Flip - Flop ist die Eingangskombination R = 1
* S = 1 verboten (Set und Reset zugleich macht keinen Sinn).
JK - Flip - Flop
D - Flip - Flop (Delay - Flip - Flop)
Mit jedem Takt wird das Eingangssignal (0 oder 1) übernommen und bis zum nächsten Takt gespeichert.
Register
Ein Register ist ein Speicherbaustein zur Aufnahme eines Maschinenworts. Es hat meist zwischen 16 und 64 Bits. Technisch gesehen ist ein Register eine Aneinanderreihung von Flip - Flops, die je ein Bit speichern können.
Register werden mit schnellen (und teuren) Schaltkreisen realisiert. Sie werden "prozessornah"
eingesetzt und dienen hauptsächlich der Aufnahme von Zwischenergebnissen und Adressen, auf die der Prozessor schnell zugreifen muß.
Spezialfall: Schieberegister
Gelesen und geschrieben wird entweder seriell oder parallel; daher ist ein Schieberegister zur Serien - Parallelumsetzung geeignet.
Serienaddierer als synchrones Schaltwerk
Ein Mehrbit-Volladdierer kann als Schaltnetz aus in Serie geschalteten Ein-Bit-Volladdierern aufgebaut werden. Er könnte aber auch auf der Basis eines einzigen Volladdierers und eines Ein-Bit-Speichers für den Übertrag aufgebaut werden.Vorteil: weniger Gatter, geringerer Aufwand Nachteil:lange Berechnungszeit
Blockschaltbild
Die zu addierenden Bits x und y werden zeitlich seriell zur Verfügung gestellt, das Ergebnis s Bit für Bit seriell ermittelt.
Schaltwerk für einen Serienaddierer (1)
Wir verwenden ein JK - Flip - Flop.
Wertetabelle
ü' x y ü s J K
0 0 0 0 0 0 -
0 0 1 0 1 0 -
0 1 0 0 1 0 -
0 1 1 1 0 1 -
1 0 0 0 1 - 1
1 0 1 1 0 - 0
1 1 0 1 0 - 0
1 1 1 1 1 - 0
Wir wählen ü' = Qt und ü = Qt+1
Schaltwerk für einen Serienaddierer (2)
Boole’sche Funktionen
s = (x ∧¬ y ∧¬ ü') ∨(¬ x ∧¬ y ∧ü') ∨(¬ x ∧y ∧¬ ü') ∨ (x ∧y ∧ü')
J = x ∧y K = ¬ x ∧¬ y
Schaltbild für den Serienaddierer Aufbau eines Speichers (RAM)
Dynamische Schreib-/Lesespeicher werden aus Speicherelementen aufgebaut, die in Matrixform angeordnet werden. Da man nicht jede einzelne Zelle mit einer separaten, aus dem Chip herausgeführten Lese-/Schreibleitung versehen kann, werden die Speicherelemente zu kleinsten adressierbaren Einheiten zusammengefaßt, meist zu• Bytes (8 Bit) (Byteadressmaschine)
• 16 - Bit - Wort (Wortadressmaschine)
• 32 - Bit - Wort (Doppelwort) (Wortadressmaschine) Zu einem Taktzeitpunkt werden dann jeweils alle Bits einer adressierbaren Einheit gleichzeitig gelesen bzw.
geschrieben. Die Auswahl der adressierbaren Einheit geschieht durch Anlegen der Adresse an den Speicher.
Adressen haben typischerweise die Längen
• 16 Bit (64 k Speicherelemente adressierbar)
• 24 Bit (16 M Speicherelemente adressierbar)
• 32 Bit (4 Giga Speicherelemente adressierbar)
Prinzipschaltbild einer Speicherzelle
Vorgesehen zum Einbau in eine Speichermatrixdin = data in
sel = select (Adressierung) write = write enable (Einspeichern von din) d = data (durchgereichter Lesewert
aus der Nachbarzelle) dout = data out (Weitergabe des eigenen
oder durchgeschleiften Lesewertes an die Nachbarzelle)
Speicher (RAM) für vier 4 - Bit - Einheiten
Lesespeicher (Read - Only Memory, ROM)
Im Gegensatz zum RAM (Random Access Memory) kann im ROM nur gelesen werden. Das Belegen des Speichers mit Werten (Bitmustern) geschieht einmalig bei der Herstellung. Meist werden beimFertigungsprozeß alle Bits im ROM auf 1 gesetzt und dann das ROM durch gezieltes Löschen bestimmter Bits programmiert oder umgekehrt.
Da der Inhalt in das ROM fest "eingebrannt" ist, ist ein ROM stets ein nicht - flüchtiger Speicher.
Anwendungsgebiete
• Speicherung von Mikroprogrammen
• Speicherung eines Sprachübersetzers (Interpreters) (z.B. "BASIC im ROM")
• Speicherung eines kleinen Betriebssystems in einem portablen PC (z.B. "MS - DOS im ROM")
• programmierte Steuerungen (z.B. Benzineinspritzung, Telefonvermittlung)
8.4 Maschineninterne
Darstellung von Zahlen und Zeichen
Alle Daten, die ein Rechner speichert und verarbeitet, werden intern in Form von Bits dargestellt.
Frage: Wie werden die Datentypen aus den höheren Programmiersprachen in Bitmuster abgebildet?
Datentyp boolean
Kann nur die Werte true oder false annehmen. Daher genügt im Prinzip ein Bit. Häufig aber auch Abbildung auf ein Byte, da das Byte die kleinste adressierbare Einheit ist.
Datentyp Bitstring
In manchen Sprachen unterstützt. Wird direkt auf eine Folge von Bits im Speicher abgebildet.
Dazu gibt es dann eine semantische Erweiterung der Operatoren der Aussagenlogik (¬, ∧, ∨, ...) auf Bitmuster, die dann komponentenweise verknüpft werden.
Ganze Zahlen (integer) (1)
Positive ganze Zahlen
Sehr häufiger Datentyp in Anwendungsprogrammen (z.B. Feldindex, Laufvariable in Schleifen), aber auch maschinenintern als Speicheradresse usw.
Darstellung als Dualzahl (Zahlenbasis 2). Jede Ziffernposition entspricht einer Zweierpotenz (wie bei Dezimalzahlen einer Zehnerpotenz).
Ganze Zahlen (integer) (2)
Beispiel:
1510= 11112 Konvertierung
Dual → Dezimal: Ausmultiplizieren
Dezimal→ Dual: fortgesetzte Division durch 2 und Notieren der Reste
Beispiel: 3010als Dualzahl 30:2 = 15 Rest 0 15:2 = 7 Rest 1
7:2 = 3 Rest 1
3:2 = 1 Rest 1
1:2 = 0 Rest 1 →3010= 111102
Rechnen mit Dualzahlen
Arithmetische Operationen werden analog zum Dezimalsystem ausgeführt (Addition, Subtraktion, Multiplikation, Division).Merke: Eine Multiplikation mit 2 entspricht einem
"Linksshift" der Dualzahl, eine Division durch 2 einem Rechtsshift.
Beispiel für Ganzzahlen im Hauptspeicher
Oktalzahlen
Vereinfachte Darstellung von langen Bitstrings durch Oktalzahlen (3 Bits ergeben eine Oktalziffer).
Bitstring Oktalziffer
000 08
001 18
010 28
011 38
100 48
101 58
110 68
111 78
Beispiel
18110 = 0101101012
= 2 6 58
= 2 ´ 64 + 6 ´ 8 + 5 Direkte Berechnung durch fortgesetztes Dividieren durch 8.
Hexadezimalzahlen (Sedezimalzahlen) (1)
Vereinfachte Darstellung von langen Bitstrings durch Hexadezimalzahlen(4 Bits ergeben eine Hexadezimalziffer).
Da wir aus dem Dezimalsystem nur zehn Ziffern kennen, müssen weitere sechs Ziffernbezeichner dazuerfunden werden. Man wählt dazu die Großbuchstaben A bis F.
Bitstring Hexadezimalziffer
0000 016
0001 116
0010 216
0011 316
0100 416
0101 516
0110 616
0111 716
1000 816
1001 916
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F
Hexadezimalzahlen (Sedezimalzahlen) (2)
Beispiel18110 = 1011 01012
= B 516
= 11 ´ 16 + 5
Die oktale und hexadezimale Darstellung ist nicht nur für Ganzzahlen, sondern auch für beliebige andere Bitstrings gebräuchlich, z.B. zur Definition von Bitstring - Konstanten:
ALL - ONE DC X'FF'
LEFTHALF DC X'FO'
Negative ganze Zahlen
Erste Idee:
n Bits für den Betrag als ganze Zahl + 1 Bit für das Vorzeichen
Nachteile:
• Null gibt es zweimal (+0, -0)
• Arithmetik wird durch Fallunterscheidungen komplizierter
Zweite Idee:
Einerkomplement
Negative Zahl entsteht durch Invertieren aller Bits.
Nachteile:
Immer noch zwei Nullen, immer noch komplizierte Arithmetik
Besser: Zweierkomplement
Zweierkomplement
Zweierkomplement = Einerkomplement +1 Beispiel für 3 - Bit Zahlen:
210= 0102
-210 = 1012 + 1 = 1102
Vorteile
• Vorzeichen immer noch am ersten Bit erkennbar
• Addition negativer Zahlen wie Addition positiver Zahlen (beim Überschreiten der Null geht der Übertrag verloren)
• Subtraktion i - j durch Bildung des Zweierkomplements von j und Addition!
i - j = i + (-j)
(sehr einfach in Hardware zu bauen!)
Gleitkommazahlen
Reelle Zahlen werden durch Mantisse und Exponent dargestellt:
z = m ´ ge , m Mantisse, e Exponent.
m ist ganze Zahl mit gedachtem Komma vor der ersten Stelle.
e ist ganze Zahl.
g ist Basis (gilt als implizit vereinbart, wird nicht explizit dargestellt). Gebräuchlich:
g = 2 oder g = 16. (IBM - Großrechner: g = 16)
Merke: m < 0: negative reelle Zahl
e < 0: reelle Zahl mit Betrag zwischen 0 und 1
Beispiele für Gleitkommazahlen
Eine Gleikommazahl werde in einem 32 - Bit - Wort dargestellt mit 8 Bits für e und 24 Bits für mMan überlege sich, wie die arithmetischen Operationen +, -, *, / in der obigen Gleitkomma - Darstellung ausgeführt werden!
Anmerkung 1:
Beim Rechnen mit Gleitkommazahlen ist die Genauigkeit beschränkt, da die Länge der Mantisse beschränkt ist. Es treten Rundungsfehler auf.
Anmerkung 2:
Kleinere Prozessoren unterstützen Gleitkommazahlen nicht. Ihre Darstellung und Operationen müssen dann softwaremäßig realisiert werden. Üblich ist auch die Erweiterung des Rechners um einen zusätzlichen Gleitkommaprozessor, die wesentlich zur Beschleunigung der Ausführung numerischer Anwendungsprogramme beitragen kann.
H P
Darstellung von Zeichen (Characters) (1)
Zur Darstellung von Zeichen (Textzeichen,Sonderzeichen) gibt es internationale Standards, die jedem Zeichen ein Bitmuster fest zuordnen. Weit verbreitet sind:
ASCII - Code American Standard Code for Information Interchange.
Ursprünglich ein 7 - Bit - Code.
EBCDIC - Code Extended Binary Coded Decimal Interchange Code
Ein 8 - Bit - Code
Darstellung von Zeichen (Characters) (2)
Beide Codes enthalten• druckbare Zeichen
• Ziffern
• Kleinbuchstaben
• Großbuchstaben
• Sonderzeichen (!, ?, $, ...)
• nicht druckbare Zeichen (Steuerzeichen)
• Wagenrücklauf, Zeilenvorschub, Tabulator, Klingeln, etc.
• Gerätesteuerzeichen und Übertragungssteuerzeichen
Leider weisen beide Codes nationale Unterschiede auf (z.B. bei Umlauten, Akzenten usw).
ASCII - Codetabelle
erste 3 Bits
’--- Steuerzeichen ---’ ’--- Schriftzeichen ---‘
'--- Eingeschränkter ASCII-Zeichensatz ---' x
0 1 2 3 4 5 6 7 y
0 nul dle 0 @ P ‘ p
1 soh dc1 ! 1 A Q ‘ q
2 sfx dc2 " 2 B R b r
3 etx dc3 # 3 C S c s
4 eot dc4 $ 4 D T d t
5 enq nak % 5 E U e u
6 ack syn & 6 F V f v
7 bel etb ’ 7 G W g w
8 bs can ( 8 H X h x
9 ht em ) 9 I Y i y
A lf sub * : J Z j z
B vt esc + ; K [ k {
C ff fs , < L \ l |
D cr qs - = M ] m }
E so rs . > N ^ n ¬
F si us / ? O _ o del
ASCII: Bedeutung der Steuerzeichen
Abk. Funktion Funktion (Bedeutung des Zeichens)
NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1-3 DC4 NAK SYN ETB CAN EM SS ESC FS GS RS US SP
Null Start of heading Start of text End of text End of transmission Enquiry Acknowledgement Audible signal Backspace Horizontal tabulation Line feed Vertical tabulation Form feed Carrier return Shift out Shift in Data link escape Device control Device stop
Negative acknowledgement Synchronous idle End of transmission block Cancel
End of medium Start of special sequence Escape
File separator Group separator Record separator Unit separator Space
Nichtiges (ungültiges) Zeichen Beginn des Kopfes (Titels) Textanfang
Textende Ende der Übertragung Anfrage
Empfangsbestätigung Akustisches Signal Rücksetzen
Horizontale Einstellung (Tabulator) Zeilenvorschub
Vertikale Einstellung (Tabulator) Formularvorschub
Schreibkopfrücklauf
Umschaltung aus (Kleinschreibung) Umschaltung ein (Großschreibung) Umschaltung von Text auf Steuerzeichen Einheitensteuerung
Einheitenhalt
Negative Empfangsbestätigung Synchronisierzeichen (Leerlauf) Ende eines Übertragungsblockes Aufhebung
Ende für ein Medium (Gerät) Beginn einer speziellen Folge Auswahl, Trennung, Umschaltung Dateitrennzeichen
Gruppentrennzeichen Satztrennzeichen
Trennzeichen für eine Informationseinheit Zwischenraum
IBM - PC: Erweiterter 8 - Bit - Zeichensatz
(USA)
EBCDIC - Codetabelle Huffman - Codes
Zeichen werden je nach ihrer Häufigkeit mit einer unterschiedlichen Anzahl von Bits dargestellt. Die Codetabelle kann anwendungsabhängig gewählt werden (keine internationaler Standard).
Vorteil:
Im Mittel weniger Bits zur Darstellung der
Anwendungsdaten. Verringert den Speicherdarf und beschleunigt den Datentransfer.
Nachteil:
Zusatzaufwand zum Kodieren/Dekodieren zwischen gebräuchlichen Darstellungen und den Huffman - Code.
Beispiel für einen Huffmann - Code (1)
HUFFMAN CODE FOR A PARTICULAR APPLICATION
Charac- Frequency of Number
ter occurrence (%) Code of bits
0 55.5 0 1
1 6.7 1000 4
2 4.5 1100 4
8 3.5 10010 5
3 3.3 10100 5
A 3.2 10101 5
5 3.0 10110 5
6 2.7 11100 5
4 2.7 11101 5
9 2.2 11110 5
7 1.9 100110 6
F 1.5 101110 6
B 1.2 111110 6
Blank 1.1 110110 6
D 1.0 110100 6
E 0.9 110101 6
Z 0.7 1011110 7
P 0.6 1111110 7
N 0.5 1101110 7
u 0.4 10011110 8
C 0.4 10011100 8
Beispiel für einen Huffmann - Code (2)
H 0.4 10011101 8R 0.3 10111110 8
M 0.3 11111110 8
L 0.3 11111111 8
S 0.25 11011110 8
I 0.20 100111110 9
T 0.15 110111110 9
K 0.15 110111111 9
Y 0.13 1001111110 10
X 0.12 1001111111 10
G 0.10 1011111100 10
J 0.10 1011111101 10
O 0.06 10111111100 11
Q 0.03 10111111101 11
V 0.03 10111111110 11
W 0.03 101111111110 12 . 0.01 1011111111110000 16
- 1011111111110001 16
? 1011111111110010 16
& 1011111111110011 16 / 1011111111110100 16 + 1011111111110101 16
< below 1011111111110110 16
) 0.001 1011111111110111 16 ( 1011111111111000 16
% 1011111111111001 16
Beispiel für einen Huffmann - Code (3)
= 1011111111111010 16
# 1011111111111011 16
? 1011111111111100 16 , 1011111111111101 16
@ 1011111111111110 16 1011111111111111 16
Average character length 0.555 x 1 + 0.112 x 4 + 0.206 x 5 + 0.76 x 6 + 0.018 x 7 + 0.24 x 8 + 0.005 x 9 + 0.0045 x 10 + 0.0017 x 11+0.0003 x 12 + 0.0001 x 16
= 2.91 bits per character