Einchipmikrorechner und Signalprozessoren

Aus II-Wiki
Wechseln zu: Navigation, Suche

Für die Gemeinsamkeiten und Unterschiede von EµR und DSP gibt es eine Zusammenfassung.

Wer schon alles gelernt hat, kann sein Wissen mit Testfragen überprüfen.

Inhaltsverzeichnis

Einleitung

Einordnung

  • Einchipmikrorechner (EMR, µC)
  • Digitaler Signalprozessor (DSP)

Gemeinsamkeiten

  • Einchip-Konzept: wesentliche Bauteile alle auf einem Chip (CPU, Speicher, I/O, Taktgeber)
  • minimierte (minimale) Außenbeschaltung: Abblockkondensator, Quarz
  • autonomer Betrieb: Unbeaufsichtigter Betrieb, ohne (bzw. 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 Spezial(funktions)register (SFR)
  • allg. Register häufig verbunden mit internem RAM

Speicher

Dies ist eine Grafik mit Rahmen und Knoten, die Hyperlinks enthalten könnten.

ROM

  • Masken-ROM
  • PROM/OTR
  • EPROM
  • EEPROM
  • FLASH-EEPROM
  • FRAM
  • "Bondout"
  • "ROM-less"

Ein- und Ausgabe

Dies ist eine Grafik mit Rahmen und Knoten, die Hyperlinks enthalten könnten.

Sonstiges ("Hilfs"-baugruppen)

  • Reset
  • Takt
  • Powermanagement
  • Interruptsystem
  • DMA
  • Watchdog

Typenbeispiele

(nicht prüfungsrelevant)

Mikrocontroller am Beispiel der C166 Familie

  • von Siemens, später Infineon
  • 16bit Datenbreite
  • CISC-Kern (eigentlich RISC, hat aber einige Erweiterungen)
  • Intelähnlicher Befehlssatz
  • von-Neumann-Architektur
  • typischerweise bis 30 Mhz Taktfrequenz
  • Adressbreite 16bit (mit Segmentierung 24bit)
  • Mehrfachnutzung von Pins

Befehlssatzarchitektur

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 (processor status word, "Flagregister"), 16bit breit
Beispiele für Flags:
Statusflags:
  • C: Carry (Übertrag)
  • V: Overflow (Überlauf)
  • Z: Zero
  • N: Negative
  • ...
Steuerflags:
  • IEN: Interrupt Enable
  • USR0: frei verfügbar
  • SP (Stackpointer)
  • STKUV (Stackunderflow, untere Adressgrenze)
  • STKOV (Stackoverflow, obere Adressgrenze)
  • SYSCON: Systemkonfiguration
  • ...

Speichermodell

  • von-Neumann: ein Adressraum
  • interner ROM
  • interne RAMs
  • SFRs (reservierte Speicheradressen)
  • allgemeine Register (lassen sich im Speicherbereich verschieben -> Kontextwechsel sehr schnell möglich)
  • reservierte Bereiche
  • Rest: verwendbar für externen Speicher

kleines Speichermodell

  • nicht segmentiert
  • logische 16 Bit-Adresse wird umgesetzt auf physikalische 16 Bit-Adresse
  • Speicherraum: '"`UNIQ--postMath-00000001-QINU`"' 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: '"`UNIQ--postMath-00000002-QINU`"' Byte = 16 MiByte

Vorteil:

  • mehr Speicherplatz
  • Segment = Grobpositionierung
  • Änderung davon seltener (wird nicht bei jedem Zugriff geändert)
Segmentierter Datenzugriff

Segemntierter Datenzugriff.jpg

Segmentierter Programmzugriff

Segmentierter Programmzugriff.jpg

Adressraumstruktur
  • 000000H - 00FFFFH -> 64KiByte des nichtsegmentierten Bereichs
  • Datenseite jeweils 16 KiByte groß (10bit Data Page Pointer [SFR])
  • Codeseite jeweils 64 KiByte groß (8bit Code Segement Pointer [SFR])
Allgemeine Register: Mapping in den Speicherraum
  • 32 Byte allgemeine Register
  • können im Speicherbereich verschoben werden
  • CP (context pointer, 10bit) zeigt auf erstes Register (R0)
  • ermöglicht sehr einfachen Kontextwechsl ohne Umkopieren durch Verschieben des Registerbereichs
  • schnell, grade für Echtzeitanwendungen; z.B. bei Interruptbehandlung


Befehlssatz

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)

