SEm/labore/07 oszillo
Line 5: | Line 5: | ||
== Einleitung == | == Einleitung == | ||
− | + | Dieses Labor zeigt die Schaffung eines APB-Peripheriebausteins in einem AMBA-Bus System. | |
− | Er wird uns | + | Er wird uns ermöglichen, eine Schaltung zu erstellen, welche eine Graphik auf einem Oszilloskop im X-Y Modus zeichnet. |
− | Oszilloskop im X-Y Modus zeichnet. | + | |
== Konfiguration == | == Konfiguration == | ||
− | Die Schaltung basiert auf dem | + | Die Schaltung basiert auf dem im den vorderen Laboren gesehenen AMBA Bussystem. |
− | + | Wir werden einen Peripheriebaustein erstellen um die Spline-Zeichnungsfunktion auszuführen. | |
− | Editieren Sie '''hdlDesigner.bat''' und tauschen Sie '''set | + | {{TaskBox|content= |
− | HDS_LIBS=hds-lissajous.hdp''' mit '''set HDS_LIBS=hds-beamer.hdp''' | + | Editieren Sie '''hdlDesigner.bat''' und tauschen Sie '''set HDS_LIBS=hds-lissajous.hdp''' mit '''set HDS_LIBS=hds-beamer.hdp'''.}} |
− | + | ||
− | Machen Sie eine Kopie von '''Prefs/hds-lissajous.hdp''' und nennen Sie | + | {{TaskBox|content= |
− | diese '''Prefs/hds-beamer.hdp'''. Editieren Sie | + | # Machen Sie eine Kopie von '''Prefs/hds-lissajous.hdp''' und nennen Sie diese '''Prefs/hds-beamer.hdp'''. |
− | '''Prefs/hds-beamer.hdp''' und | + | # Editieren Sie '''Prefs/hds-beamer.hdp''' und fügen Sie die Referenzen zu den Libraries hinzu, welche in '''Ambarchitect/beamer.hdp''' gebraucht wurden.}} |
− | Libraries, welche in '''Ambarchitect/beamer.hdp''' gebraucht wurden. | + | |
− | Starten Sie HDL designer. | + | {{TaskBox|content= |
− | + | # Starten Sie HDL designer. | |
− | Bestimmen | + | # Bestimmen Sie den Namen der Datei für die Synthese in '''Options -> Main... -> User Variables''': '''concat file <- beamer'''.}} |
− | User Variables''': | + | # In der Library '''ambarchitect''' duplizieren Sie die Architektur '''struct''' des Blocks '''beamer'''. |
− | '''concat file | + | # Setzen Sie die neue Architektur als die default Architektur. |
− | + | # Editieren Sie diese Schaltung und platzieren Sie darin den Peripheriebaustein '''beamerPeriph''' der Library '''Beamer'''.}} | |
− | In der Library '''ambarchitect''' | + | |
− | '''struct''' | + | |
− | Architektur als die | + | |
− | Peripheriebaustein '''beamerPeriph''' der Library | + | |
− | '''Beamer'''. | + | |
== Entwurf des Peripheriebausteins == | == Entwurf des Peripheriebausteins == | ||
− | + | [[Image:SEm_x-y peripheral.png|thumb|Oszillo Peripheriebaustein]] | |
− | + | ||
− | + | Der Peripheriebaustein ist in 2 Teile geteilt: einen Block für die Kontrollregister und einen Block für die Funktionalität. | |
− | |||
=== Adressierung === | === Adressierung === | ||
− | Editieren Sie die Datei '''configuration.xls''' und | + | Editieren Sie die Datei '''configuration.xls''' und ergänzen Sie diese, um |
das neue Peripheriebaustein einzugeben. Definieren Sie: | das neue Peripheriebaustein einzugeben. Definieren Sie: | ||
* dessen Index | * dessen Index | ||
− | * dessen Basis-Adresse und den Mask, welcher die | + | * dessen Basis-Adresse und den Mask, welcher die Grösse angibt |
Diese Werte werden als Generische Parameter zur neuen Schaltung angegeben. | Diese Werte werden als Generische Parameter zur neuen Schaltung angegeben. | ||
Line 60: | Line 50: | ||
* adresse 00, 16 Bits: Steuerregister | * adresse 00, 16 Bits: Steuerregister | ||
− | * adresse 01, 16 Bits: Register, welcher die Periode zwischen der Berechnung von zwei nebenstehenden | + | * adresse 01, 16 Bits: Register, welcher die Periode zwischen der Berechnung von zwei nebenstehenden Pünkten der Spline angibt |
* adresse 02, 16 Bits: Register zum Schreiben eines Punkten im X-Koordinaten-Speicher (FIFO) | * adresse 02, 16 Bits: Register zum Schreiben eines Punkten im X-Koordinaten-Speicher (FIFO) | ||
* adresse 03, 16 Bits: Register zum Schreiben eines Punkten im Y-Koordinaten-Speicher | * adresse 03, 16 Bits: Register zum Schreiben eines Punkten im Y-Koordinaten-Speicher | ||
− | Der Steuerregister | + | Der Steuerregister enthält folgende Elemente: |
− | * Bit 0, run: aktivierung der Funktion, welche die zu zeichnenden | + | * Bit 0, run: aktivierung der Funktion, welche die zu zeichnenden Pünkten berechnet |
* 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 | + | * Bit 2: linesSplines: selektieren von geraden Linien oder von Splines zwischen 2 sich folgenden Pünkten |
− | * Bits 15 à 8, size: Anzahl | + | * Bits 15 à 8, size: Anzahl Pünkte der Graphik im Koordinaten-Speicher |
− | Die Steuerregister werden im Lese- Schreibemodus erstellt: es ist | + | Die Steuerregister werden im Lese- Schreibemodus erstellt: es ist möglich, die |
− | geschriebene Werte | + | geschriebene Werte zurück zu lesen. Die Register zu den Koordinaten-Speichern werden nur im |
Schreibemodus zugegriffen. | Schreibemodus zugegriffen. | ||
Schreiben Sie die VHDL Architektur des Steuerregisters und des Periodenregisters | Schreiben Sie die VHDL Architektur des Steuerregisters und des Periodenregisters | ||
− | Schreiben Sie die VHDL Architektur der | + | Schreiben Sie die VHDL Architektur der Blöcken, welche die Speicher-Blöcke in FIFO-Modus |
steuren. | steuren. | ||
* 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'''', 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. | ||
* 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 nullgesetzt. | ||
− | * | + | * 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''''. |
Der Registerblock steuert die Interpolationsschaltung, welche eine Kurve auf dem | Der Registerblock steuert die Interpolationsschaltung, welche eine Kurve auf dem | ||
Line 91: | Line 81: | ||
=== Interpolationsschaltung === | === Interpolationsschaltung === | ||
− | Die Interpolationsschaltung ist dieselbe, die | + | Die Interpolationsschaltung ist dieselbe, die für das Zeichnen von Lissajous-Kurven auf |
− | dem Oszilloskop gebraucht wurde, aber mit anderen Werten | + | dem Oszilloskop gebraucht wurde, aber mit anderen Werten für manche Generics. Somit sollte |
sie beim ersten Versuch funktionieren. | sie beim ersten Versuch funktionieren. | ||
− | Auf dem Testboard gibt es einen Button | + | Auf dem Testboard gibt es einen Button für den Signal '''selSinCos''', |
welcher es erlaubt, entweder die Steuerungen vom Registerblock zu brauchen, oder eine | welcher es erlaubt, entweder die Steuerungen vom Registerblock zu brauchen, oder eine | ||
default-Steuerung anzuwenden, die einen Kreis abhand eines lokalen Sinus- und | default-Steuerung anzuwenden, die einen Kreis abhand eines lokalen Sinus- und | ||
− | Cosinusgenerators zeichnet. | + | Cosinusgenerators zeichnet. Ergänzen Sie den VHDL-Code von '''sinCosTable''' |
− | so, um die Sinus- und | + | so, um die Sinus- und Cosinusausgänge abhand der 8 Werten des zur Verfügung stehenden |
ersten Viertels der Sinustabelle. | ersten Viertels der Sinustabelle. | ||
=== Simulation === | === Simulation === | ||
− | Simulieren Sie den APB-Peripheriebaustein und | + | Simulieren Sie den APB-Peripheriebaustein und überprüfen Sie seine |
− | + | Funktionalität. | |
== Erstellung des AMBA-Bus Systems == | == Erstellung des AMBA-Bus Systems == | ||
Der Peripheriebaustein wurde imBlock '''grBeamer''' gelegt, welcher den | Der Peripheriebaustein wurde imBlock '''grBeamer''' gelegt, welcher den | ||
− | AMBA-Bus System | + | AMBA-Bus System enthält. |
=== Simulation === | === Simulation === | ||
Line 118: | Line 108: | ||
Editieren Sie die Neue Architektur und implementieren Sie die Steuerungen, um | Editieren Sie die Neue Architektur und implementieren Sie die Steuerungen, um | ||
− | Koordinaten ins Peripheriebaustein zu schreiben und dann dessen | + | Koordinaten ins Peripheriebaustein zu schreiben und dann dessen Funktionalität zu |
starten. | starten. | ||
=== Test auf Platte === | === Test auf Platte === | ||
− | + | Für die ersten Tests, löschen Sie den LEON-Prozessor zusammen mit der Debug Support Unit | |
− | (DSU). Lassen Sie die | + | (DSU). Lassen Sie die Anschlüsse, welche diesen Bausteinen gehören. |
Erstellen Sie eine VHDL-Datei anhand des Blocks '''Board/FPGA_beamer''', | Erstellen Sie eine VHDL-Datei anhand des Blocks '''Board/FPGA_beamer''', | ||
− | synthetisieren Sie diese Schaltung, Laden Sie diese auf der Testplatte und | + | synthetisieren Sie diese Schaltung, Laden Sie diese auf der Testplatte und überprüfen Sie |
− | die | + | die Funktionalität des Systems: |
− | * Durch den Seriellen Port, schreiben Sie die Steuerregister zu und lesen Sie dei geschriebene Werte | + | * Durch den Seriellen Port, schreiben Sie die Steuerregister 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 22:08, 20 June 2013
|
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.
- In der Library ambarchitect duplizieren Sie die Architektur struct des Blocks beamer.
- Setzen Sie die neue Architektur als die default Architektur.
- Editieren Sie diese Schaltung und platzieren Sie darin den Peripheriebaustein beamerPeriph der Library Beamer.}}
Entwurf des Peripheriebausteins
Der Peripheriebaustein ist in 2 Teile geteilt: einen Block für die Kontrollregister und einen Block für die Funktionalität.
Adressierung
Editieren Sie die Datei configuration.xls und ergänzen Sie diese, um das neue Peripheriebaustein einzugeben. Definieren Sie:
- dessen Index
- dessen Basis-Adresse und den Mask, welcher die Grösse angibt
Diese Werte werden als Generische Parameter zur neuen Schaltung angegeben.
.
Registerblock
Der Peripheriebaustein wird durch die folgende Register gesteuert:
- adresse 00, 16 Bits: Steuerregister
- adresse 01, 16 Bits: Register, welcher die Periode zwischen der Berechnung von zwei nebenstehenden Pünkten der Spline angibt
- adresse 02, 16 Bits: Register zum Schreiben eines Punkten im X-Koordinaten-Speicher (FIFO)
- adresse 03, 16 Bits: Register zum Schreiben eines Punkten im Y-Koordinaten-Speicher
Der Steuerregister enthält folgende Elemente:
- Bit 0, run: aktivierung der Funktion, welche die zu zeichnenden Pünkten berechnet
- 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
- Bits 15 à 8, size: Anzahl Pünkte 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
Schreiben Sie die VHDL Architektur der Blöcken, welche die Speicher-Blöcke in FIFO-Modus steuren.
- 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.
- Beim Laden eines neuen Koodinatensatzes, wenn updatePattern auf '1' umschaltet, werden die Speicheradressen nullgesetzt.
- 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'.
Der Registerblock steuert die Interpolationsschaltung, welche eine Kurve auf dem 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 Steuerregister 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
06 APB Komponent
Anleitung auf Deutsch
-