Forum: FPGA, VHDL & Co. Probleme mit NIOSII und uC/OS Design


von Befedo (Gast)


Lesenswert?

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

von Kest (Gast)


Lesenswert?

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

von Johannes T. (johnsn)


Lesenswert?

Ja, klingt nach falscher Speicheranbindung. Mit der PLL einfach den Takt 
fürs SDRAM um 90° phasenverschieben!

von Befedo (Gast)


Angehängte Dateien:

Lesenswert?

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

von Kest (Gast)


Lesenswert?

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

von Befedo (Gast)


Lesenswert?

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

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.