DDR3 RAM Datenleitung beliebig anschliessen

OP #4793606
Lesenswert?

Hallo zusammen

Ich bin gerade dabei ein DDR3 Ram an einen Allwinner A20 anzuschliesen.
Dabei stellt sich mir die Frage, ob ich denn nun die Datenleitungen 
beliebig auf den zwei Chips schieben kann, um das Routing optimaler zu 
gestalten.

Die Adressen sind für beide Chips identisch.

Daher gehe ich mal davon aus, dass es keinen Unterschied macht, wo ich 
die Datenleitung anhänge, denn das ausgelesene ist ja immer so 
ausgerichtet, wie ich die Datenleitungen angeschlossen habe. Oder 
übersehe ich da etwas?

Danke!
Angehängte Dateien:
Gast #4793615
Lesenswert?

Auswendig weiss ich es nicht, aber es gibt bei den Addressen eine 
Beschränkung, weil die mehrfunktional benutzt werden. Bei den Daten 
sollte es egal sein, weil die ja nicht deterministisch sind. Hast halt 
dann physikalisch Datensalat in den RAMs, der aber nicht relevant ist.
#4793636
Lesenswert?

@ Holger Krähenbühl (holgerkraehe)

>Dabei stellt sich mir die Frage, ob ich denn nun die Datenleitungen
>beliebig auf den zwei Chips schieben kann, um das Routing optimaler zu
>gestalten.

Superlative kann man nicht steigern.

>Daher gehe ich mal davon aus, dass es keinen Unterschied macht, wo ich
>die Datenleitung anhänge, denn das ausgelesene ist ja immer so
>ausgerichtet, wie ich die Datenleitungen angeschlossen habe. Oder
>übersehe ich da etwas?

Ja, das tust du. Bei DDR3 sind je 4 oder 8 Bit als sog. Lanes an ein 
Taktsignal angebunden. Man darf also bestenfalls innerhalb einer Lane 
die Bits vertauschen.
Moderne RAMs haben mit dem guten, alten SRAM nur noch wenig gemein, dort 
konnte man nach Herzenslust Adressen und Datenleitungen vertauschen.
Gast #4793657
Lesenswert?

Der Hocko schrieb:
> Das ist aber ein rein physikalisches Problem, oder?

Das ist ein Timing-Problem: das DRAM schickt beim Lesen zusammen mit den 
Daten das DQS-Signal, das vom Speichercontroller zum Eintakten der Daten 
genommen wird.

Wenn du das DQS-Signal von DRAM zum Eintakten der Daten von DRAM 
verwendest, dann taktest du die Daten im falschen Zeitpunkt ein. Je 
nachdem, mit welcher Frequenz die Daten übertragen werden (und wie 
identisch die DLLs in beiden DRAMs laufen) sind damit Lesefehler 
vorprogrammiert.
Gast #4793679
Lesenswert?

Ich sehe gerade noch was:

Die "CPU-REF", die manuell mit Spannungsteiler hergestellt werden, sind 
hoffentlich nicht die benötigten 0.75-Ref, oder?

Oder doch?

Macht man das neuerdings wieder mit RR, statt mit einem Regler?
OP #4793680
Lesenswert?

Danke für die Antworten.
Also ich darf die Bits innerhalb einer Lane tauschen.

Das wäre also zb:

LaneA: D0 D1 D2 D3
LaneB: D4 D5 D6 D7
LaneC: ...

Dan dürfte ich nun also wiel folgt anschliessen:

RAM: D0 D1 D2 D3
CPU: D2 D0 D3 D1

Was ich vermutlich nicht darf ist:

RAM: D0 D1 D2 D3
CPU: D5 D7 D2 D0



Ich habe das folgende RAM: K4B4G1646D
Anbei das Datenblatt.
Wo sehe ich nun, wie viele Lanes ich habe und wie breit eine solche ist?

Danke!
Angehängte Dateien:
OP #4793681
Lesenswert?

Der Hocko schrieb:
> Ich sehe gerade noch was:
>
> Die "CPU-REF", die manuell mit Spannungsteiler hergestellt werden, sind
> hoffentlich nicht die benötigten 0.75-Ref, oder?
>
> Oder doch?
>
> Macht man das neuerdings wieder mit RR, statt mit einem Regler?

