Bien qu'un énorme multiplexeur / démultiplexeur fonctionnera certainement, la connexion d'un groupe de multiplexeurs 16: 1 représente beaucoup de travail et présente certaines limitations qui peuvent ou non être un problème. L'approche la plus conventionnelle consisterait à utiliser des registres à décalage. Utilisez un registre d'entrée série / parallèle pour l'extrémité "pilote" et un registre d'entrée parallèle / série pour l'extrémité réceptrice. La bonne chose à propos des registres à décalage est qu'ils peuvent facilement être connectés en guirlande pour créer un registre à décalage plus long. Un registre à décalage 256 bits ou même 1024 bits n'est pas du tout un problème. Avec une mise en mémoire tampon, le flux série peut même être passé sur un câble vers un autre PCB (si cela vous facilite la tâche).
Il existe de nombreuses puces de registre à décalage 8 bits comme le 74xx597, mais un CPLD est BEAUCOUP mieux pour cela. Mais vous n'avez pas besoin d'un CPLD géant 256+ broches. Au lieu de cela, vous pouvez utiliser plusieurs CPLD plus petits et les chaîner ensemble. Bien que je n'aie pas fait le calcul, je suis assez sûr que l'utilisation de plus de CPLD de petite à moyenne taille serait moins cher qu'un grand CPLD - et vous n'avez pas à vous soucier des BGA.
Ce CPLD serait assez intensif Flip-Flop. Cela signifie qu'une architecture CPLD normale (comme celle utilisée par Xilinx) n'est pas aussi bonne que quelque chose de plus FPGA. Altera et Lattice ont toutes deux des CPLD avec beaucoup plus de tongs par dollar que ce que Xilinx a.
Bien que vous n'ayez peut-être pas beaucoup d'expérience avec les CPLD, cette conception est très simple et les avantages de l'utilisation d'un CPLD sont énormes. Il serait très utile de votre temps pour apprendre à programmer les CPLD pour cela.
De plus, les avantages de l'utilisation d'un registre à décalage au lieu d'un multiplexeur ne sont pas faciles à voir au départ. Surtout, vous obtenez beaucoup de flexibilité dans la façon dont vous conduisez et détectez les fils. Vous pouvez même tester plusieurs faisceaux en même temps (si vous avez suffisamment de registres à décalage). Tout ce que vous pouvez tester avec des multiplexeurs peut être fait avec des registres à décalage, mais les registres à décalage peuvent faire plus. Le seul inconvénient des registres à décalage est qu'il est plus lent, bien qu'il soit toujours plus rapide que ce dont vous avez besoin (IE, le gars qui connecte et déconnecte le faisceau sera beaucoup plus lent que le temps de tester avec des registres à décalage).
Je dois également dire que même si vous utilisez des CPLD, les registres à décalage sont toujours plus faciles que les multiplexeurs. L'essentiel est qu'ils sont plus petits - bien que pour voir l'avantage / inconvénient réel, vous devez réellement faire la conception dans les deux et voir de quelle taille de CPLD vous avez besoin. Cela dépendra assez du type d'architecture CPLD utilisé, donc toutes les généralisations faites avec Xilinx ne s'appliqueront pas à Altera.
Edit: Vous trouverez ci-dessous un peu plus de détails sur la façon d'effectuer le test à l'aide de registres à décalage ...
Pour effectuer le test, vous pouvez ignorer le fait que vous utilisez des registres à décalage et considérer uniquement que les données sont pilotées sur le "côté entraînement" et, espérons-le, lues sur le "côté réception". La façon dont vous avez obtenu les données sur place et en arrière (via la série) est largement hors de propos. Ce qui est important, c'est que les données que vous pouvez conduire soient complètement arbitraires.
Les données avec lesquelles vous conduisez sont appelées "vecteurs de test". Les données que vous ATTENDEZ LIRE font également partie des vecteurs de test. Si le câble est câblé avec une relation 1: 1, vous vous attendez à ce que les données de conduite et les données de réception soient les mêmes que celles que vous conduisez. Si le câble n'est pas 1: 1, alors ce serait évidemment différent.
Si vous avez utilisé une approche basée sur MUX, vous utilisez toujours des vecteurs de test, mais vous n'avez aucun contrôle sur le type de vecteur de test. Avec les multiplexeurs, le motif est appelé "Walking Ones" ou "Walking Zeros". Disons que vous avez un câble à 4 broches. Avec ceux qui marchent, vous conduiriez le modèle suivant: 0001, 0010, 0100, 1000. Les zéros de marche sont les mêmes, mais inversés.
Pour un test de continuité simple, marcher des zéros / fonctionne assez bien. Selon la façon dont votre câble est connecté, il existe d'autres modèles qui pourraient être effectués pour accélérer le test ou pour tester des choses spécifiques. Par exemple, si certaines broches ne peuvent jamais être court-circuitées avec d'autres broches, vous pouvez optimiser le motif de test pour ne pas regarder ces cas et ainsi courir plus rapidement. Traiter avec autre chose qu'un marcher-uns / zéros peut devenir compliqué du côté logiciel des choses à gérer.
La méthode ultime de génération de vecteurs de test est effectuée pour les tests JTAG. JTAG, également appelé balayage des limites, est un schéma similaire pour tester les connexions entre les puces sur un PCB (et entre les PCB). La plupart des puces BGA utilisent JTAG. JTAG a des registres à décalage dans chaque puce qui peuvent être utilisés pour piloter / lire chaque broche. Un logiciel compliqué et coûteux examine la netlist du PCB et générera les vecteurs de test. Un testeur de câbles sophistiqué pourrait faire la même chose, mais ce serait beaucoup de travail.
Heureusement, pour vous, il existe un moyen BEAUCOUP PLUS FACILE de générer les vecteurs de test. Voici ce que vous faites ... Connectez un bon câble connu aux registres à décalage. Exécutez un modèle de marche zéros / uns à travers le côté conducteur. Pendant que vous faites cela, enregistrez ce qui est vu du côté récepteur. Au niveau simple, vous pouvez simplement l'utiliser comme vecteurs de test. Lorsque vous connectez un mauvais câble et effectuez les mêmes marches / zéros, les données que vous recevez ne correspondront pas aux données que vous avez enregistrées précédemment - et donc vous savez que le câble est mauvais. Cela passe par plusieurs noms, mais tous les noms sont une variante du terme «apprentissage», comme l'auto-apprentissage ou l'auto-apprentissage.
Jusqu'à présent, cela gère facilement le cas où une broche de l'extrémité d'entraînement va à plus d'une broche de l'extrémité de réception, mais ne gère pas l'autre cas où plusieurs broches de l'extrémité d'entraînement sont connectées ensemble. Pour cela, vous avez besoin de choses spéciales pour éviter les dommages causés par les conflits de bus, et toutes vos broches de registre à décalage doivent être bidirectionnelles (IE, fonctionnent à la fois comme pilote et récepteur). Voici ce que vous faites:
Mettez une résistance de rappel sur chaque broche. Quelque chose autour de 20K à 50k ohms devrait convenir.
Mettez une résistance série entre le CPLD et le câble. Quelque chose autour de 100 ohms. Cela permet d'éviter les dommages causés par les décharges électrostatiques et autres. Un capuchon de 2700 pF à la terre (du côté de la broche CPLD de la résistance de 100 ohms) aidera également à l'ESD.
Programmez le CPLD de manière à ce qu'il ne fasse que conduire le signal haut, jamais bas. Si vos données de sortie sont un «0», le CPLD trisignera cette broche et permettra à la résistance de rappel d'abaisser la ligne. De cette façon, si plusieurs broches CPLD entraînent le même fil sur le câble haut, aucun dommage ne se produira (car le CPLD ne conduira pas également le même fil bas).
Chaque broche est à la fois un pilote et un récepteur. Donc, si vous avez un câble à 256 broches, vos registres à décalage seront 512 bits pour le pilote et 512 bits pour le récepteur. La conduite et la réception peuvent être effectuées dans le même CPLD, donc la complexité du PCB ne change pas vraiment à cause de cela. Vous aurez 3 ou 4 bascules par broche de câble dans ce CPLD, alors planifiez en conséquence.
Vous effectuez ensuite le même motif de marche / zéro en comparant les données reçues avec ce qui a été enregistré précédemment. Mais maintenant, il gérera toutes sortes de connexions arbitraires dans le faisceau de câbles.