Embora um enorme mux / demux certamente funcione, conectar um monte de 16: 1 muxes é muito trabalhoso e tem algumas limitações que podem ou não ser um problema. A abordagem mais convencional seria usar registros de turno. Use um registro de entrada / saída serial em paralelo para a extremidade "condução" e um registro de entrada / saída paralela para a extremidade receptora. O bom dos registros de turno é que eles podem ser facilmente encadeados para fazer um registro de turno mais longo. Um registro de deslocamento de 256 ou mesmo 1024 bits não é um problema. Com alguns buffers, o fluxo serial pode até ser passado através de um cabo para outro PCB (se isso facilitar o processo).
Existem muitos chips de registro de turno de 8 bits como o 74xx597, mas um CPLD é MUITO melhor para isso. Mas você não precisa de um CPLD gigante de 256 pinos. Em vez disso, você pode usar vários CPLDs menores e encadeá-los. Embora eu não tenha feito as contas, tenho certeza de que o uso de CPLDs de pequeno a médio porte seria mais barato que um CPLD grande - e você não precisa se preocupar com os BGAs.
Esse CPLD seria bastante intensivo em flip-flop. O que isso significa é que uma arquitetura normal de CPLD (como o que o Xilinx usa) não é tão boa quanto algo mais isento de FPGA. Altera e Lattice têm CPLDs com muito mais chinelos por dólar do que o Xilinx.
Embora você possa não ter muita experiência com CPLDs, esse design é muito simples e os benefícios do uso de um CPLD são enormes. Vale muito a pena aprender como programar CPLDs para isso.
Além disso, as vantagens de usar um registro de turno em vez de um mux não são fáceis de ver inicialmente. Principalmente, você tem muita flexibilidade na maneira de dirigir e sentir os fios. Você pode até testar vários chicotes ao mesmo tempo (se você tiver registros de turno suficientes). Tudo o que você pode testar com muxes pode ser feito com registros de deslocamento, mas os registros de deslocamento podem fazer mais. A única desvantagem dos registros de turno é que é mais lento, embora ainda seja mais rápido do que o necessário (ou seja, o cara que conecta e desconecta o chicote será muito mais lento que o tempo para testar com os registros de turno).
Devo dizer também que, mesmo se você estiver usando CPLDs, os registros de turnos ainda serão mais fáceis que os muxes. O principal é que eles são menores - embora, para ver a vantagem / desvantagem real, você realmente precise fazer o design em ambos e ver qual o tamanho do CPLD necessário. Isso dependerá bastante do tipo de arquitetura de CPLD usada, portanto, qualquer generalização feita com o Xilinx não se aplicará à Altera.
Edit: Abaixo está um pouco mais detalhadamente sobre como realmente executar o teste usando registros de turno ...
Para fazer o teste, você pode ignorar o fato de estar usando registros de turno e considerar apenas que os dados são direcionados no "final final" e esperamos ler no "final final". Como você obteve e retornou os dados (via serial) é em grande parte irrelevante. O importante é que você pode gerenciar dados que são totalmente arbitrários.
Os dados com os quais você dirige são chamados de "vetores de teste". Os dados que você espera ler também fazem parte dos vetores de teste. Se o cabo estiver conectado com um relacionamento 1: 1, você esperaria que os dados de direção e os dados de recebimento fossem os mesmos que você dirige. Se o cabo não for 1: 1, seria obviamente diferente.
Se você usou uma abordagem baseada em MUX, ainda está usando vetores de teste, mas não tem controle sobre o tipo de vetor de teste. Com os Muxes, o padrão é chamado de "Walking Ones", ou "Walking Zeros". Digamos que você tenha um cabo de 4 pinos. Com os que andam, você dirige o seguinte padrão: 0001, 0010, 0100, 1000. Os zeros a pé são iguais, mas invertidos.
Para um teste de continuidade simples, andar uns / zeros funciona razoavelmente bem. Dependendo de como o cabo está conectado, há outros padrões que podem ser feitos para acelerar o teste ou para testar coisas específicas. Por exemplo, se alguns pinos nunca puderem ser curto em relação a outros pinos, você poderá otimizar o padrão de teste para não olhar para esses casos e, portanto, executar mais rapidamente. Lidar com algo diferente de zeros / caminhadas pode ser complicado no lado do software.
O método final de gerar vetores de teste é feito para o teste JTAG. O JTAG, também chamado de varredura de limites, é um esquema semelhante para testar as conexões entre chips em um PCB (e entre PCBs). A maioria dos chips BGA usa JTAG. O JTAG possui registros de deslocamento em cada chip que podem ser usados para conduzir / ler cada pino. Um software complicado e caro analisa a netlist do PCB e gera os vetores de teste. Um sofisticado testador de cabos poderia fazer a mesma coisa - mas isso daria muito trabalho.
Felizmente, para você, existe uma maneira MUITO MAIS FÁCIL de gerar os vetores de teste. Aqui está o que você faz ... Conecte um bom cabo conhecido aos registros de turno. Execute um padrão de zeros / zeros no final da direção. Ao fazer isso, registre o que é visto no lado de recebimento. No nível simples, você pode usar isso como seu vetor de teste. Quando você conecta um cabo defeituoso e faz os mesmos passos / zeros, os dados que você recebe não correspondem aos dados gravados anteriormente - e, portanto, você sabe que o cabo está com defeito. Isso tem vários nomes, mas todos os nomes são uma variação do termo "aprendizado", como auto-aprendizado ou auto-aprendizado.
Até agora, isso lida facilmente com o caso em que um pino na extremidade motriz vai para mais de um pino na extremidade receptora, mas não com o outro caso em que vários pinos na extremidade motriz são conectados juntos. Para isso, você precisa de algumas coisas especiais para evitar danos causados pela contenção do barramento, e todos os pinos do seu registro de deslocamento devem ser bidirecionais (IE, funcionam como driver e receptor). Aqui está o que você faz:
Coloque um resistor pull-down em cada pino. Algo em torno de 20K a 50k ohms deve estar bem.
Coloque um resistor em série entre o CPLD e o cabo. Algo em torno de 100 ohms. Isso é para ajudar a evitar danos causados por ESD e outras coisas. Uma tampa de 2700 pF ao terra (no lado do pino de CPLD do resistor de 100 ohm) também ajudará no ESD.
Programe o CPLD para que ele apenas conduza o sinal alto, nunca dirigindo baixo. Se seus dados de saída forem '0', o CPLD triestabelecerá esse pino e permitirá que o resistor pull-down abaixe a linha. Dessa forma, se vários pinos de CPLD estiverem conduzindo o mesmo fio no cabo alto, nenhum dano ocorrerá (porque o CPLD também não estará conduzindo o mesmo fio com baixa tensão).
Cada pino é um driver e um receptor. Portanto, se você tiver um cabo de 256 pinos, seus registros de turnos serão 512 bits para o driver e 512 bits para o receptor. Dirigir e receber pode ser feito no mesmo CPLD, portanto a complexidade das PCBs não muda por causa disso. Você terá 3 ou 4 flip-flops por pino de cabo neste CPLD, portanto planeje adequadamente.
Em seguida, você faz o mesmo padrão de caminhada / zeros ao comparar os dados recebidos com o que foi gravado anteriormente. Mas agora ele lida com todos os tipos de conexões arbitrárias dentro do chicote elétrico.