X ­čÜž Wiederholung, Zusammenfassung

X.1 STM32-Register

Fragen

  1. Woraus besteht ein Register?
  2. (Wie funktioniert der Stack und wof├╝r ist er n├╝tzlich? Welche Aufgabe hat der SP (R13) dabei?)
  3. Wof├╝r ist das LR (R14) n├╝tzlich?
  4. Was passiert beim bx lr Befehl?
  5. Wof├╝r dient der PC (R15)?
  6. Um welchen Wert wird der PC nach einem 16 Bit Befehl erh├Âht?
  7. Wie ver├Ąndert sich der Wert vom PC wenn ein Sprungbefehl einen Sprung ausgef├╝hrt?
  8. Warum werden die GPIO-Register oft Indirekt mit Offset adressiert?
L├Âsungen
  1. Aus Taktflanken gesteuerten D-FF
  2. Der Stack ist ein Stapelspeicherbereich mit dem mit Push und Pop Befehlen Daten aus Registern abgelegt und wieder geholt werden k├Ânnen. Der Stack Pointer (SP) verweist auf die n├Ąchste freie Adresse dieses Bereichs im SRAM ┬źBehauptung f├╝r STM32 ├ťberpr├╝fen!┬╗
  3. Das Link Register kann f├╝r einfache Unterprogramm-Aufrufe als Speicher f├╝r die R├╝cksprungadresse verwendet werden.
  4. Der Befehl verzweigt zu der Adresse, die im LR gespeichert ist. Wird als Return-Befehl bei einfachen UP verwendet.
  5. In R15 (PC) dem Programm Counter steht die Speicher-Adresse des n├Ąchsten zu bearbeitenden Befehls.
  6. Beim STM32 ist der Adressraum Byteweise organisiert. Damit hat ein 16Bit-Befehl zwei Byte und der PC wird um 2 erh├Âht.
  7. Bei einem Sprungbefehl wird bei einem Sprung die Speicher-Adresse des angesprungenen Befehls in den Programm-Counter (PC) geschrieben. Bei einem relativen Sprung wird die Adresse des Sprungbefehls im PC mit der Konstanten im Sprung-Befehl addiert und daraus die Sprung-Adresse errechnet, spart Befehlsspeicher: Statt spring wenn Z=0 zu 0x08000010 wird spring 6 Adressen zur├╝ck.
  8. Eine direkte Adressierung w├╝rde jedesmal 32+16 Bit Befehlsgr├Âsse erfordern. Bei der Indirekten Adressierung werden die Basis-Adressen der Peripherie in Register gespeichert und dann mit kompakten Befehlen mittels indirekter ├╝ber Register Adressierung die Werte in die Peripherieadressen geschrieben.

X.2 Mikrocontroller Architektur

Hinweis: Division braucht bis zu 12 Takte

Fragen

  1. Worin unterscheidet sich Flash-ROM von RAM?
  2. K├Ânnen bei STM32 ┬ÁC Programme aus dem RAM-Speicher ausgef├╝hrt werden und warum ist das un├╝blich?
  3. Nennen Sie 2 Funktionseinheiten der OnChip Peripherie.
  4. Wie viele Adressen k├Ânnen bei unserem Controller adressiert werden?
  5. Worin besteht der “Flaschenhals” bei der Befehlsverarbeitung und wie wurde bei unserem STM32 Controller entsch├Ąrft?
L├Âsungen
  1. ROM (Read Only Memory) ist nichtfl├╝chtiger, persistenter Speicher, der auch ohne Spannungsversorgung seine Information beh├Ąlt. RAM (Random Access Memory) ist fl├╝chtiger Speicher, der ohne Spannung seine Daten verliert.
  2. Mikrocontroller laden normalerweise ihr Programm nicht aus externen Speichern sondern haben es auf dem Chip gespeichert, daher wird es aus dem On Chip ROM Speicher ausgef├╝hrt. Bei STM32 gibt es die M├Âglichkeit auch aus dem RAM-Speicher Programm-Code ausf├╝hren zu lassen. Nur wo soll dieser her kommen?
  3. GPIO-Peripherie, Ext. Interrupts, Timer, USART-Schnittstellen, I2C-Schnittstellen, SPI-Schnittstellen..
  4. 32Bit-Adressbus -> 232 Adressen = 4 Gi Adressen
  5. Bei der Befehlsverarbeitung w├╝rde das Laden von Befehlen und Zugriff auf Daten bei nur einem Speicherbus mehrere Buszyklen und dadurch mehrere Takte ben├Âtigen, dies ist der Flaschenhals, die Zugriffszeiten auf den Speicher verlangsamen die Verarbeitung. Bei unserem STM32 Controller sind zwei Speicherbussysteme vorhanden ein System f├╝r Befehlszugriff und ein System f├╝r Daten, IO Zugriff, dadurch werden Zugriffe auf den Speicher parallelisiert und Buszyklen gespart.

Zus├Ątzliche Beispielaufgaben Rechnerarchitektur

Nebenstehender STM32 VisUAL Assembler-Code ist gegeben (Marken werden in VisUAL ohne : am Ende definiert):

  1. Beschreiben Sie, wie ein Maschinenbefehl aus dem Codespeicher in das Leitwerk gelangt. Gehen Sie in Ihrer Antwort auf folgende Begriffe ein:
    • Programmcounter (PC)
    • Adressbus
    • Codespeicher
    • Datenbus
    • Instruction-Register (IR)
  2. Unser STM32 (AVR: ATmega328P) hat einen RISC Befehlssatz.
    1. Wo f├╝r steht die Abk├╝rzung RISC?
    2. Nennen Sie die Alternative und die Abk├╝rzung dazu.
    3. Welche Vor- und Nachteile hat RISC gegen├╝ber der Alternative?
    4. Warum wurde RISC eingef├╝hrt?
  3. Der Befehl subs R1,R1,#1 verwendet eine besondere Einheit des Prozessors.
    1. Wie nennt man diese Einheit und wie lautet die Abk├╝rzung daf├╝r.
    2. Nennen Sie 4 weitere typische Operationen dieser Einheit.
    3. Welche Bedeutung hat das “s” am Ende des Befehls, welche weiteren “Nebenergebnisse” werden dabei erzeugt (nennen Sie 3 und die Bedeutung) und wo werden diese Ergebnisse gespeichert?
  4. Der Befehl bne bla ist ein bedingter Befehl (Branch). Bei welchem Umstand verzweigt er zur Marke bla und was hat das mit dem PC zu tun?
  5. Welchen Wert hat R1 am Ende des Programms?
  6. Die Befehle mov und subs ben├Âtigen 1 Takt, der Befehl bne 1 Takt wenn er nicht verzweigt und 3 Takte beim Sprung.
    1. Wie viele Takte ben├Âtigt das Programm bis zur Marke blub (Herleitung)?
    2. Wie lange dauert die Ausf├╝hrung bei einem Takt von 32MHz?
  7. Unser STM32 (AVR: ATmega328P) hat eine Befehls-Pipeline.
    1. Wie viele Stufen hat diese Pipeline und wie werden die korrespondieren Befehlsphasen benannt?
    2. Hardcore: Zeigen Sie die Verarbeitung des Assembler-Code f├╝r die ersten 6 Takte!
  8. Unser STM32 (AVR: ATmega328P) ist nach der Harvard-Architektur konstruiert.
    1. Worin besteht die Besonderheit dieses Ansatzes?
    2. Welche alternative Architektur gibt es und worin besteht der Unterschied?
    3. Warum ist die Harvard-Architektur bei ┬ÁC verbreitet und welchen Vorteil bietet sie?
    4. Welche zus├Ątzliche Baugruppe wird bei der alternativen Architektur eingesetzt um den gleichen Effekt zu erzielen?
  9. Wof├╝r steht die Abk├╝rzung ARM?
start       
       mov     R1,#5
bla    
       subs    R1,R1,#1
       bne     bla
blub   
       mov     R2,#1
       mov     R3,#2 
       end
