Forum: FPGA, VHDL & Co. Memory an Leon3 anbinden


von Christoph K. (easyrider)


Lesenswert?

Hallo,

Ich versuche ein paar einfache Programme auf einem Leon3 zum laufen zu 
bringen.

Ich habe nun mit der grlib den Leon und Peripherie konfiguriert und das 
ganze in ein Digilent Spartan-3 Board geladen.

Funktioniert soweit auch, aber der Externe Speicher (SRAM) auf dem Board 
wird nicht erkannt/eingebunden.

grmon gibt folgendes aus:

[code]
[sys]      SESSION: Thu Jun 12 15:08:21 2014
[sys]      GRMON version: v2.0.48 eval version
[sys]      OS: Windows
[sys]      Command line: grmon.exe -digilent -u -log term.out
[sys]
[sys]      GRMON2 LEON debug monitor v2.0.48 eval version
[sys]
[sys]      Copyright (C) 2013 Aeroflex Gaisler - All rights reserved.
[sys]      For latest updates, go to http://www.gaisler.com/
[sys]      Comments or bug-reports to support@gaisler.com
[sys]
[sys]      This eval version will expire on 27/08/2014
[sys]
[sys]       JTAG chain (2): xcf04s xc3s1000
[usr1]     GRLIB build version: 4113
[usr1]     Detected frequency:  40 MHz
[usr1]
[usr1]     Component                            Vendor
[usr1]     LEON3 SPARC V8 Processor             Aeroflex Gaisler
[usr1]     JTAG Debug Link                      Aeroflex Gaisler
[usr1]     LEON2 Memory Controller              European Space Agency
[usr1]     AHB/APB Bridge                       Aeroflex Gaisler
[usr1]     LEON3 Debug Support Unit             Aeroflex Gaisler
[usr1]     Generic AHB ROM                      Aeroflex Gaisler
[usr1]     Single-port AHB SRAM module          Aeroflex Gaisler
[usr1]     Generic UART                         Aeroflex Gaisler
[usr1]     Multi-processor Interrupt Ctrl.      Aeroflex Gaisler
[usr1]     Modular Timer Unit                   Aeroflex Gaisler
[usr1]     PS2 interface                        Aeroflex Gaisler
[usr1]     VGA controller                       Aeroflex Gaisler
[usr1]     General Purpose I/O port             Aeroflex Gaisler
[usr1]
[usr1]     Use command 'info sys' to print a detailed report of attached 
cores
[usr1]
[usr1]     grmon2> info sys
[usr1]     cpu0      Aeroflex Gaisler  LEON3 SPARC V8 Processor
[usr1]               AHB Master 0
[usr1]     ahbjtag0  Aeroflex Gaisler  JTAG Debug Link
[usr1]               AHB Master 1
[usr1]     mctrl0    European Space Agency  LEON2 Memory Controller
[usr1]               AHB: 40000000 - 80000000
[usr1]               APB: 80000000 - 80000100
[usr1]     apbmst0   Aeroflex Gaisler  AHB/APB Bridge
[usr1]               AHB: 80000000 - 80100000
[usr1]     dsu0      Aeroflex Gaisler  LEON3 Debug Support Unit
[usr1]               AHB: 90000000 - A0000000
[usr1]               AHB trace: 256 lines, 32-bit bus
[usr1]               CPU0:  win 8, hwbp 2, itrace 256, V8 mul/div, lddel 
1
[usr1]                      stack pointer 0xa0000ff0
[usr1]                      icache 2 * 2 kB, 32 B/line lru
[usr1]                      dcache 2 * 2 kB, 32 B/line lru
[usr1]               ilram 1 kB, 8e000000 - 8e000400
[usr1]               dlram 1 kB, 8f000000 - 8f000400
[usr1]     adev5     Aeroflex Gaisler  Generic AHB ROM
[usr1]               AHB: 00000000 - 00100000
[usr1]     ahbram0   Aeroflex Gaisler  Single-port AHB SRAM module
[usr1]               AHB: A0000000 - A0100000
[usr1]               32-bit static ram: 4 kB @ 0xa0000000
[usr1]     uart0     Aeroflex Gaisler  Generic UART
[usr1]               APB: 80000100 - 80000200
[usr1]               IRQ: 2
[usr1]               Baudrate 38461
[usr1]     irqmp0    Aeroflex Gaisler  Multi-processor Interrupt Ctrl.
[usr1]               APB: 80000200 - 80000300
[usr1]     gptimer0  Aeroflex Gaisler  Modular Timer Unit
[usr1]               APB: 80000300 - 80000400
[usr1]               IRQ: 8
[usr1]               8-bit scalar, 2 * 32-bit timers, divisor 40
[usr1]     ps2ifc0   Aeroflex Gaisler  PS2 interface
[usr1]               APB: 80000500 - 80000600
[usr1]               IRQ: 5
[usr1]     adev11    Aeroflex Gaisler  VGA controller
[usr1]               APB: 80000600 - 80000700
[usr1]     gpio0     Aeroflex Gaisler  General Purpose I/O port
[usr1]               APB: 80000800 - 80000900
[usr1]
[usr1]     grmon2> exit
[usr1]

