Forum: FPGA, VHDL & Co. DDR2 RAM Ansteuerung mit Virtex-5 ML507


von Cihan K. (lazoboy61)


Lesenswert?

Hallo,

nachdem ich nun seit ein paar Tagen an der Ansteuerung des DDR2 RAM´s 
sitze hätte ich nun ein paar fragen zu diesem Thema.

Erstmal vorweg, ich habe die Dokumente UG086 und XAPP858 schnon gelesen. 
Außerdem habe ich mir unter dem Thread

Beitrag "Xilinx Spartan 3AN -- DDR2 SDRAM Ansteuerung"

schon gue Ansätze und auch Beispielprogramme angesehen.

Nun will ich die Ansteuerung auf dem Board ML507 mit dem Virtex-5 
XC5VFX70T-FF1136 und dem DDR2 RAM Speicher von Micron MT4HTF3264HY-667F1 
(256MB, PC2-5300) durchführen.

Dafür habe ich zunächst den CoreGenerator gestartet, neues Projekt mit 
dem Virtex 5 und der passenden Auswahl getroffen. Anschließend habe ich 
den MIG gestartet und habe dem Standard entsprechend alles ausgewählt 
und eingestellt.

Nun zu meiner Frage. Bei der Bank Section habe ich Probleme gehabt. Es 
gibt ja die Möglichkeit entweder "New Design:..." oder "Fixed Pin 
Out:..:" auszuwählen. Zunächst habe ich es mit "New Design" versucht, 
doch die PIN Zuweisungen in der UCF Datei sind alle vollkommen an 
falschen Bänken und Loc dranne gewesen. Alle händisch zu ändern in der 
UCF wäre nicht die Lösung hatte ich mir gedacht, da die Instanzen mit 
ihren Loc Einträgen nicht mehr stimmen würden (richtig oder falsch, 
erstmal kein Plan dazu).

Dann habe ich versucht mit "Fixed..." die Locs alle selber einzugeben. 
hat auch für die meisten geklappt. Probleme hatte ich an folgenden Pins:
ddr2_we: normalerweise laut Schematic des ML507-Boards muss der an Pin 
K29, doch der MIG kennt diesen Pin nicht, habe einfach deswegen irgend 
einen zugewiesen und manuell in der UCF nach K29 umgeändert. K29 wird, 
wenn ich in Plattform Studio die DDR2 Anbindung zum Prozessor mache auch 
eingetragen, deswegen denke ich, dass K29 ein Bug ist.(?)

Wietere Pins wie sys_rst_n, phy_init_done, error, sys_clk_p, sys_clk_n, 
clk200_p und clk200_n waren für mich nicht ganz ersichtlich. Fakt ist, 
dass ich zu allem eine Verbindung machen musste, da sonst der MIG nichts 
generiert (oder ich einfach nicht next drücken konnte :) ).
clk200_p und _n habe ich an den 200MHz differetiellen Taktpins 
verbunden.
sys_rst_n habe ich an einem Switch verbunden.
phy_init_done und error an LEDs.
sys_clk_p und sys_clk_n wusste ich überhaupt garnicht wohin damit, habe 
sie erstmal einfach an INPUT-Ports verbunden, um die Generierung mit MIG 
abschließen zu können.

Könnt ihr mir zu den Pins sagen, ob die richtig verbunden sind und ob 
die Methode mit "Fixed Pin Out:..." überhaubt der richige Ansatz ist? 
Der nächste Schritt für mich wäre jetzt, durch die Beispiel-Projekte 
(Thread-Link oben angegeben) auf die DDR2 etwas raufzuschreiben und 
wieder zu lesen.

Würde mich über jeden Beitrag sehr freuen.

mfg Cihan

von Duke Scarring (Gast)


Lesenswert?

Für das ML507 sollten sich doch fertige Beispiele finden lassen. Und da 
das Board schon existiert würde ich auch eine fertige .ucf-Datei dafür 
verwenden...

Duke

von Cihan K. (lazoboy61)


Lesenswert?

Danke erstmal für die Anwort Duke.

Habe selber viel recherchiert und habe auch Beispiele gefunden, aber das 
Problem ist dort das gleiche. Die Pin-Zuweisungen passen nicht zum DDR2 
RAM.

Abgesehen vom RAM passen nicht einmal die CLK Zuweisungen.

Ist es denn verkehrt, dass ich die Zuweisungen manuell alle selber 
mache? und leider weiss ich nicht ob alle richtig sind, wie oben 
beschrieben.

Cihan

von Duke Scarring (Gast)


