Hallo liebe Forengemeinde,
ich versuche gerade uC/OS-II mit dem NIOSII Prozessor auf einem DE0-nano
Board von Terasic zum laufen zu bringen.
Als erstes habe ich mittels Qsys(Quartus) die Kernarchitektur
zusammengestrickt. Diese besteht aus folgenden Komponenten:
clk, altpll, sdram(custom), nios(s-Version), jtag_uart, timer und sysid.
Den SD-Ram Controller hab ich nach den Timing vorgaben aus dem
Datenblatt erstellt.
Qsys generiert auch das SOPCINFO-File ohne Fehlermeldungen.
Als zweites hab ich in Quartus ein Block Diagramm File erstellt und alle
Pins nach dem Schematic von Terasic angeschlossen.
Auch hier ohne Fehlermeldung kompiliert.
Jetzt bin ich ins Eclipse SBT gewechselt und habe ein uC/OS-Projekt aus
den Beispielen gewählt, BSP angepasst (reduced_device_drivers,
small_c_library), kompiliert alles ohne Fehler.
Wähle ich jetzt jedoch Run As-> NIOS II Hardware, bzw. führe dieselbe
Aktion über die Konsole aus $nios2-download -g uC-OS.elf &&
nios2-terminal.
So erhalte ich folgende Fehlermeldung:
--------------------------------------------------------
Using cable "USB-Blaster [3-2]", device 1, instance 0x00
Pausing target processor: OK
Initializing CPU cache (if present)
OK
Downloaded 44KB in 1.9s (23.1KB/s)
Verifying 02000000 ( 0%)
Verify failed between address 0x2000000 and 0x200AB57
Leaving target processor paused
--------------------------------------------------------
Noch ein Paar Infos zum System:
Arch Linux
Quartus II 64Bit Ver.12.0 Build 263 Web Edition
DE0-nano Board von Terasic
Vielen Dank für eure Hilfe!
MfG, Befedo
Wenn Nios aus dem SDRAM läuft, dann funktioniert dieser nicht. Das
Problem ist oft "falsche" Clock-Phase zum SDRAM Clock. Also muss Du da
noch hand anlegen. Generell ist aber ohne einen Screenshot des
Qsys-Systems schwierig was zu sagen.
Versuche erstmal alles aus dem internen ONCHIP-Speicher laufen zu lassen
(ohne SDRAM). Wenn das läuft, dann nimmst Du SDRAM dazu, lääst aber
immer noch aus dem ONCHIP Speicher laufen... und so weiter und so fort.
Irgendwann mal hast DFu das Problem eingekreist :-)
Grüße,
Kest
Der Hinweis mit der Phasenverschiebung war sehr gut, danke hierführ!
Jedoch schlägt der verify Vorgang jetzt an einer anderen Speicherstelle
fehl.
------------------------------------------------------------
Using cable "USB-Blaster [2-9]", device 1, instance 0x00
Processor is already paused
Initializing CPU cache (if present)
OK
Downloaded 44KB in 2.4s (18.3KB/s)
Verifying 00000000 ( 0%)
Verify failed between address 0x0 and 0xAB57
Leaving target processor paused
------------------------------------------------------------
Bin mir auch nicht so ganz sicher wie ich die CONDUIT Ausgänge von der
PLL anschliessen soll.
Damit Ihr was handfestes habt, hab ich euch die .bsp und .qsys Dateien
mal angehägt.
Wär super, wenn da mal jemand drüber schauen könnte.
Ach ja, das Eclipse SBT Projekt ist immer noch die Hello World Variante
von uC-OS.
Vielen Dank für eure Hilfe!
MfG, Befedo
Hallo,
Also zw. 0x0 und 0xAB57 hast Du Deinen SDRAM, also heißt es, dass es
immer noch nicht funktioniert.
Die Conduit Ausgänge/Eingänge Deiner PLL solltest Du exportieren
(einfach auf "Click to export" rechts neben den Signalen) klicken und
diese auch entsprechend beschalten. Es reicht, wenn Du areset auf "0"
legst.
Ich würde alles "etwas" anders machen: c0 ist ja schon richtig
verbunden. SDRAM würde ich auch an c0 hängen. Die phasenverschobene
Clock "c1" würde ich exportieren und direkt mit dem SDRAM-Clock-Pin
verbinden.
Somit läuft Dein ganzes Design in einer Clock-Domäne und du kannst ruhig
mit der Phase spielen, bis es funktioniert.
Dann sollte alles funktionieren.
Grüße,
Kest
Danke Jungs, für eure Hilfe!
Hab es jetzt hinbekommen, dank der Info von Kest. Wie gesagt, die
PLL-CLOCK exportiert und direkt angeschlossen.
Bei weiterer Fehlersuche hab ich auch ein interessantes PDF-Manual zum
Thema SD-RAM speziell auf dem DE0-nano Board gefunden
(ftp://ftp.altera.com/up/pub/Altera_Material/12.0/Tutorials/VHDL/DE0-Nan
o/Using_the_SDRAM.pdf). Hier wird genau erläutert, dass man eine
Phasenverschiebung (clock skew) benötigt. Beziehungsweise welchen Wert
man einstellen soll (3ns).
Worüber man evtl. noch stolpern könnte, wäre die Tatsache das man in der
PLL-Konfiguration den wert mit negativem Vorzeichen und in Grad angeben
muss. Bei mir z.B. -108°@100MHz.
Mit diesen Einstellungen hat der Download/Verify problemlos geklappt.
---------------------------------------------------------------------
Using cable "USB-Blaster [3-2]", device 1, instance 0x00
Pausing target processor: OK
Initializing CPU cache (if present)
OK
Downloaded 44KB in 1.8s (24.4KB/s)
Verified OK
Starting processor at address 0x000001BC
nios2-terminal: connected to hardware target using JTAG UART on cable
nios2-terminal: "USB-Blaster [3-2]", device 1, instance 0
nios2-terminal: (Use the IDE stop button or Ctrl-C to terminate)
---------------------------------------------------------------------
Also Danke nochmal!
MfG Befedo