[\code]


Wenn ich in den FPGA eine andere Konfiguration eines ehemaligen Kollegen 
reinlade liefert grmon folgendes:

[code]
[sys]      SESSION: Thu Jun 12 15:13:03 2014
[sys]      GRMON version: v2.0.48 eval version
[sys]      OS: Windows
[sys]      Command line: grmon.exe -digilent -u -log term_vol.out
[sys]
[sys]      GRMON2 LEON debug monitor v2.0.48 eval version
[sys]
[sys]      Copyright (C) 2013 Aeroflex Gaisler - All rights reserved.
[sys]      For latest updates, go to http://www.gaisler.com/
[sys]      Comments or bug-reports to support@gaisler.com
[sys]
[sys]      This eval version will expire on 27/08/2014
[sys]
[sys]       JTAG chain (2): xcf04s xc3s1000
[usr1]     GRLIB build version: 4113
[usr1]     Detected frequency:  40 MHz
[usr1]
[usr1]     Component                            Vendor
[usr1]     LEON3 SPARC V8 Processor             Aeroflex Gaisler
[usr1]     JTAG Debug Link                      Aeroflex Gaisler
[usr1]     LEON2 Memory Controller              European Space Agency
[usr1]     AHB/APB Bridge                       Aeroflex Gaisler
[usr1]     LEON3 Debug Support Unit             Aeroflex Gaisler
[usr1]     Generic AHB ROM                      Aeroflex Gaisler
[usr1]     Single-port AHB SRAM module          Aeroflex Gaisler
[usr1]     Generic UART                         Aeroflex Gaisler
[usr1]     Multi-processor Interrupt Ctrl.      Aeroflex Gaisler
[usr1]     Modular Timer Unit                   Aeroflex Gaisler
[usr1]     PS2 interface                        Aeroflex Gaisler
[usr1]     VGA controller                       Aeroflex Gaisler
[usr1]     General Purpose I/O port             Aeroflex Gaisler
[usr1]
[usr1]     Use command 'info sys' to print a detailed report of attached 
cores
[usr1]
[usr1]     grmon2> info sys
[usr1]     cpu0      Aeroflex Gaisler  LEON3 SPARC V8 Processor
[usr1]               AHB Master 0
[usr1]     ahbjtag0  Aeroflex Gaisler  JTAG Debug Link
[usr1]               AHB Master 1
[usr1]     mctrl0    European Space Agency  LEON2 Memory Controller
[usr1]               AHB: 40000000 - 80000000
[usr1]               APB: 80000000 - 80000100
[usr1]               32-bit static ram: 1 * 1024 kbyte @ 0x40000000
[usr1]     apbmst0   Aeroflex Gaisler  AHB/APB Bridge
[usr1]               AHB: 80000000 - 80100000
[usr1]     dsu0      Aeroflex Gaisler  LEON3 Debug Support Unit
[usr1]               AHB: 90000000 - A0000000
[usr1]               AHB trace: 256 lines, 32-bit bus
[usr1]               CPU0:  win 8, hwbp 2, itrace 256, V8 mul/div, lddel 
1
[usr1]                      stack pointer 0x400ffff0
[usr1]                      icache 2 * 2 kB, 32 B/line lru
[usr1]                      dcache 2 * 2 kB, 32 B/line lru
[usr1]               ilram 1 kB, 8e000000 - 8e000400
[usr1]               dlram 1 kB, 8f000000 - 8f000400
[usr1]     adev5     Aeroflex Gaisler  Generic AHB ROM
[usr1]               AHB: 00000000 - 00100000
[usr1]     ahbram0   Aeroflex Gaisler  Single-port AHB SRAM module
[usr1]               AHB: A0000000 - A0100000
[usr1]               32-bit static ram: 4 kB @ 0xa0000000
[usr1]     uart0     Aeroflex Gaisler  Generic UART
[usr1]               APB: 80000100 - 80000200
[usr1]               IRQ: 2
[usr1]               Baudrate 38461
[usr1]     irqmp0    Aeroflex Gaisler  Multi-processor Interrupt Ctrl.
[usr1]               APB: 80000200 - 80000300
[usr1]     gptimer0  Aeroflex Gaisler  Modular Timer Unit
[usr1]               APB: 80000300 - 80000400
[usr1]               IRQ: 8
[usr1]               8-bit scalar, 2 * 32-bit timers, divisor 40
[usr1]     ps2ifc0   Aeroflex Gaisler  PS2 interface
[usr1]               APB: 80000500 - 80000600
[usr1]               IRQ: 5
[usr1]     adev11    Aeroflex Gaisler  VGA controller
[usr1]               APB: 80000600 - 80000700
[usr1]     gpio0     Aeroflex Gaisler  General Purpose I/O port
[usr1]               APB: 80000800 - 80000900
[usr1]
[usr1]     grmon2> exit
[usr1]