ermöglichen arithmetisch korrekte Expansion von 8 auf 16bit

  • MOV Register , Register
  • MOV Register , #Zahlenwert // Konstante
  • MOV Register , Zahlenwert // direkt
  • MOV Register , [Register] // indirekt
  • MOV [Register] , Register
  • MOV Register , [Register+#Index]
  • MOV Register , [Register+] // postdekrement um 2
  • MOV [+Register] , Register // preinkrement um 2
  • MOV [Register] , [Register] // nicht universell!
  • Zahlenwerte mit # kennzeichnen sonst Speicheradresse
  • Variablenangabe statt Zahlenwert für Adresse möglich

Stackbefehle

  • PUSH Quelle -> Ziel = Stack
  • Stackpointer geht 1 Speicherplatz nach unten (SP = SP - 2) 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 (SP = SP + 2)
  • Befehle gelten nur für 16 Bit Register
  • LIFO-Prinzip beim Daten retten beachten
  • Stack-Befehle müssen ausbalanciert sein (sonst Über-/Unterlauf)
  • Stackgrenzen können festgelegt werden
  • wenn der Stack über- oder unterläuft wird an eine Handleradresse gesprungen (Interrupt)

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 (16bit) : Op (16bit) = MDL (16bit) Rest: MDH (16bit)
  • DIV L / DIV L U -> MD (32bit) : Op (16bit) = MDL (16bit) Rest: MDH (16bit) -> arithm. Überlauf möglich


  • 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
Dies ist eine Grafik mit Rahmen und Knoten, die Hyperlinks enthalten könnten.
- ASHR Register, Zahlenwert Die Grafikbildquelle wurde geändert. Lade die Seite erneut, um das aktualisierte Grafikbild anzuzeigen. Vorzeichenbehaftete Division durch 2
ROL Register, Zahlenwert ROR Register, Zahlenwert
Dies ist eine Grafik mit Rahmen und Knoten, die Hyperlinks enthalten könnten.

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: unconditional (unbedingt, immer!)
 cc_NC: not carry
 cc_C : carry
 cc_NZ: not zero
 cc_Z : zero
 cc_EQ: eqal (entspricht cc_Z)
 cc_NE: not eqal (entspricht cc_NZ)
 cc_V : overflow
 cc_NV: not overflow
 cc_SLT: signed less than
 cc_UGE: unsigned greater eqals

Vergleiche: '"`UNIQ--postMath-00000003-QINU`"' werden aud dem Flags: C, Z, V und N gebildet

Intersegment
  • nur absolut, direkt, unbedingt
 JMP SEG Label, SOF Label
     \___  __/  \___  __/
         \/         \/
       Segment    Offset
        (CSP)      (IP)
     \________  ________/
              \/
ergibt die 24bit-Speicheraddresse

Unterprogrammbefehle

Intrasegment
 CALLA Condition Code, Label // IP -> Stack
 CALLR Condition Code, Label // IP -> Stack
 CALL  Condition Code, Label // IP -> Stack, wird vom Assembler auf CALLA bzw. CALLR umgesetzt
 CALLI Condition Code, Label // IP -> Stack
 
 RET // Stack -> IP
Intersegment
 CALLS Condition Code, Label // IP und CSP -> Stack
 
 RETS // Stack -> IP und CSP

Die Verwendung von RET bzw. RETS entscheidet darüber, ob eine Funktion aus einem anderem Segment erreichbar ist.

Bit-Befehle

  • Bitaddressierbare Bereiche:
    • 3x256 Byte im internen RAM
    • 1x256 Byte SFR
    • macht 1024x8 bit = 8 KiBit = Bitaddressierung
    • 13bit Zellenadresse + 3bit Bitadresse = 16bit
    • wenn Offset > 8, dann Adresse der nächsten Zelle + Offset MOD 8 als Offset

Beispiele für Bitadressen:

 0FF10H.1 // (0-7) oder (0-15) mgl. \
 PSW.1    //                         > sind alle äquivalent
 C        //                        /
 BMOV  Zielbitadresse, Quellbitadresse
 BMOVN Zielbitadresse, Quellbitadresse
 
 BAND Zielbitadresse, Quellbitadresse
 BOR  Zielbitadresse, Quellbitadresse
 BXOR Zielbitadresse, Quellbitadresse
 
 BCMP Zielbitadresse, Quellbitadresse
 
 BCLR Bitadresse
 BSET Bitadresse
  • Bedingte Sprünge mit Bits nur intrasegment, direkt
 JB   Bitadresse, Label // Bit gesetzt
 JNB  Bitadresse, Label // Bit nicht gesetzt

"Test & Set" Befehle (atomar, für Parallelprogrammierung):

 JBC  Bitadresse, Label | Bit gesetzt, zurücksetzen (CLEAR)
 JNBS Bitadresse, Label | Bit nicht gesetzt, setzen (SET)

Sonstige Befehle

<source lang=asm> NOP  ; No Operation SRST  ; Softwarereset PWRDW ; Schlafzustand aktivieren EINIT ; Ende der Initalisierung

     ; Privelegierte Einstellungen können nicht mehr
     ; verändert werden (wie z.B. Stackgrenzen)

</source>

SW-Entwicklung

Cross-Tools: (z.B. Programmierung auf PC für nicht PC-Zielsystem)

Tool-Chain: (Werkzeugkette)

IDE: (Integrated Development Enviroment)

Die Grafikbildquelle wurde geändert. Lade die Seite erneut, um das aktualisierte Grafikbild anzuzeigen.

Details zur internen Peripherie

Binärports (parallele digitale EA)

Datenregister: P2

Richtingsregister: DP2 (0 = input; 1 = output)

<source lang=asm> MOV DP2, #1FH ; #001FH = 0000000000011111

             ; freie Eingänge auf 0 -> weniger Stromverbrauch

</source> Output <source lang=asm> BCLR P2.3  ; PS = ************0*** BSET P2.3  ; PS = ************1*** </source> Input <source lang=asm> JB P2.7, m3  ; PS = ********?******* Test auf 1 JNB P2.7, m3  ; PS = ********?******* Test auf 0 </source>

Zähler/Zeitgeber ("Timer") T6

[Bild des T6 Timers]

Interrupt-System

[...]

Dies ist eine Grafik mit Rahmen und Knoten, die Hyperlinks enthalten könnten.

// TODO: Bild ist noch nicht ganz vollständig

Arten von Interrupts

  • HW-Interrupts, maskierbar:
    • "intern" von Elementen auf dem Chip
    • "extern" jeder Pin als Interrupt
  • NMI (nicht maskierbarer Interrupt)
    nicht abschaltbar
    für wichtige, dringende Sachen
  • SW-Interrupts
    Systemauf(ruf?) bei BS
    Beispiel: TRAP #25H
  • Interne Ausnahmen: unbekanter OPKode, Div 0, etc.

Interrupttabelle

SFR für HW-Interrupts

DSP am Beispiel der Familie C6000 (Ti)

Beispiele zum Befehlssatz

weitere Arithmetik/Logik

Konvertierung

Vergleiche und Bedingungen

Transportbefehle

Adressierung

Stack

Warteplätze

Sprungbefehle

Beispiele

SW-Entwicklung

Hilfsmittel auf höherer Ebene

DMA-Einheit

Datensatz eines DMA-Auftrages

DMA-Beispiel 1: Ausgabe eines Blocks

DMA-Beispiel 2: Block-Kopieren mit Spiegelung der Byte-Reihenfolge

Typische Systeme mit C6000