Gast
#2386486
Hallo, wir haben hier folgendes Problem: Ein NIOS2-System mit DDR2 als Arbeitsspeicher soll gebaut werden. Der DDR2 hat Wortbreite 16 Bit, der generierte DDR2 Controller aus dem SOPC_Builder System hat intern ein 32 Bit breites Interface. Vorerfahrung besteht mit einem System wo der Arbeitsspeicher in einem SSRAM war. Bei den ersten Gehversuchen hat sich gezeigt, dass ein Speichertest NIOS <-> DDR2, lt SignalTap erfolgt der Zugriff anscheinend durch die Caches durch burst-weise. Der Speichertest ist in C mit Pointern implementiert. Wenn jetzt der Debugger benutzt werden soll, dann zeigt sich, dass jeweils 32 Bit korrekt sind (in Wahrheit nur 16 bit, die anderen sind auf 0 wie sie sein sollen) und dann 32 Bit auf 0 gehen. Dabei werden auch davorliegende Addressen überschrieben, bspweise sieht man zuerst 0 --> 0x00000001 2 --> 0x00000000 dann wird der Wert 0x02 auf Wortaddresse 2 geschrieben und es steht 0 --> 0x00000000 2 --> 0x00000002 im Speicher. Das schaut für mich aus wie wenn im zweiten Fall der Burst die Address-Sequenz 2-3-0-1 durchläuft und damit das vorige Wort wieder überschrieben wird. Unsere Theorie dazu ist, dass der Debugger mittels Makros am Cache vorbei in den Speicher schreibt und dadurch keinen gültigen Burst erzeugt. Weiß jemand, wie man das beheben kann? Eine Möglichkeit wäre ein zusätzlicher transparenter Cache außerhalb des NIOS im FPGA an dem auch der Debugger nicht vorbeikommt. Nur finden wir auf die Schnelle keinen Avalon Interface Cache. Insgesamt bin ich ein wenig verwundert, dass es ein derartiges Problem gibt, wenn man ein wenig durchs Netz schaut kriegt man den Eindruck es gibt auch andere Menschen, die NIOS-Systeme mit DDR2 haben und dieses debuggen können. Ist es ein PEBKAC? lg Matthias