Prototype SDRAM vs problèmes de production

11

J'ai une conception utilisant un LPC1788 avec un module SDRAM d'ISSI ( IS42S32800D ). Il s'agit d'une interface 32 bits.

J'ai acheminé cette conception et ai fait fabriquer un prototype avec un fabricant de PCB qui fait des prototypes à 6 couches. Le prototype du PCB fonctionne bien. J'ai alors pensé que je ferais fabriquer le PCB en un petit lot (100) chez mon fournisseur habituel de PCB. Je leur ai donné les informations de pile que mon prototype a utilisées pour m'assurer qu'il n'y aurait aucun problème.

Pourtant! J'ai d'énormes problèmes avec la carte de production. Au début, je n'ai pas pu susciter de réponse de la part de la SDRAM avec le même code que celui utilisé dans ma carte prototype. Le conseil précédent fonctionnait à 120 MHz, donc j'étais sûr que quelque chose n'allait pas avec ce nouveau conseil. J'ai ensuite trouvé un article où les gens ont suggéré d'utiliser le mode répéteur sur les lignes de données SDRAM (je ne l'avais pas utilisé auparavant) et cela a déclenché une réponse de la SDRAM, mais ce n'est pas stable. Je peux écrire à environ 16 adresses, mais avec les lectures suivantes, les données retournées (à chaque adresse) sont les données que j'ai écrites en dernier (probablement en raison du mode répéteur). Lorsque je désactive le mode répéteur, les données renvoyées sont 0xFFFFFFF. J'essaye maintenant de me connecter à 48Mhz, la configuration la plus basse pour laquelle j'ai des timings.

J'utilise les mêmes résistances de terminaison (sur les lignes de données) de 22 Ohms sur les deux cartes, les lignes de données mesurent en moyenne 3 cm de long. La ligne d'horloge mesure 2,4 cm de long. Les lignes d'adresse mesurent en moyenne 3,8 cm de long.

Est-ce trop hors spécifications, devrais-je retarder l'horloge plus longtemps si elle est sensiblement plus courte? Je suis vraiment coincé ici, car je n'ai rien changé à la conception que j'espérais pour une fabrication sans couture pour ces planches.

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

Voici la configuration de la pile PCB pour le prototype original (fonctionnel): entrez la description de l'image ici

Voici la configuration de la pile de PCB pour les PCB de production (non fonctionnels) entrez la description de l'image ici

Voici le routage de la SDRAM: Routage SDRAM

James
la source
3
Le contrôle d'impédance était-il le même entre le proto et les cycles de production?
dext0rb
Je ne suis pas sûr. Je ne connais pas suffisamment l'intégrité du signal pour définir correctement ces paramètres pour les chambres du conseil. Je sentais que si je spécifiais des paramètres sans savoir ce que je faisais, je ferais des problèmes plutôt que de résoudre des problèmes.
James
Et les avez-vous payés pour vérifier l'impédance (que @dextorb vous a suggéré de contrôler)?
Brian Carlton
Ce n'est pas la longueur moyenne qui compte. C'est le minimum et le maximum au sein du groupe.
Brian Carlton
1
Comment l'intégrité du signal sur la trace d'horloge regarde-t-elle les broches SDRAM?
Brian Carlton

Réponses:

10

C'est une mauvaise pile. Vos noyaux doivent être de 0,2 mm et le reste de votre épaisseur doit être dans le préimprégné entre les couches 3 et 4 (Inner 1 et Inner 2).

