Forum: FPGA, VHDL & Co. Spartan 6 und DDR2-RAM auf SP601


von schrammler (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich versuche seit einigen Tagen vergeblich einen DDR2-RAM auf einem 
SP601-Board zu beschreiben bzw. auszulesen. Ich bin mir auch nicht 
sicher wo genau mein Fehler liegt.
Ich habe mir zunächst mit Hilfe des MIG einen IP-Core für den Speicher 
erstellt. Dabei habe ich die folgenden Einstellungen getroffen:

kein extended MCB
DDR2 SDRAM an Bank 3
Frequenz 200 Mhz
DDR2 Baustein: EDE1116ACBG-1J
Fullstrength
RTT = 50 Ohm
DQS disable
High Temperature Self Refresh Rate disable
128 Bit-bidirectional Port
Bank-Row-Column
Round Robin
Class for Adress, Control, Data = 2
Un-Calibrated Input-Termination mit 50 Ohm
RZQ an C2
differentieller System Clock

Das dabei zur Verfügung gestellte Referenzdesign konnte ich auch 
simulieren. Im Anhang findet Ihr meinen Versuch Daten in den DDR2-RAM zu 
schreiben bzw. diese auszulesen. Das vom MIC bereitgestellte 
CALIB_DONE-Signal ist jedoch immer low, sodass es auch keine 
Kommunikation mit dem RAM funktionieren kann. Es scheint also schon 
etwas bei der Initialisierung schief zu gehen. Ich bin für jede Hilfe 
dankbar! (ich habe auch noch nicht so viel Erfahrung mit FPGAs)

von Trundle T. (shaheed)


Lesenswert?

also ich hab die standard (empfohlen) einstellungen für das sp601 
verwendet und es auch nicht hinbekommen. bei mir hat er in chipscope 
angezeigt das es keine korrekt laufende clock gibt.

als ich mir meinen eigenen kleinen testzyklus geschrieben hab und das 
mig interface selbst definiert hab, hats funktioniert.

ich würde dir auch raten ne kleine routine für die 3 syn. fifos zu 
schreiben und einfach irgendwelche testdaten rein schreiben und dann 
auslesen. das ganze dann in chipscope darstellen und dann kannst 
feststellen ob es klappt oder nicht.

von Cihan K. (lazoboy61)


Lesenswert?

Soweit ich sehen konnte in deinem Projekt, hast du die externen Pins des 
DDR2´s nicht in der UCF beschrieben, d.h. du hättest keine 
hardwaretechnische Verbindung zum DDR2.

Mit dem MIG hast du ja die Core erstellt, die du dann in deinem Projekt 
verwenden kannst, allerdings müsstest du evtl. nochmal prüfen, ob die 
UCF File, die vom MIG erzeugt wurde, auch mit den Pins laut USER GUIDE 
deines Entwicklungsboards übereinstimmen. Diese dann noch mit ins eigene 
Projekt einführen. So habe ich es immer gemacht.

Gruß Cihan

von Trundle T. (shaheed)


Lesenswert?

ja ganz wichtig !! das ist mies beschrieben in der doku, du musst die 
ucf, die der mig-core erstellt (../user-design/..par) als haupt-ucf 
benutzen und deine eignen sachen wie clock,reset etc dann da eintragen. 
und die I/Os vom untermodul u_mig (...) müssen im hauptmodul und 
logischerweise auch im ucf richtig definiert/zugewiesen werden!! ich 
dachte immer das macht der coregenerator von alleine aber das macht er 
nicht.

von schrammler (Gast)


Lesenswert?

Danke für die Hinweise zu den UCF-Dateien! Da könnte wirklich noch der 
Fehler liegen. Ich war auch irgendwie davon ausgegangen das der MIG das 
für mich erledigt (zumal ich ja ein Evaluation Board verwende) ...
Ich kann das Ganze leider erst am Montag anpassen und ausprobiern. Werd 
mich dann aber auf jeden Fall nochmal melden und sagen ob es daran lag 
;)

von schrammler (Gast)


