Forum: FPGA, VHDL & Co. CAS/RAS DRAM Refresh mit XC9536XL Problem - Glitch ?


von AppleII E. (apple2enthusiast)


Angehängte Dateien:

Lesenswert?

Hallo liebe Community,

da Ihr mir bisher immer freundlich und schnell auf die Spruenge geholfen 
habt. Nochmal ein CPLD-Neuling-Problem. Ich verwende eine XC9536XL-5 
zwei DRAM banks anzusteuern. Die DRAMS unterstuetzen CAS-before-RAS 
refresh den ich auch verwende. Sowohl das Schreiben als auch Lesen 
klappt gut, fuer eine Bank auch problemlos (der Pfad mit den Inverter 
auf die BUFE). Die DRAMS sind auch 100% ok.

Nun mein Problem, es scheint, dass sich ab und an etwas 
"glitch"-aehnliche (?!) einschleicht, und zwar teste ich die RAMS mit 
einem Testprogramm (insgesamt 8MB, lower und upper 4MB). Die Lower 4MB 
sind 100% ok, bei den upper 8MB gibt es ca. 40 - 80 Lesefehler, die auf 
einen fehlerhaften CAS-before-RAS refresh hindeuten (jeweils meist ein 
bit von HIGH auf LOW hat die Ladung verloren).

Zur Ansteuerung...

Inputs:
- BANK ist jeweils low oder high -> lower oder upper 4MB Bank
- BANK ist immer nur gueltig, wenn ein RISING auf PH2CLK kommt
- PH2CLK, liegt auf GCK2 (pin 44)

Outputs:
- CAS und RAS direkt auf die DRAMs

Was hab ich bisher probiert (Betonung auf probiert)...
- Buffer bei den Ausgaengen, mit SLEW rate SLOW und FAST -> kein Erfolg
- BUFG am PH2CLK -> kein Erfolg

Bin etwas ratlos, ich sage deswegen probiert, weil die Fehlerquote mit 
40 bis 80 von 4 Millionen recht gering ist, und ich quasi keine Chance 
hab sie mit dem Oszi zu erwischen...

Was habe ich als Neuling uebersehen ? Hab ich Glitches wegen dem FF ? 
Ich wuesste aber nicht wo? Liegt es an der Signalqualitaet von PH2CLK? 
Warum klappt es dann aber immer, wenn BANK = LOW ist ? - d.h. nur bei 
BANK = HIGH gibt es die Probleme?

Werde mir noch PH2CLK mit den Scope anschauen, ggf. einen Schmitttrigger 
bevor er auf den XC9536 geht... ?!

Vielen Dank im voraus... Ich denke am Ende werde ich wieder viel gelernt 
haben!

A2Enthusiast

von Achim S. (Gast)


Lesenswert?

AppleII E. schrieb:
> Die Lower 4MB
> sind 100% ok, bei den upper 8MB gibt es ca. 40 - 80 Lesefehler, die auf
> einen fehlerhaften CAS-before-RAS refresh hindeuten (jeweils meist ein
> bit von HIGH auf LOW hat die Ladung verloren).

Das klingt für mich überhaupt nicht nach einem Refresh-Problem. Kommen 
die 40-80 Lesefehler denn wenigstens immer wieder reproduzierbar auf den 
selben Adressen (das wären dann bezüglich Retention die schwächsten 
Zellen). Und hängt der Fehler dramatisch von der Temperatur ab? (Ein 
Puster mit Eisspray müsste aus 80 Retention Fehlern sofort 0 Fehler 
machen).

Dass auf dem chip-externen Datenbuss immer ein Bit von High auf Low 
kippt deutet eher auf ein Signalintegritätsproblem auf dem Datenbus hin. 
DRAMs dieser größer arbeiten intern mit differentiellem Signaling. Was 
auf dem externen Bus als 1 unterwegs ist wird mit 50% Wahrscheinlichkeit 
intern als 0 gespeichert (und ist damit überhaupt nicht 
Retentionkritisch). Umgekehrt zeigen sich Retentionfehler auf dem 
externen Bus mit 50% Wahrscheinlichkeit bei Lowpegel (obwohl es intern 
natürlich die Einsen sind, die wegsterben).

Wenn dein Testprogramm den fehlerhaften Wert mehrfach ausliest kannst du 
prüfen, ob es nur ein Signalintegritätsproblem beim Lesen war oder beim 
Schreiben: Signalintegritätsprobleme beim Schreiben landen falsch im 
Zellenfeld und sind bei jedem Auslesen falsch. Signalintegritätsprobleme 
beim Lesen haben keinen Einfluss aufs Zellenfeld: bei einem Lesen sind 
sie falsch, beim wiederholten Lesen bekommst du aber schon die richtigen 
Daten.

Wenn es Signalintegritätsprobleme auf dem Datenbus sind, solltest du das 
durch entsprechend kritische Datenmuster verstärken können: wenn du also 
als Datenmuster eine Folge von xFE-x01 benutzt (und Rotationen davon, 
also xFC-x02, xFB-x04, xF7-x08....) , dann wird das eine Bit besonders 
kritisch getestet.

AppleII E. schrieb:
> Bin etwas ratlos, ich sage deswegen probiert, weil die Fehlerquote mit
> 40 bis 80 von 4 Millionen recht gering ist, und ich quasi keine Chance
> hab sie mit dem Oszi zu erwischen...

Lass dein Testprogramm möglichst schnell einen Trigger ausgeben, sobald 
es einen Fehler erkennt. Wenn dein Speicheroszi einen hinreichen tiefen 
Speicher hat, dann kannst du zum Fehler zurückscrollen.

von AppleII E. (apple2enthusiast)


Lesenswert?

Verstehe - danke für die Hinweise. Folgendes lässt mich entsprechend 
rätseln.

Die lower und upper Bank besteht jeweils aus zwei 4Mbitx4 ICs. Ich hatte 
auch schon auf die RAMS getippt... aber ich habe sowohl das lower 
"RAM-Paerchen" als auch die higher Pärchen an beiden CAS0,RAS0 und 
CAS1,RAS0 gehabt. Die ICs (beide upper 4MB und lower 4MB) haben als eine 
4MB Bank fehlerfrei für Tage funktioniert, keine R/W Fehler, keine 
Refresh-fehler. Wie habe ich getestet - jeweils einen Buffer-Block 
de-aktiviert durch E auf ground, und dann den anderen Buffer-Block.

Die Sache ist die, der Bufferblock, der jeweils über den Inverter 
angesprochen wird, also bei LOW = Bank 0 funktioniert. Der Bufferblock 
der direkt angesteuert wird, also bei HIGH = Bank zwar nie R/W Probleme, 
aber diese seltenen Refresh Probleme. Danach habe ich jeweil die Blöcke 
vertauscht, so dass die beide PCB Leitungen getestet wurden, um Probleme 
mit den Signalleitungen auszuschliessen. Es lag nicht am PCB. Wieder hat 
der Bufferblock ohne Inverter Probleme bereitet und er mit dem Inverter 
(Bank = 0) keine....

Sehr seltsam...

Weitere Ideen dazu ?
Danke!

von AppleII E. (apple2enthusiast)


Lesenswert?

Zur Ergänzung:

- Die Fehler kommen auf unterschiedlichsten Adressen
- Es hat jeweils nur 1 bit von 8 einen Fehler
- Jeder Bitfehler ist jeweils ein LOW bit statt einem HIGH bit

von AppleII E. (apple2enthusiast)


Lesenswert?

Sorry noch eine Ergänzung zum Ablauf des Testprograms:

Phase 1:
- alle Bitkombinationen werden pro Speicherzelle geschrieben und wieder 
gelesen, dann kommt das nächste Byte dran, angefangen bei  Byte 0 von 
Bank bis zum letzen Byte der Bank 1.  ---> Hier tretten -NIE- R/W Fehler 
auf