La raison en est que, pour tout signal sur une trace, il doit y avoir un chemin de courant de retour sur le plan juste en dessous. Le courant de retour dans l'avion tentera de minimiser l'inductance (c'est-à-dire la zone de boucle), ce qui signifie qu'il tentera de suivre sous la trace du signal. Si la trace du signal est éloignée de l'avion, il cherchera d'autres traces pour trouver un chemin de retour. C'est l'électromagnétisme que vous combattez.

De plus, en ayant des couches internes à des distances différentes de leurs plans de référence (rappelez-vous, tous les rails d'alimentation ressemblent à des sols en courant alternatif!) Par rapport aux distances des couches externes, vous créez un changement d'impédance chaque fois que vous échangez des couches (bien que cela puisse être contrecarré avec les changements de largeur de trace, même si j'ai trouvé que cela ne valait la peine qu'une seule fois), et vous augmentez considérablement le potentiel de diaphonie et d'autres interférences.

Une autre chose que vous devez vérifier est le matériel utilisé: il y a plus de 20 matériaux différents qui s'appellent par exemple "FR-4". Le truc que j'utilise habituellement s'appelle 370-HR. Il se comporte assez bien avec des signaux haute vitesse 100-500 MHz.

En ce qui concerne la ligne d'horloge, IIRC sur ma dernière conception SDRAM, j'ai configuré l'horloge pour que son bord se produise en dernier (sa trace était la plus longue de 1 cm), après que toutes les lignes d'adresse et de données se soient stabilisées. Donc, oui, retarder l'horloge vaut la peine d'essayer. Je n'avais pas besoin de contrôle d'impédance sur les lignes SDRAM.

Vos résistances de terminaison doivent être placées aussi près que possible des pilotes de ligne. S'ils ne sont pas à moins d'environ 0,5 cm, ils peuvent provoquer eux-mêmes des reflets, entraînant un dépassement et une sonnerie. À mon humble avis, la longueur de trace de 3 cm est terriblement courte pour avoir besoin de résistances de terminaison (je les utilise à partir d'environ 6-10 cm); avez-vous essayé de les retirer?

Une autre chose à vérifier, ce sont vos avions: avez-vous des traces de signaux traversant des coupures d'avion? C'est un énorme non-non, car il oblige le courant de retour à emprunter un long chemin autour de la coupure.

Enfin, le taux de bord est un énorme problème dans ces conceptions. Beaucoup de puces ont des temps de montée et de descente inutilement courts, et la réduction de la fréquence d'horloge n'a aucun effet sur cela. Ces bords rapides sont parfaits pour créer des reflets. C'est ce que vos résistances de terminaison de 22 ohms tentent de résoudre: elles ralentissent les bords. Cependant, si vous le poussez vraiment, un outil comme HyperLynx de Mentor Graphics peut être utilisé pour trouver la conception de terminaison optimale.

Quelques livres que je peux vous recommander qui couvrent tout cela et bien plus encore, et nous ne jurons que par eux au travail:

Ces livres couvrent la réduction EMI, la conception de blindage, l'empilement de PCB, le contrôle d'impédance, le découplage d'alimentation et bien plus encore. En outre, M. Ott enseigne des séminaires sur ce sujet (livré avec une copie gratuite de son livre).

Mike DeSimone
la source
Le livre de Henry Ott est une bible pour moi en 1980. Cependant, avant de le lire, j'étais déjà habile à voir les fuites RF dans une conception mécanique / électrique, avant même que les tests CEM ne commencent. Les fentes, les radiateurs, les antennes diélectriques et les câbles de bus d'E / S étaient la meilleure antenne pour les entrées et les sorties.
Tony Stewart Sunnyskyguy EE75
Bonne information ici, selon la simulation Hyperlynx basée sur mes données de simulation entrées, les résistances de 22 Ohms sont nécessaires car sinon la forme d'onde sur les lignes de données (pilotées à 1 ns de temps de montée) de la SDRAM est horriblement distordue et certaines réflexions traversent la tension de référence.
James
De plus, la recommandation de cumul est bonne. Il y a une différence mineure dans l'empilement entre le prototyper et le fabricant. J'ajoute les diagrammes à la question pour que vous puissiez voir. Aussi - j'ai lu Signal Integrity Simplified par Eric Bogatin. Bonne info ici, mais il faudra un certain temps pour digérer et pénétrer suffisamment pour commencer une nouvelle disposition du conseil avec ses recommandations.
James
Pour ce que ça vaut, OP avait à l'origine ce qui ressemblait à des photos d'Altium. Altium possède son propre ensemble d'outils d'intégrité du signal qui peuvent utiliser des fichiers IBIS. Il peut également examiner la diaphonie. Mais il a besoin des informations d'empilement exactes pour ce faire.
ajs410
1
Donc, à ce stade, je suis le plus préoccupé par les résistances. Ils semblent être au milieu des traces plutôt que chez les chauffeurs auxquels ils appartiennent. Dans ces applications, il est préférable de ne pas utiliser de packs de résistances, mais d'utiliser plutôt de petites résistances individuelles. Si vous devez utiliser des packs de résistances, vous devriez prendre le temps de faire un bien meilleur travail en échangeant les résistances pour rendre la disposition moins folle. C'est à peu près tout ce que je peux dire de votre mise en page, qui n'a aucun contour de paquet et rend la moitié des couches difficiles à voir.
Mike DeSimone
4

À ce type de fréquence, je pense que les problèmes de type de longueur de piste ne sont probablement pas un problème majeur, certainement pour les problèmes de retard. Comme les problèmes ont commencé avec un nouveau PCB, la toute première chose à faire serait de tester la continuité de toutes les lignes (par rapport à la fiche technique, pas à votre schéma, au cas où votre schéma présente des erreurs), et d'envisager chaque broche pour vérifier que les formes d'onde sont à le moins plausible - même si votre portée n'est pas à la hauteur des détails de synchronisation, il devrait être assez évident s'il y a des broches ouvertes ou court-circuitées.

Faire ce genre de choses sans une portée adéquate est semé de dangers potentiels - comment savez-vous quelle marge vous avez? Même si cela fonctionne, comment savoir si vous êtes sur le bord ou non et vulnérable aux pannes de champ / production dues aux tolérances, à la température ou à la phase de la lune?

mikeselectricstuff
la source
2

2e ajout Nous avons supposé que votre conception avait été testée sur les marges et que le code était parfait dans vos questions. (non) je vous suggère de vérifier les points suivants;

  1. Configurer l'IO pour avoir une orientation rapide et désactiver les filtres d'entrée
  2. Activer le mode d'entrée sur l'horloge
  3. Réglez le bit de balayage (9?) Pour augmenter la vitesse de balayage pour les broches de l'interface SDRAM
  4. Activez le mode répéteur car ils sont bidirectionnels et ne doivent pas rester flottants sur une entrée cmos.
  5. Modifiez la tension d'alimentation pour déterminer la sensibilité à l'erreur.
  6. le mode de réinitialisation par défaut pour une broche de bus de données est FUNC = 0X00, MODE = 0X02, HYSTERESIS = ENABLED, INVERT = DISABLED et SLEW = STANDARD
  7. Votre appel à PINSEL_ConfigPin () avec une nouvelle valeur de fonction, réinitialise-t-il le MODE à INACTIF (pas de résistance pull-down / pull-up) et désactive HYSTERESIS?
  8. Utilisez-vous des boucles for / next ou un code discret tel que;

    • LPC_IOCON-> P3_0 | = 1; // D0 @ P3.0
    • LPC_IOCON-> P3_1 | = 1; // D1 @ P3.1
    • LPC_IOCON-> P3_2 | = 1; // D2 @ P3.2 etc.
  9. Affirmez-vous de réactiver la broche WE, chaque fois que nécessaire?
  10. Utilises tu? * pPIN & = ~ (0x00000007); // Effacer les bits de fonction "

Je me souviens avoir débogué ma première conception CMOS d'un étudiant de troisième cycle en physique pour un enregistrement portable sismique, une carte logique de minuterie commutable. Il n'y avait pas de firmware ni d'uC mais il n'a jamais fait d'analyse de tolérance dans le pire des cas et le matériel avait des conditions de course partout quand une douzaine de cartes supplémentaires ont été construites et déboguées par moi-même. Le professeur sismique a amené le chef du département de physique pour demander pourquoi je ne pouvais pas faire le débogage des cartes, puis je devais lui conseiller que la variation des composants exposait de nombreux défauts de conception appelés conditions de course de synchronisation en raison des conditions métastables et du bord d'horloge utilisé. Il ne comprenait toujours pas, alors je lui ai demandé de me dire combien de doigts j'ai déplié pendant que je levais la main avant qu'elle n'atteigne ma taille de bas en haut. Puis il a dit, vous ne pouvez pas faire ça et vous attendre à une réponse correcte. Dis-je précisément. C'est une condition de course primitive. Ils deviennent moins évidents avec plus de niveaux de complexité. U du Manitoba 1973.

1er ajout: Quel schéma de terminaison de bus avez-vous utilisé? autobus la méthode (1) est préférée, est-ce que 1.25Vdc est propre?


  1. Avez-vous payé les TIC sur ces cartes? test de planche nue est un must
  2. Avez-vous spécifié l'impédance sur vos instructions de disposition de gerber?
  3. Avez-vous exécuté des simulations sur votre mise en page avec des tolérances?
  4. La constante diélectrique sur les panneaux et # de couches de pré-imprégné contrôle l'impédance de la stripline et du microruban ainsi que la largeur et l'écart des traces.

    Il existe de nombreuses calculatrices Z en ligne gratuites pour stripline.

    Vous pouvez essayer de mesurer la capacité sur de grandes pistes ou des plans de masse et comparer les deux cartes nues.

    Regardez également les signaux avec une portée à grande vitesse et observez le dépassement et l'horloge <> modèle d'oeil de données.

Il doit y avoir une explication simple pour les erreurs, mais ce n'est pas facile à trouver. Mais une fois que vous avez trouvé la cause profonde ... vous ne ferez plus cette erreur.

ajouté: Une autre erreur que j'ai trouvée est que votre diagramme de hauteur de pile n'indique pas l'épaisseur de la couche de Cu et qu'il n'y en a pas assez pour tenir dans 6 couches, sauf si c'est faux ou que l'épaisseur de Cu est de 0,039 mm (NON;)

Tony Stewart Sunnyskyguy EE75
la source
Juste un commentaire pour OP - je vois que OP utilise Altium Designer, et il y a un calculateur d'impédance intégré dans le logiciel. Je ne l'ai pas beaucoup utilisé mais je le connais quelque part!
dext0rb
2
Pendant le câblage d'une trace (appuyez sur W dans la vue PCB), appuyez sur la touche Tab et vous verrez l'impédance estimée.
ajs410
généralement pour une faible complexité Qté 100 PWB je ne paierais pas pour les TIC (test), mais ceux-ci ont des pistes aveugles donc je ... quelque chose à considérer ... et mesurer la capacité sur une carte nue V + <> GND
Tony Stewart Sunnyskyguy EE75
Je n'ai pas payé le contrôle d'impédance sur ces cartes. Les lignes simulées dans Hyperlynx (MentorGraphics) ont montré des formes d'onde à peu près parfaites (ou bien conformes aux spécifications) basées sur ma conception routée. Pour modéliser cela, j'ai recréé chaque ligne de transmission et via des modèles IBIS. Je n'ai pas une portée de bande passante suffisante pour enquêter correctement sur les signaux réels = (
James
1
Bonjour @TonyStewart, merci pour votre soutien. 1) La carte prototype ne nécessitait pas de rotation rapide. Activé sans changement d'effet. 2) Vous ne savez pas ce que cela signifie - l'horloge est une sortie? 3) L'hystérésis a été laissée activée. Désactivé sans changement d'effet. 4) Augmentation du balayage non activé sur le proto. Activé sans changement d'effet. 5) Non testé. 7) La fonction de configuration des broches ne modifie pas les autres bits. 8) Code discret pour les broches de contrôle, pour la boucle pour les données / l'adresse 9) Quand dois-je activer WE? Le contrôleur EMC devrait faire ça pour moi? 10) Les bits ne sont PAS notés avant d'être réglés. J'ai un autre prototype en commande, soyez ici la semaine prochaine.
James