Parameter | Kursinformationen |
---|---|
Veranstaltung: | @config.lecture |
Semester | @config.semester |
Hochschule: | Technische Universität Freiberg |
Inhalte: | Realisierung grundlegender arithmetischer Operationen im Rechner |
Link auf GitHub: | https://github.com/TUBAF-IfI-LiaScript/VL_EingebetteteSysteme/blob/master/10_CPU_Basis.md |
Autoren | @author |
** Fragen an die Veranstaltung**
- Welche Funktionalität sollte eine ALU bereitstellen?
- Wie werden Programmierbefehle umgesetzt und im Speicher abgebildet?
- Welche Aufgaben hat das Steuerwerk?
Abstraktionsebenen
+----------------------------+ -.
Ebene 6 | Problemorientierte Sprache | |
+----------------------------+ |
⎬ Anwendungssoftware
+----------------------------+ |
Ebene 5 | Assemblersprache | |
+----------------------------+ -.
+----------------------------+
Ebene 4 | Betriebssystem | Systemsoftware
+----------------------------+
+----------------------------+
Ebene 3 | Istruktionsset | Maschinensprache
+----------------------------+
+----------------------------+ -. ╔═══════════════╗
Ebene 2 | Mikroarchitektur | | ◀══║ HIER SIND WIR!║
+----------------------------+ | ╚═══════════════╝
⎬ Automaten, Speicher, Logik
+----------------------------+ |
Ebene 1 | Digitale Logik | |
+----------------------------+ -.
+----------------------------+
Ebene 0 | E-Technik, Physik | Analoge Phänomene
+----------------------------+ .
Aufgabe: Welche Funktionalität verbirgt sich hinter folgenden Schaltwerken/ Schaltnetze?
{{1}} Synchroner 3-Bit-Zähler auf der Basis von JK Flip-Flops
{{1}} 4-Bit PIPO Schieberegister (Links-Rechts)
{{1}} 1 Bit Volladdierer
Zwischenstand
Stufe | Funktionalität | Wunschzettel |
---|---|---|
0 | Addition/Subtraktion von einzelnen Werten |
|
1 | Flexibles Handling mehrerer Operationen |
Logische Funktionen: NOT, AND, NOR, XOR
Arithmetische Funktionen: ADD, SUB, (MUL), (DIV)
Sonstige: SHIFT LEFT (arithmetisch, logisch), SHIFT RIGHT (arithmetisch, logisch)
Daten Daten
| |
| |
+--------------|---------------+ |
| +------+ | | | Funktionsauswahl
| | | | : | F0 F_1 F_2
| | V V V V | | | Zielregister
| | +----+-----+-----+ +----+-----+-----+ | | | auswahl
| | | Register A | | Register B | | | | Z
| | +---+------------+ +---------+------+ | | | |
| | | | | | | |
| | | +------------------+ | | | |
| | | | | | | | |
| | +--------+-----------+ | | | | |
| | | | | | | | | |
| | V V V V | | | |
| | +----------------+ +----------------+ | | | |
| | | |<- | |<--+ | | |
| | | Demultiplexer |<- | Demultiplexer |<------+ | |
| | | |<- | |<----------+ |
| | ++-+-+-+-+-+-+-+-+ ++-+-+-+-+-+-+-+-+ |
| | | | | | | | | | | | | | | | | | |
| | | | | | | | | | V V V V V V V V |
| | | | | | | | | +----------------------------------+ |
| | | | | | | | +-----------------------------+ | |
| | | | | | | +------------------------+ | | |
| | | | | | +-------------------+ | | | |
| | | | | +--------------+ | | | | |
| | | | +---------+ | | | | | |
| | | +----+ | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | | | | | | | | |
| | V V V V V V V V V V V V V V V V |
| | +----+ +----+ +----+ +----+ +----+ +----+ +----+ +----+ |
| | | 000| | 001| | 010| | 011| | 100| | 101| | 110| | 111| |
| | | OR | |AND | |EXOR| |ADD | |SUB | |MUL | |DIV | | SL | |
| | +-+--+ +-+--+ +-+--+ +-+--+ +-+--+ +-+--+ +-+--+ +-+--+ |
| | |
| | | | | | | | | | |
| | +------+------+------+---+--+------+------+------+ |
| | | |
| | V |
| | +----------+----------+ |
| | | DeMuxer/Selektor |<-----------------+
| | +---+-+---------------+
| | | | | |
| +---------------------+ | --+---+--+
| | | Status
+-------------------------+ v S .
Der Status S umfasst eine Zusammenstellung der Resultate der Operationen codiert als 1-Bit Werte:
Carry
- Flag für die Addition / MultiplikationOverflow
- FlagError
- Flag für die Division durch Null- ...
Wie "programmieren" wir unser System?
Bezeichnung | ||||
---|---|---|---|---|
0 | 0 | 0 | 0 | OR_A |
0 | 0 | 0 | 1 | OR_B |
... | ||||
0 | 1 | 1 | 0 | ADD_A |
0 | 1 | 1 | 1 | ADD_B |
... |
Beispielanwendungen
Inkrementieren | Togglen | |
---|---|---|
Vorbereitung | A <- 1, B <-0 | A <- 1 |
"Programm" |
ADD_B |
EOR_A |
ADD_B |
EOR_A |
|
ADD_B |
EOR_A |
Zwischenstand
Stufe | Funktionalität | Wunschzettel |
---|---|---|
0 | Addition/Subtraktion von einzelnen Werten |
|
1 | Arithmetische Einheit mit mehren Funktionen und wählbarem Ergebnisregister |
|
2 | Sequenz von Berechnungsfolgen |
Für diesen Schritt fassen wir das obige Schaltbild unserer hypothetischen ALU mit 8 Funktionen in einem abstrakteren Schaubild zusammen.
@startditaa
+-----+-----+
| A | B |
Daten +-----+-----+
<--------->+cFF4 |
| |
Kontrolle | ALU |
---------->+ |
| |
Status | |
<----------+ |
+-----------+
@endditaa
Bezeichnung | Bedeutung |
---|---|
A, B | Datenregister |
Daten | Zugriff auf die Datenregister |
Kontrolle | Steuerleitungen |
Status | Carry oder Fehlerflags |
Wir erweitern diese ALU-Komponenten nun um zwei weitere Module - einen Speicher und ein Steuerwerk.
Der Speicher umfasst unsere Programmbestandteile AND_B
usw. in jeweils einem 4 Bit breiten Register.
Analog zur Diskussion um die abstraktere Darstellung der ALU fassen wir auch den Speicher in einem Block-Symbol zusammen.
@startditaa
+------------------+
|c88F |
| Speicher |
| |
+-----------+------+
|
|
| +-----+-----+
| | A | B |
| Daten +-----+-----+
| --------->+cFF4 |
| Kontrolle | |
+-------------->+ ALU |
Status | |
<--------+ |
+-----------+
@endditaa
Wie allerdings setzen wir den Fortschritt im Programm um? Nach welcher Methodik werden die nachfolgenden Befehle aufgerufen?
Eine weitere Komponente, das Steuerwerk übernimmt diese Aufgabe. Anstatt nun eine Folge von Kontrollflags vorzugeben, erzeugen wir intern eine Folge von Adressen, die auf Speicherbereiche verweisen, in denen die Konfigurationen der ALU hinterlegt sind.
@startditaa
+------------------+
|c88F |
| Speicher |
| |
+-----------+------+
^ |
| |
+----------+ Adresse | | +-----+-----+
|cF88 +-----------+ | | A | B |
| | | Daten +-----+-----+
| | | --------->+cFF4 |
| Adress- | | Kontrolle | |
|berechnung| +-------------->+ ALU |
| | Status | |
| | <--------+ |
+----------+ +-----------+
@endditaa
Allerdings bleibt bei dieser Konfiguration unser Status auf der Strecke! Im Grund müssen wir die Information dazu aber Operationsspezifisch auswerten. Es genügt also nicht allein eine Adressberechung zu realsieren, vielmehr bedarf es einer generellen Steuerungskomponente, die die Ausführung von Befehlen initiiert und überwacht.
@startditaa
+------------------+
|c88F |
| Speicher |
| |
+---------+-+------+
^ |
| |
+----------+ Adresse | | +-----+-----+
|cF88 +-----------+ | | A | B |
| | | Daten +-----+-----+
| | Befehl | -------->+cFF4 |
| Steuer- |<------------+ | |
| werk | Kontrolle | ALU |
| +------------------------------>+ |
| | | |
| | Status | |
| +<------------------------------+ |
+----------+ +-----------+
@endditaa
Das Steuerwerk ist nun dafür verantwortlich:
- Adressen zu berechnen
- Befehle zu interpretieren
- die ALU über entsprechende Flags zu konfigurieren
- die Statusinformationen entsprechend dem aktuellen Befehl auszuwerten
Wir lösen uns von dem Zugriff auf die Kontrollbits und etablieren abstrakte Befehle.
Merke: Das Steuerwerk entkoppelt die Konfiguration einzelner Komponenten und die Befehlsdarstellung.
Zwischenstand
Stufe | Funktionalität | Wunschzettel |
---|---|---|
0 | Addition/Subtraktion von einzelnen Werten |
|
1 | Arithmetische Einheit mit mehren Funktionen und wählbarem Ergebnisregister |
|
2 | Sequenz von Berechnungsfolgen |
|
3 | Freie Definition von Operanden |
Wo kommen aber die Daten her? Bislang haben wir uns damit begnügt anzunehmen, dass diese auf "magische" Art und Weise in unseren Registern stehen.
@startditaa
+------------------+
|c88F |
| Speicher |
| |
+---------+-+------+
^ | ^
| | |
+----------+ Adresse | | | +-----+-----+
|cF88 +-----------+ | | | A | B |
| | | | Daten +-----+-----+
| | Befehl | +-------------->+cFF4 |
| Steuer- |<------------+ | |
| werk | Kontrolle | ALU |
| +------------------------------>+ |
| | | |
| | Status | |
| |<------------------------------+ |
+----------+ +-----------+
@endditaa
Im Speicher stehen nun nicht nur Befehle für die Ausführung unserer ALU-Funktionen, sondern auch die Daten für unsere Berechnungen. Auf diese verweisen wir mit separaten Befehlen.
Befehle | Codierung | Bedeutung |
---|---|---|
OR_A |
|
Logisches Oder |
.... | ||
LDA Adresse |
Laden der Daten von der Adresse X in das Register A | |
LDB Adresse |
Laden der Daten von der Adresse X in das Register B | |
STA Adresse |
Speichern der Daten aus Register A an der Adresse X | |
STB Adresse |
Speichern der Daten aus Register B an der Adresse X |
Damit nimmt der Aufwand im Steuerwerk nochmals signifikant zu! Neben dem Adressbus besteht nun ein Datenbus als weiterer Kommunikationspfad.
Schritt | Vorgang |
---|---|
0 | Lesen eines Befehls aus dem Speicher |
1 | Erkennen, dass es sich um ein LDA handelt - Eine Berechnung ist nicht erforderlich. |
2 | Verschieben des Adresszählers auf die nächste Speicherstelle |
3 | Aktivieren eines schreibenden Zugriffs auf das Register A der ALU |
4 | Umleiten der Inhalte aus dem Speicher an die ALU (anstatt an das Steuerwerk) |
Achtung: Offenbar haben wir jetzt 2 Kategorien von Befehlen!
ADD_A
oderOR_B
werden in einem Zyklus ausgeführt. DieLDA
oderSTB
Befehle brauchen ein Nachladen der zusätzlichen Parameter (hier Daten).
Zwischenstand
Stufe | Funktionalität | Wunschzettel |
---|---|---|
0 | Addition/Subtraktion von einzelnen Werten |
|
1 | Arithmetische Einheit mit mehren Funktionen und wählbarem Ergebnisregister |
|
2 | Sequenz von Berechnungsfolgen |
|
Darstellung von Programmen als Sequenzen abstrakter Befehle |
||
3 | Flexibler Zugriff auf Daten und Programme im Speicher |
|
Ein- und Ausgabe von Daten wäre schön |
Das Steuerwerk koordiniert neben der ALU die Ein- und Ausgabeschnittstelle.
@startditaa
+------------------+
|c88F |
| Speicher |
| |
+---------+-+------+
^ | ^
| | |
+----------+ Adresse | | | +-----+-----+
|cF88 +-----------+ | | | A | B |
| | | | Daten +-----+-----+
| | Befehl | +-------------->+cFF4 |
| Steuer- |<------------+ | |
| werk | Kontrolle | ALU |
| +------------------------------>+ |
| | | |
| | Status | |
| |<------------------------------+ |
| | | |
| | Kontrolle | |
| +-------------+ Daten | |
| | | +-------------->| |
| | Status | | | |
| |<----------+ | | | |
+----------+ | | | +-----------+
| | |
| V V
+-------+-----------+
|c8F8 |
| Ein/Ausgabe |
| |
+-------------------+
@endditaa
John von Neumann beschrieb 1945 in seinem Aufsatz ”First Draft of a Report on the EDVAC“ ein strukturelles Konzept, wonach Computerprogramme und die zu verarbeitenden Daten zusammen im gleichen Speicher abgelegt werden sollten. Link
Einige der Ideen des Konzepts wurden bereits von Konrad Zuse erkannt und teilweise in der Z1 und der Z3 realisiert.
@startditaa
^ |
| V
+-+----+ +----------------------------+
|c8F8 | |c88F Speicherwerk |
| |<-->| +--------+ +--------+ |
| | | |Programm| | Daten | |
| | | +--------+ +--------+ |
| | +------+---------------------+
| | ^ | ^
| E/A- | : | |
| Werk | | V V
| | +---+------+ +------------+
| | |cF88 | | Rechenwerk |
| | | | |cFF4 |
| | | |<-=-+ +--------+ |
| |<-=-+Steuerwerk| | |Register| |
| | | +-=->| +--------+ |
| | | | | | ALU | |
| | | | | +--------+ |
+------+ +----------+ +------------+
@endditaa
- Vergleichen Sie die von-Neumann-Architektur und die Harvard Architektur. Welche Vor- und Nachteile finden sich?
- Welche Schritte sind notwendig, um einen oder sehr viele neue(n) Befehl(e) zu integrieren? Woran müssen wir arbeiten?