Développement du module sur iMX8 à partir de NXP. Caractéristiques du transfert de trace DDR

Salutations, Habr!



Il y a quelque temps, NXP a présenté la gamme de processeurs iMX8. Il serait étrange de manquer une opportunité et de ne pas développer un nouveau module. Peu importe les nuances, je demande une coupe (beaucoup de photos légères).

Introduction (sauter)


Nous sommes depuis longtemps «accrochés» aux produits NXP, en termes de processeurs, et nous suivons toujours les dernières mises à jour de l'entreprise. Lorsqu'un nouveau produit est lancé, nous achetons une référence et recevons des échantillons par le biais de distributeurs afin que les programmeurs commencent immédiatement le développement de la puce et que les apparatchiks, à la fin de la première itération, reçoivent rapidement un modèle de produit. Un soutien important dans tout cela est joué par le support technique, qui fournit le SDK et le HDK et répond aux questions des programmeurs et des apparatchiks. Alors que les premiers démarrent le logiciel et commencent à l'adapter à nos tâches, les seconds préparent la deuxième itération de la carte avec les erreurs corrigées, le cas échéant (par exemple, le module processeur basé sur la puce iMX7 développé par le client a été mis en service dès la première itération, et le second était purement cosmétique, le module sur iMX6UL / ULL, d'abord développé pour nos projets, puis devenu un produit distinct,également presque inchangé après la première version). Lors du développement du fer, nous préservons partiellement les circuits de référence (à condition que cela ne nuise pas à la qualité du produit), de sorte que l'ancrage du logiciel et du matériel soit rapide et indolore. Chaque nouvelle itération conduit à de nouveaux tests, qui non seulement doivent être réexécutés, mais également complétés, en tenant compte de tous les changements. Chaque nouveau déchargement de gerberas du projet nécessite une vérification (production d'échantillons et leurs tests) avant de démarrer la série. Habituellement, le module développé est une solution universelle et est utilisé dans nos différents projets. De plus, certains clients demandent une personnalisation du module, par exemple, en termes de trous de montage, types de connecteurs, configuration, ou tout à la fois, à utiliser comme produit fini dans leurs développements futurs.Lors du développement du fer, nous préservons partiellement les circuits de référence (à condition que cela ne nuise pas à la qualité du produit), de sorte que l'ancrage du logiciel et du matériel soit rapide et indolore. Chaque nouvelle itération conduit à de nouveaux tests, qui non seulement doivent être réexécutés, mais également complétés, en tenant compte de tous les changements. Chaque nouveau déchargement de gerberas du projet nécessite une vérification (production d'échantillons et leurs tests) avant de démarrer la série. Habituellement, le module développé est une solution universelle et est utilisé dans nos différents projets. De plus, certains clients demandent une personnalisation du module, par exemple, en termes de trous de montage, types de connecteurs, configuration, ou tout à la fois, à utiliser comme produit fini dans leurs développements futurs.Lors du développement du fer, nous préservons partiellement les circuits de référence (à condition que cela ne nuise pas à la qualité du produit), de sorte que l'ancrage du logiciel et du matériel soit rapide et indolore. Chaque nouvelle itération conduit à de nouveaux tests, qui non seulement doivent être réexécutés, mais également complétés, en tenant compte de tous les changements. Chaque nouveau déchargement de gerberas du projet nécessite une vérification (production d'échantillons et leurs tests) avant de démarrer la série. Habituellement, le module développé est une solution universelle et est utilisé dans nos différents projets. De plus, certains clients demandent une personnalisation du module, par exemple, en termes de trous de montage, types de connecteurs, configuration, ou tout à la fois, à utiliser comme produit fini dans leurs développements futurs.afin que l'ancrage des composants logiciels et matériels soit rapide et indolore. Chaque nouvelle itération conduit à de nouveaux tests, qui non seulement doivent être réexécutés, mais également complétés, en tenant compte de tous les changements. Chaque nouveau déchargement de gerberas du projet nécessite une vérification (production d'échantillons et leurs tests) avant de démarrer la série. Habituellement, le module développé est une solution universelle et est utilisé dans nos différents projets. De plus, certains clients demandent une personnalisation du module, par exemple, en termes de trous de montage, types de connecteurs, configuration, ou tout à la fois, à utiliser comme produit fini dans leurs développements futurs.afin que l'ancrage des composants logiciels et matériels soit rapide et indolore. Chaque nouvelle itération conduit à de nouveaux tests, qui non seulement doivent être réexécutés, mais également complétés, en tenant compte de tous les changements. Chaque nouveau déchargement de gerberas du projet nécessite une vérification (production d'échantillons et leurs tests) avant de démarrer la série. Habituellement, le module développé est une solution universelle et est utilisé dans nos différents projets. De plus, certains clients demandent une personnalisation du module, par exemple, en termes de trous de montage, types de connecteurs, configuration, ou tout à la fois, à utiliser comme produit fini dans leurs développements futurs.Chaque nouveau déchargement de gerberas du projet nécessite une vérification (production d'échantillons et leurs tests) avant de démarrer la série. Habituellement, le module développé est une solution universelle et est utilisé dans nos différents projets. De plus, certains clients demandent une personnalisation du module, par exemple, en termes de trous de montage, types de connecteurs, configuration, ou tout à la fois, à utiliser comme produit fini dans leurs développements futurs.Chaque nouveau déchargement de gerberas du projet nécessite une vérification (production d'échantillons et leurs tests) avant de démarrer la série. Habituellement, le module développé est une solution universelle et est utilisé dans nos différents projets. De plus, certains clients demandent une personnalisation du module, par exemple, en termes de trous de montage, types de connecteurs, configuration, ou tout à la fois, à utiliser comme produit fini dans leurs développements futurs.

