Un circuit logique programmable complexe (CPLD) est un composant essentiel de votre panoplie matérielle. Comme son nom l'indique, vous pouvez programmer ces puces pour obtenir les fonctions logiques dont vous avez besoin. Cela peut servir à remplacer des puces obsolètes, ou simplement à apprendre et à expérimenter différentes technologies. Quel meilleur moyen d'apprendre que d'utiliser un CPLD et de le mettre en pratique ?
J'ai créé un module CPLD pour pouvoir le connecter à divers appareils, notamment des plaques d'essai sans soudure, mais j'ai fait une erreur. Il semble que l'espace disponible pour la connexion sur la plaque d'essai soit de 2,8 cm (1,1 pouce). J'ai prévu une empreinte de 2,5 cm (1 pouce) de large, ce qui ne laisse pas de place pour une rangée de fils de chaque côté. Zut !
Mais permettez-moi de revenir en arrière et de vous en dire plus sur ce que je fais : je veux créer une logique programmable qui puisse être construite sous forme de kit, facilement soudable à la maison, programmable dans un circuit et fonctionnant à 3,3 ou 5 volts.
Pour réaliser un kit facile à souder, j'ai utilisé un ancien composant CPLD, également disponible en versions 3,3 V et 5 V, qui conserve sa programmation quelle que soit l'alimentation. La logique elle-même est un circuit intégré CPLD de la série Altera Max, disponible en deux versions, compatibles avec les cartes de circuits imprimés à 32 ou 64 macrocellules. Les macrocellules sont les blocs logiques de base, programmés à l'aide de « termes » logiques, puis interconnectés entre eux par des interconnexions programmables.
En observant le schéma, on constate qu'il ne contient pas beaucoup d'éléments : essentiellement le CPLD, le circuit de programmation en circuit et l'oscillateur qui pilote la logique du CPLD.
Ce composant, référencé EPM7032 ou EPM7064, utilise un boîtier PLCC (Plastic Lead Chip Carrier) à 44 broches, parfois appelé boîtier en J en raison de la forme en J de ses broches. Ce boîtier peut être inséré dans un support traversant ou soudé directement sur le circuit imprimé.
Ce module intègre un oscillateur, permettant ainsi au CPLD d'effectuer des opérations avec état et de créer des compteurs rapides de manière autonome, sans nécessiter d'horloge externe. Si une horloge externe est disponible, l'horloge haute vitesse du module peut être utilisée pour générer un événement d'horloge à chaque front montant ou descendant de l'horloge externe, tout en respectant les recommandations CPLD/FPGA. Autrement dit, il est fortement recommandé d'utiliser le réseau d'horloge global interne plutôt qu'une entrée d'horloge asynchrone. La tension d'alimentation nominale de cet oscillateur est comprise entre 1,8 et 5,5 volts.
Si vous regardez la vidéo, vous verrez que j'y explique ma préférence personnelle concernant la gestion de la broche « INH » de l'oscillateur ; en clair, après avoir vérifié que la fiche technique est conforme, j'ai tendance à la laisser flotter.
Face à ce type de fonctions, l'une des raisons qui m'est venue à l'esprit était mon aversion pour le raccordement direct des broches d'entrée aux rails d'alimentation (lorsque cela est possible). Autrement dit, je préfère utiliser des résistances en série pour limiter le courant lors des transitoires, même si cela ne devrait pas être nécessaire.
Au fil des ans, j'ai constaté des problèmes de production (sur de grandes séries), notamment des coupures de courant qui pouvaient entraîner une tension plus élevée sur les broches directement connectées à l'alimentation que sur la puce elle-même, ce qui est problématique. Enfin, connecter la broche à l'alimentation via une résistance (qu'il s'agisse de l'alimentation ou de la masse) permet de modifier son fonctionnement ultérieurement. C'est particulièrement vrai pour les portes inutilisées : comme vous le savez sans doute, ces portes ne doivent jamais rester déconnectées. L'utilisation d'une résistance de rappel permet de connecter le signal et d'utiliser la porte sans couper les pistes de cuivre.
Le connecteur à 10 broches et quelques résistances constituent le circuit de programmation. Si toutes les résistances étaient des résistances de rappel, j'utiliserais un réseau de résistances, mais malheureusement, l'une d'elles est reliée à la masse.
Pour programmer un CPLD indépendant de ce type, un programmateur dédié est nécessaire. C'est facile à dire pour moi, car j'en ai toujours plusieurs sous la main, mais si vous n'en possédez pas, vous pouvez vous y mettre sans trop de difficultés. Le programmateur « Altera USB Blaster », homologué, coûte 50 $ et est disponible chez Digikey et ailleurs. J'ai plusieurs clones achetés sur eBay, dont un compatible avec les microcontrôleurs Altera, Xilinx et Lattice. Un projet et un code permettant de fabriquer votre propre clone sont disponibles sur Internet ; je les mentionnerai dans ma liste de vidéos sur la fabrication de clones de programmateurs. Je présenterai également la conception d'une carte d'extension permettant de programmer une carte mère, un Arduino, un PIC, etc.
Le logiciel nécessaire à la compilation et à la programmation du CPLD est disponible gratuitement auprès d'Altera, mais ce composant ancien requiert la version 9.1. Heureusement, c'était ma version préférée : elle intégrait un analyseur de timing intuitif, malheureusement supprimé dans une version ultérieure.
Le circuit imprimé est un modèle simple double face. Tant que le circuit imprimé s'y adapte, j'utilise généralement du cuivre pour la mise à la terre et parfois pour l'alimentation. Il arrive que la coulée de cuivre soit tellement irrégulière qu'elle peut engendrer des problèmes ou un résultat final médiocre. Dans ce cas, la coulée de cuivre est une solution, mais elle doit être maîtrisée.
Aujourd'hui, la plupart des logiciels de CAO proposent des vues 3D du produit final, mais la précision de ces images dépend de celle des modèles 3D utilisés pour représenter les pièces. Vous pouvez voir ici où j'ai choisi le modèle 3D du connecteur 44 broches, du connecteur de programmation et de l'oscillateur. Voici quelques logiciels 3D que j'utilise fréquemment :
De nombreuses entreprises possèdent également des modèles 3D de leurs composants. Molex est un exemple parmi d'autres d'entreprise ayant réalisé un excellent travail dans ce domaine.
L'erreur que j'ai commise n'affecte pas la fonction, pas l'esthétique, et ce n'est pas le problème principal, c'est-à-dire qu'elle n'est pas adaptée à une plaque d'essai sans soudure.
Dès que j'ai envisagé de partager le schéma, j'ai été immédiatement déçu par les symboles du CPLD et le brochage du connecteur 40 broches, qui constitue son encombrement total. J'ai repris le symbole d'un connecteur double rangée 40 broches et l'ai adapté à un format 1 pouce, mais la numérotation des broches n'est pas 1, 2, 3, 4… mais 1 sur le côté, comme pour un boîtier DIP, et 3, 5, 7… comme pour les connecteurs de câbles plats. De ce fait, l'encombrement est peu intuitif et rend difficile le branchement du module et le dépannage.
De même, l'affectation des broches du CPLD est assez déroutante, et j'ai utilisé un ensemble d'utilitaires s'appuyant sur le langage BSDL (Boundary Scan Description Language) pour créer les symboles. La plupart des grands fabricants proposent des fichiers BSDL pour leurs composants courants, permettant ainsi de créer (semi-)automatiquement les symboles et les boîtiers. Comme tout outil d'automatisation, il faut le considérer comme tel et il peut être nécessaire de l'ajuster pour obtenir des résultats optimaux. Dans ce cas précis, je l'ai laissé lister les broches par ordre alphabétique, ce qui est presque aléatoire lorsqu'on repère les broches sur la carte. Je peux seulement dire que j'étais très anxieux ce jour-là.
Ces raccourcis finissent toujours par se retourner contre soi. Lorsque je modifierai ce module, je définirai et attribuerai un brochage correspondant à celui du composant, afin que le positionnement de la sonde de l'oscilloscope soit aussi simple qu'un coup d'œil au symbole du schéma.
Lors de l'utilisation de circuits imprimés, d'autres améliorations, principalement esthétiques ou fonctionnelles, peuvent être apportées. L'indicateur de broche 1 devrait être plus fréquent sur certains boîtiers, et je privilégie toujours un point de masse simple pour connecter la masse de l'oscilloscope ou la sonde du multimètre. J'envisage d'ajouter un connecteur à deux broches afin de pouvoir appliquer l'alimentation et la masse directement sur le circuit imprimé, plutôt que de les fixer aux broches inférieures.
Avant de modifier le circuit imprimé, je souhaite m'assurer de son bon fonctionnement, tant sur le plan physique qu'esthétique. Après la mise sous tension et la vérification du bon fonctionnement de l'oscillateur, j'ai branché le programmateur. Bien que la version 3,3 V soit plus récente que le logiciel de programmation, celui-ci a détecté le CPLD et l'a affiché comme un périphérique « inconnu ».
Ensuite, j'ai créé un compteur dans Quartus et lui ai attribué des numéros de broches. La compilation et le téléchargement rapides, ainsi que le bon fonctionnement du compteur observé à l'oscilloscope, confirment la faisabilité du projet.
Le circuit de test rapide en Verilog est très simple. Le code est fourni ci-dessous. Vous pouvez télécharger un fichier ZIP contenant le schéma et le circuit de test en Verilog sous forme de projet Quartus II (nécessite la version 9.1).
Comme je l'ai mentionné, je vais effectuer une deuxième révision du circuit imprimé afin de porter une attention particulière aux détails nécessaires lors du partage du schéma ou du dépannage. Puisque je dois limiter la largeur du connecteur inférieur à 0,9 pouce ou moins, je peux la fixer à 0,6 pouce, ce qui correspond à un boîtier DIP « large » standard. Cela implique que les broches inférieures dépassent de l'empreinte du support CPLD. Je ne procéderais pas ainsi en production, car l'assemblage était manuel à ce stade, mais l'un des objectifs était de créer un kit de soudure manuelle. Le compromis pour la soudure manuelle est que l'oscillateur doit être intégré dans un boîtier CMS (composant monté en surface), la version traversante étant très volumineuse et ne supportant généralement pas la plage de tension souhaitée.
Est-il possible d'utiliser ces modules pour construire un ordinateur simple et complet ? Je pense qu'il me faut ajouter de la mémoire.
Haha… oui, ça dépend du type d'ordinateur. Cependant, les microcontrôleurs/micro-ordinateurs « classiques » sont affectés par le câblage du module, ce qui signifie qu'on ne peut pas extraire suffisamment d'informations du module pour faire quoi que ce soit d'utile.
J'ai créé un contrôleur complet de synchronisation et de mode pour caméra NTSC d'une taille de 64, donc aucun processeur n'est requis.
Le Verilog structurel et le HDL utilisés dans le livre Nand to Tetris sont plus ou moins identiques.
Pourquoi des composants traversants ? Souder du 0805, c’est facile ! C’est le moment pour tous les bricoleurs d’apprendre cette technique.
Si je fais en sorte que le support supérieur chevauche les broches soudées par le bas, je peux alors utiliser un espacement de 6 centres (simulant une puce à 40 broches) ou en diagonale, etc. Il s'agira d'un soudage manuel des composants pour souder les fils inférieurs du support supérieur derrière les pieds.
Mais souder par le dessous est difficile pour les débutants. Lorsque je soude des connecteurs pour le circuit imprimé d'une plaque d'essai (ces adaptateurs CMS bon marché, disponibles sur eBay, sont parfaits pour le prototypage), j'insère les connecteurs dans la plaque, puis je place le circuit imprimé dessus ; la soudure se fait alors facilement. C'est très pratique pour les plaques d'essai. Souder par le dessous est encore plus compliqué.
Si le CPLD est au milieu (ce qui peut faciliter le câblage), il peut être installé en diagonale sans chevauchement, il y a 4 rangées, ou le CPLD peut être placé d'un seul côté :
Merci pour le conseil d'insérer le connecteur dans la plaque d'essai avant de souder. Le mien est un peu instable.
Que diriez-vous de brancher les broches de la plaque d'essai au format DIP d'un côté et le support de la puce (de type « dongle ») de l'autre ? La puce pourrait ainsi être fixée à l'extrémité de la plaque d'essai. Le câblage serait alors très compact.
|####### ******************** |. Oui, j'ai opté pour la version gratuite d'Altera, tout comme Xilinx et Lattice proposent des versions gratuites. Je dois finaliser mes échanges avec Al Williams pour bien comprendre l'étendue du support ouvert, notamment les spécificités de la gamme de composants. Cela dit, j'ai déjà réalisé de nombreuses choses avec la version gratuite.
Oui, vous montrez bien que le CPLD chevauche les broches, si je comprends bien. Il s'agirait donc de la révision 2. Lors de la conception pour la production en série, je suis toujours réticent à l'étape de soudure manuelle, car les composants se chevauchent (en fait, les broches de soudure du côté opposé au composant). (Il s'agit déjà d'un composant soudé à la main), mais ce n'est qu'un petit kit, pas une conception destinée à la production. J'ai simplement quelques habitudes difficiles à perdre à mon âge. 
Je pense qu'une carte de circuit imprimé en forme de T, avec un CPLD et des composants passifs, dotée d'une large partie en T, serait très pratique fixée sur le bord d'une plaque d'essai. Un modèle similaire au T-Cobbler d'Adafruit pour Raspberry Pi (http://www.adafruit.com/products/2028) serait idéal. Cela permettrait d'utiliser la majeure partie de la surface de la plaque d'essai.
Malheureusement, son arrêt de production limitera fortement son utilisation dans les projets annexes, tout comme pour tous les générateurs de fonctions basés sur les XR2206 et ICL8038.
Idée intéressante. J'aime bien ces deux puces. Le CPLD n'est pas obsolète, c'est juste une façon moins coûteuse de l'obtenir en 3,3 V.
Concernant vos « absurdités »… vous n'avez pas vraiment créé de nouveau schéma pour le montage sur la plaque d'essai. Placez d'abord le fil sur la plaque, puis la LED CPLD dessus. Ou, si vous pouvez retirer les barrettes d'alimentation et de masse de l'une des plaques, utilisez-en deux.
À propos d'Altium et d'Eagle : avez-vous envisagé KiCad ? Il ne présente aucune limitation qui vous ferait préférer Altium à Eagle et génère par défaut des erreurs DRC pour toutes les broches non connectées. Si vous souhaitez vraiment ouvrir une broche, vous devez le spécifier (peut-être uniquement en entrée, et non en sortie, et cela n'a pas encore été vérifié). Autre atout majeur : sa grande facilité d'apprentissage. Une après-midi a suffi, et l'excellent manuel d'introduction m'a permis de me lancer rapidement.
Je préfère les composants CMS (plus grands) aux composants traversants. Ils sont plus faciles à utiliser. On n'a pas besoin de retourner le circuit imprimé constamment (j'ai fait quelques erreurs bêtes à cause de la symétrie...). Et on n'a pas besoin de couper la patte de la résistance. Lors du partage d'un schéma, on peut facilement placer plusieurs boîtiers sur un circuit imprimé ou sur un seul composant. Résistance CMS traversante (cela rend le placement des composants un peu plus complexe).
J'ai utilisé le guide « KiCad Getting Started » au format PDF. L'ancienne version que j'ai utilisée compte 29 pages, tandis que la plus récente en compte 52. Vous le trouverez dans d'autres tutoriels (y compris des liens vidéo) : http://kicad-pcb.org/help/tutorials/
Je sais que Chris Gemmell de Hackaday et The Amp Hour a réalisé une série de tutoriels sur Kicad : http://kicad-pcb.org/help/tutorials/
KiCad pourrait s'avérer utile ; je vais voir ce que donne la révision 2. Merci pour vos suggestions. Les entrées non connectées sont un avantage pour la vérification des règles de conception (ERC), et pour les connecteurs et autres éléments qui les maintiennent en mode souple ou en E/S, la plupart des messages de déconnexion des logiciels de CAO peuvent généralement être évités.
J'ai effectué un test rapide en insérant le connecteur dans un tableau vide, puis j'ai lancé les annotations et la vérification des règles de conception (DRC). J'ai obtenu des erreurs DRC pour chaque broche. Cependant, marquer les broches non connectées connues est très simple.
Configurez-le en mode passif. Je dois effectuer une recherche (Modifier le composant -> Modifier avec l'éditeur de bibliothèque). L'éditeur de bibliothèque ouvre et charge votre composant dans une fenêtre séparée ; vous pouvez vérifier ou modifier n'importe quelle partie du composant. Le composant modifié peut être enregistré ou mis à jour dans votre schéma. Cela simplifie grandement la modification des composants. La bibliothèque m'importe peu. Par exemple, si vous utilisez CPLD, vous voudrez attribuer des noms explicites aux broches. Plus important encore, il existe une interface conviviale pour concevoir vos propres composants.
Dans le vérificateur de règles électriques (ERC) de KiCad, les broches « non connectées » sont considérées différemment des broches « passives », et toute broche « non connectée » générera des erreurs. Le fonctionnement de l'ERC est facilement personnalisable : Outils → Vérificateur de règles électriques → Options.
Date de publication : 18 novembre 2021





