Forum: Mikrocontroller und Digitale Elektronik Write Leveling bei einzelnem DDR3-Memory?


von Holger K. (holgerkraehe)


Lesenswert?

Hallo zusammen

Die DDR3 Technologie bietet ja Write-Leveling an. Soweit ich weiss, ist 
es dazu notwendig, dass bestimmte Datenbits 1:1 verdrahtet werden und 
nicht getauscht werden dürfen.

Welche nicht getauscht werden dürfen, hängt scheinbar vom DDR3 
Controller ab und ist nicht immer gleich.

Weiter habe ich gelesen, dass Write-Leveling offenbar nur bei mehr als 
einem angeschlossenen Chip verwendbar ist.

Hat jemand damit erfahrung und weiss, ob man bei der Verwendung nur 
eines einzelnen Chips, alle bits innerhalb eines bytes tauschen darf?

Verwenderter Prozessor: Allwinner A13
Dieser hat leider keinerlei Informationen bezüglich WriteLeveling im 
Datenblatt / manual.

Danke

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Holger K. schrieb:
> Hallo zusammen
>
> Die DDR3 Technologie bietet ja Write-Leveling an. Soweit ich weiss, ist
> es dazu notwendig, dass bestimmte Datenbits 1:1 verdrahtet werden und
> nicht ge swapt werden dürfen.

Soso, "ge swapt". . . Früher (tm) hießt das getauscht.

#Muttersprache
#denglischfürdoofe

von Holger K. (holgerkraehe)


Lesenswert?

Falk B. schrieb:
> Soso, "ge swapt". . . Früher (tm) hießt das getauscht.

Ohjeee

#MontagMorgen...

Danke für den Input ^^ Habs nun geändert :)

von jemand (Gast)


Lesenswert?

Holger K. schrieb:
> Verwenderter Prozessor: Allwinner A13
> Dieser hat leider keinerlei Informationen bezüglich WriteLeveling im
> Datenblatt / manual.
>
> Danke

Das ist nicht mehr so trivial. Ich will gar nicht versuchen, das zu 
erklären, weil ich mir selber nicht 100% sicher bin. Lies lieber selber:
https://blogs.mentor.com/hyperblog/blog/2017/10/24/ddr-design-write-leveling-for-better-dq-timing/
https://www.nxp.com/files-static/32bit/doc/app_note/AN3940.pdf

Im Prinzip sind die Datenleitungen in Bytegruppen unterteilt. Ein Byte 
muss dann gleich lang sein. Zu jedem Byte gehört ein Strobe. 
Entsprechend muss das an die Bausteine ran.

In einer Gruppe wirst du bits tauschen können, aber nicht zwischen 
Bytegruppen.
Also:
D0<>D4 ist möglich
D7<>D8 sicher nicht
Die Laufzeit wird nur Byteweise kompensiert. Ich denke nicht, dass das 
bei einem Allwinner-SOC anders ist, weil es eine Eigenschaft von DDR3 
ist.
Ich kenne übrigens kein Design, wo Bytes getauscht wurden. Im Normalfall 
sollte das nicht nötig sein.

Der Hersteller liefert normalerweise eine Appnote für diese Dinge, und 
daran solltest du dich halten. Im Idealfall kannst du dich an einem 
Referenzdesign orientieren. Ich würde davon abraten, ein eigenes 
DDR3-Layout zu entwerfen, weil das viel Erfahrung benötigt.
Hier wurde das so gemacht: Man nimmt das Referenzdesign und orientiert 
sich daran, unter Einhaltung der entsprechenden Guidelines. Das 
funktioniert dann auch.
Schon das ist keine einfache Aufgabe...

Mit Allwinner ist man halt ange******, weil man keine Doku bekommt. Da 
wärst du mit NXP, ST, Microchip oder einem anderen westlichen Hersteller 
besser dran, da gibts wenigstens ordentliche Dokumentation.

von Holger K. (holgerkraehe)


Lesenswert?

Vielen Dank für deine Antwort.

Mir ist bewusst, dass ich Bytes nicht tauschen darf. Mir geht es 
lediglich darum, die einzelnen Bits innterhalb einer Bytegruppe zu 
tauschen. Aber auch dies darf man offenbar nicht immer tun, da der DDR 
Controller teilweise BIT0 für das write-leveling verwendet. Daher muss 
bei einigen Controllern B0 immmer B0 bleiben. Jedoch habe ich gelesen, 
dass es offenbar auch Controller gibt, welche noch andere als nur B0 für 
das Leveling anwenden.

jemand schrieb:
> ch würde davon abraten, ein eigenes
> DDR3-Layout zu entwerfen, weil das viel Erfahrung benötigt.

Da hast du recht. Habe bereits einmal eines gemacht. Dies mit Erfolg. 
Jetzt gehts ans zweite...

jemand schrieb:
> Mit Allwinner ist man halt ange******, weil man keine Doku bekommt. Da
> wärst du mit NXP, ST, Microchip oder einem anderen westlichen Hersteller
> besser dran, da gibts wenigstens ordentliche Dokumentation.

Jap, das habe ich auch schon bemerkt :)

von Achim S. (Gast)


Lesenswert?

Holger K. schrieb:
> Jedoch habe ich gelesen,
> dass es offenbar auch Controller gibt, welche noch andere als nur B0 für
> das Leveling anwenden.

Das wäre seltsam. Weil ja auch das DRAM mitspielen muss. Der Controller 
kann nicht z.B. auf DQ3 das Signal zur Einstellung des Timings 
verwenden, wenn das DRAM es auf DQ0 raustreibt. Und jedes DRAM treibt - 
pro Byte Datenbreite - nur auf dem ersten Bit (DQ0).

Was du vielleicht gelesen hast: wenn das DRAM mehr als 8 Bit Datenbreite 
hat, dann wird aus DRAM-Sicht nicht nur DQ0 verwendet sondern ebenfalls 
DQ8.

Aus Controllersicht bedeutet das, dass auf allen DQ(n*8) das 
Write-Leveling durchgeführt wird. Udn wenn das Speicherinterface aus 
DRAMs mit 4 Bit Datenbreite aufgebaut wäre, fände aus Controllersicht 
auf allen DQ(n*4) das Write-Leveling statt (aus DRAM-Sicht wäre das 
wieder jeweils nur DQ0).

von Holger K. (holgerkraehe)


Lesenswert?

Vielen Dank für deine Antwort.

Du hast recht, das mach Sinn, dass das Memory ja auch konform sein muss.

Daraus schliesse ich, dass ich DQ1..DQ7 grundsätzlich tauschen darf. Und 
DQ0 idealerweise ungetauscht lasse...

Dankeschön :)

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.