C'est ainsi que l'on passe généralement de la sortie du processeur à l'avènement de notre nouveau produit. Parfois, c'est simple et rapide, mais il arrive que vous deviez apporter de sérieuses améliorations en peu de temps, qui apparaissent pendant les tests.

Où commencer?


Je ne m'attarderai pas sur les travaux préparatoires qui précèdent le démarrage du projet - il s'agit de la coordination des TDR, de l'établissement d'un calendrier des travaux, de l'approbation des devis, etc. Je vais parler des premières étapes qui peuvent aider à réduire considérablement le temps de développement du projet, en utilisant l'iMX8 dans Altium Designer comme exemple. Ce ne sera pas quelque chose de surnaturel et d'abstrus, je pense que beaucoup le font, mais peut-être pas tous.

La chose la plus effrayante, peut-être, quand je regarde la documentation d'un processeur ou d'un circuit prêt à l'emploi, c'est la perspective de retrouver la RAM. Tôt ou tard, tout le monde est confronté à cela, mais, comme on dit, il vaut mieux plus tard, s'il y a une telle opportunité. Eh bien, si vous n'utilisez qu'une seule puce dans l'appareil, il peut être plus facile de faire le traçage vous-même. Vous trouverez ci-dessous un exemple de trace DDR3L pour Xilinx (carte à 4 couches). Conçu à partir de zéro, rien à redire.



Fig. 1. Trace de RAM DDR3L pour Xilinx XC7A35T-1FTG256

Mais lorsque vous avez besoin de 4 lattes, et même sur différents côtés de la carte, pour réduire la taille. Ce qui suit est un exemple de module sur l'iMX6Q.



Fig.2. Trace 4 puces RAM DDR3 pour NXP iMX6Q (2 en haut, 2 en bas - l'une en dessous de l'autre)

