SEm/labore/07 oszillo

(Difference between revisions)
Jump to: navigation, search
Line 21: Line 21:
  
 
{{TaskBox|content=
 
{{TaskBox|content=
# Starten Sie HDL designer.
+
# Starten Sie HDL-Designer.
# Bestimmen Sie den Namen der Datei für die Synthese in '''Options -> Main... -> User Variables''': '''concat file <- beamer'''.}}
+
# Setzen Sie den Namen der Datei für die Synthese in '''Options -> Main... -> User Variables''': '''concat file <- beamer'''.
 
# In der Library '''ambarchitect''' duplizieren Sie die Architektur '''struct''' des Blocks '''beamer'''.
 
# In der Library '''ambarchitect''' duplizieren Sie die Architektur '''struct''' des Blocks '''beamer'''.
 
# Setzen Sie die neue Architektur als die default Architektur.
 
# Setzen Sie die neue Architektur als die default Architektur.
Line 35: Line 35:
 
=== Adressierung ===
 
=== Adressierung ===
  
Editieren Sie die Datei '''configuration.xls''' und ergänzen Sie diese, um
+
{{TaskBox|content=
das neue Peripheriebaustein einzugeben. Definieren Sie:
+
Editieren Sie die Datei '''configuration.xls''' und ergänzen Sie diese, um den neuen Peripheriebaustein einzusetzen.
 
+
Definieren Sie:
 
* dessen Index
 
* dessen Index
* dessen Basis-Adresse und den Mask, welcher die Grösse angibt
+
* dessen Basis-Adresse und die Mask, welche die Grösse im Busspeicher angibt
 
+
Diese Werte sind als generische Parameter der neuen Schaltung zu implementieren.}}
Diese Werte werden als Generische Parameter zur neuen Schaltung angegeben.
+
 
+
.
+
  
 
=== Registerblock ===
 
=== Registerblock ===
Line 49: Line 46:
 
Der Peripheriebaustein wird durch die folgende Register gesteuert:
 
Der Peripheriebaustein wird durch die folgende Register gesteuert:
  
* adresse 00, 16 Bits: Steuerregister
+
* Adresse 00, 16 Bits: Kontrollregister
* adresse 01, 16 Bits: Register, welcher die Periode zwischen der Berechnung von zwei nebenstehenden Pünkten der Spline angibt
+
* Adresse 01, 16 Bits: gibt die Periode zwischen der Berechnung von zwei benachbarten Punkten der Spline an
* adresse 02, 16 Bits: Register zum Schreiben eines Punkten im X-Koordinaten-Speicher (FIFO)
+
* Adresse 02, 16 Bits: Register zum Schreiben eines Punktes im X-Koordinatenspeicher (FIFO)
* adresse 03, 16 Bits: Register zum Schreiben eines Punkten im Y-Koordinaten-Speicher
+
* Adresse 03, 16 Bits: Register zum Schreiben eines Punktes im Y-Koordinatenspeicher
  
Der Steuerregister enthält folgende Elemente:
+
Das Kontrollregister enthält folgende Elemente:
  
* Bit 0, run: aktivierung der Funktion, welche die zu zeichnenden Pünkten berechnet
+
* Bit 0, run: Aktivierung der Berechnungsfunktion der zu zeichnenden Punkte
 
* Bit 1, newPattern: signalisiert das Laden einer neuen Sequenz von Koordinaten im Speicher
 
* Bit 1, newPattern: signalisiert das Laden einer neuen Sequenz von Koordinaten im Speicher
* Bit 2: linesSplines: selektieren von geraden Linien oder von Splines zwischen 2 sich folgenden Pünkten
+
* Bit 2: linesSplines: auswählen zwischen geraden Linien oder Splines zwischen 2 aufeinanderfolgenden Punkten
* Bits 15 &agrave; 8, size: Anzahl Pünkte der Graphik im Koordinaten-Speicher
+
* Bits 15 ... 8, size: Anzahl Punkte der Graphik im Koordinaten-Speicher
 
+
Die Steuerregister werden im Lese- Schreibemodus erstellt: es ist möglich, die
+
geschriebene Werte zurück zu lesen. Die Register zu den Koordinaten-Speichern werden nur im
+
Schreibemodus zugegriffen.
+
  
Schreiben Sie die VHDL Architektur des Steuerregisters und des Periodenregisters
+
Das Kontrollregister wird als Schreib-Lese-Speicher erstellt, d.h. es ist möglich die geschriebene Werte zurückzulesen.
 +
Auf die Register zu den Koordinatenspeichern kann nur im Schreibmodus zugegriffen werden.
  
Schreiben Sie die VHDL Architektur der Blöcken, welche die Speicher-Blöcke in FIFO-Modus
+
{{TaskBox|content=
steuren.
+
# Schreiben Sie die VHDL-Architektur des Kontrollregisters und des Periodenregisters}}
  
* Im normalen modus, wenn '''updatePattern = '0'''', ist die Enable-Steuerung der Speicher '''en = '1'''' und die Adresse wird bei jedem '''newPolynom'''-Puls inkrementiert. Dennoch, wenn die Adresse '''patternSize''' erreicht, so wird Sie wieder nullgestellt.
+
* Im normalen Modus, wenn '''updatePattern = '0'''' und die Enable-Steuerung der Speicher '''en = '1'''' ist, wird die Adresse bei jedem '''newPolynom'''-Puls inkrementiert. Dies bis die Adresse '''patternSize''' erreicht, dann wird Sie wieder auf null gezetzt.
* Beim Laden eines neuen Koodinatensatzes, wenn '''updatePattern''' auf '1' umschaltet, werden die Speicheradressen nullgesetzt.
+
* Beim Laden eines neuen Koodinatensatzes, wenn '''updatePattern''' auf '1' umschaltet, werden die Speicheradressen auf null gesetzt.
* Während das Laden einer neuen Sequenz von Koordinaten, wenn '''updatePattern = '1'''', wird die Adresse nach jedem Schreiben auf das dazu gehörende Register inkrementiert. Das schreiben ins Speichern passiert, wenn '''en = '1'''' und '''write = '1''''.
+
* Während dem Laden einer neuen Sequenz von Koordinaten ('''updatePattern = '1''''), wird die Adresse nach jedem Schreiben in das dazugehörende Register inkrementiert. Das Schreiben in den Speichern wird ausgeführt, wenn '''en = '1'''' und '''write = '1''''.
  
Der Registerblock steuert die Interpolationsschaltung, welche eine Kurve auf dem
+
{{TaskBox|content=
Oszilloskop zeichnet.
+
# Schreiben Sie die VHDL-Architektur der Blöcke, welche die Speicherblöcke im FIFO-Modus steuern.}}
  
.
+
Der Registerblock steuert die Interpolationsschaltung, welche eine Kurve auf den Bildschirm des Oszilloskop zeichnet.
  
 
=== Interpolationsschaltung ===
 
=== Interpolationsschaltung ===
Line 120: Line 114:
 
die Funktionalität des Systems:
 
die Funktionalität des Systems:
  
* Durch den Seriellen Port, schreiben Sie die Steuerregister zu und lesen Sie dei geschriebene Werte zurück.
+
* Durch den Seriellen Port, schreiben Sie die Kontrollregister zu und lesen Sie dei geschriebene Werte zurück.
 
* Laden Sie ein Koodinatensatzes ins Speicher uns starten Sie das Zeichnen von Splines..
 
* Laden Sie ein Koodinatensatzes ins Speicher uns starten Sie das Zeichnen von Splines..
  

Revision as of 23:25, 20 June 2013

Contents

Oszillo Peripheriebaustein

Einleitung

Dieses Labor zeigt die Schaffung eines APB-Peripheriebausteins in einem AMBA-Bus System. Er wird uns ermöglichen, eine Schaltung zu erstellen, welche eine Graphik auf einem Oszilloskop im X-Y Modus zeichnet.

Konfiguration

Die Schaltung basiert auf dem im den vorderen Laboren gesehenen AMBA Bussystem. Wir werden einen Peripheriebaustein erstellen um die Spline-Zeichnungsfunktion auszuführen.


View-pim-tasks.png

Editieren Sie hdlDesigner.bat und tauschen Sie set HDS_LIBS=hds-lissajous.hdp mit set HDS_LIBS=hds-beamer.hdp.


View-pim-tasks.png

  1. Machen Sie eine Kopie von Prefs/hds-lissajous.hdp und nennen Sie diese Prefs/hds-beamer.hdp.
  2. Editieren Sie Prefs/hds-beamer.hdp und fügen Sie die Referenzen zu den Libraries hinzu, welche in Ambarchitect/beamer.hdp gebraucht wurden.


View-pim-tasks.png

  1. Starten Sie HDL-Designer.
  2. Setzen Sie den Namen der Datei für die Synthese in Options -> Main... -> User Variables: concat file <- beamer.
  3. In der Library ambarchitect duplizieren Sie die Architektur struct des Blocks beamer.
  4. Setzen Sie die neue Architektur als die default Architektur.
  5. Editieren Sie diese Schaltung und platzieren Sie darin den Peripheriebaustein beamerPeriph der Library Beamer.

Entwurf des Peripheriebausteins

Oszillo Peripheriebaustein

Der Peripheriebaustein ist in 2 Teile geteilt: einen Block für die Kontrollregister und einen Block für die Funktionalität.

Adressierung

View-pim-tasks.png

Editieren Sie die Datei configuration.xls und ergänzen Sie diese, um den neuen Peripheriebaustein einzusetzen. Definieren Sie:

  • dessen Index
  • dessen Basis-Adresse und die Mask, welche die Grösse im Busspeicher angibt

Diese Werte sind als generische Parameter der neuen Schaltung zu implementieren.

Registerblock

Der Peripheriebaustein wird durch die folgende Register gesteuert:

  • Adresse 00, 16 Bits: Kontrollregister
  • Adresse 01, 16 Bits: gibt die Periode zwischen der Berechnung von zwei benachbarten Punkten der Spline an
  • Adresse 02, 16 Bits: Register zum Schreiben eines Punktes im X-Koordinatenspeicher (FIFO)
  • Adresse 03, 16 Bits: Register zum Schreiben eines Punktes im Y-Koordinatenspeicher

Das Kontrollregister enthält folgende Elemente:

  • Bit 0, run: Aktivierung der Berechnungsfunktion der zu zeichnenden Punkte
  • Bit 1, newPattern: signalisiert das Laden einer neuen Sequenz von Koordinaten im Speicher
  • Bit 2: linesSplines: auswählen zwischen geraden Linien oder Splines zwischen 2 aufeinanderfolgenden Punkten
  • Bits 15 ... 8, size: Anzahl Punkte der Graphik im Koordinaten-Speicher

Das Kontrollregister wird als Schreib-Lese-Speicher erstellt, d.h. es ist möglich die geschriebene Werte zurückzulesen. Auf die Register zu den Koordinatenspeichern kann nur im Schreibmodus zugegriffen werden.


View-pim-tasks.png

  1. Schreiben Sie die VHDL-Architektur des Kontrollregisters und des Periodenregisters
  • Im normalen Modus, wenn updatePattern = '0' und die Enable-Steuerung der Speicher en = '1' ist, wird die Adresse bei jedem newPolynom-Puls inkrementiert. Dies bis die Adresse patternSize erreicht, dann wird Sie wieder auf null gezetzt.
  • Beim Laden eines neuen Koodinatensatzes, wenn updatePattern auf '1' umschaltet, werden die Speicheradressen auf null gesetzt.
  • Während dem Laden einer neuen Sequenz von Koordinaten (updatePattern = '1'), wird die Adresse nach jedem Schreiben in das dazugehörende Register inkrementiert. Das Schreiben in den Speichern wird ausgeführt, wenn en = '1' und write = '1'.


View-pim-tasks.png

  1. Schreiben Sie die VHDL-Architektur der Blöcke, welche die Speicherblöcke im FIFO-Modus steuern.

Der Registerblock steuert die Interpolationsschaltung, welche eine Kurve auf den Bildschirm des Oszilloskop zeichnet.

Interpolationsschaltung

Die Interpolationsschaltung ist dieselbe, die für das Zeichnen von Lissajous-Kurven auf dem Oszilloskop gebraucht wurde, aber mit anderen Werten für manche Generics. Somit sollte sie beim ersten Versuch funktionieren.

Auf dem Testboard gibt es einen Button für den Signal selSinCos, welcher es erlaubt, entweder die Steuerungen vom Registerblock zu brauchen, oder eine default-Steuerung anzuwenden, die einen Kreis abhand eines lokalen Sinus- und Cosinusgenerators zeichnet. Ergänzen Sie den VHDL-Code von sinCosTable so, um die Sinus- und Cosinusausgänge abhand der 8 Werten des zur Verfügung stehenden ersten Viertels der Sinustabelle.

Simulation

Simulieren Sie den APB-Peripheriebaustein und überprüfen Sie seine Funktionalität.

Erstellung des AMBA-Bus Systems

Der Peripheriebaustein wurde imBlock grBeamer gelegt, welcher den AMBA-Bus System enthält.

Simulation

In der Library ambarchitect_test, duplizieren Sie die Architektur des Blocks beamer_tester.

Editieren Sie die Neue Architektur und implementieren Sie die Steuerungen, um Koordinaten ins Peripheriebaustein zu schreiben und dann dessen Funktionalität zu starten.

Test auf Platte

Für die ersten Tests, löschen Sie den LEON-Prozessor zusammen mit der Debug Support Unit (DSU). Lassen Sie die Anschlüsse, welche diesen Bausteinen gehören.

Erstellen Sie eine VHDL-Datei anhand des Blocks Board/FPGA_beamer, synthetisieren Sie diese Schaltung, Laden Sie diese auf der Testplatte und überprüfen Sie die Funktionalität des Systems:

  • Durch den Seriellen Port, schreiben Sie die Kontrollregister zu und lesen Sie dei geschriebene Werte zurück.
  • Laden Sie ein Koodinatensatzes ins Speicher uns starten Sie das Zeichnen von Splines..

Der bus testOut erlaubt es, Testsignale auf die Stecker der Testplatte anzubringen.


Navigation
Arrow left.gif 06 APB Komponent Arrow up.gif Anleitung auf Deutsch - Arrow right.gif

Personal tools
Namespaces
Variants
Actions
Navigation
Modules / Projects
Browse
Toolbox