Ich muss gestehen, ich habe das Schmea zum grössten Teil vom BananaPi 
kopiert. Deshalb kommen auch entsprechende "Basic" Fragen.

Dort war das halt so drinn... BananaPi im Anhang.
Angehängte Dateien:
Gast #4793705
Lesenswert?

Holger K. schrieb:
> Ich habe das folgende RAM: K4B4G1646D
> Anbei das Datenblatt.
> Wo sehe ich nun, wie viele Lanes ich habe und wie breit eine solche ist?

Alle Bits, die zu einem DQS-Signal gehören, gehören zu einer Lane. Dein 
DRAM hat 16 IOs und zwei (jeweils differentielle) DQS-Signale (DQSU und 
DQSL). DQSL gehört zu den "L"ower bits - also DQ0..7
DSQU gehört zu den "U"pper bits - also DQ8..15
Innerhalb der Bytes kannst du die IOs also tatsächlich vertauschen, über 
die Bytegrenzen weg aber nicht.

Neben dem Timing Problem (Zuordnung zum richtigen DQS) gäbe es dann 
nämlich sogar noch ein funktionales Problem: dein DRAM hat auch zwei 
Data-Mask Signale (DMU und DML), mit denen das Schreiben für die eine 
oder andere Hälfte der IOs geblockt werden kann. Wenn dein System auch 
mal byteweise auf den Speicher schreiben mag (also die Schreibzugriffe 
nicht immer mit voller Breite durchführt), dann muss die Zuordnung der 
DM zu den DQ stimmen, sonst werden die falschen Bits geschrieben. Also 
auch deswegen: kein Tausch der DQs über die Grenzen der Bytelanes.
Gast #4793778
Lesenswert?

Achim S. schrieb:
> Innerhalb der Bytes kannst du die IOs also tatsächlich vertauschen, über
> die Bytegrenzen weg aber nicht.

Fast volle Zustimmung. Bei manchen DDR3-Controller gibt es da aber 
Einschränkungen. Beim i.MX6 muss das erste Bit eines Bytes (also 0 und 
8) "richtig" angeschlossen werden, die anderen dürfen munter vertauscht 
werden.

Hier der Auszug aus dem Manual:
The rules are as follows:
• Hardware write leveling – lowest order bit within byte lane must 
remain on lowest order bit of lane by JEDEC compliance (see the “Write 
Leveling” section in JESD79-3E)
  — D0, D8, D16, D24, D32, D40, D48, and D56 are fixed
  — Other data lines free to swap within byte lane
• JEDEC DDR3 memory restrictions are:
  – No restrictions for complete byte lane swapping
  – DQS and DQM must follow lanes

Ob die Allwinners auch so ein tolles Manual haben, weiß ich allerdings 
nicht.
Gast #4793855
Lesenswert?

Auch interessant! Was macht denn das erste Bit so besonders? Das mit den 
der lane-Zuordnung ist eigentlich vollkommen klar und kann nicht nur 
timing-Fehler machen, sondern wird Fehler machen. Aber das 
Bit-Null-Thema ist mir jetzt vollkommen unklar.

?
OP #4793915
Lesenswert?

UiUiUi...

Da gibt es ja viele Stolperfallen.

mh schrieb:
> Fast volle Zustimmung. Bei manchen DDR3-Controller gibt es da aber
> Einschränkungen. Beim i.MX6 muss das erste Bit eines Bytes (also 0 und
> 8) "richtig" angeschlossen werden, die anderen dürfen munter vertauscht
> werden.

Ob das auch für den Allwinner A20 gilt weiss ich nicht.
Da die Chinesen das im Schema jedoch nicht entsprechend umgesetzt haben, 
gehe ich mal nicht davon aus. (Siehe Bild im Anhang)

Ich hoffe das Design wird erfolgreich.
Falls noch jemand Stolperfallen kennt, bitte anmerken.

Danke!
Angehängte Dateien:
Gast #4794179
Lesenswert?