Ce n'est pas non plus une tâche écrasante, mais je n'y vois pas l'intérêt (je le répète, ce n'est malheureusement pas toujours le cas) s'il peut être simplifié tout en maintenant la qualité d'un produit débogué et testé (dans notre cas, c'est une référence que vous pouvez "toucher" ) À la première itération, l'essentiel est que la puce démarre et autant d'interfaces fonctionnent que possible. Cela signifie qu'au moins la mémoire fonctionne avec nous, toute l'énergie nécessaire est fournie et la pile de cartes est sélectionnée correctement. D'autres travaux seront menés en vue d'améliorer les paramètres de la carte en termes de performances périphériques. Ainsi, la première priorité pour nous est la mémoire (opérationnelle et non volatile) et la puissance.

Ce n'est pas un secret que pour un processeur qui est produit en série et qui bénéficie du support du fabricant, vous pouvez en règle générale trouver un ensemble complet de documentation (les exceptions sont les produits sous la NDA, les nouveaux produits sans support, etc.). À la première étape, je ne serai intéressé que par quelques documents - il s'agit d'une fiche technique, d'un schéma et d'une trace du tableau de référence. De plus, tout dépend de la forme sous laquelle cette documentation sera transférée et du système de CAO dans lequel vous travaillez. Je travaille uniquement dans Altium Designer et je ne peux donc pas utiliser de circuits et de circuits imprimés de fabricants, car ils se présentent généralement sous différents formats. Un autre problème de conversion de projets à partir de programmes tiers est l'inadéquation des champs de la base de composants et, par conséquent, l'impossibilité de décharger la liste des éléments. Et ce qui est vraiment triste, c'est le manque de connexions entre les composants (pas toujours, mais plus souvent).

Dans cet article, je veux parler de la façon dont vous pouvez transférer partiellement un projet vers Altium avec un circuit converti et un circuit imprimé.

Le package intégré d'Altium Designer, appelé Assistant d'importation, vous permet d'importer des fichiers à partir d'autres systèmes de CAO. Personnellement, cela s'accompagne d'une danse constante avec un tambourin, car en plus d'Altium, par exemple, Allegro devrait être installé, mais je n'en parlerai pas. Il est dédié aux vidéos et articles individuels sur Internet. La conversion, généralement, mais pas toujours, ne vous permet pas d'obtenir un brouillon de travail, dont je n'ai pas besoin. Pour notre travail, nous avons besoin d'un fichier pcb et de préférence d'un schéma. Pour un exemple, j'utiliserai le projet de référence sur iMX8 - "MCIMX8M-EVK-DESIGNFILES".



Fig.3. Carte de référence MCIMX8M-EVK-DESIGNFILES

Puisque je prévois de développer un module, je n'aurai pas besoin de la plupart des interfaces - elles seront implémentées sur la carte mère. Même l'image montre que vous devez beaucoup rétrécir lors de l'organisation des composants et à partir du circuit imprimé, je ne peux prendre que la trace LPDDR4 (MT53B768M32D4NQ-062) et PMIC (contrôleur de puissance pour le processeur MC34PF4210A1ES). Les cartes eMMC et SD sont loin de la puce, elles devront être retracées, mais ce n'est pas un problème.

Bibliothèque de composants


Pour ma bibliothèque du projet MCIMX8M-EVK-DESIGNFILES, je n'ai pris que quelques composants, dont le processeur, la mémoire et PMIC.

Regardons le composant iMX8. Ci-dessous, une capture d'écran de la bibliothèque. MIMX8MQ7DVAJZXA a 14 parties combinées en un seul composant. Cette séparation vous permet de répartir davantage les interfaces sur différentes feuilles (parties du circuit, qui sont combinées en un seul projet). Par exemple, "PARTIE A" est entièrement USB, "PARTIE D" est MIPI DSI, "PARTIE G" est tout SAI, etc. Pour l'avenir, je dirai que mon projet ne comporte que 12 feuilles de schémas, respectivement, j'ai combiné certains des éléments pour faciliter la lecture.



Fig.4. Schéma MIMX8MQ7DVAJZXA

Ayant un tel composant après l'importation, j'ai évité de le créer à partir de zéro, réduisant ainsi considérablement la probabilité d'erreurs dans le circuit. Maintenant sur ce qui devra être corrigé dans les paramètres du composant.



Fig.5. Schémas MIMX8MQ7DVAJZXA

Pour différents composants, le nombre de paramètres peut être différent, mais certains champs doivent être les mêmes pour que vous puissiez ensuite télécharger la liste des composants pour la commande et l'assemblage. Les champs de gauche ont été importés de la référence. À droite - dont j'ai besoin pour d'autres travaux. Les résistances, par exemple, ont plus de paramètres, les condensateurs encore plus, etc. Dans mon exemple, l'ensemble de paramètres minimum requis avec les en-têtes dont j'ai besoin.

De la même manière, j'ai converti et peaufiné la RAM et le contrôleur de puissance. Ensuite, je crée un nouveau projet (sachant approximativement combien de feuilles je vais avoir), y transfère des parties des circuits avec reliure et remplace les composants importés par les miens. Le résultat est des circuits très similaires à l'original. Dans cet article, je ne parlerai pas de la structure du projet, de la relation entre les feuilles, etc., alors passons à autre chose.

La partie la plus simple du travail a été effectuée. Vous pouvez maintenant commencer la deuxième étape - il s'agit du transfert du composant PCB de la bibliothèque.

Ici, c'est presque le même qu'avant, mais au lieu des paramètres - les couches. Dans mes composants, j'utilise un ensemble fixe de couches. En plus du standard "top", "top overlay", "top past", etc., par exemple, dans "mechanical 1" je dessine un contour de composant, son modèle 3D et mets un ".Designator" - ceci est fait pour que plus tard il était plus facile de décharger le dessin d'assemblage (et d'autres). Tous les champs supplémentaires que je n'utilise pas sont supprimés. Il m'en reste donc une quinzaine, au lieu de 24, comme c'était le cas après l'importation. Souvent pour BGA et QFN, il est nécessaire de changer l'ouverture du masque des pads, de faire d'autres ajustements des capacités de production, etc.



Fig.6. pcb MIMX8MQ7DVAJZXA

Maintenant, dans les propriétés schématiques, vous devez connecter le composant avec le PCB. Pour mieux comprendre tout ce qui est écrit ci-dessus, vous pouvez regarder des vidéos pédagogiques sur la création d'une bibliothèque pour Altium.

Au cours des deux premières étapes préparatoires, j'ai réussi à créer des composants de bibliothèque qui peuvent désormais être utilisés dans le projet. Cela a pris beaucoup moins de temps que si je le faisais à partir de zéro.

Transfert de trace


La troisième étape est la plus difficile - c'est le transfert d'une partie de la trace du tableau de référence au projet. Vous devez être très prudent. Habituellement, les erreurs d'importation provoquent des erreurs de transfert (entre les environnements de développement), vous n'avez donc qu'à «emprunter» ce dont vous avez besoin, ce qui prendrait beaucoup de temps et d'efforts. Je ne recommande surtout pas de déplacer les vias, les polygones, les découpes dans les polygones et les règles pour la RDC (Design -> Rules ...).

L'iMX8 est tracé sur 10 couches, donc j'utiliserai la même pile avec la même séquence de couches. Pour la commodité de travailler avec le projet MCIMX8M-EVK-DESIGNFILES, je vais masquer tous les polygones.



Fig.7. Carte de référence MCIMX8M-EVK-DESIGNFILES. PCB

Ça a l'air effrayant. Très effrayant. Il semblerait que vous puissiez déjà fermer l'Altium et aller pleurer. Pour plus de commodité, vous pouvez masquer les calques inutiles, mais cela n'aidera pas radicalement, mais par calques, cela semblera plus ou moins simple. Le DDR est divorcé sur 4 couches, mais je n'ai pas apporté de fond non plus par accident (voir ci-dessous).



Fig.8. Traçage de LPDDR4 MCIMX8M-EVK-DESIGNFILES par couches

Si vous avez atteint ce point dans votre projet, alors la moitié du travail de transfert, ou peut-être l'ensemble du projet, a déjà été effectuée.

Peut-être avez-vous déjà deviné ce qui doit être fait ensuite? Oui, il ne reste plus qu'à copier couche par couche correctement. Je vais vous dire comment je le fais pour éviter de simples erreurs.

Tout d'abord, j'ouvre la carte de référence et la mienne, avec les composants chargés à partir du circuit sur deux moniteurs (cette option est la plus pratique pour le développement). Je copie moi-même le processeur et la mémoire de la carte de référence (cela est nécessaire pour exposer ces composants en tenant compte de la trace existante).



Fig.9. Arrangement mutuel de la mémoire et du processeur (référence à gauche)

Après cela, il est nécessaire d'installer le processeur et la mémoire de notre carte par-dessus ceux correctement installés, et ensuite il suffit de retirer les composants copiés de la référence.



Fig.10. Emplacement correct du processeur et de la mémoire

Des lignes de communication excessives peuvent être temporairement masquées et procéder au transfert direct de la trace.

Vous devrez utiliser deux méthodes pour copier des fils. Le premier est le plus simple et le plus long - copier les conducteurs un par un. Vous n'avez pas besoin de copier toutes les connexions de cette façon - cela prendra beaucoup de temps, mais parfois c'est pratique. Par exemple, prenez les signaux des chocs sur les pads AE14, AD14, AE12 et AD12. Cliquez sur RMB dans l'explorateur, sélectionnez l'élément de menu Rechercher des objets similaires ..., dans la fenêtre qui apparaît, marquez le nom de l'explorateur et du calque (vous pouvez copier immédiatement à partir de tous les calques, y compris les trous).



Fig.11. Copiez un conducteur dans une couche (en haut)

Ensuite, appuyez sur Ctrl + C et placez la souris sur le pad du processeur. Nous allons à notre tableau et appuyez sur Ctrl + V et collez. Nous répétons pour les quatre conducteurs et mettons des trous dans les tampons de mémoire pour aller vers le bas - il y a des résistances. Si vous avez fait des copies dans toutes les couches, les résistances seront plus faciles à installer.



Fig.12. Copie d'un seul conducteur

Figure 12. (à droite) il y a un conducteur séparé (avec une croix de la souris) - ceci est un exemple de copie du conducteur dans toutes les couches avec un vias. L'essence de la méthode est que lorsque vous copiez le conducteur et le "réglez sur le pad", il prend le nom du pad (vous devez être prudent - si vous copiez le conducteur sur un autre pad, il prendra le nom de l' autre pad).

Même maintenant, vous pouvez transférer vous-même tous les conducteurs de la référence vers votre carte, mais il existe un moyen plus simple (en général, il y en a plusieurs, mais concentrons-nous sur un), il est idéal pour copier des groupes de conducteurs dans une couche. Pour commencer à copier les conducteurs de la deuxième couche (et de la suivante), il est nécessaire de transférer les conducteurs supérieurs de tous les pads du processeur, sinon la connexion des conducteurs sera rompue (nous devons transférer les vias du haut vers les autres couches, de sorte que les conducteurs soient ensuite liés à eux) .



Fig.13. Copiez tous les conducteurs avec vias en haut

Maintenant, j'ai retiré tous les pads du processeur et ils peuvent être utilisés sur d'autres couches. Autrement dit, dans une autre couche, je peux lier les conducteurs sans craindre qu'ils ne deviennent NoNet (conducteurs suspendus «en l'air» qui ne se sont pas décrochés). Ensuite, je vais transférer la couche 6 (la troisième, si vous regardez la figure 8.), pour montrer un autre hack. Tout de même, sélectionnez, copiez avec reliure dans n'importe quel trou ou tampon et collez.