Lesenswert?

Cihan Kalayci schrieb:
> und habe auch Beispiele gefunden, aber das
> Problem ist dort das gleiche. Die Pin-Zuweisungen passen nicht zum DDR2
> RAM.
Dann sind es nicht die richtigen Beispiele gewesen.

Das Board ist ja schon fertig. Und im Schaltplan steht welches Pin wie 
beschaltet ist. Das mußt Du letztendlich dem Coregen/MIG als Vorgabe 
mitgeben.

Duke

von Cihan K. (lazoboy61)


Lesenswert?

Genauso habe ich es ja auch gemacht.

Es geht jetzt erstmal nur um folgende Pins(wie oben erwähnt):

Zitat aus Beitrag 1:
Dann habe ich versucht mit "Fixed..." die Locs alle selber einzugeben.
hat auch für die meisten geklappt. Probleme hatte ich an folgenden Pins:
ddr2_we: normalerweise laut Schematic des ML507-Boards muss der an Pin
K29, doch der MIG kennt diesen Pin nicht, habe einfach deswegen irgend
einen zugewiesen und manuell in der UCF nach K29 umgeändert. K29 wird,
wenn ich in Plattform Studio die DDR2 Anbindung zum Prozessor mache auch
eingetragen, deswegen denke ich, dass K29 ein Bug ist.(?)

Wietere Pins wie sys_rst_n, phy_init_done, error, sys_clk_p, sys_clk_n,
clk200_p und clk200_n waren für mich nicht ganz ersichtlich. Fakt ist,
dass ich zu allem eine Verbindung machen musste, da sonst der MIG nichts
generiert (oder ich einfach nicht next drücken konnte :) ).
clk200_p und _n habe ich an den 200MHz differetiellen Taktpins
verbunden.
sys_rst_n habe ich an einem Switch verbunden.
phy_init_done und error an LEDs.
sys_clk_p und sys_clk_n wusste ich überhaupt garnicht wohin damit, habe
sie erstmal einfach an INPUT-Ports verbunden, um die Generierung mit MIG
abschließen zu können.
(Zitat Ende)

K29 => ddr2_we: hatte der MIG nicht erkannt, ich habs in der UCF 
händisch geändert.

und die Pins:
sys_rst_n => wohin?
phy_init_done => LED (richtig???)
error => LED (richtig???)
sys_clk_p = wohin?
sys_clk_n => wohin?
clk200_p => an CLK200 Differetial (p)
clk200_n => an CLK200 Differetial (n)

von Cihan K. (lazoboy61)


Lesenswert?

Hat denn keiner schon mal den DDR2 Ram einen Virtex 5 ML507 Board in 
Betrieb genommen? evtl. Links mit Beispielen?

gruß Cihan

von Rudolph (Gast)


Lesenswert?


von Cihan K. (lazoboy61)


Angehängte Dateien:

Lesenswert?

Danke für den Link.

Den hatte ich mir auch schon angesehen. In diesem Design stimmen die 
Pin-Zuweisungen aber nicht (ich hoffe ich täusche mich nicht).

Lege die UCF-File des Referenz-Designs und die Schematic in den Anhang. 
Wenn mann die Pins so vergleicht, stimmt es überhaupt garnicht überein, 
oder???

Cihan

von Rudolph (Gast)


Lesenswert?

Cihan Kalayci schrieb:
> Lege die UCF-File des Referenz-Designs und die Schematic in den Anhang.
> Wenn mann die Pins so vergleicht, stimmt es überhaupt garnicht überein,
> oder???

Hast Du das PDF dazu gelesen?

Nach AR#29313 muss das generierte MIG-Design mit dem ML507-UCF erneut 
durchlaufen werden (per "Update Design"). Danach stimmen dann die 
Pinzuordnungen.

von Cihan K. (lazoboy61)


Lesenswert?

Das habe ich eigentlich auch gemacht, hat aber nicht das richtige 
gebracht.

Was ich jetzt neu sehe, das user_design (vom Coregenerator erzeugt) hat 
zwar die falschen Pin-Zuweisungen, aber das example_design (ebenfalls 
vom CoreGenerator erzeugt) hat die richtigen Pin-Zuweisungen.

Nun habe ich die .vhd-Files des example_designs und die dazugehörige UCF 
in einem neuen leeren Projekt eingefügt und durchlaufen lassen 
(Generate...). Er hats bis zum Ende geschafft. War da aber nicht noch 
etwas mit den Instanzen in der UCF die evtl. angepasst werden müssen??? 
Habe nämlich jede Menge an Warnings bekommen(ca. 1300)?!?!

Abgesehen davon, der nächste Schritt wäre doch nun, die Initialisierung, 
Write und Read State-Machine unter Verwendung von UG086 zu entwickeln?

Cihan

von Rudolph (Gast)


Lesenswert?

Cihan Kalayci schrieb:
> Abgesehen davon, der nächste Schritt wäre doch nun, die Initialisierung,
> Write und Read State-Machine unter Verwendung von UG086 zu entwickeln?

Initialisieren musst Du WIMRE nix, das macht der Core. Du kannst dich 
also ganz auf's Lesen und Scheiben konzentrieren, dabei sollte Dir UG086 
weiterhelfen. Evtl. kann der Traffic-Generator aus dem MIG 
Example-Design noch hilfreich sein, das ist aber schon eher 
Geschmackssache.

von Cihan K. (lazoboy61)


Angehängte Dateien:

Lesenswert?

kurz mal zu den Warnings nochmal, sind die erstmal schlimm bzw. hängt es 
evtl. auch mit den Instanzen des UCFs zusammen?

und nochmal kurz auf die wrie und read Statemachine. Im Prinzip muss ich 
doch genau nach dem Schema aus UG086 (Bild im Anhang: Write_Section) die 
Statemachine für den Write-Vorgang programmieren. Oder??
(Read dann natürlich auch entsprechend)

Cihan

von Cihan K. (lazoboy61)


Lesenswert?

Hallo nochmal,

ich habe ein problem mit den Diff-Clock vom Virtex 5.

Wenn ich die MIG ereuge mit differentiel Clock Input (wählbare Option), 
dann muss ich sys_clk_p, sys_clk_n, clk200_p und clk200_n eine 
Portzuweisung machen. Das Problem ist nun, dass ich nur einen 
differentiellen 200 MHz Quarz habe, den ich an clk200_p/_n verbunden 
habe. Was mache ich nun mit sys_clk_p/_n, mit was soll ich die 
verbinden?

Die Testbench, erzeugt von MIG, läuft dann auch nicht.
Bin ratlos, brauche hilfe, danke.

Cihan

von Cihan K. (lazoboy61)


Lesenswert?

laut Referenz-Design muss ja sys_clk_p/_n an die SMA Connectors.
"sys_clk_p" => H14
"sys_clk_n" => H15

Zum einen ist erstmal an den SMA Connectoren nicht dranne und zum 
anderem brauche ich sie im Projekt später für etwas anderes.

Wie soll nun das System seine System-Clock erhalten?
(also wo oder wie am besten sys_clk_p/_n beschalten?)

Cihan

von hans (Gast)


Lesenswert?

#### Module DDR2_SDRAM constraints

