Si bien un gran mux / demux ciertamente funcionará, conectar un montón de muxes 16: 1 es mucho trabajo y tiene algunas limitaciones que pueden ser un problema o no. El enfoque más convencional sería utilizar registros de desplazamiento. Utilice un registro de entrada / salida en serie paralela para el extremo de "conducción" y una entrada / salida en serie paralela para el extremo receptor. Lo bueno de los registros de desplazamiento es que se pueden encadenar fácilmente para hacer un registro de desplazamiento más largo. Un registro de desplazamiento de 256 bits o incluso 1024 bits no es un problema en absoluto. Con un poco de almacenamiento en búfer, la transmisión en serie puede incluso pasar a través de un cable a otra PCB (si eso hace que sea más fácil de hacer).
Hay muchos chips de registro de desplazamiento de 8 bits como el 74xx597, pero un CPLD es MUCHO mejor para esto. Pero no necesita un CPLD gigante de más de 256 pines. En cambio, puede usar varios CPLD más pequeños y encadenarlos. Aunque no he hecho los cálculos, estoy bastante seguro de que usar más CPLD de tamaño pequeño a mediano sería más barato que un CPLD grande, y no tiene que preocuparse por los BGA.
Este CPLD sería bastante intensivo en Flip-Flop. Lo que esto significa es que una arquitectura CPLD normal (como la que usa Xilinx) no es tan buena como algo que es más FPGA-ish. Altera y Lattice tienen CPLD con muchas más chanclas por dólar que las que tiene Xilinx.
Si bien es posible que no tenga mucha experiencia con CPLD, este diseño es muy simple y los beneficios de usar un CPLD son enormes. Valdría mucho su tiempo aprender a programar CPLD para esto.
Además, las ventajas de usar un registro de desplazamiento en lugar de un mux no es fácil de ver inicialmente. En general, obtienes mucha flexibilidad en la forma en que conduces y percibes los cables. Incluso podría estar probando varios arneses a la vez (si tiene suficientes registros de desplazamiento). Todo lo que puede probar con muxes se puede hacer con registros de desplazamiento, pero los registros de desplazamiento pueden hacer más. El único inconveniente de los registros de cambios es que es más lento, aunque aún será más rápido de lo que necesita (es decir, el tipo que conecta y desconecta el arnés será mucho más lento que el tiempo para probar con los registros de cambios).
También debería decir que incluso si está utilizando CPLD, los registros de desplazamiento son aún más fáciles que los muxes. Lo principal es que son más pequeños, aunque para ver la ventaja / desventaja real, tendría que hacer el diseño en ambos y ver qué tamaño de CPLD necesita. Esto dependerá bastante del tipo de arquitectura CPLD utilizada, por lo que cualquier generalización realizada con Xilinx no se aplicará a Altera.
Editar: a continuación hay un poco más de detalles sobre cómo realizar realmente la prueba utilizando registros de desplazamiento ...
Para hacer la prueba, puede ignorar el hecho de que está utilizando registros de desplazamiento y solo considerar que los datos se manejan en el "extremo de conducción" y, con suerte, leer en el "extremo de recepción". La forma en que obtuvo los datos allí y de regreso (a través de serie) es en gran medida irrelevante. Lo importante es que los datos que puede manejar son completamente arbitrarios.
Los datos con los que conduce se denominan "vectores de prueba". Los datos que ESPERA LEER también son parte de los vectores de prueba. Si el cable está conectado con una relación 1: 1, entonces esperaría que los datos de conducción y los datos de recepción sean los mismos que los que maneja. Si el cable no es 1: 1, entonces obviamente sería diferente.
Si utilizó un enfoque basado en MUX, todavía está utilizando vectores de prueba, pero no tiene control sobre el tipo de vector de prueba. Con los Muxes, el patrón se llama "Walking Ones" o "Walking Zeros". Digamos que tiene un cable de 4 pines. Con los que caminan, conduciría el siguiente patrón: 0001, 0010, 0100, 1000. Los ceros para caminar son lo mismo, pero invertidos.
Para una simple prueba de continuidad, caminar unos / ceros funciona bastante bien. Dependiendo de cómo esté conectado el cable, hay otros patrones que se pueden hacer para acelerar la prueba o probar cosas específicas. Por ejemplo, si algunos pines nunca se pueden acortar contra otros pines, puede optimizar el patrón de prueba para no mirar esos casos y, por lo tanto, correr más rápido. Tratar con algo que no sea caminar-unos / ceros puede complicarse en el lado del software de las cosas a manejar.
El último método para generar vectores de prueba se realiza para las pruebas JTAG. JTAG, también llamado escaneo de límites, es un esquema similar para probar las conexiones entre chips en una PCB (y entre PCB). La mayoría de los chips BGA usan JTAG. JTAG tiene registros de desplazamiento en cada chip que se pueden usar para conducir / leer cada pin. Una pieza de software complicada y costosa mira la lista de redes para el PCB y generará los vectores de prueba. Un probador de cable sofisticado podría hacer lo mismo, pero eso sería mucho trabajo.
Afortunadamente, para usted, hay una manera MUCHO MÁS FÁCIL de generar los vectores de prueba. Esto es lo que debe hacer ... Conecte un buen cable conocido a los registros de desplazamiento. Ejecute un patrón de caminar ceros / unos a través del extremo de conducción. Mientras hace esto, registre lo que se ve en el extremo receptor. En el nivel simple, puede usar eso como sus vectores de prueba. Cuando conecta un cable defectuoso y hace los mismos pasos / ceros, los datos que recibe no coincidirán con los datos que registró anteriormente, y por lo tanto sabe que el cable es incorrecto. Esto tiene varios nombres, pero todos los nombres son alguna variación del término "aprendizaje", como autoaprendizaje o autoaprendizaje.
Hasta ahora, esto maneja fácilmente el caso en el que un pin en el extremo de conducción va a más de un pin en el extremo receptor, pero no maneja el otro caso en el que varios pines en el extremo de conducción están conectados entre sí. Para eso necesita algunas cosas especiales para evitar daños por la contención del bus, y todos sus pines de registro de desplazamiento deben ser bidireccionales (IE, funcionan tanto como el conductor como el receptor). Esto es lo que haces:
Ponga una resistencia desplegable en cada pin. Algo alrededor de 20K a 50k ohmios debería estar bien.
Coloque una resistencia en serie entre el CPLD y el cable. Algo alrededor de 100 ohmios. Esto es para ayudar a prevenir daños por ESD y otras cosas. Una tapa de 2700 pF a tierra (en el lado del pin CPLD de la resistencia de 100 ohmios) también ayudará con ESD.
Programe el CPLD para que solo transmita la señal alta, nunca bajo. Si sus datos de salida son un '0', entonces el CPLD hará un triple estado de ese pin y permitirá que la resistencia desplegable baje la línea. De esta manera, si varios pines CPLD conducen el mismo cable en el cable alto, entonces no se producirá ningún daño (porque el CPLD tampoco conducirá el mismo cable bajo).
Cada pin es tanto un controlador como un receptor. Entonces, si tiene un cable de 256 pines, sus registros de desplazamiento serán 512 bits para el controlador y 512 bits para el receptor. La conducción y la recepción se pueden realizar en el mismo CPLD, por lo que la complejidad de la PCB realmente no cambia debido a esto. Tendrá 3 o 4 flip-flops por pin pin en este CPLD, así que planifique en consecuencia.
Luego realiza el mismo patrón de caminar / unos / ceros mientras compara los datos recibidos con los que se registraron previamente. Pero ahora manejará todo tipo de conexiones arbitrarias dentro del arnés de cableado.