L├Âsungen (Ein wenig weitschweifender zum tieferen Verst├Ąndnis)
  1. Im PC steht die Adresse des Befehls, diese wird auf den Adressbus gelegt, der Codespeicher gibt den Befehl ├╝ber den Datenbus in das Leitwerk, dort wird er im IR gespeichert.
    1. RISC -> Reduced Instruction Set Computer
    2. Alternative CISC -> Complex Instruction Set Computer
    3. Vorteil RISC: Befehle einfacher und m├Âglichst gleich lang (Bytes pro Befehl), dadurch besser f├╝r Pipelining geeignet -> weniger Stufen notwendig.
      Nachteil RISC: Teilweise mehr Befehle f├╝r Aktion notwendig, mehr Code-Speicher f├╝r selben Effekt notwendig.
    4. RISC wurde in Hinblick auf effizienteres Pipelining eingef├╝hrt. Weniger “Strafe” bei Spr├╝ngen: Kurze Befehle -> kurze Pipeline -> weniger Wegwerfen bei Sprung.
    1. Arithmetic Logic Unit (ALU)
    2. add, sub, and, or, xor, Einer-Komplement, Zweier-Komplement, mul, div
    3. Durch das S werden beim STM32 neben den Ergebnissen der Operation auch die Nebenergebnisse (z.B N,Z,C) im Prozess Status Register (PSR) gespeichert.
      N ist das Negative-Flag und bedeutet bei vorzeichenbehafteter Betrachtung ein negatives Ergebnis. Es ist Bit 31 (MSB) des Ergebnisses.
      Z ist das Zero-Flag, wenn das Ergebnis null ist, wird es gesetzt. Es ist !Oder ├╝ber alle Bits, also 1 gdw. alle Bits 0 sind.
      C ist das Carry-Flag, wird z.B. bei einer Addition gesetzt wenn das Ergebnis gr├Â├čer als die gr├Â├čte Ausgabe-Zahl der ALU ist. Z.B. bei 8Bit ALU 128+128 gibt 256 also C-Flag gesetzt und als Ergebnis 0.
  2. Wenn das Z-Flag im PSR 0 ist also der betreffende Wert nicht 0 war wird zur Marke bla verzweigt, dh. der PC wird mit der Adresse des Befehls an der Marke geladen. Spr├╝nge sind zur Platzersparnis oft relativ zum derzeitigen PC, daher steht im bne-Befehl nicht die Adresse des Befehls an der Marke sondern die Entfernung dazu.
  3. Null
    1. mov 1T; R1 = 5..2: subs, bne 4T * 4 = 16T; R1 = 1: subs, bne 2T; 1+16+2 = 19 Takte
    2. 1/32 MHz = 31,25 ns; 19*31,25 ns = 593,75 ns
    1. 3 Stufen: Instruction Fetch, Instruction Decode, Instruction Execute
    2. siehe Unten
  4. Harvard-Architektur
    1. F├╝r die Befehle und die Daten, IO stehen getrennte Speicherbusse zur Verf├╝gung. Laden des Befehls und Bearbeiten der Daten geschieht ├╝ber getrennte Busse, kann also gleichzeitig erfolgen.
    2. Von Neumann Architektur: Auf Befehle und Daten, IO wird ├╝ber den selben Speicherbus zugegriffen. Problem: F├╝r einen Befehl, der auch auf Daten aus dem Speicher zugreift sind mehrere Buszyklen notwendig: Den Befehl ├╝ber den selben Bus vom Speicher laden wie die ggfs. damit verbundenen Datenzugriffe.
    3. Typischerweise liegt bei einem ┬ÁC das Programm komplett im Flash-ROM. Es wird normalerweise kein Programm von einem externen Speicher geladen, eine flexible Aufteilung des Adressraums zwischen Programm und Daten ist nicht notwendig. Daher bietet es sich an, den Von Neumann Flaschenhals der notwendigen Buszyklen bei der Befehlsverarbeitung (vor allem bei Pipelining) durch getrennte Busse f├╝r Programm (Flash-Rom) und Daten, IO zu entsch├Ąrfen.
    4. Um bei der Von Neumann Architektur eine Parallelisierung von Programm und Datenzugriffen zu erreichen werden getrennte Prozessor-Caches f├╝r Programme und Daten verwendet.
  5. ARM steht f├╝r Advanced RISC Machines
TaktFetchDecodeExecute
1mov R1,#5
2subs R1,R1,#1mov R1,#5
3bne blasubs R1,R1,#1mov R1,#5 (R1<-5)
4mov R2,#1bne blasubs R1,R1,#1 (R1<-R1-1; Flags gesetzt)
5mov R3,#2mov R2,#1bne bla (PC<- bla)
6subs R1,R1,#1
7bne blasubs R1,R1,#1
8mov R2,#1bne blasubs R1,R1,#1