Net fpga_0_DDR2_SDRAM_DDR2_ODT_pin<0> LOC=F31;
Net fpga_0_DDR2_SDRAM_DDR2_ODT_pin<0> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_ODT_pin<1> LOC=F30;
Net fpga_0_DDR2_SDRAM_DDR2_ODT_pin<1> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<0> LOC=L30;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<0> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<1> LOC=M30;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<1> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<2> LOC=N29;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<2> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<3> LOC=P29;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<3> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<4> LOC=K31;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<4> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<5> LOC=L31;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<5> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<6> LOC=P31;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<6> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<7> LOC=P30;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<7> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<8> LOC=M31;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<8> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<9> LOC=R28;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<9> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<10> LOC=J31;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<10> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<11> LOC=R29;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<11> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<12> LOC=T31;
Net fpga_0_DDR2_SDRAM_DDR2_A_pin<12> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_BA_pin<0> LOC=G31;
Net fpga_0_DDR2_SDRAM_DDR2_BA_pin<0> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_BA_pin<1> LOC=J30;
Net fpga_0_DDR2_SDRAM_DDR2_BA_pin<1> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_CAS_N_pin LOC=E31;
Net fpga_0_DDR2_SDRAM_DDR2_CAS_N_pin IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_CKE_pin<0> LOC=T28;
Net fpga_0_DDR2_SDRAM_DDR2_CKE_pin<0> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_CS_N_pin<0> LOC=L29;
Net fpga_0_DDR2_SDRAM_DDR2_CS_N_pin<0> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_RAS_N_pin LOC=H30;
Net fpga_0_DDR2_SDRAM_DDR2_RAS_N_pin IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_WE_N_pin LOC=K29;
Net fpga_0_DDR2_SDRAM_DDR2_WE_N_pin IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_CK_pin<0> LOC=AK29;
Net fpga_0_DDR2_SDRAM_DDR2_CK_pin<0> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_CK_pin<1> LOC=E28;
Net fpga_0_DDR2_SDRAM_DDR2_CK_pin<1> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_CK_N_pin<0> LOC=AJ29;
Net fpga_0_DDR2_SDRAM_DDR2_CK_N_pin<0> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_CK_N_pin<1> LOC=F28;
Net fpga_0_DDR2_SDRAM_DDR2_CK_N_pin<1> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DM_pin<0> LOC=AJ31;
Net fpga_0_DDR2_SDRAM_DDR2_DM_pin<0> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DM_pin<1> LOC=AE28;
Net fpga_0_DDR2_SDRAM_DDR2_DM_pin<1> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DM_pin<2> LOC=Y24;
Net fpga_0_DDR2_SDRAM_DDR2_DM_pin<2> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DM_pin<3> LOC=Y31;
Net fpga_0_DDR2_SDRAM_DDR2_DM_pin<3> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DM_pin<4> LOC=V25;
Net fpga_0_DDR2_SDRAM_DDR2_DM_pin<4> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DM_pin<5> LOC=P24;
Net fpga_0_DDR2_SDRAM_DDR2_DM_pin<5> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DM_pin<6> LOC=F26;
Net fpga_0_DDR2_SDRAM_DDR2_DM_pin<6> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DM_pin<7> LOC=J25;
Net fpga_0_DDR2_SDRAM_DDR2_DM_pin<7> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQS<0> LOC=AA29;
Net fpga_0_DDR2_SDRAM_DDR2_DQS<0> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQS<1> LOC=AK28;
Net fpga_0_DDR2_SDRAM_DDR2_DQS<1> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQS<2> LOC=AK26;
Net fpga_0_DDR2_SDRAM_DDR2_DQS<2> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQS<3> LOC=AB31;
Net fpga_0_DDR2_SDRAM_DDR2_DQS<3> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQS<4> LOC=Y28;
Net fpga_0_DDR2_SDRAM_DDR2_DQS<4> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQS<5> LOC=E26;
Net fpga_0_DDR2_SDRAM_DDR2_DQS<5> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQS<6> LOC=H28;
Net fpga_0_DDR2_SDRAM_DDR2_DQS<6> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQS<7> LOC=G27;
Net fpga_0_DDR2_SDRAM_DDR2_DQS<7> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQS_N<0> LOC=AA30;
Net fpga_0_DDR2_SDRAM_DDR2_DQS_N<0> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQS_N<1> LOC=AK27;
Net fpga_0_DDR2_SDRAM_DDR2_DQS_N<1> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQS_N<2> LOC=AJ27;
Net fpga_0_DDR2_SDRAM_DDR2_DQS_N<2> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQS_N<3> LOC=AA31;
Net fpga_0_DDR2_SDRAM_DDR2_DQS_N<3> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQS_N<4> LOC=Y29;
Net fpga_0_DDR2_SDRAM_DDR2_DQS_N<4> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQS_N<5> LOC=E27;
Net fpga_0_DDR2_SDRAM_DDR2_DQS_N<5> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQS_N<6> LOC=G28;
Net fpga_0_DDR2_SDRAM_DDR2_DQS_N<6> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQS_N<7> LOC=H27;
Net fpga_0_DDR2_SDRAM_DDR2_DQS_N<7> IOSTANDARD = DIFF_SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<0> LOC=AF30;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<0> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<1> LOC=AK31;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<1> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<2> LOC=AF31;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<2> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<3> LOC=AD30;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<3> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<4> LOC=AJ30;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<4> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<5> LOC=AF29;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<5> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<6> LOC=AD29;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<6> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<7> LOC=AE29;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<7> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<8> LOC=AH27;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<8> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<9> LOC=AF28;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<9> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<10> LOC=AH28;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<10> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<11> LOC=AA28;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<11> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<12> LOC=AG25;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<12> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<13> LOC=AJ26;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<13> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<14> LOC=AG28;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<14> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<15> LOC=AB28;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<15> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<16> LOC=AC28;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<16> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<17> LOC=AB25;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<17> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<18> LOC=AC27;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<18> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<19> LOC=AA26;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<19> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<20> LOC=AB26;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<20> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<21> LOC=AA24;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<21> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<22> LOC=AB27;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<22> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<23> LOC=AA25;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<23> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<24> LOC=AC29;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<24> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<25> LOC=AB30;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<25> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<26> LOC=W31;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<26> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<27> LOC=V30;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<27> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<28> LOC=AC30;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<28> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<29> LOC=W29;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<29> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<30> LOC=V27;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<30> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<31> LOC=W27;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<31> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<32> LOC=V29;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<32> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<33> LOC=Y27;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<33> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<34> LOC=Y26;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<34> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<35> LOC=W24;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<35> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<36> LOC=V28;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<36> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<37> LOC=W25;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<37> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<38> LOC=W26;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<38> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<39> LOC=V24;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<39> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<40> LOC=R24;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<40> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<41> LOC=P25;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<41> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<42> LOC=N24;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<42> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<43> LOC=P26;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<43> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<44> LOC=T24;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<44> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<45> LOC=N25;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<45> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<46> LOC=P27;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<46> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<47> LOC=N28;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<47> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<48> LOC=M28;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<48> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<49> LOC=L28;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<49> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<50> LOC=F25;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<50> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<51> LOC=H25;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<51> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<52> LOC=K27;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<52> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<53> LOC=K28;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<53> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<54> LOC=H24;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<54> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<55> LOC=G26;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<55> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<56> LOC=G25;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<56> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<57> LOC=M26;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<57> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<58> LOC=J24;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<58> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<59> LOC=L26;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<59> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<60> LOC=J27;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<60> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<61> LOC=M25;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<61> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<62> LOC=L25;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<62> IOSTANDARD = SSTL18_II;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<63> LOC=L24;
Net fpga_0_DDR2_SDRAM_DDR2_DQ<63> IOSTANDARD = SSTL18_II;

