You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Sonstige: SHIFT LEFT (arithmetisch, logisch), SHIFT RIGHT (arithmetisch, logisch)
125
125
126
126
```text @plantUML.png
127
-
@startuml
128
-
ditaa
127
+
@startditaa
129
128
Daten Daten
130
129
| |
131
130
| |
@@ -175,7 +174,7 @@ ditaa
175
174
| +---------------------+ | --+---+--+
176
175
| | | Status
177
176
+-------------------------+ v S
178
-
@enduml
177
+
@endditaa
179
178
```
180
179
181
180
Der Status S umfasst eine Zusammenstellung der Resultate der Operationen codiert als 1-Bit Werte:
@@ -220,8 +219,7 @@ Zwischenstand
220
219
Für diesen Schritt fassen wir das obige Schaltbild unserer hypothetischen ALU mit 8 Funktionen in einem abstrakteren Schaubild zusammen.
221
220
222
221
```text @plantUML.png
223
-
@startuml
224
-
ditaa
222
+
@startditaa
225
223
+-----+-----+
226
224
| A | B |
227
225
Daten +-----+-----+
@@ -233,7 +231,7 @@ ditaa
233
231
Status | |
234
232
<----------+ |
235
233
+-----------+
236
-
@enduml
234
+
@endditaa
237
235
```
238
236
239
237
@@ -255,8 +253,7 @@ Der Speicher umfasst unsere Programmbestandteile `AND_B` usw. in jeweils einem 4
255
253
Analog zur Diskussion um die abstraktere Darstellung der ALU fassen wir auch den Speicher in einem Block-Symbol zusammen.
256
254
257
255
```text @plantUML.png
258
-
@startuml
259
-
ditaa
256
+
@startditaa
260
257
+------------------+
261
258
|c88F |
262
259
| Speicher |
@@ -273,7 +270,7 @@ ditaa
273
270
Status | |
274
271
<--------+ |
275
272
+-----------+
276
-
@enduml
273
+
@endditaa
277
274
```
278
275
279
276
@@ -282,8 +279,7 @@ Wie allerdings setzen wir den Fortschritt im Programm um? Nach welcher Methodik
282
279
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.
283
280
284
281
```text @plantUML.png
285
-
@startuml
286
-
ditaa
282
+
@startditaa
287
283
+------------------+
288
284
|c88F |
289
285
| Speicher |
@@ -300,14 +296,13 @@ ditaa
300
296
| | Status | |
301
297
| | <--------+ |
302
298
+----------+ +-----------+
303
-
@enduml
299
+
@endditaa
304
300
```
305
301
306
302
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.
307
303
308
304
```text @plantUML.png
309
-
@startuml
310
-
ditaa
305
+
@startditaa
311
306
+------------------+
312
307
|c88F |
313
308
| Speicher |
@@ -326,7 +321,7 @@ ditaa
326
321
| | Status | |
327
322
| +<------------------------------+ |
328
323
+----------+ +-----------+
329
-
@enduml
324
+
@endditaa
330
325
```
331
326
332
327
Das Steuerwerk ist nun dafür verantwortlich:
@@ -354,8 +349,7 @@ Zwischenstand
354
349
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.
355
350
356
351
```text @plantUML.png
357
-
@startuml
358
-
ditaa
352
+
@startditaa
359
353
+------------------+
360
354
|c88F |
361
355
| Speicher |
@@ -374,7 +368,7 @@ ditaa
374
368
| | Status | |
375
369
| |<------------------------------+ |
376
370
+----------+ +-----------+
377
-
@enduml
371
+
@endditaa
378
372
```
379
373
380
374
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.
@@ -418,8 +412,7 @@ Zwischenstand
418
412
Das Steuerwerk koordiniert neben der ALU die Ein- und Ausgabeschnittstelle.
419
413
420
414
```text @plantUML.png
421
-
@startuml
422
-
ditaa
415
+
@startditaa
423
416
+------------------+
424
417
|c88F |
425
418
| Speicher |
@@ -451,7 +444,7 @@ ditaa
451
444
| Ein/Ausgabe |
452
445
| |
453
446
+-------------------+
454
-
@enduml
447
+
@endditaa
455
448
```
456
449
457
450
## 1945: Von-Neumann Architektur
@@ -461,8 +454,7 @@ John von Neumann beschrieb 1945 in seinem Aufsatz ”First Draft of a Report on
461
454
Einige der Ideen des Konzepts wurden bereits von Konrad Zuse erkannt und teilweise in der Z1 und der Z3 realisiert.
Der Prozessor ist die Einheit eines Rechners, die Daten nach einem vom Anwender spezifizierten Programm manipuliert. Das Programm wird als eine Folge von Anweisungen oder Befehlen für die CPU formuliert. Die CPU besteht daher:
@@ -183,25 +182,23 @@ Nun muss die Aufteilung ein Befehlswort in ein Feld für den Operationscode und
183
182
Befehlsformat:
184
183
185
184
```text @plantUML.png
186
-
@startuml
187
-
ditaa
185
+
@startditaa
188
186
15 12 11 0
189
187
+------------+-------------------------------+
190
188
|c00F OPCODE | cFF0 Operantenaddresse |
191
189
+------------+-------------------------------+
192
-
@enduml
190
+
@endditaa
193
191
```
194
192
195
193
Datenformat:
196
194
197
195
```text @plantUML.png
198
-
@startuml
199
-
ditaa
196
+
@startditaa
200
197
15 0
201
198
+--------------------------------------------+
202
199
| cFF0 Datensatz |
203
200
+--------------------------------------------+
204
-
@enduml
201
+
@endditaa
205
202
```
206
203
207
204
Negative Zahlen werden im Zweierkomplement dargestellt.
In einem Speicherzyklus muss der Prozessor zunächst eine Adresse liefern, die während des gesamten Speicherzyklus anliegen muss. Für einen Schreibzyklus betrifft dies auch das entsprechend abzulegende Datum. Bei einem Lesezyklus steht das gewünschte Wort erst mit einer gewissen Verzögerung an der Schnittstelle zur Verfügung. Da der Speicher sowohl zum Schreiben als auch zum Auslesen eines Wortes länger braucht als die Zeit, in der der Prozessor eine elementare Operation ausführen kann, sind zwei Pufferregister vorgesehen:
339
335
340
-
1. Das Speicher-Adress-Register (MAR : Memory Address Register), in das die Adresse zu Beginn des Speicherzyklus geschrieben wird. In unserem Fall ist das MAR 16 Bit breit.
336
+
1. Das Speicher-Adress-Register (MAR : Memory Address Register), in das die Adresse zu Beginn des Speicherzyklus geschrieben wird. In unserem Fall ist das MAR 12 Bit breit.
341
337
342
-
2. Das Speicher-Puffer-Register (MBR : Memory Buffer Register). Bei einer Schreiboperation legt der Prozessor ein Datenwort hier ab, so dass es durch den (langsamen) Schreibvorgang im Speicher unter der Adresse abgespeichert wird, die im MAR spezifiziert ist. Beim Lesen stößt der Prozessor den Lesevorgang an und kann später das adressierte Wort aus dem MBR auslesen. Die Adresse ist bei uns 11Bit breit. Wir können also 2^11 Adressen ansprechen, die jeweils 16 Bit Daten repräsentieren.
338
+
2. Das Speicher-Puffer-Register (MBR : Memory Buffer Register). Bei einer Schreiboperation legt der Prozessor ein Datenwort hier ab, so dass es durch den (langsamen) Schreibvorgang im Speicher unter der Adresse abgespeichert wird, die im MAR spezifiziert ist. Beim Lesen stößt der Prozessor den Lesevorgang an und kann später das adressierte Wort aus dem MBR auslesen. Die Adresse ist bei uns 12 Bit breit. Wir können also 2^12 Adressen ansprechen, die jeweils 16 Bit Daten repräsentieren.
343
339
344
340
Durch MBR und MAR sind Prozessor und Speicher bezüglich ihrer Zykluszeiten weitgehend entkoppelt.
345
341
@@ -354,8 +350,7 @@ Der Datenpfad besteht aus der ALU, dem allgemeinen Register A (Akkumulator), ein
354
350
Sie setzen voraus, daß der eine Operand in A steht, der zweite Operand muss aus dem Speicher von Adresse `addr` gelesen wird. Dabei gehen wir davon aus, dass der Operand im MBR zur Verfügung steht. Da die ALU rein kombinatorisch aufgebaut werden soll, müssen beide Operanden während der Verarbeitungszeit an den Eingängen anliegen. Das Ergebnis der Operation wird in A verfügbar gemacht. Damit das Ergebnis der Operation nicht einen der Operanden in A überschreibt, ist das Hilfsregister Z vorgesehen. Während der Befehlsausführung wird der Operand aus A nach Z transferiert, damit das Ergebnis in A gespeichert werden kann.
355
351
356
352
```text @plantUML.png
357
-
@startuml
358
-
ditaa
353
+
@startditaa
359
354
-----+ +---------------------------------+
360
355
| | Datenpfadbezogene Komponenten |
361
356
| | c88F |
@@ -380,7 +375,7 @@ ditaa
380
375
|
381
376
382
377
-----+
383
-
@enduml
378
+
@endditaa
384
379
```
385
380
386
381
[Link auf den Simulator](https://tubaf-ifi-liascript.github.io/VL_EingebetteteSysteme/programs/rechenwerk/index.html)
@@ -396,8 +391,7 @@ Die Kontrolleinheit besteht aus:
396
391
5. dem Automaten, der die der sequentiellen Kontrolle realisiert.
Der Prozessor liest eine neue Instruktution aus dem MBR in das Instruction Register. Die Control Unit interpretiert den Operationscode und startet die Ausführung, währenddessen wird der Programmzähler bereits auf die Adresse der Instruktion gesetzt, die als nächste ausgeführt werden soll. Über den Programmzähler wird also die Sequenzierung der Instruktionen bei der Abarbeitung eines Programms gesteuert. Das State FF übernimmt die unterschiedliche Abarbeitung von Befehlen, die in einem Zyklus und zwei Zyklen umgesetzt werden können (HLT vs ADD).
@@ -429,8 +423,7 @@ Der Prozessor liest eine neue Instruktution aus dem MBR in das Instruction Regis
1. Der Akkumulator (`Register A`). In dem Modellrechner ist der Akkumulator das einzige allgemeine Register. Alle arithmetischen und logischen Befehle arbeiten auf diesem Register.
Die Kontrolleinheit benötigt einen Trigger für die Abarbeitung der Instruktionen. Grundlage für den Zeitablauf einer Maschinenoperation ist der Speicherzyklus und der Prozessortakt. Im Modellrechner wird der Ablauf in Phasen zu 8 Taktintervalle unterteilt. In jedem dieser Taktintervalle kann eine Instruktion vollständig oder zur Hälfte ausgeführt werden.
660
652
661
653
```text @plantUML.png
662
-
@startuml
663
-
ditaa
654
+
@startditaa
664
655
Dauer einer Phase Fetch/Execute
665
656
RUN/HLT 3 Bit |<-------------->|
666
657
| Zähler +---+
@@ -690,7 +681,7 @@ Oscillator |---| | |
690
681
| |
691
682
+---+
692
683
3 zu 8 Decoder
693
-
@enduml
684
+
@endditaa
694
685
```
695
686
696
687
### Integrierung der Taktvorgabe in Steuerwerk
@@ -703,8 +694,7 @@ Die folgende Abbildung gibt die Kontrolleinheit im schematische Aufbau wieder.
703
694
4. das kombinatorische Schaltnetz zu Erzeugung der Steuersignale.
Das Mikroprogrammwortes umfasst alle Steuersignale für Register, ALU, Speicher, usw., die jeweils durch ein Bit in der repräsentiert sind. Eine Steuerleitung wird aktiviert, wenn dieses Bit auf "1" gesetzt ist. Wird das Bit auf "0" gesetzt, wird die Steuerleitung deaktiviert. Der erste Teil des Mikroprogrammwortes wird entsprechend als Steuerwort bezeichnet.
899
887
900
888
```text @plantUML.png
901
-
@startuml
902
-
ditaa
889
+
@startditaa
903
890
Instruction Register
904
891
+---------+-------------------+
905
892
A_15 | OPCODE | |
@@ -933,7 +920,7 @@ ditaa
933
920
| Read | Write | | on Bus | off Bus | | | | | | | |
Das Mikroprogrammwort enthält außer dem Steuerteil noch den Adressteil. Der Adressteil eines Mikroprogrammwortes enthält direkt die Adresse des nächsten Mikroprogrammwortes. Allerdings muss der Modellrechner auch auf Statusinformation der ALU und auf den Inhalt des OPCODE-Feldes des IR reagieren, so dass der Ablauf des Mikroprogramms nicht immer gleich ist.
0 commit comments