Ein weiterer Stolperstein ist das length-matching.
Alle CA Signale müssen gleich lang sein und möglichst identische 
Impedanzen aufweisen. Das selbe gilt für die Daten lanes. Diese müssen 
in sich die gleiche Länge haben.
Zu einer Daten-lane gehören 8 Datenbits, DQM und das DQS Pärchen.

Die 5 Gruppen können unterschiedlich lang sein, das wird durch das 
leveling ausgeglichen.

D0, D8, D16, D24 sollten 1:1 aufgelegt werden, das ist normalerweise der 
"Feedback" Kanal für das write leveling, sofern der Controller write 
leveling überhaupt hardwareseitig unterstützt. Das tun nämlich nicht 
alle.

Die Generierung der Referenzspannung kann man über Regler oder RR 
machen, mit RR habe ich gute Erfahrung. Allerdings erscheint mir dein 
Spannungsteiler etwas hochohmig.

Der ZQ Widerstand ist normalerweise 50Ohm, 1k habe ich noch nie 
gesehen...
OP #4794213
Lesenswert?

mh schrieb:
> ich schrieb:
>> Der ZQ Widerstand ist normalerweise 50Ohm, 1k habe ich noch nie
>> gesehen...
>
> 50 Ohm habe ich da aber auch noch nie gesehen. Ich kenne da 240 Ohm...

Ja da habt ihr recht. Ich habe das noch nicht korrekt übernommen.
Es werden 240 Ohm sein.

ich schrieb:
> D0, D8, D16, D24 sollten 1:1 aufgelegt werden, das ist normalerweise der
> "Feedback" Kanal für das write leveling, sofern der Controller write
> leveling überhaupt hardwareseitig unterstützt. Das tun nämlich nicht
> alle.

Interessant, was meinst du mit 1:1? Also dass D0 und D8 gleich lang sind 
und D16 und D24? Oder alle vier zusammen gleich lang?

ich schrieb:
> Die Generierung der Referenzspannung kann man über Regler oder RR
> machen, mit RR habe ich gute Erfahrung. Allerdings erscheint mir dein
> Spannungsteiler etwas hochohmig.

Hmm im Original sind es zwei 2k Widerstände welche mittig nach CPU_REF 
gehen und zum DRAM. gespiesen wird der Teiler von DRAM_VCC.
Ich vermute die CPU braucht den Spannungspegel intern?
Gast #4794227
Lesenswert?

Korrektur: ZQ Widerstand=240Ohm

Deine Clockterminierung ist auch etwas seltsam. Hast du 2x 1k längs und 
100p am Eingang des Taktsignals? Das wird so nicht funktionieren. Zeig 
doch mal die Anbindung an den Prozessor.

Bei unterminierten Systemen, wie deinem, habe ich gute Erfahrung mit 
100R zwischen dem CLK-Paar.
Gast #4794233
Lesenswert?

mit 1:1 meine ich:

D0 Controller an D0 RAM1
D8 Controller an D8 RAM1
D16 Controller an D0 RAM2
D24 Controller an D8 RAM2

Ja, Vcc/2 ist ein Referenzwert der intern benötigt wird. Wenn der Teiler 
allerdings zu hochohmig ist, ist das störanfälliger. Schau dir mal an 
welche Genauigkeit an der Referenz benötigt wird.
OP #4795328
Lesenswert?

Vielen Dank für die vielen Antworten!

Habe das Schema nun korrigiert.
Dieses ist nun im Anhang.

ich schrieb:
> Deine Clockterminierung ist auch etwas seltsam. Hast du 2x 1k längs und
> 100p am Eingang des Taktsignals? Das wird so nicht funktionieren. Zeig
> doch mal die Anbindung an den Prozessor.

Habe nun 22 Ohm eingefügt. Die 1k waren Copy Paste werte.

Was meinst du nun zum Schema?
Angehängte Dateien:
Gast #4795591
Lesenswert?

Die Bit0 Geschichte ist noch falsch.

Die Clockterminierung würde ich anders machen. Was erhoffst du dir von 
den 22Ohm und den 10p? Ein DDR Controller hat bereits eine definierte 
Ausgangsimpedanz, das macht dir nur Ärger.
In dem Referenzschaltplan haben die 0 Ohm bestückt und den Kondensator 
nicht. Dann kann man das auch weg lassen, der Sprung deiner Impedanz 
durch die Pads der Bauteile kann zum Problem führen.
Mach einfach einen 100 Ohm Widerstand zwischen das CLK Paar.