[\code]


hier taucht unter dem punkt mctrl0 die zeile
[code]
32-bit static ram: 1 * 1024 kbyte @ 0x40000000
[\code]
auf. Hier ist der Ram ordentlich eingebunden, so dass ich auch Programme 
laden und ausführen kann.

An welcher Stelle vor der Synthese für den FPGA muss ich den SRAM 
einbinden?

von Duke Scarring (Gast)


Lesenswert?

Christoph Krueger schrieb:
> Ich habe nun mit der grlib den Leon und Peripherie konfiguriert und das
> ganze in ein Digilent Spartan-3 Board geladen.
Was für ein FPGA ist da drauf? Für den Spartan3E-500 war der Leon m.E. 
zu groß.

> [usr1]     irqmp0    Aeroflex Gaisler  Multi-processor Interrupt Ctrl.
> [usr1]               APB: 80000200 - 80000300
Die irqmp braucht man m.E. nur, wenn mehrere Prozessoren im Spiel sind.


> Funktioniert soweit auch, aber der Externe Speicher (SRAM) auf dem Board
> wird nicht erkannt/eingebunden.
Das ganze Leon-System wird über config/xcofing konfiguriert. Dort mußt 
Du auch den externen Speicher aktivieren (wenn das für Deine Hardware 
schon vorgesehen wurde). Sonst kann man sich in anderen Designs 
anschauen, wie externer SRAM eingebunden werden kann.

Duke

von Christoph K. (easyrider)


Lesenswert?

> Was für ein FPGA ist da drauf? Für den Spartan3E-500 war der Leon m.E.
> zu groß.

Is nen xc3s1000 druff. Und der ist knackig voll (99 %).
Hab hier aber auch noch ein Nexys-4 Board.
Hab mit dem Spartan erstmal angefangen, weil da, wie eingangs erwähnt, 
noch ne alte, funktionierende Konfiguration vorhanden ist.

> Die irqmp braucht man m.E. nur, wenn mehrere Prozessoren im Spiel sind.
Kann ich ja dann mal versuchen rauszuschmeißen.

> Das ganze Leon-System wird über config/xcofing konfiguriert. Dort mußt
> Du auch den externen Speicher aktivieren (wenn das für Deine Hardware
> schon vorgesehen wurde).

Wo denn?
Ich starte immer mit "make xgrlib".
Da kann ich jede Menge konfigurieren (Prozessor, uart, timer, gpio, vga 
etc), aber wenn ich zum Memory komme kann ich nur den Memory-controller 
enablen, und dem noch 8/16 bit support geben, das wars aber auch schon.

-Christoph

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.