SRAM verzerrt Signale

  • Dank Logic Analyzer entdecke ich Probleme in meinem Design. Manche sind für mich erklärbar und damit lösbar. Aber andere kann ich grundsätzlich nicht verstehen und zuordnen...



    Da ist ein SRAM.

    Ein einfacher Baustein.

    Es hat Eingänge (Adressen Pins).

    Es hat Ausgänge (Daten Pins).

    Klar, noch weitere ...



    Die Adresspins werden von einem CPLD versorgt.


    Laut LA sind die Signale nicht immer so wie erwartet. Nach tagelanger Suche in der Logik habe ich das gemacht, was ein erfahrener Elektroniker sofort gemacht hätte. Der CPLD spiegelt einfach den Adressbus, ohne Bedingung.


    Die Signale am SRAM entsprechen nicht dem Adressbus!


    ---


    Fassungslos!


    CPLD scheint in Ordnung zu sein.

    Das SRAM auch.

    Die Platine laut Ohm Meter auch.


    Test ohne SRAM: Signale am Sockel perfekt!


    Auch mit der normalen Logik im CPLD.



    Fazit: das SRAM verzerrt die Signale am Eingang!



    Wie kann denn das sein?


    Kann es sein, dass kurzzeitig zuviel Strom am Ausgang (Datenbus) des SRAM daran Schuld ist, dass am Eingang (Adressbus) zuviel Strom fließt?


    Ich dachte Ein- und Ausgang ist unabhängig von einander?


    Oder haben alle SRAM Chips eine Macke?

  • Haste mal geschaut, ob das RAM überhaupt an den richtigen Pins eine Spannungsversorgung bekommt?

    Nicht, dass GND oder VCC fehlen und sich das RAM über die Schutzdioden aus den Adressleitungen bedient :)

    Grundsätzlich natürlich auch, ob das RAM überhaupt richtig angeschlossen ist :D


    Um wleches RAM geht es überhaupt?


    PS: bei so etwas nicht nur digital mit dem LA schauen, sondern auch analog mit dem OSZI!

  • Adressleitungen sind immer hochohmig und dürfen keine Signale beeinflussen.


    Versorgung RAM nicht anliegend?

    CPLD Ausgänge nicht richtig konfiguriert?


    Mitglied im Verband der nicht anonymen Elektroschrottabhängigen


  • 2 Dinge möchte ich "anmerken"....


    1. -> die 100 nF Regel beachtet? :sunny:


    2. -> KEIN Ausgang und KEIN Eingang darf "floaten"; ALLE unbenutzten Signalein- und -ausgänge müssen "gepulled" werden; entweder up oder dwn. ::heilig::


    "Kapazitäten" berücksichtigt? Also - beim SRAM - da muss man in's Datenblatt schauen, wie und wo ggf. zB ein Kerko so a la 48 Pico Farad angeknüppert werden muss.


    Ach. Mist - jetzt waren's drei Dinge! angst


    :mrgreen:


    Tante EDIT


    Ah - isch sehe gerade:


    Zitat

    .....all inputs and outputs directly TTL compatible.


    Weil - CMOS ist nicht gleich TTL :xmas:


    -----


    -----


    Das, was ich meinte, war das hier:


    -----


    Anbei das Datenblatt -> W24257A.pdf

  • Haste mal geschaut, ob das RAM überhaupt an den richtigen Pins eine Spannungsversorgung bekommt?

    Stromversorgung ist gut, Selbstverständlich überall Kondensatoren nahe den IC Stromversorgungen.



    PS: bei so etwas nicht nur digital mit dem LA schauen, sondern auch analog mit dem OSZI!

    Nun Ja, ich hab zwar ein Oszi, aber die meisten hier werden wohl besser ausgestattet sein.

    Kann ja auch sein, dass ich zu blöd bin es zu bedienen.


    • das Oszi funktioniert für mich nur bei einem sich periodisch wiederholenden Signal
    • die fraglichen Stellen finde ich gar nie, weil ich keine definierten Triggerpunkte habe
    • der Speicher in dem Oszi ist nicht groß genug um das ganze Geschehenaufzuzeichnen
    • und selbst wenn der Speicher groß wäre, wie finde ich die Stelle wenn ich nur ein oder zwei Signale aufzeichnen kann


    Gut ich könnte mir ein Programm schreiben dass ständig dieselben Zugriffe macht ...


    Mal sehen, vielleicht mach ich das, wenn die Verzweiflung groß genug wird ... :D

  • Adressleitungen sind immer hochohmig und dürfen keine Signale beeinflussen.

    Davon gehe ich eigentlich auch aus ...



    Versorgung RAM nicht anliegend?

    CPLD Ausgänge nicht richtig konfiguriert?

    Sollte passen.


    Beim CPLD habe ich jetzt sogar explizit .OE auf True gesetzt.

    Was ich bisher noch nie benötigt habe wenn etwas immer nur Ausgang ist.

    Und es hat auch nichts gebracht.

  • Uii, das Teil zieht bis zu 180mA. ::blitz::

    Bis zu 3A sollte kein Problem sein für mein Netzteil ...


    Du meinst, er zieht es "zu schnell"?

    Ich finde das Thema interessant und bin dabei auf die Stromaufnahme im Datenblatt gestoßen. Wurde sowas nicht auch als Cache verbaut?

  • Genau. Die RAMs sind schnell und ziehen bei Zugriffen eben diese 180mA.

    Kann man verläßlich wohl nur mit Stromversorgungslagen betreiben (4-lagige Platine mit Flächen für VCC und GND).

    Möglicherweise "hüpft" deine Spannung am RAM nur herum (100nF sind bei dem Strom viel zu wenig) und wenige cm Leiterbahn sind eben auch eine Induktivität.

  • Wurde sowas nicht auch als Cache verbaut?

    Ja genau das ist ein "Cache RAM".


    Ich benötige das so, 12nS mindestens, langsamer wird problematisch.


    Weil der RAM "modifiziert" die Adressleitungen der CPU.

    Also die Adressleitungen gehen ins Mapping RAM, die Datenleitungen des MRAM sind die neuen Adressleitungen.


    Die Adresse, die das MRAM ausgibt muss so schnell wie möglich gültig sein, sonst hat das nachfolgende System Probleme.

  • Genau. Die RAMs sind schnell und ziehen bei Zugriffen eben diese 180mA.

    Kann man verläßlich wohl nur mit Stromversorgungslagen betreiben (4-lagige Platine mit Flächen für VCC und GND).

    Möglicherweise "hüpft" deine Spannung am RAM nur herum (100nF sind bei dem Strom viel zu wenig) und wenige cm Leiterbahn sind eben auch eine Induktivität.

    Ah okay, das würde es erklären.


    Ein Elko am IC löst das Problem wahrscheinlich nicht, oder?

    Der wird nicht schnell genug den nötigen Strom liefern ...


    Aber eine dicke Leitung, direkt angelötet am VCC des RAM würde die Theorie bestätigen?

    Falls das Problem dadurch weg ist oder zumindest weniger wird ...

  • Die Induktivität einer Leitung ist leider kaum von deren Dicke abhängig und der Gleichstromwiderstand ist auch bei normalem Draht sicher klein genug.

    Ich kenne jetzt die Platine nicht, aber sicher sind die Versorgungsleitungen nicht als Fläche möglich.

    Zweiseitige Leiterplatten gehen für langsame ICs sicher noch gut.


    Denke dran: grob sind 12ns wie 80MHz Takt

  • Jaaaa, Danke an alle!


    Es scheint wirklich einen direkten Zusammenhang zu geben, mit der Spannungsversorgung.

    Ich wäre da nie alleine drauf gekommen.

    Hätte das nie vermutet ...




    Also, schwerer Design Fehler ...

    • 4 lagige Platine
    • zusätzliche Elkos mit geringem ESR



    Oder einfach mal andere RAM suchen, die nicht so exzessive Spannungseinbrüche verursachen.

    Wird es halt nicht geben, steile Flanken - hohe Ströme, verflixt!!

  • So, die Platine hat jetzt einen eigenen Layer für 5V und einen für GND




    Die Elkos werde ich noch platzieren ...



    Gibt es da sonst noch was zu beachten bei 4 fach Layer?`


    Bisher habe ich nie 4 Layer benötigt ...

  • Die Induktivität einer Leitung ist leider kaum von deren Dicke abhängig ...


    EIne Fläche ist besser als eine ganz dicke Leitung?


    Warum ist das so?

    Für einen Laien wie mich erklärt?




    Bildet die GND Ebene und die 5V Ebene nicht auch einen Kondensator?

    Wobei das ist eigentlich eh gut ...




    Die bisherigen GND und 5V Leitungen kann ich eigentlich jetzt verschmeißen, oder?

    Oder soll ich die drin lassen?


    Die ober und untere Ebene hat GND als Fläche.

    Kann das so bleiben oder besser weg nehmen?

  • Nunja - einfach darauf achten, das die VIAs auch "durchverbunden" sind, und dementsprechend die Bauteile auch Kontakt zu GND haben!


    Da gab es in der Vergangenheit immer mal - ähhhhh - Designfehler - wo da der "Ground" fehlte! ::vodoo::


    Bei hohen respektive "Steilen" Flanken sollten genügend "Puffer" vorhanden sein - aka - Elkos; bitte an die Kapazitäten der Leiterbahnen denken, und auch daran - das die Daten- und Adressleitungen NICHT in der Nähe von irgendwelchen GND, bzw. Powerleitungen sein sollten.


    Gleiches gilt für den Abstand der Daten- und Adressleitungen selbst zueinander - die "können" sich gegenseitig stören ::solder::

  • Lichte doch noch mal Dein Layout/Bestückung hier ab. In kiCAD kann man sehr schön Ober- u. Unterseite gleichzeitig plotten lassen, sonst diskutieren wir hier über ungelege Eier. Bevor Du ein neues Layout anfängst, muß (!) klar sein, wo die Probleme liegen, andernfalls geht unnötigt Geld durch Neustarts drauf. Nachträglich aufgelötete Stütz-C's auf Prototype-Boards sind die Regel, Anpassungen bei den Versorgungsleitungen etc. ebenfalls. Ein 2-Kanalscope ist für die Fehlersuche ausreichend, allerdings sollte es 100MHz Bandbreite in Deinem Fall haben und am Besten auf einem Kanal 1Gs/s schaffen, ansonsten siehst Du bei 'längeren' Aufzeichnungen (~100us/DIV) nicht genug. Will heißen, beim Rein-Zoomen sind zu wenige Samples an der Darstellung beteiligt. Der Tastkopf sollte >250MHz Bandbreite aufweisen, ansonsten geht von der Y-Bandbreite zu viel verloren. Aus meiner Sicht ist Hopfen-und-Malz noch nicht verloren. Dann wären da noch Screenshots von dem was Du mißt. Ohne diese Bilder ist eine tiefergehende Beurteilung Deines Problems kaum zu schaffen...

  • Lichte doch noch mal Dein Layout/Bestückung hier ab. In kiCAD kann man sehr schön Ober- u. Unterseite gleichzeitig plotten lassen, sonst diskutieren wir hier über ungelege Eier. Bevor Du ein neues Layout anfängst, muß (!) klar sein, wo die Probleme liegen, andernfalls geht unnötigt Geld durch Neustarts drauf.

    Das Layout auf 4 lagig ändern war in zwei Minuten passiert:

    • Anzahl Layer auf 4 setzen
    • GND Durchkontaktierungen mit Layer 2 verbinden
    • 5V Durchkontaktierungen mit Layer 3 verbinden
    • Mit der Prüfspitze auf Kurzschlüsse testen und die Verbindungen kontrollieren




    Dann wären da noch Screenshots von dem was Du mißt. Ohne diese Bilder ist eine tiefergehende Beurteilung Deines Problems kaum zu schaffen...

    Naja mein Oszi ist wahrscheinlich nur Spielzeug, nicht ausreichend für sowas.

    Ein 10 MHz Rechteck oder Sinus Signal zeigt es schon an, aber für das digitale Zeugs ist es wohl nicht geewignet.


    Mein Programm schreibt 32 Word Werte in das RAM, also 64 Byte.

    Wobei die RAM Bausteine abwechselnd angesprochen werden, A0 selektiert eines der beiden RAM Bausteine.


    Danach werden beide RAM durchgehend aktiviert (/CS dauerhaft auf low).

    Das ist der Mapping Modus wo Adressen direkt umgesetzt werden.


    Ohne RAM Bausteine sieht man an der LA Auswertung, dass alles genau nach Plan verläuft:





    Mit eingestecktem Mapping RAM sind die Adressen nur ganz kurz oder gar nicht da.

    Sogar das CS Signal bricht ein.


    Mit aufgelötetem 10µF Elko, zufällig hatte ich Low ESR da, sieht die Sache schon wesentlich besser aus.

    Also liegt es tatsächlich an der Spannungsversorgung.

  • Zu Deinem Layout - 2-lagig mit Massefläche auf der Bestückungsseite:

    Durch die horizontal verlaufenden Leiterbahnen kommt es zu undefiniert langen Wegen vom VCC-Pin zum Masse-Pin. Das gilt ganz besonders für die speicher-Chips und den Prozessor. Hier wäre es günstiger gewesen, die Massefläche auf die Lötseite zu legen. Das dürfte vermutlich der Hauptverursache für die Betriebsprobleme sein. Es ist generell keine gute Idee, das Layout NICHT mit dem Verlegen der VCC und GND Leitungen zu beginnen. Wenn der 10uF so deutlich erkennbare Auswirkungen zum Besseren zeigt, deutet das auf eine zu hochohmige Versorgungszuführung vo Netzteil hin. Der 10uF puffert die durch die Schaltvorgänge erzeugten 'langsamen' Stromsptzen und glättet somit VCC. Das müßte eigentlich mit dem Scope auch deutlich zu sehen sein. Deine Feststellung "Also liegt es tatsächlich an der Spannungsversorgung" ist wohl zutreffend. Kontrolliere aber trotzdem, ob nicht immer noch Spannungseinbrüche auf VCC auftreten, die gößer wie 0.3V sind (den 10uF ev. erhöhen auf z.B. 47uF parallel 100nF). Versuch mal auf der jetzigen Leiterplatte das GND-Ende eines jeden 100nF Stütz-C's mit einem Draht (0.5mm Durchmesser) direkt zum GND-Pin des IC's zu verbinden. Das sollte die Stützwirkung weiter verbessern, da der GND-Pfad des Stütz-C's kürzer und definierter wird. Du kannst auch versuchen, einen zusätzlichen bedrahteten 100nF zwischen VCC und GND Pin zu löten (besonders bei den RAM-Chips). Erhöhe doch auch mal die +5V auf +5.2V. Das liegt noch in der Spec. Verbessert sich dadurch ev. der Betrieb, wenn ja, sind immer noch zu viele Störungen auf der VCC.


    4-lagen PCB:

    Generell wie schon angeklungen die beste Lösung, da so die Impedanz der Versorgung für steile Stromspitzen am geringsten ist. Die so gebildete Kapazität des Plattenkondensators ist jedoch nicht sehr groß, die notwendigen 100nF Stütz-C's ersetzt das auf keinen Fall. Ich erinnere da mal an die 500pF Drehkos in den alten Röhrenradios. In der Größenordnung dürfte sich der erzielte Wert bewegen (wenn überhaupt).


    Testbetrieb:

    Laß die CPU in einer Schleife immer auf die selbe Adresse die selben Daten schreiben/lesen. Das erzeugt eine quasi-statischen Betrieb und Fehler/Störungen lassen sich leichter untersuchen und zuordnen. In Deinen Logiganalyzer-Plots ist viel zu viel auf einmal zu sehen. Teste auch, ob alles ok ist, wenn sich viel Bits auf einmal von '1' auf '0' und umgekehrt ändern. Diese Situationen erzeugen starke Stromspitzen auf der Versorgung. Auch dann muß alles stabil funktionieren. Derartigen Fälle können zu später schwer auffindbaren Fehlern führen.

  • Also irgendwie scheint das nicht 'meine' Woche zu sein.

    Es geht schief was schief gehen kann.



    Diese IC Clips scheinen auch das Ergebnis zu fälschen.

    Wie kann denn das sein?

    Mit mit Ohm Meter scheint alles richtig verbunden zu sein.


    Ich kann doch nicht überall Fähnchen dran löten.

    Bei der nächsten Prototyp Platine mache ich über Stiftleisten dran als Messpunkte ...


    Wenn ich einen Draht an das IC Beinchen drücke, dann schaut am LA alles super aus.

    Über diesen Clip leider nicht so.


    Der Andruck über die Feder des Clip ist aber ziemlich stark.

    Was ist bloß los mit diesem IC Clip?


    Wie macht ihr das denn?

    Gibt es da was zu beachten bei der Verwendung dieser IC Clips?



  • Gibt es da was zu beachten bei der Verwendung dieser IC Clips?

    Ja, es gibt für die unterschiedlichen IC Größen auch unterschiedliche Clips... nur dann ist eine fehlerfreie Messung zu erwarten... aber das hast Du ja wohl eben selber gemerkt.


    z.B.: https://www.google.de/search?q…thuser=1&bih=787&biw=1440


    Gruß Torsten

    BFZ MFA, ZX80Core, AX81, ZX81, ZX81NU, Spectrum+, Harlequin, MSX VG8010, Amstrad NC100, Cambridge Z88, C64, C128D, Amiga 500 & 1200, Atari Portfolio, HP200LX, IBM PC5155, TP755c, TP755cx, T20, T41, T61, PS/2 (Model 40SX), PS/2E, Accura 101, Apple //e, Sharp PC1401 & PC1403H, TI59 m. PC-100c, HP48SX & HP48GX


    An die Person, die meine Schuhe versteckt hat, während ich auf der Hüpfburg war: Werd' erwachsen! :motz:


    ::matrix::

  • Also sorry, hab Blödsinn geschwafelt.


    Mit dem richtigen Clip hat man auch gute Ergebnisse ... :)




    Übrigens es reicht ein 4,7F Tantal für beide IC, damit das MRAM sauber läuft.

    Allerdings habe ich auch GND und VCC mit Drähte verstärkt.


    Nun schaut es wirklich gut aus. :)




  • Anmerkung zur Dokumentation:


    Es läuft jetzt auch ganz ohne Hardware Modifikation.

    Tantal Elko entfernt und zusätzliche Drähte entfernt.


    Trotzdem habe ich im finalen Layout mal SMD Tantal vorgesehen, optional bestückbar.

    Und ich habe die Stromführung überarbeitet.


    Auf das 4 Layer Konzept verzichte ich daher vorläufig.




    Gegenprobe mit dem alten CPLD Design zeigt den Fehler wieder.

    Es ist also wohl hauptsächlich ein Design Problem im CPLD.





    Man muss bei diesen SRAM Typen aufpassen, dass das /OE Signal eher später kommt und eher früher zurückgesetzt wird.

    Wahrscheinlich hat man sonst einen ganz kurzen Moment Bus Konflikte beim schreiben der MRAM.

    Denn im 'Normalbetrieb' wird das Mapping RAM ja nur lesend zugegriffen, /CE und /OE dauerhaft low, funktioniert tadellos.


    Die Logik hat sich sonst nicht verändert.

    Möglicherweise ist deswegen auch der Breadboard Aufbau nicht stabil gelaufen.