Fig.14. Copie de tous les conducteurs avec des vias de la couche 6

Qu'est-ce que le hack? Ainsi, en plus de la trace RAM, j'ai réussi à extraire les interfaces du processeur, qui seront déjà regroupées dans certaines parties de la carte. Dans la puce, des bus de données individuels sont situés à des endroits spécifiques. Par exemple, dans iMX8, en bas à gauche du CSI, juste au-dessus de NAND, etc., c'est-à-dire qu'ils ne peuvent de toute façon pas être affichés de manière différente.

Une fois que toutes les couches nécessaires ont été transférées, il est nécessaire de retirer tous les vias et les conducteurs NoNet (lors de la copie de cinq couches, il y aura cinq vias sur chaque carte sur chaque carte). Ensuite, j'arrange manuellement via, en vérifiant en même temps toutes les connexions. Avec une certaine habileté, tout le travail de transfert prendra plusieurs heures.

Bas


Dans la Fig.8. J'ai montré la couche inférieure, que je souhaite également transférer. Mais l'essentiel n'est pas les conducteurs (il n'y en a pas beaucoup), mais l'agencement des composants. Il y a 132 éléments sous la puce et la RAM. Habituellement, je ne copie pas ce calque, mais je définis simplement le passif ainsi que la référence (en ouvrant deux cartes sur des moniteurs différents). Cette option convient si vous n'avez pas changé la taille des composants pour une plus grande, sinon vous devrez bricoler.



Fig.15. Composants à l'arrière de la carte du module



Fig.16. Trace finale sous le processeur et mémoire des couches de signaux

Épilogue


En résumé, je peux dire que cette méthode de transfert est assez simple (je n'exclus pas qu'il y en ait d'autres). Si vous commencez avec des cartes simples sur 4 couches, vous pouvez rapidement apprendre à transférer des traces plus complexes, sans y consacrer de grandes ressources. À ce sujet, je pense que l'article peut être complété.

Pour la "graine", je dirai que sur la carte résultante, il y a 156 polygones et, si quelqu'un est intéressé, je peux écrire un article sur la façon dont ils ont été posés sur ce module, quelles difficultés sont survenues en raison des petites dimensions (dimensions du module 81 mm * 58 mm) et ce que devrait être considéré.

Merci pour l'attention!

All Articles