Ich habe ein Design mit einem LPC1788 zusammen mit einem SDRAM-Modul von ISSI ( IS42S32800D ). Dies ist eine 32-Bit-Schnittstelle.
Ich habe dieses Design ausgearbeitet und einen Prototyp mit einem Leiterplattenhersteller herstellen lassen, der 6-Schicht-Prototypen herstellt. Der Prototyp der Leiterplatte funktioniert einwandfrei. Ich dachte dann, ich würde die Leiterplatte in einer kleinen Charge (100) von meinem üblichen Leiterplattenlieferanten herstellen lassen. Ich gab ihnen die Stapelinformationen, die mein Prototyp verwendete, um sicherzustellen, dass es keine Probleme gab.
Jedoch! Ich habe massive Probleme mit der Produktionsplatine. Anfangs konnte ich mit dem gleichen Code, den ich in meinem Prototyp-Board verwendet habe, keine Antwort vom SDRAM auslösen. Das vorherige Board arbeitete mit 120 MHz, daher war ich mir sicher, dass mit diesem neuen Board etwas nicht stimmte. Ich habe dann einen Beitrag gefunden, in dem Leute vorgeschlagen haben, den Repeater-Modus auf den SDRAM-Datenleitungen zu verwenden (ich hatte dies zuvor nicht verwendet), und dies hat eine Antwort vom SDRAM ausgelöst, die jedoch nicht stabil ist. Ich kann an ungefähr 16 Adressen schreiben, aber bei nachfolgenden Lesevorgängen sind die zurückgegebenen Daten (an jeder Adresse) die Daten, die ich zuletzt geschrieben habe (wahrscheinlich aufgrund des Repeater-Modus). Wenn ich den Repeater-Modus deaktiviere, sind die zurückgegebenen Daten 0xFFFFFFF. Ich versuche jetzt, eine Verbindung mit 48 MHz herzustellen, der niedrigsten Konfiguration, für die ich Zeit habe.
Ich verwende die gleichen Abschlusswiderstände (auf den Datenleitungen) von 22 Ohm auf beiden Karten, Datenleitungen sind durchschnittlich 3 cm lang. Die Uhrlinie ist 2,4 cm lang. Adressleitungen sind durchschnittlich 3,8 cm lang.
Ist dies zu falsch, sollte ich die Uhr länger verzögern, wenn sie wesentlich kürzer ist? Ich stecke hier wirklich fest, da ich nichts an dem Design geändert habe, das ich mir für einen nahtlosen Fertigungslauf für diese Boards erhofft hatte.
Maximum Data Line Length: 59mm (Although this includes the branch to the NAND Flash)
Minimum Data Line Length (Ctrl to Res): 18mm
Maximum Address Line Length: 44mm
Minimum Address Line Length: 24mm
CLK: 24.5mm
CKE: 25mm
CAS: 28mm
RAS: 28.7mm
Hier ist die PCB-Stack-Konfiguration für den ursprünglichen (funktionierenden) Prototyp:
Hier ist die PCB-Stack-Konfiguration für die Produktions-PCBs (nicht funktionierend)
Hier ist das Routing für das SDRAM:
quelle
Antworten:
Das ist ein mieser Stapel. Ihre Kerne sollten 0,2 mm betragen und der Rest Ihrer Dicke sollte im Prepreg zwischen den Schichten 3 und 4 (Inner 1 und Inner 2) liegen.
Der Grund dafür ist, dass für jedes Signal auf einer Spur ein Rückstrompfad in der Ebene direkt darunter vorhanden sein muss. Der Rückstrom in der Ebene versucht, die Induktivität (dh den Schleifenbereich) zu minimieren, was bedeutet, dass er versucht, der Signalspur zu folgen. Wenn die Signalspur von der Ebene entfernt ist, sucht sie nach anderen Spuren, um einen Rückweg zu finden. Das ist Elektromagnetik, gegen die du kämpfst.
Indem Sie innere Schichten in unterschiedlichen Abständen von ihren Referenzebenen haben (denken Sie daran, dass alle Versorgungsschienen bei Wechselstrom wie Erdungen aussehen!), Im Vergleich zu den Abständen der äußeren Schichten, erzeugen Sie jedes Mal eine Impedanzänderung, wenn Sie Schichten tauschen (obwohl dies entgegengewirkt werden kann Die Spurbreite ändert sich, obwohl ich die Mühe nur einmal wert fand, und Sie erhöhen das Potenzial für Übersprechen und andere Interferenzen erheblich.
Eine andere Sache, die Sie überprüfen müssen, sind die verwendeten Materialien: Es gibt über 20 verschiedene Materialien, die sich beispielsweise "FR-4" nennen. Das Zeug, das ich normalerweise benutze, heißt 370-HR. Es verhält sich recht gut mit Hochgeschwindigkeitssignalen von 100-500 MHz.
In Bezug auf die Taktleitung hatte IIRC bei meinem letzten SDRAM-Design die Uhr so eingestellt, dass ihre Kante zuletzt auftrat (ihre Spur war um 1 cm am längsten), nachdem sich alle Adress- und Datenleitungen stabilisiert hatten. Es lohnt sich also, die Uhr zu verzögern. Ich brauchte keine Impedanzregelung für die SDRAM-Leitungen.
Ihre Abschlusswiderstände sollten so nahe wie möglich an den Leitungstreibern platziert werden. Wenn sie nicht innerhalb von etwa 0,5 cm liegen, können sie selbst Reflexionen verursachen, die zu Überschwingen und Klingeln führen. IMHO, 3 cm Spurlänge ist schrecklich kurz, um Abschlusswiderstände zu benötigen (ich benutze sie ab ca. 6-10 cm); Hast du versucht, sie einfach herauszunehmen?
Eine andere Sache, die Sie überprüfen sollten, sind Ihre Flugzeuge: Haben Sie Signalspuren, die Flugzeugschnitte kreuzen? Dies ist ein großes Nein-Nein, da es den Rückstrom zwingt, einen langen Weg um den Schnitt herum zu gehen.
Schließlich ist die Kantenrate bei diesen Konstruktionen ein großes Problem. Viele Chips haben unnötig kurze Anstiegs- und Abfallzeiten, und eine Reduzierung der Taktfrequenz hat keinen Einfluss darauf. Diese schnellen Kanten eignen sich hervorragend zum Erzeugen von Reflexionen. Dies versuchen Ihre 22-Ohm-Abschlusswiderstände zu beheben: Sie verlangsamen die Kanten. Wenn Sie es wirklich vorantreiben, können Sie mit einem Tool wie HyperLynx von Mentor Graphics das optimale Terminierungsdesign finden.
Einige Bücher, die ich Ihnen empfehlen kann und die all dies und noch viel mehr abdecken, und wir schwören auf sie bei der Arbeit:
Diese Bücher behandeln EMI-Reduzierung, Abschirmungsdesign, Leiterplattenstapelung, Impedanzsteuerung, Entkopplung der Stromversorgung und vieles mehr. Außerdem unterrichtet Herr Ott Seminare zu diesem Thema (wird mit einer kostenlosen Kopie seines Buches geliefert).
quelle
Bei dieser Art von Frequenz denke ich, dass Probleme mit dem Typ der Spurlänge wahrscheinlich kein großes Problem darstellen, insbesondere bei Verzögerungsproblemen. Da die Probleme mit einer neuen Leiterplatte begannen, war das allererste, was zu tun war, alle Leitungen auf Kontinuität zu testen (anhand des Datenblattes, nicht Ihres Schaltplans, falls Ihr Schaltplan Fehler aufweist) und jeden Pin zu überprüfen, ob die Wellenformen vorliegen am wenigsten plausibel - selbst wenn Ihr Oszilloskop nicht in der Lage ist, Zeitdetails zu überprüfen, sollte es ziemlich offensichtlich sein, ob offene oder kurzgeschlossene Stifte vorhanden sind.
Solche Dinge ohne angemessenen Umfang zu tun, birgt potenzielle Gefahren - woher wissen Sie, wie viel Spielraum Sie haben? Selbst wenn es funktioniert, woher wissen Sie, ob Sie direkt am Rande sind und aufgrund von Toleranzen, Temperatur oder Mondphase anfällig für Feld- / Produktionsfehler sind?
quelle
2. Hinzufügen Wir gingen davon aus, dass Ihr Design am Rand getestet wurde und der Code für Ihre Fragen perfekt war. (nicht) Ich schlage vor, dass Sie Folgendes überprüfen;
Verwenden Sie eine for / next-Schleife oder einen diskreten Code wie z.
Ich erinnere mich, wie ich mein erstes CMOS-Design von einem Physik-Postgraduierten für eine umschaltbare Timer-Logikplatine mit tragbarer Seismic-Aufzeichnung debuggt habe. Es gab keine Firmware oder uC, aber er führte nie eine Worst-Case-Toleranzanalyse durch und die Hardware hatte überall Rennbedingungen, als ein Dutzend weitere Boards von mir gebaut und debuggt wurden. Der Seismic Prof hat den Leiter der Abteilung Physik hinzugezogen, um zu fragen, warum ich die Boards nicht debuggen konnte. Dann musste ich ihm raten, dass Komponentenvariationen aufgrund von metastabilen Bedingungen und der verwendeten Taktflanke viele Konstruktionsfehler aufwiesen, die als Timing-Race-Bedingungen bezeichnet werden. Er verstand es immer noch nicht, dann fragte ich ihn, wie viele Finger ich entfaltet habe, während ich meine Hand hob, bevor sie meine Taillenhöhe von niedrig nach hoch erreichte. Dann sagte er, das kannst du nicht und erwartest eine richtige Antwort. Ich sagte genau. Das ist eine primitive Rassenbedingung. Sie werden mit zunehmender Komplexität weniger offensichtlich. U von Manitoba 1973.
1. hinzugefügt: Welches Busterminierungsschema haben Sie verwendet? Methode (1) wird bevorzugt. Ist 1,25 VDC sauber?
Die Dielektrizitätskonstante auf Platten und # von Schichten von Pregg steuert die Impedanz von Streifenleitung und Mikrostreifen zusammen mit der Spurbreite und dem Spalt.
Es gibt viele kostenlose Online-Z-Rechner für Streifenleitungen.
Sie können versuchen, die Kapazität auf großen Schienen oder Masseebenen zu messen und beide blanken Platinen zu vergleichen.
Schauen Sie sich auch die Signale mit einem Hochgeschwindigkeitsbereich an und beobachten Sie das Überschwingen und das Taktdatenmuster <>.
Es muss eine einfache Erklärung für die Fehler geben, aber es ist nicht leicht zu finden. Aber sobald Sie die Grundursache gefunden haben, werden Sie diesen Fehler nicht noch einmal machen.
hinzugefügt: Ein weiterer Fehler, den ich gefunden habe, ist, dass Ihr Stapelhöhendiagramm nicht die Cu-Schichtdicke angibt und es nicht ausreicht, um in 6 Schichten zu passen, es sei denn, es ist falsch oder die Cu-Dicke beträgt 0,039 mm (NICHT;)
quelle