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