Während ein riesiger Mux / Demux sicherlich funktionieren wird, ist das Anschließen einer Reihe von 16: 1-Muxen eine Menge Arbeit und weist einige Einschränkungen auf, die möglicherweise ein Problem darstellen oder nicht. Der konventionellere Ansatz wäre die Verwendung von Schieberegistern. Verwenden Sie ein Serial-In / Parallel-Out-Register für das "Treiber" -Ende und ein Parallel-In / Serial-Out-Register für das Empfangsende. Das Schöne an Schieberegistern ist, dass sie leicht verkettet werden können, um ein längeres Schieberegister zu erstellen. Ein 256-Bit- oder sogar 1024-Bit-Schieberegister ist überhaupt kein Problem. Mit etwas Pufferung kann der serielle Stream sogar über ein Kabel auf eine andere Leiterplatte übertragen werden (wenn dies die Herstellung Ihres Dings erleichtert).
Es gibt viele 8-Bit-Schieberegister-Chips wie die 74xx597, aber eine CPLD ist dafür VIEL besser. Sie benötigen jedoch keine riesige CPLD mit mehr als 256 Pins. Stattdessen können Sie mehrere kleinere CPLDs verwenden und diese miteinander verketten. Obwohl ich nicht nachgerechnet habe, bin ich mir ziemlich sicher, dass die Verwendung von mehr kleinen bis mittelgroßen CPLDs billiger wäre als eine große CPLD - und Sie müssen sich keine Sorgen um BGAs machen.
Diese CPLD wäre ziemlich Flip-Flop-intensiv. Dies bedeutet, dass eine normale CPLD-Architektur (wie sie Xilinx verwendet) nicht so gut ist wie etwas, das mehr FPGA-artig ist. Altera und Lattice haben beide CPLDs mit viel mehr Flip-Flops pro Dollar als Xilinx.
Obwohl Sie möglicherweise nicht viel Erfahrung mit CPLDs haben, ist dieses Design sehr einfach und die Vorteile der Verwendung einer CPLD sind enorm. Es wäre Ihre Zeit sehr wert zu lernen, wie man CPLDs dafür programmiert.
Auch die Vorteile der Verwendung eines Schieberegisters anstelle eines Mux sind anfangs nicht leicht zu erkennen. Meistens erhalten Sie viel Flexibilität beim Fahren und Erfassen der Kabel. Sie könnten sogar mehrere Kabelbäume gleichzeitig testen (wenn Sie über genügend Schieberegister verfügen). Alles, was Sie mit Muxes testen können, kann mit Schieberegistern durchgeführt werden, aber Schieberegister können mehr. Der einzige Nachteil von Schieberegistern ist, dass es langsamer ist, obwohl es immer noch schneller ist als Sie es benötigen (IE, der Typ, der den Kabelbaum verbindet und trennt, ist viel langsamer als die Zeit zum Testen mit Schieberegistern).
Ich sollte auch sagen, dass Schieberegister auch dann einfacher sind als Muxes, wenn Sie CPLDs verwenden. Die Hauptsache ist, dass sie kleiner sind - obwohl Sie, um den tatsächlichen Vor- / Nachteil zu sehen, das Design in beiden Fällen durchführen und sehen müssen, welche CPLD-Größe Sie benötigen. Dies hängt ziemlich stark von der Art der verwendeten CPLD-Architektur ab, sodass mit Xilinx vorgenommene Verallgemeinerungen nicht für Altera gelten.
Bearbeiten: Nachfolgend finden Sie einige Details dazu, wie der Test mithilfe von Schieberegistern tatsächlich durchgeführt wird ...
Um den Test durchzuführen, können Sie die Tatsache ignorieren, dass Sie Schieberegister verwenden, und nur berücksichtigen, dass Daten auf der "Fahrseite" angesteuert und hoffentlich auf der "Empfangsseite" gelesen werden. Wie Sie die Daten hin und zurück (über die Seriennummer) erhalten haben, ist weitgehend irrelevant. Wichtig ist, dass Sie Daten, die Sie fahren können, völlig willkürlich können.
Die Daten, mit denen Sie fahren, werden als "Testvektoren" bezeichnet. Die Daten, die Sie voraussichtlich lesen werden, sind ebenfalls Teil der Testvektoren. Wenn das Kabel mit einer 1: 1-Beziehung verdrahtet ist, erwarten Sie, dass die Fahrdaten und die Empfangsdaten mit denen übereinstimmen, die Sie fahren. Wenn das Kabel nicht 1: 1 ist, wäre es offensichtlich anders.
Wenn Sie einen MUX-basierten Ansatz verwendet haben, verwenden Sie immer noch Testvektoren, haben jedoch keine Kontrolle über die Art des Testvektors. Bei den Muxes wird das Muster als "Walking Ones" oder "Walking Zeros" bezeichnet. Angenommen, Sie haben ein 4-poliges Kabel. Mit gehenden Einsen würden Sie das folgende Muster fahren: 0001, 0010, 0100, 1000. Gehende Nullen sind gleich, aber invertiert.
Für einen einfachen Durchgangstest funktioniert das Gehen von Einsen / Nullen ziemlich gut. Abhängig davon, wie Ihr Kabel angeschlossen ist, gibt es andere Muster, die durchgeführt werden können, um den Test zu beschleunigen oder bestimmte Dinge zu testen. Wenn beispielsweise einige Pins niemals gegen andere Pins kurzgeschlossen werden können, können Sie das Testmuster so optimieren, dass diese Fälle nicht berücksichtigt werden und somit schneller ausgeführt werden. Der Umgang mit etwas anderem als einem Einsen / Nullen kann auf der Softwareseite kompliziert werden.
Die ultimative Methode zur Erzeugung von Testvektoren wird für JTAG-Tests durchgeführt. JTAG, auch Boundary Scan genannt, ist ein ähnliches Schema zum Testen der Verbindungen zwischen Chips auf einer Leiterplatte (und zwischen Leiterplatten). Die meisten BGA-Chips verwenden JTAG. JTAG verfügt über Schieberegister in jedem Chip, mit denen jeder Pin angesteuert / gelesen werden kann. Eine komplizierte und teure Software betrachtet die Netzliste für die Leiterplatte und generiert die Testvektoren. Ein hoch entwickelter Kabeltester könnte das Gleiche tun - aber das wäre eine Menge Arbeit.
Glücklicherweise gibt es für Sie eine VIEL EINFACHERE Möglichkeit, die Testvektoren zu generieren. Folgendes tun Sie ... Schließen Sie ein bekanntermaßen gutes Kabel an die Schieberegister an. Führen Sie ein Walking-Zero / Eins-Muster durch das Antriebsende. Notieren Sie dabei, was auf der Empfangsseite zu sehen ist. Auf der einfachen Ebene können Sie dies einfach als Ihre Testvektoren verwenden. Wenn Sie ein fehlerhaftes Kabel anschließen und die gleichen Einsen / Nullen ausführen, stimmen die empfangenen Daten nicht mit den zuvor aufgezeichneten Daten überein. Daher wissen Sie, dass das Kabel fehlerhaft ist. Dies geschieht unter mehreren Namen, aber alle Namen sind eine Variation des Begriffs "Lernen", wie Selbstlernen oder automatisches Lernen.
Bisher ist dies problemlos der Fall, bei dem ein Stift am Antriebsende zu mehr als einem Stift am Empfangsende führt, jedoch nicht der Fall, bei dem mehrere Stifte am Antriebsende miteinander verbunden sind. Dafür benötigen Sie einige spezielle Dinge, um Schäden durch Buskonflikte zu vermeiden, und alle Ihre Schieberegisterstifte sollten bidirektional sein (IE, fungieren sowohl als Treiber als auch als Empfänger). Folgendes tun Sie:
Setzen Sie einen Pulldown-Widerstand auf jeden Pin. Etwas um 20K bis 50k Ohm sollte in Ordnung sein.
Legen Sie einen Vorwiderstand zwischen CPLD und Kabel. Etwas um die 100 Ohm. Dies soll helfen, Schäden durch ESD und andere Dinge zu vermeiden. Eine 2700 pF-Kappe gegen Masse (auf der CPLD-Pin-Seite des 100-Ohm-Widerstands) hilft auch bei der ESD.
Programmieren Sie die CPLD so, dass das Signal nur hoch und niemals niedrig wird. Wenn Ihre Ausgangsdaten eine '0' sind, gibt die CPLD diesen Pin in drei Zustände aus und lässt den Pulldown-Widerstand die Leitung auf Low bringen. Auf diese Weise tritt keine Beschädigung auf, wenn mehrere CPLD-Pins denselben Draht am Kabel hoch treiben (da die CPLD nicht auch denselben Draht niedrig treibt).
Jeder Pin ist sowohl Treiber als auch Empfänger. Wenn Sie also ein 256-poliges Kabel haben, sind Ihre Schieberegister 512 Bit für den Treiber und 512 Bit für den Empfänger. Das Fahren und Empfangen kann in derselben CPLD erfolgen, sodass sich die Komplexität der Leiterplatte dadurch nicht wirklich ändert. Sie haben 3 oder 4 Flip-Flops pro Kabelstift in dieser CPLD, planen Sie also entsprechend.
Sie machen dann das gleiche Muster von Einsen / Nullen, während Sie die empfangenen Daten mit den zuvor aufgezeichneten vergleichen. Aber jetzt werden alle Arten von willkürlichen Verbindungen innerhalb des Kabelbaums verarbeitet.