SEm/labore/05 amba

From FSI
(Difference between revisions)
Jump to: navigation, search
(Created page with "{{TOC right}} = AMBA-Bus basiertes System = ---- '''Table des matières''' EinleitungZeichnung der SchaltungVorbereitungSchaltung[[Parametrisierun...")
 
 
(23 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
{{TOC right}}
 
{{TOC right}}
 
 
    
 
    
 
= AMBA-Bus basiertes System =
 
= AMBA-Bus basiertes System =
  
----
 
 
'''Table des matières'''
 
 
[[Einleitung]][[Zeichnung der Schaltung]][[Vorbereitung]][[Schaltung]][[Parametrisierung des Systems]][[Index]][[Speicher-Plan]][[Komponenten-spezifische Parameter]][[Erstellung des VHDL Codes]][[Erstellung des anwendungsspezifisches Systems]][[Betrachtung des Systems]][[Simulation des Systems]][[Testbench-Library]][[Einkapslung der Schaltung]][[Testbank]][[Simulation]]
 
 
== Einleitung ==
 
== Einleitung ==
  
Dieses labor zeigt die Erstellung eines AMBA-Bus System, basierend auf der 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 erlauben, eine einfache Schaltung zu bilden, mit einem Prozessor, einem
+
Speicher-Interface und einer seriellen Schnittstelle.
+
 
+
== Zeichnung der Schaltung ==
+
 
+
=== Vorbereitung ===
+
 
+
Im Arbeitsverzeichnis, '''U:\SEm_labs''', erstellen Sie ein neues
+
Verzeichnis '''Ambarchitect'''.
+
 
+
Starten Sie das Programm AMBAdraw, clicken Sie auf '''Import Template
+
Design''' und basieren Sie auf der Schaltung in
+
'''C:/EDA/AMBAdraw/source/template/HDS'''. Dies erlaubt es, eine
+
Referenz-Schaltung zu laden, welche alle GRLib Blöcke enthält, und die schlussendliche
+
Schaltung wird ein Teil dieser Gesamtschaltung sein.
+
 
+
Achtung: alle Preferences gehen verloren, wenn man eine neue Referenz-Schaltung
+
lädt.
+
 
+
=== Schaltung ===
+
 
+
Im Programm AMBAdraw zeichnen Sie die folgende Schaltung.
+
 
+
'''Figure 1. Zu erstellende Schaltung'''
+
 
+
[[Image:ambaDesign.png]]<br>
+
Das Manual '''grLib cores user manual.pdf''' beschreibt alle Bl&ouml;cke des
+
Systems. Es erlauubt es auch, zu bestimmen, auf welche Busse die Komponente angeschlossen
+
werden.
+
 
+
== Parametrisierung des Systems ==
+
 
+
Die Datei '''configuration.xls''' dient dazu, einige Parameter des Systems zu
+
anzugeben.
+
 
+
=== Index ===
+
 
+
Alle Komponente auf dem AHB-Bus haben ein eigenes Index.
+
 
+
F&uuml;llen Sie die Tabelle '''indexes''' der Datei
+
'''configuration.xls''' ein, und updaten Sie die
+
'''hindex'''-Parameter der AHB-Komponenten im Programm AMBAdraw.
+
 
+
Alle Komponente auf dem APB-Bus haben ein eigenes Index, unabh&auml;ngig von den Indexen des
+
APB-Busses.
+
 
+
Abhand von der Tabelle '''indexes''' der Datei
+
'''configuration.xls''', updaten Sie die '''pindex'''-Parameter
+
der APB-Komponenten.
+
 
+
=== Speicher-Plan ===
+
 
+
Die System-Komponente haben je ihr eigenes Speicherposition. Die GRLib parametrisiert
+
dies mit Hilfe einer Adresse und eines Masks.
+
 
+
F&uuml;r die AHB-Bus Slaves:
+
 
+
* ist die Basis-Adresse der Position durch ihre 12 MSBs angegeben,
+
* ist die L&auml;nge des zugeteilten Speichers durch die Maske auf die 12 MSBs gegeben.
+
 
+
F&uuml;r die APB-Komponenten werden Basis Adresse und L&auml;nge &auml;hnlich definiert, nur aber auf
+
die 12 weiteren Bits der Adresse.
+
 
+
F&uuml;llen Sie die Tabellen '''memory map, definition''' der Datei
+
'''configuration.xls''' ein, und updaten Sie die '''haddr'''-,
+
'''hmask'''-, '''paddr'''- und
+
'''pmask'''-Parameter der AHB-Komponenten im Programm AMBAdraw.
+
 
+
=== Komponenten-spezifische Parameter ===
+
 
+
Mit Hilfe des manuals '''grLib cores user manual.pdf''', updaten Sie die
+
andere Parameter der Komponenten im Programm AMBAdraw.
+
 
+
== Erstellung des VHDL Codes ==
+
 
+
Der Programm AMBAdraw generiert ein VHDL-Code abhand einer Referenz-Schaltung welche alle
+
GRLib Bl&ouml;cke enth&auml;lt, und erstellt die schlussendliche Schaltung, indem er die nicht
+
selektierte Komponente wegnimmt.
+
 
+
=== Erstellung des anwendungsspezifisches Systems ===
+
 
+
Cliken Sie auf '''Document and project Settings''' und geben Sie an, in
+
welchem Verzeichnis die Erstellten Dateien geschrieben werden sollen:
+
'''U:\SEm_labs\Ambarchitect'''.
+
 
+
Cliken Sie auf '''Export as HDL'''.
+
 
+
=== Betrachtung des Systems ===
+
 
+
Starten Sie HDL Designer anhand der Datei
+
'''U:\SEm_labs\Ambarchitect\ambarchitect.hdp''', &ouml;ffnen Sie den Block
+
'''toplevel''' betrachten Sie die erstellte Schaltung.
+
 
+
'''Figure 2. Erstellte Schaltung'''
+
 
+
[[Image:ambaCircuit.png]]
+
<br>
+
 
+
Achtung: alle &Auml;nderungen gehen verloren, wenn man vom Programm AMBAdraw neu ein Export
+
durchf&uuml;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&auml;tzlich Referenze zur Library '''ambarchitect_test'''.
+
* im Teil '''ModelSim''', &auml;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 AMBAdraw es nicht &uuml;berschreiben
+
wird.
+
 
+
Erstellen Sie einen neuen Block '''ambarchitect/beamer''', welcher den
+
vorigen Block enth&auml;lt, zusammen mit VHDL-Code, welches die GRLib Ein- und Ausg&auml;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>
+
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.
=== Testbank ===
+
  
In der Library '''ambarchitect_test''', erstellen Sie ein Testbank
+
In einem Peripheriebaustein müssen die Werte, welche der Master (hier Mikroprozessor) in die Register schreibt, gespeichert werden.
'''beamer_tb''' und legen Sie darin den Block
+
Im Gegensatz werden die Werte, welche der Master liest, direkt kombinatorisch weitergegeben, ohne sie durch Flipflops zu verzögern.
'''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
+
=== AMBA-Buszugriffe ===
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&ouml;nnen, &ouml;ffnen Sie die Library
+
Zugriffe erfolgen jeweils in zwei Taktzyklen, wobei der erste für die Adressierung und der zweiter zum den Datentranfser dienen.
'''unisim''', selektieren Sie alle '''RAMB4*'''-Komponente und
+
compilieren Sie diese.
+
  
Plazieren Sie diese Speicher am zu testendem System. Regeln Sie folgende Parameter:
+
{{TaskBox|content=Führen Sie eine Simualtion der Testbank <code>ahbGpio_tb</code> mit der Simulationskonfiguration <code>abhGpio.do</code> durch.}}
  
* die SDRAM hat 12 Adressbits,
+
{{TaskBox|content=Beobachten Sie die Signale
* die 2 Bits DQM der SDRAM sind angeschlossen an sdDQM(4) und sdDQM(0),
+
* <code>haddr</code>
* das Signal CKE der SDRAM ist angeschlossen an sdCkE(0),
+
* <code>htrans</code>
* das Signal Cs_n der SDRAM ist angeschlossen an sdCS_n(0),
+
* <code>hsel</code>
* auf dem Flash sind Byte_n = '1' et RP_n = '1',
+
* <code>hwrite</code>
* auf dem Flash ist CE = "00" &amp; RomS_n(0),
+
* <code>hwdata</code>
* f&uuml;r den Speicher-Kontroller soll bWidth = "01",
+
* <code>hrdata</code>}}
* F&uuml;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
+
== Spezifikation ==
den unidirektionellen Bussen der GRLib anschliesst.
+
  
'''Figure 4. Testbank'''
+
[[File:AhbLiteComponents_ahbGpio_symbol.PNG|thumb|AhbLiteComponents ahbGpio]]
  
[[Image:ambaTestbench.png]]<br>
+
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.
Schreiben Sie den Code der Testbank , um folgende Signale zu erzeugen:
+
  
* Power-on-Reset un Taktsignal,
+
=== Registerplan ===
* die Steuerung des Systems via RS232 durch den Block '''ahbuart'''.
+
  
=== Simulation ===
+
;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.
  
Initialisieren Sie die Schaltung, indem Sie den Charakter 55 h auf der RS232-Linie
+
;Leseregister
sendet. Der Block '''ahbuart''' kann sich damit automatisch der Baudrate der
+
: 00, Datenregister, stellt die Werte der Eingänge zur Verfügung
seriellen Linie anpassen.
+
  
Lesen Sie den Inhalt des Speicher an Adresse 8000.0100 h. Dies wird mit Hilfe der
+
=== Design ===
Sequenz 83 80 00 01 00 durchgef&uuml;hrt. Folgen Sie das, was auf dem AMBA-Buss passiert, von dem
+
Empfang der Steuerung bis zum Zur&uuml;cksenden der Daten. ErkL&auml;ren Sie den Wert der Daten,
+
welche vom Speicher gelesen wurden.
+
  
'''Figure 5. Simulation'''
+
{{TaskBox|content=
 +
Zeichnen Sie das Blockdiagram des AHB-Lite Komponenten <code>ahbGpio</code>.
 +
}}
  
[[Image:ambaSimulation.png]]<br>
+
=== Realisierung ===
Schreiben Sie den Code der Testbank , um folgende Signale zu erzeugen:
+
  
* Power-on-Reset un Taktsignal,
+
{{TaskBox|content=
* die Steuerung des Systems via RS232 durch den Block '''ahbuart'''.
+
Schreiben Sie den VHDL-Code des AHB-Lite Komponenten <code>ahbGpio</code>.
 +
}}
  
=== Simulation ===
+
=== Verifikation ===
  
Initialisieren Sie die Schaltung, indem Sie den Charakter 55 h auf der RS232-Linie
+
{{TaskBox|content=
sendet. Der Block '''ahbuart''' kann sich damit automatisch der Baudrate der
+
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.
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&uuml;hrt. Folgen Sie das, was auf dem AMBA-Buss passiert, von dem
 
Empfang der Steuerung bis zum Zur&uuml;cksenden der Daten. ErkL&auml;ren Sie den Wert der Daten,
 
welche vom Speicher gelesen wurden.
 
  
'''Figure 5. Simulation'''
+
{{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}}
  
[[Image:ambaSimulation.png]]<br>
+
[[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