von Cihan K. (lazoboy61)


Lesenswert?

die pin connection ist mir ja schon klar, es geht mehr um die Clocks, 
mit wo ich die sys_clk_p und _n verbinde beispielsweise

danke aber trotzdem für die Antwort

Cihan

von hans (Gast)


Lesenswert?

Net sys_clk_pin TNM_NET = sys_clk_pin;
Net sys_clk_pin LOC = AH15;
Net sys_clk_pin IOSTANDARD=LVCMOS33;
#Net sys_rst_pin LOC = E9;
#Net sys_rst_pin IOSTANDARD=LVCMOS33;
#Net sys_rst_pin PULLUP;
## System level constraints
Net sys_clk_pin TNM_NET = sys_clk_pin;
TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 10000 ps;
#Net sys_rst_pin TIG;


ich hatte damals im projekt nur das zur system clk hat wunderbar 
funktioniert

von Cihan K. (lazoboy61)


Lesenswert?

Hast du mit Platform Studio den DDR 2 in Betrieb genommen?

Cihan

von hans (Gast)


Lesenswert?

Ich habe mit XPS das design gemacht und die ucf aber damals auch per 
hand angepasst hatte da auch probleme. allerdings ist das schon länger 
her den genauen arbeitsweg weiss ich nicht mehr

von Cihan K. (lazoboy61)


Lesenswert?

Mit XPS habe ich den DDR2 auch schon in Betrieb genommen.

Nun will ich es in VHDL machen und versuche gerade die Testbench des 
example_designs in Betrieb zu nehmen.

Nun habe ich folgendes gemacht:
die sys_clk_p und _n habe ich rausgenommen und habe mir selbst über eine 
DCM 133 MHz kreiert, die ich anstelle der sys_clk_p und _n einsetze.

Zwischenergebnis:
Init funkioniert. Habe die Signale "app_wdf_wren" und "app_af_wren" auf 
dem Osilloskopen bertrachtet, doch leider kann ich die Signalverlaufen 
nicht nachvollziehen. Irgendwie passt es nicht zu den Timing-Verhalten 
wie im UG086 angegeben.

Die Testbench ist doch eigentlich genau so entwickelt, wie im UG086 
angegeben?

Oder sollte ich mir eine eigene Testbench schreiben, dessen 
Timing-Verhalten den Verhalten aus UG086 entspricht?

Bräuchte nochmal Ansätze und Hilfe.

Dankend und mfg
Cihan

von Cihan K. (lazoboy61)


Lesenswert?

Hallo nochmal,

brauche unbedingt eure Hilfe bei der Inbetriebnahme des DDR2 Ram mit dem 
Vitex 5.

Ich habe mir nach dem ich das Design mit dem MIG-Tool kreiert habe, die 
example_design näher unter die Lupe genommen. Habe es auch geschafft auf 
meinem Board zu laden. Die Init funktioniert auch.

