SEm/labore/05 amba

From FSI
(Difference between revisions)
Jump to: navigation, search
 
(17 intermediate revisions by 2 users not shown)
Line 5: Line 5:
 
== Einleitung ==
 
== Einleitung ==
  
Dieses Labor zeigt die Erstellung eines [http://www.arm.com/products/system-ip/amba/amba-open-specifications.php AMBA] Bussystem basierend auf der [http://www.gaisler.com/index.php/downloads/leongrlib GRLib].
+
In diesem Labor werden wir einen simplen Peripheriebaustein für den [[Media:AMBA_AHB-Lite_spec.pdf|AMBA-Lite-Bus]] erstellen: eine bidirektionellen Ein-/Ausgangskanal.
  
Es wird uns erlauben, eine einfache Schaltung mit einem Prozessor, einem Speicher-Interface und einer seriellen Schnittstelle zu bilden.
+
AHB-Lite ist eine einfache Variante der Busfamilie [http://www.arm.com/products/system-ip/amba-specifications.php Advanced Microcontroller Bus Architecture (AMBA)]. Sein spezielles Merkmal ist, dass er nur einen Master zulässt.
  
== Zeichnung der Schaltung ==
+
In einem Peripheriebaustein müssen die Werte, welche der Master (hier Mikroprozessor) in die Register schreibt, gespeichert werden.
 +
Im Gegensatz werden die Werte, welche der Master liest, direkt kombinatorisch weitergegeben, ohne sie durch Flipflops zu verzögern.
  
=== Vorbereitung ===
+
=== AMBA-Buszugriffe ===
  
{{TaskBox|Erstellen Sie im Arbeitsverzeichnis, '''U:\SEm_labs''' ein neues Verzeichnis '''Ambarchitect'''.}}
+
Zugriffe erfolgen jeweils in zwei Taktzyklen, wobei der erste für die Adressierung und der zweiter zum den Datentranfser dienen.
  
{{TaskBox|
+
{{TaskBox|content=Führen Sie eine Simualtion der Testbank <code>ahbGpio_tb</code> mit der Simulationskonfiguration <code>abhGpio.do</code> durch.}}
# Starten Sie das Programm [http://ambadraw.hevs.ch AMBAdraw].
+
# Klicken Sie auf '''Import Template Design''' und basieren Sie auf der Schaltung in '''C:/EDA/AMBAdraw/source/template/HDS'''.}}
+
  
Dies wird eine Referenzschaltung in [http://ambadraw.hevs.ch AMBAdraw] laden welche alle existierenden GRLib Blöcke enthält
+
{{TaskBox|content=Beobachten Sie die Signale
Ihre schlussendliche Schaltung wird ein Teil dieser Gesamtschaltung sein.
+
* <code>haddr</code>
 +
* <code>htrans</code>
 +
* <code>hsel</code>
 +
* <code>hwrite</code>
 +
* <code>hwdata</code>
 +
* <code>hrdata</code>}}
  
{{WarningBox|Alle ''Preferences'' gehen verloren, wenn man eine neue Referenzschaltung lädt.}}
+
== Spezifikation ==
  
=== Schaltung ===
+
[[File:AhbLiteComponents_ahbGpio_symbol.PNG|thumb|AhbLiteComponents ahbGpio]]
  
{{TaskBox|Im Programm [http://ambadraw.hevs.ch AMBAdraw]zeichnen Sie die folgende Schaltung.}}
+
Der zu erstellende Komponent wird dazu dienen, auf der Testplatte Schalter zu lesen und LEDs zu steuern. Die Anzahl Ein- und Ausgänge wird über den Generic <code>ioNb</code> gesetzt. Der Zugriff erfolgt über 3 Register.
  
[[Image:SEm_ambaDesign.png|center|Zu erstellende Schaltung]]
+
=== Registerplan ===
  
Das Manual '''grLib cores user manual.pdf''' beschreibt alle Blöcke des Systems.
+
;Schreiberegister
Mit ihm können Sie auch bestimmen, auf welche Busse (AHB oder ABP) die Komponenten angeschlossen werden.
+
: 00, Datenregister, erhält die Werte, welche auf die Ausgänge geschrieben werden
 +
: 01, Ausgabefreigaberegister, bestimmt die Richtung der Ein-/Ausgänge:'1' = Ausgang.
  
== Parametrisierung des Systems ==
+
;Leseregister
 +
: 00, Datenregister, stellt die Werte der Eingänge zur Verfügung
  
Die Datei '''configuration.xls''' dient dazu, einige Parameter des Systems zu anzugeben.
+
=== Design ===
  
=== Index ===
+
{{TaskBox|content=
 +
Zeichnen Sie das Blockdiagram des AHB-Lite Komponenten <code>ahbGpio</code>.
 +
}}
  
Alle Komponenten auf dem AHB-Bus haben einen eigenen Index, unabhängig vom Index des APB-Busses.
+
=== Realisierung ===
  
{{TaskBox|
+
{{TaskBox|content=
# In der Datei '''configuration.xls''' füllen Sie die Tabelle '''indexes'''.
+
Schreiben Sie den VHDL-Code des AHB-Lite Komponenten <code>ahbGpio</code>.
# Aktualisieren Sie den'''hindex'''-Parameter der AHB-Komponenten in [http://ambadraw.hevs.ch AMBAdraw].
+
}}
# Aktualisieren Sie deb'''pindex'''-Parameter der APB-Komponenten.}}
+
  
=== Speicherplan ===
+
=== Verifikation ===
  
Die Systemkomponente haben alle ihre eigene Speicherposition.
+
{{TaskBox|content=
Die GRLib parametrisiert diese mit Hilfe einer Adresse und einer Maske.
+
Führen Sie eine Simulation des Systems mit Hilfer der zur verfügung gestellten Testbank durch. Verifizieren Sie die korrekte Funktionalität des neuen Komponenten.
 +
}}
  
Für die AHB-Bus Slaves:
 
  
* ist die Basisadresse durch die 12 MSBs des Adresssignals gegeben
+
{{navNamed|left=SEm/labore/04_synthese|left_name=04 Automatische Synthese|up=SEm/labore|up_name=Anleitung auf Deutsch|right=SEm/labore/06_uart|right_name=UART-Peripheriebaustein}}
* ist die Länge des zugeteilten Speichers durch die Maske auf diese 12 MSBs gegeben.
+
 
+
Für die APB-Komponenten werden Basisadresse und Länge ähnlich definiert, nur aber auf den 12 weiteren Bits der Adresse.
+
 
+
{{TaskBox|Füllen Sie in der Datei '''configuration.xls''' die Tabellen '''memory map, definition''' und aktualisieren Sie die '''haddr'''-, '''hmask'''-, '''paddr'''- und '''pmask'''-Parameter der Komponenten in [http://ambadraw.hevs.ch AMBAdraw].}
+
 
+
=== Komponentenspezifische Parameter ===
+
 
+
{{TaskBox|Setzen Sie mit Hilfe des Manuals '''grLib cores user manual.pdf''' die andere Parameter der Komponenten in [http://ambadraw.hevs.ch AMBAdraw].}}
+
 
+
== Erstellung des VHDL Codes ==
+
 
+
[http://ambadraw.hevs.ch AMBAdraw] erstellt Ihre Schaltung indem es die nicht ausgewählten Komponenten aus der Referenzschaltung entfernt.
+
 
+
=== Erstellung des anwendungsspezifischen Systems ===
+
 
+
{{TaskBox|
+
# Klicken Sie auf '''Edit -> Document and Project Settings...''' und geben Sie folgenden '''Project Path''' ein: '''U:\SEm_labs\Ambarchitect'''.
+
# Klicken Sie auf '''Export as... -> HDL'''.}}
+
 
+
=== Betrachtung des Systems ===
+
 
+
[[Image:SEm_ambaCircuit.png|thumb|Erstellte Schaltung]]
+
 
+
{{TaskBox|Starten Sie HDL Designer mit der Datei '''U:\SEm_labs\Ambarchitect\ambarchitect.hdp''', öffnen Sie den Block '''toplevel''' und betrachten Sie die erstellte Schaltung.}}
+
 
+
{{WarningBox|Alle Änderungen in der exportierten Schaltung werden überschrieben wenn man in [http://ambadraw.hevs.ch AMBAdraw] ein  '''Export as...'''durchführt.}}
+
 
+
== Simulation des Systems ==
+
 
+
Um den System zu testen, wollen wir es auf einer Testbank setzen, und ihn durch den AHB
+
UART steuern.
+
 
+
=== Testbench-Library ===
+
 
+
Verlassen Sie den Programm HDL Designer.
+
 
+
Erstellen Sie das Verzeichis
+
'''U:\SEm_labs\Ambarchitect\ambarchitect_test'''.
+
 
+
Kopieren Sie '''U:\SEm_labs\Ambarchitect\ambarchitect.hdp''' unter den
+
Namen '''U:\SEm_labs\Ambarchitect\beamer.hdp'''.
+
 
+
Editieren Sie '''U:\SEm_labs\Ambarchitect\beamer.hdp''':
+
 
+
* setzen Sie zusätzlich Referenze zur Library '''ambarchitect_test'''.
+
* im Teil '''ModelSim''', ändern Sie den basis Pfad '''$HDS_PROJECT_DIR''' mit '''D:/Labs/SEm/Ambarchitect'''.
+
 
+
Starte Sie HDL Designer abhand der Datei
+
'''U:\SEm_labs\Ambarchitect\beamer.hdp'''.
+
 
+
=== Einkapslung der Schaltung ===
+
 
+
Kopieren Sie den modul '''ambarchitect/toplevel''' unter den Namen
+
'''ambarchitect/gr_beamer''' so, dass [http://ambadraw.hevs.ch AMBAdraw] es nicht überschreiben
+
wird.
+
 
+
Erstellen Sie einen neuen Block '''ambarchitect/beamer''', welcher den
+
vorigen Block enthält, zusammen mit VHDL-Code, welches die GRLib Ein- und Ausgänge zu
+
'''std_ulogic'''- oder '''std_ulogic_vector'''-Linien
+
entfaltet.
+
 
+
Schliessen Sie '''dbgo(0)''' an '''dbgi1''' an, sowie
+
'''dbgo1''' an '''dbgi(0)''' an, um den Prozessor mit dem DSU zu
+
steuern.
+
 
+
'''Figure 3. Eingekapselte Schaltung'''
+
 
+
[[Image:ambaEncapsulated.png]]<br>
+
=== Testbank ===
+
 
+
In der Library '''ambarchitect_test''', erstellen Sie ein Testbank
+
'''beamer_tb''' und legen Sie darin den Block
+
'''ambarchitect/beamer''' zusammen mit einem Simuli-Generator
+
'''beamer_tester'''.
+
 
+
Un ein VHDL Modell der Speicher, Flash und SDRAM, zu haben, Kopieren Sie den Inhalt des
+
Verzeichnisses
+
'''R:\Modules\SI\223_SEm\Digital\Ambarchitect\ambarchitect_test''' in
+
'''U:\SEm_labs\Ambarchitect\ambarchitect_test'''. In HDL Designer wird die
+
Liste der Komponenten mit der taste '''F5''' neu erstellt.
+
 
+
Um einige Komponente der GRLib-Library compilieren zu können, öffnen Sie die Library
+
'''unisim''', selektieren Sie alle '''RAMB4*'''-Komponente und
+
compilieren Sie diese.
+
 
+
Plazieren Sie diese Speicher am zu testendem System. Regeln Sie folgende Parameter:
+
 
+
* die SDRAM hat 12 Adressbits,
+
* die 2 Bits DQM der SDRAM sind angeschlossen an sdDQM(4) und sdDQM(0),
+
* das Signal CKE der SDRAM ist angeschlossen an sdCkE(0),
+
* das Signal Cs_n der SDRAM ist angeschlossen an sdCS_n(0),
+
* auf dem Flash sind Byte_n = '1' et RP_n = '1',
+
* auf dem Flash ist CE = "00" &amp; RomS_n(0),
+
* für den Speicher-Kontroller soll bWidth = "01",
+
* Für die zwei Speicher, geben sie den Link auf der kopierten Dateien in '''U:\SEm_labs\Ambarchitect\ambarchitect_test'''.
+
 
+
Erstellen Sie einen Block, welcher den bidirektionellen Bus der Speicher anf
+
den unidirektionellen Bussen der GRLib anschliesst.
+
 
+
'''Figure 4. Testbank'''
+
 
+
[[Image:ambaTestbench.png]]<br>
+
Schreiben Sie den Code der Testbank , um folgende Signale zu erzeugen:
+
 
+
* Power-on-Reset un Taktsignal,
+
* die Steuerung des Systems via RS232 durch den Block '''ahbuart'''.
+
 
+
=== Simulation ===
+
 
+
Initialisieren Sie die Schaltung, indem Sie den Charakter 55 h auf der RS232-Linie
+
sendet. Der Block '''ahbuart''' kann sich damit automatisch der Baudrate der
+
seriellen Linie anpassen.
+
 
+
Lesen Sie den Inhalt des Speicher an Adresse 8000.0100 h. Dies wird mit Hilfe der
+
Sequenz 83 80 00 01 00 durchgeführt. Folgen Sie das, was auf dem AMBA-Buss passiert, von dem
+
Empfang der Steuerung bis zum Zurücksenden der Daten. ErkLären Sie den Wert der Daten,
+
welche vom Speicher gelesen wurden.
+
 
+
'''Figure 5. Simulation'''
+
 
+
[[Image:ambaSimulation.png]]<br>
+
Schreiben Sie den Code der Testbank , um folgende Signale zu erzeugen:
+
 
+
* Power-on-Reset un Taktsignal,
+
* die Steuerung des Systems via RS232 durch den Block '''ahbuart'''.
+
 
+
=== Simulation ===
+
 
+
Initialisieren Sie die Schaltung, indem Sie den Charakter 55 h auf der RS232-Linie
+
sendet. Der Block '''ahbuart''' kann sich damit automatisch der Baudrate der
+
seriellen Linie anpassen.
+
 
+
Lesen Sie den Inhalt des Speicher an Adresse 8000.0100 h. Dies wird mit Hilfe der
+
Sequenz 83 80 00 01 00 durchgeführt. Folgen Sie das, was auf dem AMBA-Buss passiert, von dem
+
Empfang der Steuerung bis zum Zurücksenden der Daten. ErkLären Sie den Wert der Daten,
+
welche vom Speicher gelesen wurden.
+
 
+
'''Figure 5. Simulation'''
+
 
+
[[Image:ambaSimulation.png]]<br>
+
 
+
{{navNamed|left=SEm/labore/04_synthese|left_name=04 Automatische Synthese|up=SEm/labore|up_name=Anleitung auf Deutsch|right=SEm/labore/06_apb|right_name=06 APB Komponent}}
+
  
 
[[Category:SEm]]
 
[[Category:SEm]]

Latest revision as of 14:55, 17 April 2015

Contents

AMBA-Bus basiertes System

Einleitung

In diesem Labor werden wir einen simplen Peripheriebaustein für den AMBA-Lite-Bus erstellen: eine bidirektionellen Ein-/Ausgangskanal.

AHB-Lite ist eine einfache Variante der Busfamilie Advanced Microcontroller Bus Architecture (AMBA). Sein spezielles Merkmal ist, dass er nur einen Master zulässt.

In einem Peripheriebaustein müssen die Werte, welche der Master (hier Mikroprozessor) in die Register schreibt, gespeichert werden. Im Gegensatz werden die Werte, welche der Master liest, direkt kombinatorisch weitergegeben, ohne sie durch Flipflops zu verzögern.

AMBA-Buszugriffe

Zugriffe erfolgen jeweils in zwei Taktzyklen, wobei der erste für die Adressierung und der zweiter zum den Datentranfser dienen.


View-pim-tasks.png

Führen Sie eine Simualtion der Testbank ahbGpio_tb mit der Simulationskonfiguration abhGpio.do durch.


View-pim-tasks.png

Beobachten Sie die Signale

  • haddr
  • htrans
  • hsel
  • hwrite
  • hwdata
  • hrdata

Spezifikation

AhbLiteComponents ahbGpio

Der zu erstellende Komponent wird dazu dienen, auf der Testplatte Schalter zu lesen und LEDs zu steuern. Die Anzahl Ein- und Ausgänge wird über den Generic ioNb gesetzt. Der Zugriff erfolgt über 3 Register.

Registerplan

Schreiberegister
00, Datenregister, erhält die Werte, welche auf die Ausgänge geschrieben werden
01, Ausgabefreigaberegister, bestimmt die Richtung der Ein-/Ausgänge:'1' = Ausgang.
Leseregister
00, Datenregister, stellt die Werte der Eingänge zur Verfügung

Design

View-pim-tasks.png

Zeichnen Sie das Blockdiagram des AHB-Lite Komponenten ahbGpio.

Realisierung

View-pim-tasks.png

Schreiben Sie den VHDL-Code des AHB-Lite Komponenten ahbGpio.

Verifikation

View-pim-tasks.png

Führen Sie eine Simulation des Systems mit Hilfer der zur verfügung gestellten Testbank durch. Verifizieren Sie die korrekte Funktionalität des neuen Komponenten.


Navigation
Arrow left.gif 04 Automatische Synthese Arrow up.gif Anleitung auf Deutsch UART-Peripheriebaustein Arrow right.gif

Personal tools
Namespaces
Variants
Actions
Navigation
Modules / Projects
Browse
Toolbox