Phase 2:
- um sicher zugehenen, dass auch nach einer gewissen Zeit keine 
Bitfehler vorliegen (Refresh-Probleme), wird nun ein sich änderndes 
Bitmuster (Byte 0 ... 00 FF, Byte 01 FE, usw über den kompletten 
Speicher Bank 0 bis Bank in einem Rutsch geschrieben, und erst nach dem 
kommpletten Beschreiben wieder ausgelesen, angefangen von Byte 0, Bank 0 
bis zum letzten Byte der Bank 1, hier ist die Aufälligkeit --- BANK 0 
hat -NIE- verloren Bits / Fehler, NUR die BANK 1 macht Probleme

von Georg A. (georga)


Lesenswert?

Heutige DRAM halten den Inhalt locker über viele 10ms. Sollte ein 
Refresh verloren geht, macht das nix, weil bei CAS-before-RAS ein 
interner Zähler benutzt wird. D.h. da wird nicht mal eine Zeile 
vergessen.

Verletzungen der Precharge-Time merkt man üblicherweise an dem Ausfall 
einer ganzen RAS-Zeile, da wackelt nicht nur ein Bit.

Es könnte auch ein Groundbounce-Effekt sein, wenn du eine 0 statt einer 
1 liest. Das CPLD versucht zB. an den Adressen zuviele Pins auf 0 zu 
ziehen, damit ist der interne GND so verschoben, dass ein High-Pegel 
trotzdem als 0 erkannt wird. Das deutet dann aber auch auf ein zu 
knappes Timing hin.

Hast du mal die Adressleitungen mit langsamer Slew-Rate probiert?

Ansonsten könnte man noch bei einem Digital-Oszi die Persistance auf 
100% stellen und schauen, ob im integrierten RAS/CAS/Daten-Verlauf 
irgendwo verdächtliche Glitches bzw. Unregelmässigkeiten auftauchen.

Und als letzter Strohhalm kann man versuchen, ob sich mit 10-20p Cs von 
GND gegen RAS, CAS, etc. was ändert. Auch 100-220R gegen GND bzw. VCC 
sind da gut. Wenn sich was ändert, hast du ein Glitch bzw. 
Timingproblem...

: Bearbeitet durch User
von AppleII E. (apple2enthusiast)


Lesenswert?

Danke fuer die Strohhalme... werde ich ich alles ausprobieren und meine 
Erkenntnisse mitteilen :)

von AppleII E. (apple2enthusiast)


Angehängte Dateien:

Lesenswert?

Mir ist bei manchen Zugriffen folgendes aufgefallen (siehe Bilder)

Gelb (Ch1) = PH2CKL (bei steigender Flanke, ist die BANK gültig)
Cyan (Ch2) = BANK (ist gleichzeitig auch Datenleitung D6, ist ein 
gemultiplexter 24Bit Adressbus, D0-D7 sind Sowohl die Bank Adress (wenn 
D6) als auch die Daten)

Der Zustand tritt selten auf, könnte also mit meinen Problem 
zusammenhängen?!

Übrigens die Datenfehler tretten nur
- beim Lesen des oberen 4MB Blocks auf (PH2 steigend und Bank auf HIGH)
- Es sind nicht nur nach 0 gekippte Bits sondern auf nach 1, auf 
beliebigen Bit Positionen

von Achim S. (Gast)


Lesenswert?

AppleII E. schrieb:
> ist ein
> gemultiplexter 24Bit Adressbus, D0-D7 sind Sowohl die Bank Adress (wenn
> D6) als auch die Daten)

kannst du die Busstruktur mal skizzieren?
Kann es sein, dass du Schreib/Lesezugriffe und CAS-before-RAS Zugriffe 
nicht richtig richtig synchronisiert kriegst?

AppleII E. schrieb:
> Der Zustand tritt selten auf, könnte also mit meinen Problem
> zusammenhängen?!

kann es durchaus, für mich sieht es auf den ersten Blick nach einem 
Buskonflikt aus, der ja wahrscheinlich nicht eingeplant sein dürfte.

Wie oben schon geschrieben: lass das Testprogramm einen Hardwaretrigger 
für das Oszi erzeugen, sobal ein Fehler detektiert wurde. Dann kannst du 
leicht nachprüfen, ob in den µs vor jedem Fehler ein ein solcher 
"Buskonflikt" auftrat.

von AppleII E. (apple2enthusiast)


Angehängte Dateien:

