SEm/labore/07 beamer
(Created page with "{{TOC right}} = Kurvenzeichnungsperipheriebaustein für AMBA-Bus = {{navNamed|left=SEm/labore/06_uart|left_name=06 UART-Peripheriebaustein|up=SEm/labore|up_name=Anleitung a...") |
(→Entwicklung) |
||
(6 intermediate revisions by 2 users not shown) | |||
Line 2: | Line 2: | ||
= Kurvenzeichnungsperipheriebaustein für AMBA-Bus = | = Kurvenzeichnungsperipheriebaustein für AMBA-Bus = | ||
+ | |||
+ | == Einleitung == | ||
+ | |||
+ | In diesem Labor nehmen wir die Schaltung für die Interpolationsberechnung und schliessen sie an den AMBA-Bus an. | ||
+ | |||
+ | Die benutzte Schaltung zeigt eine generische Bus-Schnittstelle die sich leicht auf andere Bus-Systeme, wie z.B. hier der AMBA-Lite-Bus, anpassen lässt. Die Schaltung kann einfach an einen anderen parallelen oder sogar seriellen Bus angepasst werden. | ||
+ | |||
+ | == Entwicklung == | ||
+ | |||
+ | Das Peripheriegerät erzeugt zwei ∑∆-modulierte Ausgänge mit welchen eine Kurve auf einem Oszilloskop angezeigt werden kann. | ||
+ | |||
+ | === Register === | ||
+ | |||
+ | Auf folgende Register schreibt der Prozessor: | ||
+ | : Adresse 00: Kontrollregister | ||
+ | :: Bit 0: <code>run</code>, bestimmt ob die Kurve gezeichnet wird oder ob das System angehalten ist | ||
+ | :: Bit 1: <code>updatePattern</code>, bestimmt ob neue Punkte in den Speicher geschrieben werden oder ob dir Kurve gezeichnet wird | ||
+ | :: Bit 2: <code>interpolateLinear</code>, bestimmt ob die Linie zwischen zwei aufeinanderfolgenden Punkten eine Gerade oder ein Spline ist | ||
+ | :: Die <code>patternSize</code> höchstwertigsten Bits: Anzahl an Punkten in der zu zeichnenden Kurve | ||
+ | : Adresse 01: Geschwindigkeitsregister, Periode zwischen zwei Berechnungen der Punkte auf der Kurve | ||
+ | : Adresse 02: Punkteregister der X-Achse | ||
+ | : Adresse 03: Punkteregister der Y-Achse | ||
+ | |||
+ | Die folgenden Register werden vom Prozessor gelesen: | ||
+ | : Adresse 00: Kontrollregister, lesen der zuvor geschriebenen Werte | ||
+ | : Adresse 01: Geschwindigkeitsregister, lesen des zuvor geschriebenen Wertes | ||
+ | |||
+ | === VHDL-Code === | ||
+ | |||
+ | {{TaskBox|content= | ||
+ | Schreiben Sie den VHDL-Code des Adress-decoders <code>periphAddressDecoder</code>. | ||
+ | }} | ||
+ | |||
+ | {{TaskBox|content= | ||
+ | Schreiben Sie den VHDL-Code des Kontroll- und des Geschwindigkeitsregisters des Peripheriebausteins <code>ahbBeamer</code>. | ||
+ | }} | ||
+ | |||
+ | === Steuerung der Punktespeicher === | ||
+ | |||
+ | Die Speicherbausteine, welche die Liste der zu zeichnenden Punkte enthalten, benutzen spezielle Speicherblöcke im Innern des programmierbaren Schaltbausteins. | ||
+ | Zwei verschiedene Modi werden zu Kontrolle des Speichers benutzt: | ||
+ | * im Modus <code>updatePattern</code> löst jeder Schreibzugriff auf das entsprechende Register einen Schreibzugriff auf den Speicher sowie eine Inkrementation des Adressenzählers aus | ||
+ | * im Zeichnungsmodus wird löst jeder neue Anfrage nach einem Punkt durch das Signal <code>newPolynom</code> eine Inkrementation des Adressenzählers aus | ||
+ | |||
+ | Bei jedem Übergang auf '1' des Signals <code>updatePattern</code> wird der Adresszähler auf null zurückgesetzt. | ||
+ | |||
+ | Im Zeichnungsmodus wir der Adresszähler zusätzlich auf null zurückgesetzt, wenn er den Wert <code>patternLength-1</code> erreicht. | ||
+ | |||
+ | === VHDL-Code === | ||
+ | |||
+ | {{TaskBox|content= | ||
+ | Schreiben Sie den VHDL-Code des Kontroll- und des Geschwindigkeitsregister des Peripheriebausteins <code>ahbBeamer</code>. | ||
+ | }} | ||
+ | |||
+ | === Zeichengeschwindigkeit === | ||
+ | |||
+ | Der Geschwindigkeitsregister erlaubt es, die Arbeitsgeschwindigkeit zu verringern. | ||
+ | |||
+ | === VHDL-Code === | ||
+ | |||
+ | {{TaskBox|content= | ||
+ | Schreiben Sie den VHDL-Code Zählers, welcher die <code>interpolateEn</code> Pulse im <code>periphSpeedController</code> Block erstellt. | ||
+ | }} | ||
+ | |||
+ | === Test der Interpolationsschaltung === | ||
+ | |||
+ | Der <code>selSinCos</code> Taster erlaubt es, unabhängig von allen Registerwerte einen Kreis im X-Y Moduy zu zeichnen. | ||
+ | |||
+ | === VHDL-Code === | ||
+ | |||
+ | {{TaskBox|content= | ||
+ | Schreiben Sie den VHDL-Code der Sinus- und Cosinus-Tabelle im Block <code>sinCosTable</code>. | ||
+ | }} | ||
+ | |||
+ | == Verifikation == | ||
+ | |||
+ | {{TaskBox|content= | ||
+ | Simulieren Sie das System mit Hilfe der zur Verfügung gestellten Testbank und überprüfen Sie, dass der Block <code>ahbBeamer</code> richtig funktioniert.. | ||
+ | }} | ||
{{navNamed|left=SEm/labore/06_uart|left_name=06 UART-Peripheriebaustein|up=SEm/labore|up_name=Anleitung auf Deutsch|right=SEm/labore/08_soc|right_name=08 Realisierung eines AMBA-SoCs}} | {{navNamed|left=SEm/labore/06_uart|left_name=06 UART-Peripheriebaustein|up=SEm/labore|up_name=Anleitung auf Deutsch|right=SEm/labore/08_soc|right_name=08 Realisierung eines AMBA-SoCs}} | ||
− | [[Category:SEm]] | + | [[Category:Bachelor]][[Category:SEm]][[Category:Deutsch]] |
Latest revision as of 16:36, 16 April 2018
|
Kurvenzeichnungsperipheriebaustein für AMBA-Bus
Einleitung
In diesem Labor nehmen wir die Schaltung für die Interpolationsberechnung und schliessen sie an den AMBA-Bus an.
Die benutzte Schaltung zeigt eine generische Bus-Schnittstelle die sich leicht auf andere Bus-Systeme, wie z.B. hier der AMBA-Lite-Bus, anpassen lässt. Die Schaltung kann einfach an einen anderen parallelen oder sogar seriellen Bus angepasst werden.
Entwicklung
Das Peripheriegerät erzeugt zwei ∑∆-modulierte Ausgänge mit welchen eine Kurve auf einem Oszilloskop angezeigt werden kann.
Register
Auf folgende Register schreibt der Prozessor:
- Adresse 00: Kontrollregister
- Bit 0:
run
, bestimmt ob die Kurve gezeichnet wird oder ob das System angehalten ist - Bit 1:
updatePattern
, bestimmt ob neue Punkte in den Speicher geschrieben werden oder ob dir Kurve gezeichnet wird - Bit 2:
interpolateLinear
, bestimmt ob die Linie zwischen zwei aufeinanderfolgenden Punkten eine Gerade oder ein Spline ist - Die
patternSize
höchstwertigsten Bits: Anzahl an Punkten in der zu zeichnenden Kurve
- Bit 0:
- Adresse 01: Geschwindigkeitsregister, Periode zwischen zwei Berechnungen der Punkte auf der Kurve
- Adresse 02: Punkteregister der X-Achse
- Adresse 03: Punkteregister der Y-Achse
Die folgenden Register werden vom Prozessor gelesen:
- Adresse 00: Kontrollregister, lesen der zuvor geschriebenen Werte
- Adresse 01: Geschwindigkeitsregister, lesen des zuvor geschriebenen Wertes
VHDL-Code
Steuerung der Punktespeicher
Die Speicherbausteine, welche die Liste der zu zeichnenden Punkte enthalten, benutzen spezielle Speicherblöcke im Innern des programmierbaren Schaltbausteins. Zwei verschiedene Modi werden zu Kontrolle des Speichers benutzt:
- im Modus
updatePattern
löst jeder Schreibzugriff auf das entsprechende Register einen Schreibzugriff auf den Speicher sowie eine Inkrementation des Adressenzählers aus - im Zeichnungsmodus wird löst jeder neue Anfrage nach einem Punkt durch das Signal
newPolynom
eine Inkrementation des Adressenzählers aus
Bei jedem Übergang auf '1' des Signals updatePattern
wird der Adresszähler auf null zurückgesetzt.
Im Zeichnungsmodus wir der Adresszähler zusätzlich auf null zurückgesetzt, wenn er den Wert patternLength-1
erreicht.
VHDL-Code
Zeichengeschwindigkeit
Der Geschwindigkeitsregister erlaubt es, die Arbeitsgeschwindigkeit zu verringern.
VHDL-Code
Test der Interpolationsschaltung
Der selSinCos
Taster erlaubt es, unabhängig von allen Registerwerte einen Kreis im X-Y Moduy zu zeichnen.
VHDL-Code
Verifikation
Navigation
06 UART-Peripheriebaustein
Anleitung auf Deutsch
08 Realisierung eines AMBA-SoCs