Hallo. ich bin verzweifelt. Ich versuche schon seit einigen Tagen ein NIOSII+SDRAM Controller aid DE1 Altera Board zum laufen kriegen, doch es geht einfach nicht. Ich verwende NIOSII/e Version. Wenn ich nur on-chip memory lasse, also ohne SDRAM, dann läuft alles super (zum testen nehme ich Hallo_World beispiel). Füge ich SDRAM controller hinzu, kommt die Fehlermeldung: "Verify failed between address 0x800000 and 0x8001E3". Daher ist es vollkommen egal ob ich reset und exception vector memory auf on-chip oder sdram stelle. Ich habe schon versucht mit PLL die Phasenverschiebung von +/- 54° zu wählen, oder als Clock 100Mhz oder 133 Mhz nehmen (so steht im Datenblatt des SDRAM Chip) in verschiedenen Kombinationen. Im Eclipse NIOSII werden die ID's und Timestamp richtig ausgelesen. Ich mache alles nach Altera Tutorial "SDRAM on DE1 BOard" ftp://ftp.altera.com/up/pub/Altera_Material/9.1/Computer_Organization/DE 1/Tutorials/VHDL/tut_DE1_sdram_vhdl.pdf Dort wird zwar SOPC verwenden, und ich nutze Qsys, daher leichte Abweichungen im Code, aber die Pinzuweisung ist 1 zu 1. Anbei ist die Qsys Konfiguration. C0 ist 100Mhz Clock C1 ist Phasenverschobener Clock. Hilft mir bitte:)
Gast
#3313046
<jtag_uart_0:avalon_jtag_slave> ist mit <nios2_qsys_0:data_master> verbunden. Wäre der <nios2_qsys_0:instruction_master> nicht besser?
Gast
#3313122
Schaue Dir bitte genau die Resets an! Mit QSYS ist es verdammt wichtig, dass die Resets (falls mehrere) in der richtigen Reihenfolge hochkommen. Bis jetzt kommt Dein NIOS mit clk_0 reset, wobei SDRAM und die PLL noch gar nicht fertig sind! Das ist die Krux. Also, implementiere einen Reset Controller, dann noch denn mit PLL-locked füttern und erst dann ans NIOS und SDRAM heranführen. Dann sollte es funzen (falls die Phase stimmt) Kest
Gast
#3313233
Und immer schön in Qsys Assign new Base Adresses klicken!!
Gast
#3313273
Das SDRAM Interface und der Prozessor haben nicht dieselbe Clock-Quelle. Entweder dieselbe Quelle verwenden oder eine Clock crossing bridge einsetzen.
Gast
#3313325
QSYS und SOPC bauen automatisch Clock-Crossing bridges ein, falls die Clock-Domänen unterschiedlich sind. Aber stimmt schon, es ist viel sinnvoller beide mit gleicher Clock-Quelle zu betreiben (fürs Interna ist die Phase sowieso egal) Kest
Gast
#3313788
Kest schrieb: > QSYS und SOPC bauen automatisch Clock-Crossing bridges ein, falls die > Clock-Domänen unterschiedlich sind. Oh, das ist mir bisher nicht bekannt gewesen. Hast Du eine Quelle für diese Information? Gruss
Gast
#3313822
Quelle habe ich nicht parat, aber das ist so :-) Kest
Ich schrieb: > Das SDRAM Interface und der Prozessor haben nicht dieselbe Clock-Quelle. > Entweder dieselbe Quelle verwenden oder eine Clock crossing bridge > einsetzen. Na, so steht es doch überall. PLL produziert zwei Clock Quellen, eine ist "normal" und geht an NIOS, und die verschobene geht an SDRAM. Ok, ich versuche gleich alles mit der selber Quelle zu betreiben. PS "Assign new Base Adresses" habe ich mehrmals geklickt
Gast
#3313990
Hallo, hier gibt es eine kleine Beschreibung für NiosII und ChibiOS auf DE1: http://www.emb4fun.de/fpga/niosii1/index.html Gruß, Michael
Hallo, emb4fun habe ich auch gesehen. Leider wird dort alles in SOPC gemacht, deswegen sieht man nicht wie die RESET und CLK miteinander verbunden werden. Ich habe jetzt alle mit einer Taktquelle versucht, ohne Erfolg. Ich denke alles liegt an RESET Verbindungen. clk_0_clk_in_reset wird mit einem Schalter auf DE1 Board verbunden, so dass ich das System manuell resetten kann, im "normalen" Betrieb ist dieser Schalter immer An (logic '1'). Kann es die Ursache sein?
Gast
#3314119
Böser Kommunist schrieb: > Na, so steht es doch überall. > PLL produziert zwei Clock Quellen, eine ist "normal" und geht an NIOS, > und die verschobene geht an SDRAM. Nein, die Clock im QSYS wird für das Avalon Interface genutzt. Die SDRAM Clock verschiebe ich ausserhalb vom QSYS-System.
Gast
#3314147
Hier findest Du ein Beispiel.
Gast
#3314153
Du kannst auch gut sehen, wie ich das Reset verschalte.
Gast
#3314159
Jetzt, wo ich grad dabei bin, wie sehen Deine Timing-Constraints aus?
Gast
#3314164
Ein funktionierendes Beispiel.
Gast
#3314258
Hallo, >emb4fun habe ich auch gesehen. Leider wird dort alles in SOPC gemacht, >deswegen sieht man nicht wie die RESET und CLK miteinander verbunden >werden. Reset und CLK werden extern im TopLevel erzeugt:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
Eine VHDL Version ist auch vorhanden. Der CLK vom SDRAM ist gegenüber den CLK_SYS verschoben. Gruß, Michael
Die Götter haben mich verlassen. Nach einer schlafloser Nacht, habe ich es trotzdem nicht geschafft, SDRAM zum laufen zu bringen. Hier ist nochmals meine Qsys Konfiguration, jetzt mit PLL-Lockin Geschichte. Ich habe jetzt alle unnötige Sachen weggelassen. Clock_50 geht in das PLL rein. Dort wird er auf 133 MHZ multipliziert, Ein 133 Mhz signal geht direkt ins NIOSII, ein andere Clock wird um 52° verschoben, und geht an SDRAM. Und hier noch der VHDL Code.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
Gast
#3315569
Hallo, was ich bei Dir nicht verstehe, wo kommt der Reset her? Auf dem Bild gibt es ein clk_0_clk_in und ein clk_0_clk_in_reset. Wer setzt das Signal clk_0_clk_in_reset? Es kann nicht die PLL sein, denn diese bekommt ja von clk_0 den Reset. Bei meinen Beispielen habe ich die PLL nicht mit in Qsys gezogen, sondern mit dem Megawizard außerhalb erstellt. Und dann das locked Signal als Reset für das Qsys System benutzt. Viele Grüße, Michael
Gast
#3315837
Wohl ein generelles Problem von Kommunisten (ob böse oder nicht) und Sozialisten, sie begreifen es einfach nicht...
Gast
#3315934
Das ist immer noch falsch. Du kannst den SDRAM-Controller nicht reseten, solange PLL nicht gelockt ist. Unabhängig, was Du noch mit locked machst, aber Du resetest die PLL UND SDRAM Cotrlller mit einem Signal. Das wird nie und nimmer funktionieren. Noch mal langsam. Erst die PLL reseten, dann locked signal ableiten (ggf. invertieren) und an den SDRAM Controller führen (mit einem extra-Resetcontroller (oder von mir aus auch mit external)). Grüße Kest
Hallo. Ich kriege es trotzdem nicht hin: Ich habe das gemacht, was du meinst. Das ganze System wartet auf den PLL LOCK Signal. Die PLL selbst bekommt eigenen RESET Signal, der immer 0 ist. Das Hauptreset ist immer "1", weil alle Komponenten außer PLL mit "active Low"-Reset arbeiten Hier ist noch einmal die Konfiguration.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
Ich habe das Gefühl ich mache was komplett falsch. Im SDRAM Datenblatt steht : "Clock frequency: 166, 143 MHz". Ich vverwende 100Mhz., obwohl überall wird 50-100Mhz genommen. Hilfe
Gast
#3322661
Sorry, ich weiß auch nicht mehr. Aber Du siehst, dass man von Anfang an sorgfältig arbeiten muss. Meist ist man zu schnell, ändert zu viele Sachen, möchte mal eben ausprobieren. Das kann man sofort vergessen. Ich habe unzählige Designs mit NIOS und SDRAM/DDR... und div Flashes gemacht. Bis jetzt habe ich keine "Bugs" diesbezüglich in Altera-Software gefunden. Es ist auch schwierig über so ein Forum rauszufinden, woran es liegt. Am Ende ist es doch ein Jumper auf dem Board, der zwischen EPCS und Active Parallel umschaltet ;-) Grüße Kest
Ich IDIOOOOT...:) Ich verbinde zwar CLK für SDRAM Kontroller, aber DRAM_CLK bleibt doch unverbunden.*FACEPALM* Und keiner hat es gemerkt..:) Jetzt funktioniert es .
Gast
#3323786
So kanns gehen :-D
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.