Lesenswert?

Tausend Dank Leute!

Es lag wirklich nur an der UCF-Datei. Zumindest bekomme ich jetzt das 
Calibration_Done Signal und die geschriebenen Daten scheinen mit den 
Gelesenen übereinzustimmen ;)
Werde jetzt erstmal versuchen das alles im Chipscope zu überprüfen.

von Christian K. (Gast)


Lesenswert?

Hi,
ich versuche mich momentan auch an dem DDR2 Speicher vom SP601 Board und 
komme nicht so recht voran. Ich kriege immer Fehler beim "Translate" 
Schritt, da die .ucf Datei fehlerhaft ist. Kannst du nochmal eine 
funktionierende Version deines Beispielprogramms hochladen, oder genau 
erklären wie ich die .ucf konfigurieren muss?

von Duke Scarring (Gast)


Lesenswert?

Christian K. schrieb:
> Ich kriege immer Fehler beim "Translate"
> Schritt, da die .ucf Datei fehlerhaft ist.
Häng doch mal Deine .ucf als Anhang hier an und zeig uns die 
Fehlermeldung.

Duke

von Christian K. (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab den MIG nochmal mit den oben empfohlenen durchlaufen lassen und 
bekommen jetzt lediglich die Nachricht, dass das Programm zu groß ist um 
auf das Board zu passen. Bei dem oben verlinkten "FIFO.7z" sind die 
Hardware-Pins nicht zugewiesen in der .ucf Datei, aber wie füge ich die 
richtigen hinzu? Ich hab es damit versucht die (../user-design/..par) 
.ucf datei in die vorhandene mit reinzukopieren, aber ich bekomme Errors 
für so ziemlich jede Zeile die nicht kommentiert ist. Ich nutze ISE 
Design Suite 14.3 und den CoreGen 64-Bit / MIG 3.61 und habe auch 
erfolglos den MIG "Virtex-6 and Spartan-6" ausprobiert. Ich hab schon 
etwas Erfahrung mit VHDL, musste jedoch bisher nur den Clockgen benutzen 
und hab die restlichen Pins (LED, Switches, UART Schnittstelle) selbst 
zugewiesen, nur ist es beim DDR2 Speicher kaum noch zu überschauen.

von ... (Gast)


Lesenswert?

Kopier mal deine ucf-Datei in das Verzeichnis wo auch dein Projektfile 
liegt und binde die dann nochmal ein.

von Christian K. (Gast)


Lesenswert?

in der ISim-Simulation läuft das Programm schon korrekt aber eine 
Implementierung auf das Board klappt nach wie vor nicht. Kann jemand der 
ein SP601 Board nutzt eventuell ein funktionierendes Beispielprojektfile 
hochladen? Ich hätte nicht gedacht das Daten speichern und wieder laden 
so kompliziert sein würde...

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Ich habe entsprechende den obigen Anweisungen ein Speicherinterface für 
das SP601 erzeugt. Noch fehlt mir der Durchblick.
Die ersten Unklarheiten, die etwas Erklärung bedürfen.



Ich habe mir das mig_39.vho angeschaut,

da gibt es ein Signal, das sich mir nicht so richtig erschließt.
1
c3_clk0  :out std_logic;

Was soll ich damit machen?



interessant ist auch
1
c3_sys_rst_i : in std_logic;

mit der PIN-Zuweisung an LOC="M8" M8 geht im Schaltplan an den großen 
FMC Steckverbinder. Damit dürfte das signal c3_sys_rst_i undefiniert 
sein.
Ein undefinierter Reset?

von Duke Scarring (Gast)


Lesenswert?

René D. schrieb:
> da gibt es ein Signal, das sich mir nicht so richtig erschließt.
>> c3_clk0  :out std_logic;
> Was soll ich damit machen?
Offen lassen. Damit könntest Du eigene Logik takten. Muß man aber nicht.

>
> interessant ist auch
>>c3_sys_rst_i : in std_logic;
Mysteriös. Ich würde es auf einen Taster legen und ggf. entprellen.

Duke

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.