Welche Frequenz willst du verwenden?
Wie soll die Topologie aussehen?
http://www.icd.com.au/articles/DDR3-4_Topology_PCBD_Apr2016.pdf
OP #4795637
Lesenswert?

ich schrieb:
> Dann kann man das auch weg lassen, der Sprung deiner Impedanz
> durch die Pads der Bauteile kann zum Problem führen.
> Mach einfach einen 100 Ohm Widerstand zwischen das CLK Paar.

Danke für den Input. Werde ich anpassen.
Den 100 Ohm eher am ende der Leitung?

ich schrieb:
> Welche Frequenz willst du verwenden?

Der DDR3 Ram soll mit 800MHz getaktet werden.

ich schrieb:
> Wie soll die Topologie aussehen?

Ich dachte an Fly by.
Spricht da etwas gegen?

ich schrieb:
> Die Bit0 Geschichte ist noch falsch.

Jain, die banana Pi original Schemas haben da ja auch nicht drauf 
geachtet. Daher gehe ich mal davon aus, dass dies bei diesem Controller 
nicht relevant zu sein scheint.
#4795936
Lesenswert?

Achim S. schrieb:
> stimmt, DQ0 ist besonders, das hatte ich schon wieder verdrängt ;-)
>
> 
https://www.micron.com/products/datasheets/%7BE39E9941-4D9E-426A-9ACA-D65A25A01794%7D?page=8
>
> Um das Timing sauber einzutrainieren kann man das Mode-Register so
> programmieren, dass über DQ0 eine Toggle-Sequenz läuft, die anderen DQs
> halten währenddessen still....

Hmm, aber deswegen kann doch DQ0 trotzdem an jedem beliebigen DQx 
innerhalb der lane liegen?
Gast #4795945
Lesenswert?

Rufus Τ. F. schrieb:
> Holger K. schrieb:
>> Dabei stellt sich mir die Frage, ob ich denn nun die Datenleitungen
>> beliebig auf den zwei Chips schieben kann,
>
> Sollte gehen. Nur bei den Adressleitungen darfst Du das auf keinen Fall,
> denn über die werden nicht nur die Speicheradressen, sondern auch
> weitere Steuerinformationen (für verschiedene Mode-Register)
> transportiert.

Ich würde das so pauschal nicht sagen.

Da gibt es etwas, das ZQ-Kalibrierung heißt. Bei einigen Prozessoren 
erfordert das, dass man bestimmte Datenleitungen an bestimmte Ports des 
Speichercontrollers und des RAMs anschließen muss.

Ich kann nur zum genauen (!) prüfen des Datenblattes raten.
Gast #4796189
Lesenswert?

Holger K. schrieb:
> Danke für die Antwort.
> Anbei das Datenblatt des A20
>
> Leider ist der DDRC Teil sehr spärlich.

Das ist kein Datenblatt, sondern ein Sparwitz. Möglicherweisee hast du 
aber auch nur das falsche erwischt. Da sollte es zumindest ein 
"Reference Manual" geben. Das vom i.MX6 hat zum Beisiel 5800 Seiten, so 
um den Dreh müsste das hier auch aussehen.
Mit DEM Ding wird da kein funktionisfähiges Board herauskommen :-(

Wenn du bezüglich des SOC keine Wahl hast, wirst du dich an bestehenden 
(funktionsfähigen) Designs orientieren müssen. Die einfachste Lösung 
ist, die DDR3-Schaltung des Referenzdesigns 1:1 zu übernehmen. Inklusive 
Layout, das ist nicht ganz unkritisch. Vorsichtig ausgedrückt.
Falls es keines gibt, nimm wenigstens eine funktionsfähige Schaltung, 
welche frei verfügbar ist.
Nichts ist schlimmer, als ein SOC der nicht hochfährt. DDR3 mit dem Oszi 
debuggen ist fast unmöglich - man kommt an die Leitungen schon gar nicht 
ran.

Es gibt übrigens von Freescale ordentliche Prozessoren mit richtiger 
Dokumentation. Möglicherweise wäre das was?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren