Prototipo SDRAM vs Woes di produzione


11

Ho un design che utilizza un LPC1788 insieme a un modulo SDRAM di ISSI ( IS42S32800D ). Questa è un'interfaccia a 32 bit.

Ho eliminato questo progetto e ho realizzato un prototipo con un produttore di PCB che realizza prototipi a 6 strati. Il prototipo di PCB funziona bene. Ho quindi pensato di ottenere il PCB fabbricato in un piccolo volume (100) dal mio solito fornitore di PCB. Ho dato loro le informazioni cumulative utilizzate dal mio prototipo per garantire che non ci fossero problemi.

Tuttavia! Ho enormi problemi con la scheda di produzione. All'inizio non sono stato in grado di sollevare alcuna risposta dalla SDRAM con lo stesso codice che ho usato nella mia scheda prototipo. La scheda precedente funzionava a 120 Mhz, quindi ero sicuro che qualcosa non andava in questa nuova scheda. Ho quindi trovato un post in cui le persone hanno suggerito di utilizzare la modalità ripetitore sulle linee dati SDRAM (non l'avevo mai usato in precedenza) e questo ha sollevato una risposta dalla SDRAM, tuttavia non è stabile. Posso scrivere a circa 16 indirizzi, ma poi con le letture successive i dati restituiti (ad ogni indirizzo) sono i dati che ho scritto per ultimo (probabilmente a causa della modalità ripetitore). Quando disabilito la modalità ripetitore, i dati restituiti sono 0xFFFFFFF. Ora sto provando a connettermi a 48Mhz, la configurazione più bassa per cui ho i tempi.

Sto usando le stesse resistenze di terminazione (sulle linee Dati) di 22 Ohm su entrambe le schede, le linee dati hanno una lunghezza media di 3 cm. La linea dell'orologio è lunga 2,4 cm. Le linee degli indirizzi sono lunghe mediamente 3,8 cm.

È troppo fuori specifica, dovrei ritardare di più l'orologio se è sostanzialmente più breve? Sono davvero bloccato qui, poiché non ho cambiato nulla del design che speravo in una produzione senza interruzioni per queste schede.

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

Ecco la configurazione dello stack PCB per il prototipo originale (funzionante): inserisci qui la descrizione dell'immagine

Ecco la configurazione dello stack PCB per i PCB di produzione (non funzionanti) inserisci qui la descrizione dell'immagine

Ecco il routing per SDRAM: Routing SDRAM


3
Il controllo dell'impedenza era lo stesso tra i cicli di proto e di produzione?
dext0rb

Non sono sicuro. Non so abbastanza sull'integrità del segnale per definire correttamente questi parametri per le case di bordo. Ho sentito che se avessi specificato i parametri non sapendo cosa stavo facendo avrei creato problemi piuttosto che risolvere problemi.
James,

E li hai pagati per verificare l'impedenza (che @dextorb ti ha suggerito di controllare)?
Brian Carlton,

Non è la lunghezza media che conta. È il minimo e il massimo all'interno del gruppo.
Brian Carlton,

1
In che modo l'integrità del segnale sulla traccia del clock guarda ai pin SDRAM?
Brian Carlton,

Risposte:


10

È un pessimo stackup. I nuclei dovrebbero essere di 0,2 mm e il bilanciamento dello spessore dovrebbe essere nel prepreg tra gli strati 3 e 4 (interno 1 e interno 2).

La ragione di ciò è che, per qualsiasi segnale su una traccia, deve esserci un percorso di corrente di ritorno sul piano proprio sotto di esso. La corrente di ritorno nel piano tenterà di ridurre al minimo l'induttanza (ovvero l'area del circuito), il che significa che proverà a seguire la traccia del segnale. Se la traccia del segnale è distante dal piano, cercherà altre tracce per trovare un percorso di ritorno. Questo è elettromagnetico che stai combattendo.

Inoltre, avendo strati interni a distanze diverse dai loro piani di riferimento (ricordate, tutte le rotaie di alimentazione sembrano terreni in CA!) Rispetto alle distanze dello strato esterno, si crea un cambiamento di impedenza ogni volta che si scambiano i livelli (anche se questo può essere contrastato con rintracciare le variazioni di larghezza, anche se ho trovato che ne valga la pena solo una volta) e aumenti significativamente il potenziale di crosstalk e altre interferenze.

Un'altra cosa che devi controllare sono i materiali utilizzati: ci sono oltre 20 materiali diversi che si definiscono "FR-4", per esempio. Le cose che di solito uso si chiamano 370-HR. Si comporta abbastanza bene con segnali ad alta velocità da 100-500 MHz.

Per quanto riguarda la linea di clock, IIRC sul mio ultimo progetto SDRAM ho avuto l'orologio impostato in modo che il suo bordo si sia verificato per ultimo (la sua traccia era più lunga di 1 cm), dopo che tutti gli indirizzi e le linee dati si sono stabilizzate. Quindi, sì, vale la pena provare a ritardare l'orologio. Non avevo bisogno di alcun controllo di impedenza sulle linee SDRAM.

Le resistenze di terminazione devono essere posizionate il più vicino possibile ai driver di linea. Se non si trovano a una distanza di circa 0,5 cm, possono causare riflessi, provocando il superamento e lo squillo. IMHO, la lunghezza della traccia di 3 cm è terribilmente corta per richiedere resistori di terminazione (li uso a partire da 6-10 cm circa); hai provato a toglierli?

Un'altra cosa da controllare sono i tuoi aerei: hai tracce di segnale che attraversano i tagli dell'aereo? Questo è un no-no enorme, perché forza la corrente di ritorno a prendere una lunga strada attorno al taglio.

Infine, la velocità dei bordi è un grosso problema in questi progetti. Molti chip hanno tempi di salita e discesa inutilmente brevi e la riduzione della frequenza di clock non ha alcun effetto su questo. Questi bordi veloci sono ottimi per creare riflessi. Questo è ciò che i resistori di terminazione da 22 ohm stanno cercando di risolvere: rallentano i bordi. Tuttavia, se lo stai davvero spingendo, uno strumento come HyperLynx di Mentor Graphics può essere utilizzato per trovare il progetto di terminazione ottimale.

Alcuni libri che ti posso consigliare che descrivono tutto questo e molto altro, e li giuriamo al lavoro:

Questi libri riguardano la riduzione dell'IME, il design della schermatura, l'accumulo di PCB, il controllo dell'impedenza, il disaccoppiamento dell'alimentatore e molto altro. Inoltre, Ott insegna a seminari su questo argomento (viene fornita una copia gratuita del suo libro).


Il libro di Henry Ott è una bibbia per me nel 1980. Tuttavia, prima di leggerlo, ero già abile nel vedere perdite RF in un progetto meccanico / elettrico, prima ancora che iniziassero i test EMC. Gli slot, i radiatori, le antenne dielettriche e i cavi del bus I / O erano l'antenna migliore per l'ingresso e l'uscita.
Tony Stewart Sunnyskyguy EE75,

Buone informazioni qui, secondo la simulazione Hyperlynx basata sui miei dati di simulazione immessi, sono necessari i resistori da 22 Ohm, altrimenti la forma d'onda sui dati (pilotati a 1ns tempo di salita) dalla SDRAM è orribilmente distorta e alcune riflessioni attraversano la tensione di riferimento.
James,

Inoltre, la raccomandazione di stackup è buona. C'è una piccola differenza nello stackup tra il prototipo e il produttore. Sto aggiungendo i diagrammi alla domanda per farti vedere. Inoltre, ho letto Integrità del segnale semplificata da Eric Bogatin. Buone informazioni qui, ma ci vorrà del tempo per digerire e affondare abbastanza per iniziare un nuovo layout della scheda con i suoi consigli.
James,

Per quello che vale, OP originariamente aveva le foto di Altium. Altium dispone di un proprio set di strumenti per l'integrità del segnale in grado di utilizzare file IBIS. Può anche esaminare la diafonia. Ma ha bisogno delle informazioni esatte sullo stackup per farlo.
ajs410,

1
Quindi, a questo punto, sono più preoccupato per i resistori. Sembrano essere nel mezzo delle tracce invece che nei driver a cui appartengono. In queste applicazioni, è meglio non utilizzare i pacchetti di resistori, ma invece utilizzare piccoli resistori individuali. Se devi usare i pacchetti di resistori, dovresti prenderti il ​​tempo necessario per fare un lavoro molto migliore scambiando le resistenze per rendere il layout meno impazzito. Questo è tutto ciò che posso dire dal tuo layout, che non ha contorni del pacchetto e rende difficile vedere metà degli strati.
Mike DeSimone,

4

Con questo tipo di frequenza penso che i problemi relativi al tipo di tracciabilità non siano probabilmente un grosso problema, sicuramente per problemi di ritardo. Poiché i problemi sono iniziati con un nuovo PCB, la prima cosa da fare sarebbe testare la continuità di tutte le linee (rispetto al foglio dati, non allo schema, nel caso in cui lo schema abbia errori) e individuare ogni pin per verificare che le forme d'onda siano a meno plausibile - anche se l'oscilloscopio non è in grado di controllare i dettagli di temporizzazione, dovrebbe essere abbastanza ovvio se ci sono pin aperti o in corto.

Fare questo tipo di cose senza una portata adeguata è irto di potenziali pericoli - come fai a sapere quanto margine hai? Anche se funziona, come fai a sapere se sei al limite e vulnerabile a guasti sul campo / produzione dovuti a tolleranze, temperatura o Fase della Luna?


2

2a aggiunta Abbiamo ipotizzato che il tuo progetto fosse stato testato a margine e che il codice fosse perfetto nelle tue domande. (non) ti suggerisco di verificare quanto segue;

  1. Configurare l'IO per avere una rotazione rapida e disabilitare i filtri di input
  2. Abilita la modalità di input sull'orologio
  3. Impostare il bit di rotazione (9?) Per aumentare la velocità di risposta per i pin dell'interfaccia SDRAM
  4. Abilita la modalità ripetitore poiché sono bidirezionali e non devono essere lasciati mobili su un input cmos.
  5. Modificare la tensione di alimentazione per determinare la sensibilità all'errore.
  6. la modalità di ripristino predefinita per un pin del bus dati è FUNC = 0X00, MODE = 0X02, ISTERESI = ABILITATO, INVERTITA = DISATTIVATO e SLEW = STANDARD
  7. La tua chiamata a PINSEL_ConfigPin () con un nuovo valore di funzione, reimposta la MODALITÀ su INATTIVO (nessuna resistenza pull-down / pull-up) e disattiva l'ISTERESI?
  8. Stai usando un ciclo for / next o un codice discreto come;

    • LPC_IOCON-> P3_0 | = 1; // D0 @ P3.0
    • LPC_IOCON-> P3_1 | = 1; // D1 @ P3.1
    • LPC_IOCON-> P3_2 | = 1; // D2 @ P3.2 ecc.
  9. Affermate di riattivare il pin WE, ogni volta che è necessario?
  10. Tu usi? * pPIN & = ~ (0x00000007); // Cancella bit funzione "

Ricordo di aver eseguito il debug del mio primo progetto CMOS da uno studente di specializzazione in Fisica per una scheda logica sismica di registrazione portatile e registrazione sismica. Non c'erano firmware o UC, ma non ha mai fatto un'analisi della tolleranza nel caso peggiore e l'hardware aveva condizioni di gara ovunque quando una dozzina di schede aggiuntive sono state costruite e messe a punto da me. Il Prof. Sismico ha portato il Capo del Dipartimento di Fisica a chiedersi perché non avrei potuto eseguire il debug delle schede, quindi ho dovuto consigliargli che la variazione dei componenti ha rivelato molti difetti di progettazione chiamati condizioni di gara di temporizzazione a causa di condizioni metastabili e bordo dell'orologio utilizzato. Continuava a non capire, poi gli ho chiesto di dirmi quante dita ho aperto mentre alzavo la mano prima che raggiungesse il livello della mia vita da basso ad alto. Poi ha detto, non puoi farlo e aspettarti una risposta corretta. Ho detto, appunto. Questa è una condizione di razza primitiva. Diventano meno evidenti con più livelli di complessità. U di Manitoba 1973.

1 ° aggiunto: quale schema di terminazione del bus hai utilizzato? autobus è preferito il metodo (1), 1.25Vdc è pulito?


  1. Ha pagato le TIC su queste schede? il test a bordo nudo è un must
  2. Hai specificato l'impedenza nelle istruzioni di layout di Gerber?
  3. Hai eseguito simulazioni sul tuo layout con tolleranze?
  4. La costante dielettrica su schede e # di strati pre-preg controllano l'impedenza di stripline e microstrip insieme alla larghezza e alla distanza della traccia.

    Esistono molti calcolatori Z online gratuiti per stripline.

    Puoi provare a misurare la capacità su binari di grandi dimensioni o piani di massa e confrontare entrambe le schede nude.

    Osserva anche i segnali con un campo di applicazione ad alta velocità e osserva il modello di occhio dati di overshoot e clock.

Deve esserci una semplice spiegazione degli errori, ma non è facile da trovare. Ma una volta trovata la causa principale ... non commetterai più questo errore.

aggiunto: un altro errore che ho riscontrato è che il diagramma dell'altezza della pila non indica lo spessore dello strato Cu e non è sufficiente per adattarsi a 6 strati a meno che non sia sbagliato o lo spessore Cu sia 0,039 mm (NOT;)


Solo un commento per OP: vedo che OP utilizza Altium Designer e nel software è presente un calcolatore di impedenza. Non l'ho usato molto ma so che è lì da qualche parte!
dext0rb,

2
Durante il cablaggio di una traccia (premere W nella vista PCB), premere il tasto Tab per vedere l'impedenza stimata.
ajs410,

generalmente per bassa complessità Qtà 100 PWB non pagherei per le TIC (test), ma queste hanno tracce cieche quindi vorrei ... qualcosa da considerare ... e misurare la capacità su una scheda nuda V + <> GND
Tony Stewart Sunnyskyguy EE75,

Non ho pagato per il controllo di impedenza su queste schede. Le linee simulate in Hyperlynx (MentorGraphics) hanno mostrato forme d'onda praticamente perfette (o ben comprese nelle specifiche) basate sul mio disegno indirizzato. Per modellare questo ho ricreato ogni linea di trasmissione e via insieme ai modelli IBIS. Non ho una portata di larghezza di banda sufficiente per indagare correttamente i segnali effettivi = (
James,

1
Ciao @TonyStewart, grazie per il tuo supporto. 1) La scheda prototipo non ha richiesto una rotazione rapida. Abilitato senza modifiche in vigore. 2) Non sei sicuro di cosa significhi: l'orologio è un'uscita? 3) L'isteresi è stata lasciata abilitata. Disabilitato senza modifiche in atto. 4) Slew aumentato non abilitato su proto. Abilitato senza modifiche in vigore. 5) Non testato. 7) La funzione Pin Config non modifica altri bit. 8) Codice discreto per pin di controllo, per loop per dati / indirizzo 9) Quando devo abilitare WE? Il controller EMC dovrebbe fare questo per me? 10) I bit non vengono notati prima di essere impostati. Ho un altro prototipo in ordine, essere qui la prossima settimana.
James,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.