Nun habe ich die Signale "app_wdf_wren" und "app_af_wren" angeguckt, die 
ja eigentlich von dem Timingverhalten genauso wie die der im UG086 
vorgegeben Timings sein müssten (siehe UG086 für Write s.384 und für 
Read s.386).

Warum stimmen diese nicht überein? Zum anderen wenn ich meine eigenen 
write und read-Sections entwickele, müsste ich doch genau so wie die 
Timingverhalten des UG086 (für Write s.384 und für Read s.386) 
programmieren?!?

Kann mir da jemand bitte auf die Sprünge helfen, versuche schon seit 
mehr als einer Woche den DDR2 in Betrieb zu nehmen. Würde mich auf jede 
Hilfe sehr freuen. Danke

Cihan

UG086:
http://www.xilinx.com/support/documentation/ip_documentation/ug086.pdf

von Duke Scarring (Gast)


Lesenswert?

Cihan Kalayci schrieb:
> versuche schon seit
> mehr als einer Woche den DDR2 in Betrieb zu nehmen.
Da stehst Du ja erst am Anfang. Ich habe drei Monate für ein 
DDR-Speichercontroller gebraucht...

Duke

von Cihan K. (lazoboy61)


Lesenswert?

ja das ist mir klar, deswegen bin ich ja auch 5 Tage die Woche an der 
Sache dran.

Und zu meinem Fragen kein Kommentar :-S

Cihan

von Vanilla (Gast)


Lesenswert?

Cihan Kalayci schrieb:
> ja das ist mir klar, deswegen bin ich ja auch 5 Tage die Woche an der
> Sache dran.
>
> Und zu meinem Fragen kein Kommentar :-S
>
> Cihan

Hallo Cihan,

ist auch etwas viel verlangt, für ein kommerziell abgewickeltes Projekt 
kostenlosen und zeitnahen Support zu erwarten?
Gibt ja auch Leute die verdienen mit genau jenem Support ihr Geld ;)

Wie dem auch sei, Du schreibst Du versuchst den MIG (DDR2) in Betrieb zu 
nehmen.
Wie groß ist denn dein Wissen im Bezug auf den MIG und DDR(2) im 
Speziellen?

Hast Du Dir mal angeschaut, wie das Interface zum MIG hin aufgebaut ist?
MIG: -> Das sind mehrere Queues welche über seperate FIFOs implementiert 
sind.
Eine Queue für Kommandos (Lesen/Schreiben und Adresse). Und eine weitere 
für (Schreibdaten)
DDR2: -> Ein DDR2 Memory kann nur Bursts verarbeiten. Sprich mit jedem 
Schreibkommando sind 4 Daten zu liefern, (welche vom MIG auf auf Forder- 
und Rückflanke ins RAM geschrieben werden). Zusätzlich gibt es MASK Bits 
mit welchen qualifiziert werden kann ob das übergebene Datum den 
DDR-Raminhalt überschreiben soll.

Und nun Schritt 1 für Dich:

Versuche die Waveform die Du vor Dir hast auf Plausibilität zu prüfen.
Wenn Du hier nicht weiterkommst, dann extrahiere Die Unterschiede und 
gebe Sie hier zum besten.
Nicht jeder hat A) die UG86 (in der von Dir benutzten Fassung) vor sich 
liegen und hat B) Lust sich hier beliebig Zeit zu nehmen um es Dir 
bequem zu machen.
Versuche deine Fragen so konkret wie möglich zu stellen. Dies hilft den 
Lesern DEINEN Fehler nachzuvollziehen und hilft anderen welche auch auf 
die gleichen Probleme stossen, über die Forensuche zu finden.

Viele (Fach-)leute in diesem Forum nehmen sich gerne (etwas) Zeit um die 
Kandidaten über die ersten Hürden zu hiefen. Aber nachdem auch diese 
nach Ihrer Leistung bezahlt werden und außerhalb der Arbeit nur selten 
die betreffenden Dokumente und Software greifbar sind, ist es ein Gebot 
der Fairnis das Problem so gut als möglich aufzuschlüsseln.

Gruß

Vanilla

von Cihan K. (lazoboy61)


Lesenswert?

Hallo Vanilla,

eigentlich habe ich meine Frage schon konkret und öfters immer wieder 
gestellt, doch die Antwort dazu hat leider immer gefehlt.

Ich bin mir schon bewusst, dass nicht jeder immer Zeit für solche 
Angelegenheiten hat, dafür habe ich auch Verständnis.