Lesenswert?

Hier der Schematic.

Die Adressleitungen A0-A10 gehen direkt per 33  Ohm Widerstand auf die 
DRAM Adressleitungen.

Die Sache ist die, dass wenn ich jeweils nur einmal 4MB teste, es 
tage/nächtelang ohne jede Fehler durchläuft.

Jetzt wollte ich zusätzlich eine weitere Bank ansprechen um auf 8MB zu 
kommen. Die Bankadress ist jeweils auf D0-D7 gelegt (vom Prozessor) 
65816 und ist bei einem steigenden PHI2CLK gültig. In dem Fall werte ich 
nur D6 (lower / upper 4MB) aus gebe dann entweder den CAS/RAS Pärchen 
für die entsprechenden RAMs frei.

Interessant ist auch, es läuft stundenlang problemlos, wenn ich schreibe 
und direkt wieder lese... nur wollte ich sicher gehen dass es keine 
Refreshprobleme gibt, und schreibe dann die kompletten 4MB bzw. 8MB mit 
einem Muster dauert einige Minuten und lese es dann erst nach Minuten 
wieder. Wie gesagt lower 4MB alles Prima, upper 4Mb mit wenigen Fehlern.

Die zwei Spannungslevel ergeben sich durch die Mischung 5V nativ und 
3.3V vom XC9536XL ...

Was mich irritiert ist aber der Spike nach unten.

von Achim S. (Gast)


Lesenswert?

AppleII E. schrieb:
> Hier der Schematic.

und wo ist jetzt hier bitte der gemultiplexte 24bittige Adress und 
Datenbus? Und wo genau an dieser Schaltung hast du deine Messung 
aufgenommen?

AppleII E. schrieb:
> Die zwei Spannungslevel ergeben sich durch die Mischung 5V nativ und
> 3.3V vom XC9536XL ...

interessante Info, dass du mit unterschiedlichen Spannungspegeln 
arbeitest. Und du hast die Info wirklich keinen Moment zu früh gegeben, 
und sie auch nicht unnötig detailliert ausgeführt.

AppleII E. schrieb:
> nur wollte ich sicher gehen dass es keine
> Refreshprobleme gibt, und schreibe dann die kompletten 4MB bzw. 8MB mit
> einem Muster dauert einige Minuten und lese es dann erst nach Minuten
> wieder.

Zum Punkt Refresh habe ich schon einen Tip gegeben: gib ab und zu einen 
Hauch Kältespray auf das DRAM. Wenn die Anzahl der Fehler nicht sofort 
um eine Größenordnung zurückgeht, ist es kein Retentionfehler.

Ich kann mir immer noch eher vorstellen, dass die ändere Zugriffsart bei 
deinem zweiten Test (lange Blöcke jeweils nur mit Schreibzugriffen, dann 
nur mit Lesezugriffen) zu einem Fehler auf deinen Bussen führen, der 
beim ständigen Wechsel zwischen Schreiben und Lesen nicht auftritt. Aber 
ich finde die Beschreibung deines Systems so bruchstückhaft und 
unüberschaubar, dass ich keine weiteren Tips außer den bereits gegebenen 
für habe:

Achim S. schrieb:
> (Ein
> Puster mit Eisspray müsste aus 80 Retention Fehlern sofort 0 Fehler
> machen).

Achim S. schrieb:
> Wenn dein Testprogramm den fehlerhaften Wert mehrfach ausliest kannst du
> prüfen, ob es nur ein Signalintegritätsproblem beim Lesen war oder beim
> Schreiben

Achim S. schrieb:
> Wenn es Signalintegritätsprobleme auf dem Datenbus sind, solltest du das
> durch entsprechend kritische Datenmuster verstärken können

Achim S. schrieb:
> Lass dein Testprogramm möglichst schnell einen Trigger ausgeben, sobald
> es einen Fehler erkennt.

von AppleII E. (apple2enthusiast)


Lesenswert?

Fehler gefunden...

Habe einen statt des BUFE einen OBUFE verwendet und schon ging es. 
Warum, k.A. Hätte gedacht der ISE compiler ist "inteligent" genug um für 
Outputs

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.