Einchipmikrorechner und Signalprozessoren: Unterschied zwischen den Versionen
Omega (Diskussion | Beiträge) |
Omega (Diskussion | Beiträge) |
||
Zeile 375: | Zeile 375: | ||
===== Intersegment ===== | ===== Intersegment ===== | ||
+ | |||
+ | * nur absolut, direkt, unbedingt | ||
+ | |||
+ | JMP SEQ ''Label'', SOF ''Label'' | ||
+ | \___ __/ \___ __/ | ||
+ | \/ \/ | ||
+ | Segment Offset | ||
+ | \________ ________/ | ||
+ | \/ | ||
+ | ergibt die Speicheraddresse | ||
==== Unterprogrammbefehle ==== | ==== Unterprogrammbefehle ==== |
Version vom 26. Juli 2008, 21:03 Uhr
Einleitung
Einordnung
- Einchipmikrorechner (EMR, µC)
- Digitaler Signalprozessor (DSP)
Gemeinsamkeiten
- Einchip-Konzept: wesentliche Bauteile alle auf einem Chip (CPU, Speicher, IO, Taktgeber)
- minimierte (minimale) Außenbeschaltung: Abblockkondensator, Quarz
- autonomer Betrieb: Unbeaufsichtigter Betrieb, ohne (nur mit applikationsspezifischem) Bedienereingriff
- aufgabenspezifisch angepasst: "Nur soviel (Hardware) wie nötig"
- große Typenfamilien: viele Typen mit jeweils mehreren Ausführungen, Unterschiede in Speicher/Pins
- Crosswerkzeuge: Entwicklung auf PC, aber Code für Chips
- Software: muss sich nicht mehr verändern (ist in sich geschlossen)
Unterschiede
EMP | DSP | |
Leistung | niedrig bis mittel | mittel bis hoch |
Datenbreite | 4, 8, 16, 32 | 16, 32, 64 |
Speichergröße | ||
* intern | sehr wenig bis mittel | meist nur mittel |
* extern | wenig bis mittel | groß bis sehr groß |
Besondere Befehle | Bit-Befehle, Bit-Adressierung |
MAC (Multiplikation und Addition in einem Befehl), zirkuläre Adressierung, Saturation (Festkomma-Arithmetik) |
Typische Anwendungen | Steuergeräte in Industrie und Kraftfahrzeugtechnik, Haushaltselektronik, tragbare Geräte (MP3, Handy) |
digitale Filter/Regler, Bildverarbeitung und Mustererkennung, Messgeräte, Messtechnik, Audioeffektgeräte, Modems |
Bauteile
Rechnerkern
- RISC oder CISC
- Harvard oder von-Neumann (Princeton)
- viele Spezialregister (SFR)
- allg. Register häufig verbunden mit internem RAM
Speicher
<graphviz> digraph G { "Speicher" -> "intern"; "Speicher" -> "Speicherinterface";
"intern" -> "ROM"; "intern" -> "RAM";
"Speicherinterface" -> "Seriell"; "Speicherinterface" -> "Businterface"; "Speicherinterface" -> "\"glueless\"\n(Treiberlos)"; } </graphviz>
ROM
- Masken-ROM
- PROM/OTR
- EPROM
- EEPROM
- FLASH-EEPROM
- FRAM
- "Bontout"
- "ROM-less"
Ein- und Ausgabe
<graphviz> digraph G { "Ein- und Ausgabe" -> "digital, Standard"; "Ein- und Ausgabe" -> "analog"; "Ein- und Ausgabe" -> "speziell";
"digitale, Standart" -> "parallel"; "digitale, Standart" -> "seriell";
"seriell" -> "synchron"; "seriell" -> "asynchron";
node [shape=box]; "Kommunikation"; "Zähler/Zeitgeber"; "Geräte";
"speziell" -> "Kommunikation"; "speziell" -> "Zähler/Zeitgeber"; "speziell" -> "Geräte";
} </graphviz>
Sonstiges ("Hilfs"-baugruppen)
- Reset
- Takt
- Power-Management
- Interruptsystem
- DMA
- Watchdog
Typenbeispiele
(nicht prüfungsrelevant)
Mikrocontroller am Beispiel der C166 Familie
- 16bit Datenbreite
- CISC-Kern
- Intelähnlicher Befehlssatz
- von-Neumann-Architektur
- bis 30 Mhz Taktfrequenz
- Addresbreite 16bit/24/bit
- Mehrfachnutzung von Pins
Befehlssatz - Architektur
Allgemeiner Registersatz
- 16x16bit Register R0-R15
- Register R0-R7 lassen sich auch über H und L ansprechen
Spezialfunktionsregister (SFR)
- es existieren sehr viele Register
u.a. in:
- Prozessorkern
- Peripherieeinheiten
- Interruptsystem
- Chipsteuerung
- Adresseinheit
- ...
SFR im Prozessorkern
- PSW (Prozessor Status Word, "Flag-Register"); 16bit breit
- Beispiele für Flags:
- Statusflags:
- C: Carry (Übertrag)
- V: Overflow (Überlauf)
- Z: Zero
- N: Negativ
- ...
- Steuerflags:
- IEN: Interrupt Enable
- USRO: frei verfügbar
- SP (Stackpointer)
- STKUV (Stackunderflow)
- STKOV (Stackoverflow)
- SYSCON: Systemkonfiguration
- ...
Speichermodell
- von-Neumann: ein Adressraum
- interner ROM
- interne RAMs
- SFRs (reservierte Speicheradressen)
- allgemeine Register
- reservierte Bereiche
- Rest: externer Speicher
kleines Speichermodell
- nicht segmentiert
- logische 16 Bit-Adresse wird umgesetzt auf physikalische 16 Bit-Adresse
- Speicherraum: Byte = 64 KiByte
großes Speichermodell
- segmentiert
- logische 16 Bit-Adresse erhält zusätzliche Segmentbeschreibung (Länge variiert)
- wird ungeformt auf physikalische 24 Bit-Adresse
- Speicherraum: Byte = 16 MiByte
Vorteil:
- mehr Speicherplatz
- Segment = Grobpositionierung
- Änderung davon seltener (wird nicht bei jedem Zugriff geändert)
Segmentierter Datenzugriff
Segmentierter Programmzugriff
Adressraumstruktur
Allgemeine Register: Mapping in den Speicherraum
Befelssatz
Transportbefehle
- MOV Ziel , Quelle : Wort
- MOV B Ziel , Quelle : Byte
- MOV BZ Ziel , Quelle : Wort <- Byte (Null auffüllen)
- MOV BS Ziel , Quelle : Wort <- Byte (Vorzeichen auffüllen)
- MOV Register , Register
- MOV Register , Zahlenwert
- MOV Register , Speicher
- MOV Speicher , Register
- MOV Register , Index
- Zahlenwerte mit # kennzeichnen sonst Speicheradresse
- Variablenangabe statt Zahlenwert möglich
Stackbefehle
- PUSH Quelle -> Ziel = Stack
- Stackpointer geht 1 Speicherplatz nach unten und kopiert dann erst Inhalt aus Register in Stack
- POP Ziel -> Quelle = Stack
- Wert aus Stack wird gelesen und in Register geschrieben, dann geht Stackpointer 1 Speicherplatz nach oben
- Befehle gelten nur für 16 Bit Register
- LIFO-Prinzip beim Daten retten beachten
- Stack-Befehle müssen ausbalanciert sein (sonst Über-/Unterlauf)
Arithmetik/Logik
16 Bit Befehle | 8 Bit Befehle | Bemerkung | ||
ADD | ADD B | |||
ADD C | ADD C B | Wert des Carry-Flags mit addieren | ||
SUB | SUB B | |||
SUB C | SUB C B | Wert des Carry-Flags mit subtrahieren | ||
AND | AND B | bitweise | ||
OR | OR B | bitweise | ||
XOR | XOR B | bitweise | ||
CMP | CMP B | beeinflusst nur Flags | ||
NEG | NEG B | Vorzeichen-Wechsel (2er-Komplement) | ||
CPL | CPL B | Bitweise Negation (1er-Komplement) (1->0 , 0->1) |
Multiplikation/Division
- MD - separates 32 Bit Register für Multiplikation/Division
- MDH , MHL = SFR
- Vorzeichenbehaftet - MUL
- Vorzeichenlos - MUL U
- Operationen nur mit Registern möglich
- DIV / DIV U -> MDL:Op = MDL (Rest: MDH)
- DIV L / DIV L U -> MD:Op = MDL (Rest: MDH)
- MD-Register wieder frei räumen vor neuer Multiplikation/Division
Schieben/Rotieren
- nur für 16 bit Register
Links | Rechts | Bemerkungen | |
SHL Register, Zahlenwert | SHR Register, Zahlenwert | <graphviz>
digraph G { rankdir = LR; node [shape = record, width = 0.1, height = 0.1]; Null [label = "0"]; subgraph "cluster Register" { rankdir = LR; 15 -> "..." -> 0; } Carry [label = "CF"]; Null -> 15; 0 -> Carry; } </graphviz> | |
- | ASHR Register, Zahlenwert | <graphviz>
digraph G { rankdir = LR; node [shape = record, width = 0.1, height = 0.1]; subgraph "cluster Register" { rankdir = LR; 15 -> "..." -> 0; } Carry [label = "CF"]; 15 -> 15; 0 -> Carry; } </graphviz> || Vorzeichenbehaftete Division durch 2 | |
ROL Register, Zahlenwert | ROR Register, Zahlenwert | <graphviz>
digraph G { rankdir = LR; node [shape = record, width = 0.1, height = 0.1]; subgraph "cluster Register" { rankdir = LR; 15 -> "..." -> 0 [weight = 100]; } Carry [label = "CF"]; 0 -> 15; 0 -> Carry [weight = 0]; } </graphviz> |
Steuerfluss-Befehle
Sprungbefehle
Wir unterscheiden Intrasegment und Intersegment Sprünge
Nur der IP (Instruction Pointer) wird geändert beim:
- segmentierten Modell (Sprung im Segment)
- nicht segmentierten Modell
Sowohl der IP (Instruction Pointer) als auch der CSP (Code Segment Pointer) wird geändert beim:
- segmentierten Modell (Sprung zwischen Segmenten)
Intrasegment
Direkt | Indirekt | |
Absolut | JMPA | JMPI |
Relativ | JMPR | - |
JMPA Condition Code, Label JMPR Condition Code, Label JMP Condition Code, Label // Assembler entscheidet sich für absoluten oder relativen Sprung JMPI cc_UC, [R4] // IP = [R4]
Condition Code
cc_UC: unbedingt (immer!) cc_NC: not Carry cc_C : Carry cc_NZ: not Zero cc_Z : Zero cc_EQ: eqaul (entspricht cc_Z) cc_NE: not eqaul (entspricht cc_NZ) cc_V : Overflow cc_NV: not Overflow
Vergleiche: werden aud dem Flags: C, Z, V und N gebildet
Intersegment
- nur absolut, direkt, unbedingt
JMP SEQ Label, SOF Label \___ __/ \___ __/ \/ \/ Segment Offset \________ ________/ \/ ergibt die Speicheraddresse