Nochmal in Klartext und Kurzfassung:
Meine Frage beläuft sich eigentlich nur darauf, ob die vom MIG erstellte 
example_design (mit Testbench) den Timingverhalten des UG086 für Write 
(Bild s.384) und Read (Bild s.386) entsprechen muss, denn dass was ich 
messe ist nicht richtig bzw. unterschiedlich zur doku (UG086). Ist das 
jetzt so oder liege ich falsch.

Und für die jenigen, die es interressiert wie ich die Messung 
durchführe, ich habe im Prinzip nur die WREN Signale auf I/O´s 
rausgeführt und auf dem Oszilloskopen dargestellt. Dabei ebend 
festgestellt, dass die Signale nicht der Doku entsprechen.

Auf Wunsch kann ich auch das Projekt mal zur Verfügung stellen. Es ist 
für das Board ML507 mit dem Virtex 5 FPGA.

Gruß Cihan

von Vanilla (Gast)


Lesenswert?

Cihan Kalayci schrieb:
> example_design (mit Testbench) den Timingverhalten des UG086 für Write
>
> (Bild s.384) und Read (Bild s.386) entsprechen muss, denn dass was ich
> messe ist nicht richtig bzw. unterschiedlich zur doku (UG086).

In der nun mittlerweile gut 10 Jahre alten Geschichte des MIG (und des 
damit einhergehenden Userguides gab es schon mehr als einen Druckfehler.

Ich habe mir jetzt die UG086 in V3.6 auf den von Dir benannten Seiten 
angesehen und konnte auf den ersten Blick keine Fehler erkennen.
Hilft Dir das nun weiter?

Wenn Du dich bequemst dein Messergebis zu graphieren und einzustellen, 
schaue ich mir (und andere auch) das an.

Gruß Vanilla

von Cihan K. (lazoboy61)


Lesenswert?

Danke erstmal für die Antworten.

Werde denke ich mal morgen im Laufe des Tages sowohl Projekt als auch 
Bilder hochladen und versuchen meine Situation besser zu schildern.

Gruß Cihan

von Berndt Eggebrecht (Gast)


Lesenswert?

> Ein DDR2 Memory kann nur Bursts verarbeiten.
> Sprich mit jedem Schreibkommando sind 4 Daten zu liefern,
> (welche vom MIG auf auf Forder-
> und Rückflanke ins RAM geschrieben werden).
> Zusätzlich gibt es MASK Bits
> mit welchen qualifiziert werden kann ob das übergebene
>  Datum den DDR-Raminhalt überschreiben soll.
Wie und mit welcher Geschwindikeit liefert man die 4 Daten? Mehrfach 
parallel mit dem vollen Takt oder nur alle 4 Daten ein Schreibkommando.

Hättest Du einen guten link zu einem Dokument, wo die Funktionen des 
DDR-Speichers mal ganz genau beschrieben sind?

Habe ein ähnliches Thema:
Beitrag "DDR2 Design mit Eagle?"

von Vanilla (Gast)


Lesenswert?

Berndt Eggebrecht schrieb:
>> Ein DDR2 Memory kann nur Bursts verarbeiten.

> Wie und mit welcher Geschwindikeit liefert man die 4 Daten? Mehrfach
> parallel mit dem vollen Takt oder nur alle 4 Daten ein Schreibkommando.
>
>
> Habe ein ähnliches Thema:
> Beitrag "DDR2 Design mit Eagle?"

>Hier geht es speziell um den MIG Memory Controller (oder ggfls. auch den MPMC 
Memoryblock im Spartan6), sprich die Daten werden an den IP-Core übergeben und 
dieser stellt das Timing zum RAM Baustein sicher:

Beim MIG muß sichergestellt werden dass der Controller nach Absetzten 
des Schreibcommandos ausreichend Daten seinem Datenfifo hat.
Der MIG ist Userseitig so aufgebaut dass die Daten mit einfachem Clock 
geliefert werden, deshalb ist der Datenpfad auch doppelt so breit wie 
der Anschluß am RAM. Der MIG wiederum liefert die Daten zu jeder 
steigenden und fallenden Clockflanke (den Clock gibt der MIG selbst aus, 
wird um 90° geschoben, damit ausreichend Setup und Hold vorhanden 
ist...) ans RAM.

> Hättest Du einen guten link zu einem Dokument, wo die Funktionen des
> DDR-Speichers mal ganz genau beschrieben sind?

Die Dokumente in denen die Funktionen GANZ genau beschrieben sind kommen 
von der JEDEC(.org) welche als Standardisierungs Konmmitee der DDR-SDRAM 
Technology fungiert. Dort sollte also alles zu finden sein, was 
DDR-Speicher betrifft. Meines Wissens nach ist auschliesslich eine 
kostenlose Registrierung notwendig.
Alternativ kannst Du Dir auch ein Datenblatt eines beliebigen 
DDR2-Speichers (Tip: Micron) laden. Dort werden alle relevanten Timings, 
sowie des Configurationregisters und die Zusammenhänge zwischen RAS, CAS 
und Bänken ausreichend erklärt.

Am besten nimmt man sich ein-, zwei Stunden mehr Zeit und schaut sich 
zuerst die DDR1 Technik an.
Der technologische Unterschied zu DDR2 ist dann folgender:
Für die Geschwindigkeitssteigerung zwischen DDR1 und DDR2 hat man einen 
Trick angewandt: Die internen Strukturen (Busbreite) wurden 
verbreitert(verdoppelt) und kann intern nun mit halben Takt (gegenüber 
DDR1) arbeiten. Hierfür mussten die Features der Single Access, bzw. 
Burst Interruption rausgekippt werden da sonst das eingesetzte 
Pipelining  nicht funktionieren würde und voila wir sind bei DDR2 
angekommen.

Gruß Vanilla

von Berndt Eggebrecht (Gast)


Lesenswert?

Vanilla schrieb:
> Der technologische Unterschied zu DDR2 ist dann folgender:
> Für die Geschwindigkeitssteigerung zwischen DDR1 und DDR2 hat man einen
> Trick angewandt:
Das bedeutet für mich bei DDR3, dass alles nochmal halbiert ist und man 
intern mit dem 4-tel des Taktes arbeitet. Bekomme ich dann in derselben 
Zeit die gleiche Menge an Daten (bei derselben Taktrate) oder die 
doppelte?

So wie ich das jetzt verstehe, ist der Übergang von DDR1 nach 2 und dann 
nach 3 einfach nur eine interne "Entspannung" der Timingreserven, sodass 
dieselbe Technologie mit etwas höheren Raten gefahren werden kann.

von Vanilla (Gast)


Lesenswert?

Berndt Eggebrecht schrieb:
> Das bedeutet für mich bei DDR3, dass alles nochmal halbiert ist und man
> intern mit dem 4-tel des Taktes arbeitet. Bekomme ich dann in derselben
> Zeit die gleiche Menge an Daten (bei derselben Taktrate) oder die
>
> doppelte?

In der gleichen Zeit, bei gleichem Takt erhällst Du effektiv weniger 
Daten.
Der Grund ist die gestiegene RAS/CAS Latenz.
Das war vor allem anfänglich ein Problem (für die PC-Industrie) beim 
Umstieg von DDR1 nach DDR2. DDR2 Rams (und Chipsätze) mit höheren Takt 
waren anfängllich noch nicht verfügbar, so dass DDR1 PCs solche mit DDR2 
Rams überholten (oder soll man besser sagen vorbeischlichen)...

Ziel des Umstieges war aber die weitere Erhöhung der Taktrate, so dass 
die CAS/RAS Zeit (absolut) in ähnlichen Bereichen wie bei DDR1/DDR2 
liegt.
Durch die beschleunigung der Datenphasen erhällst Du die von DDR2/DDR3 
versprochenen Performanceboos...

>
> So wie ich das jetzt verstehe, ist der Übergang von DDR1 nach 2 und dann
> nach 3 einfach nur eine interne "Entspannung" der Timingreserven, sodass
> dieselbe Technologie mit etwas höheren Raten gefahren werden kann.

Jein. Hauptsächlich wird Geschwindigkeit durch die Parallelisierung 
(Verbreiterung der internen Busstrukturen) geschlagen.
Dass Du ein wenig Margin erhällst wenn Du Setup/Hold Zeiten Einsparen 
kannst ist zwar richtig. Würde aber nur Performance Zuwächse im ein- bis 
leicht zweistelligen Prozentbereich ermöglichen...

von Robert K. (Firma: Medizintechnik) (robident)


Lesenswert?

Vanilla schrieb:
> erhällst

Man erhäl.t. zunächst dieselbe Datenrate. Es ergibt sich aber eine 
Reserve/ein Potenzial, die Rate zu erhöhen.

von Berndt (Gast)


Lesenswert?

hans schrieb:
> Net fpga_0_DDR2_SDRAM_DDR2_DQ<58> IOSTANDARD = SSTL18_II;

Ich glaube, da muss noch eine Definition rein, wie sich die Ausgänge 
differentiel verhalten sollen. Bei mir in den designs steht da was von 
"untuned_50" oder so.

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.