Mentre un enorme mux / demux funzionerà sicuramente, collegare un sacco di mux 16: 1 è un sacco di lavoro e ha alcune limitazioni che possono o meno essere un problema. L'approccio più convenzionale sarebbe quello di utilizzare i registri a turni. Utilizzare un registro serial-in / parallel-out per l'estremità "pilotante" e un parallel-in / serial-out per l'estremità ricevente. La cosa bella dei registri a scorrimento è che possono essere facilmente concatenati per creare un registro a scorrimento più lungo. Un registro a scorrimento a 256 bit o addirittura a 1024 bit non è affatto un problema. Con un po 'di buffering, il flusso seriale può anche essere passato attraverso un cavo a un altro PCB (se ciò semplifica le cose).
Esistono molti chip del registro a scorrimento a 8 bit come il 74xx597, ma un CPLD è MOLTO migliore per questo. Ma non è necessario un gigantesco CPLD da 256+ pin. Invece, puoi usare diversi CPLD più piccoli e metterli insieme. Anche se non ho fatto i conti, sono abbastanza sicuro che l'uso di CPLD di dimensioni medio-piccole sarebbe più economico di un CPLD di grandi dimensioni e non devi preoccuparti dei BGA.
Questo CPLD richiederebbe abbastanza flip-flop. Ciò significa che una normale architettura CPLD (come quella utilizzata da Xilinx) non è buona come qualcosa che è più FPGA-ish. Altera e Lattice hanno entrambi CPLD con molti più flip-flop per dollaro rispetto a quello di Xilinx.
Anche se potresti non avere molta esperienza con i CPLD, questo design è molto semplice e i vantaggi dell'utilizzo di un CPLD sono enormi. Sarebbe molto utile imparare a programmare i CPLD per questo.
Inoltre, i vantaggi dell'utilizzo di un registro a scorrimento anziché di un mux non sono inizialmente visibili. Principalmente ottieni molta flessibilità nel modo in cui guidi e rilevi i fili. Potresti anche testare più imbracature contemporaneamente (se hai abbastanza registri a scorrimento). Tutto ciò che puoi testare con i mux può essere fatto con i registri a scorrimento, ma i registri a scorrimento possono fare di più. L'unico lato negativo dei registri a scorrimento è che è più lento, anche se sarà ancora più veloce di quello che ti serve (IE, il ragazzo che collega e scollega il cablaggio sarà molto più lento del tempo di test con i registri a scorrimento).
Dovrei anche dire che anche se si utilizzano i CPLD, i registri a scorrimento sono ancora più facili dei mux. La cosa principale è che sono più piccoli, anche se per vedere l'effettivo vantaggio / svantaggio dovresti effettivamente fare il design in entrambi e vedere quale dimensione di CPLD ti serve. Questo dipenderà abbastanza dal tipo di architettura CPLD utilizzata, quindi qualsiasi generalizzazione fatta con Xilinx non si applicherà ad Altera.
Modifica: Di seguito è riportato un po 'più di dettaglio su come eseguire effettivamente il test usando i registri a scorrimento ...
Per fare il test, puoi ignorare il fatto che stai utilizzando i registri a scorrimento e considerare solo che i dati sono guidati sul "lato guida" e si spera di leggere sul "lato ricevente". Il modo in cui hai ottenuto i dati andata e ritorno (via seriale) è in gran parte irrilevante. Ciò che è importante è che i dati che è possibile guidare sono completamente arbitrari.
I dati con cui guidi si chiamano "vettori di test". Anche i dati che SI ASPETTANO DI LEGGERE fanno parte dei vettori di test. Se il cavo è cablato con una relazione 1: 1, ci si aspetterebbe che i dati di guida e i dati di ricezione siano gli stessi di quelli che si guida. Se il cavo non è 1: 1, sarebbe ovviamente diverso.
Se hai utilizzato un approccio basato su MUX, stai ancora utilizzando i vettori di test, ma non hai alcun controllo sul tipo di vettore di test. Con i Mux, il modello è chiamato "Walking Ones" o "Walking Zeros". Diciamo che hai un cavo a 4 pin. Con quelli che camminano si guida il seguente schema: 0001, 0010, 0100, 1000. Gli zeri che camminano sono gli stessi, ma invertiti.
Per un semplice test di continuità, camminare / zeri funziona abbastanza bene. A seconda di come è collegato il cavo, ci sono altri schemi che potrebbero essere fatti per accelerare il test o per testare cose specifiche. Ad esempio, se alcuni pin non possono mai essere messi in corto circuito rispetto ad altri pin, è possibile ottimizzare il modello di test per non guardare quei casi e quindi correre più velocemente. Trattare con qualcosa di diverso da quelli che camminano / zeri può complicarsi dal punto di vista del software da gestire.
Il metodo definitivo per generare vettori di test viene eseguito per i test JTAG. JTAG, chiamato anche scan di confine, è uno schema simile per testare le connessioni tra chip su un PCB (e tra PCB). La maggior parte dei chip BGA utilizza JTAG. JTAG ha registri a scorrimento in ogni chip che possono essere utilizzati per pilotare / leggere ciascun pin. Un software complicato e costoso esamina la netlist per il PCB e genererà i vettori di test. Un sofisticato tester per cavi potrebbe fare la stessa cosa, ma sarebbe un sacco di lavoro.
Fortunatamente, per te esiste un modo MOLTO PIÙ FACILE per generare i vettori di test. Ecco cosa fai ... Collega un buon cavo noto ai registri a scorrimento. Esegui un modello zeri / uno che cammina attraverso il lato guida. Mentre lo fai, registra ciò che viene visualizzato sul lato ricevente. A livello semplice, puoi semplicemente usarlo come vettori di test. Quando si collega un cavo difettoso e si eseguono gli stessi passi / zeri, i dati che si ricevono non corrisponderanno ai dati precedentemente registrati e quindi si sa che il cavo è difettoso. Questo ha diversi nomi, ma tutti i nomi sono una variante del termine "apprendimento", come autoapprendimento o autoapprendimento.
Finora, questo gestisce facilmente il caso in cui un pin sull'estremità motrice va a più di un pin sull'estremità ricevente, ma non gestisce l'altro caso in cui più pin sull'estremità motrice sono collegati insieme. Per questo sono necessari alcuni elementi speciali per prevenire danni causati dalla contesa del bus e tutti i pin del registro del cambio devono essere bidirezionali (IE, sia come driver che come ricevitore). Ecco cosa fai:
Inserire una resistenza di pull-down su ciascun pin. Qualcosa tra 20K e 50k ohm dovrebbe andare bene.
Inserire una resistenza in serie tra il CPLD e il cavo. Qualcosa intorno ai 100 ohm. Questo per aiutare a prevenire danni da ESD e cose. Un tappo da 2700 pF a terra (sul lato pin CPLD della resistenza da 100 ohm) aiuterà anche con ESD.
Programmare il CPLD in modo che guidi solo il segnale in alto, senza mai abbassarlo. Se i dati di output sono "0", il CPLD eseguirà il triplo stato del pin e consentirà alla resistenza di pull-down di abbassare la linea. In questo modo, se diversi pin CPLD stanno guidando lo stesso filo sul cavo in alto, non si verificherà alcun danno (poiché il CPLD non porterà anche lo stesso filo in basso).
Ogni pin è sia un driver che un ricevitore. Quindi, se si dispone di un cavo a 256 pin, i registri a scorrimento saranno 512 bit per il driver e 512 bit per il ricevitore. La guida e la ricezione possono essere eseguite nello stesso CPLD, quindi la complessità del PCB non cambia davvero a causa di ciò. In questo CPLD avrai 3 o 4 infradito per pin del cavo, quindi pianifica di conseguenza.
Quindi esegui lo stesso modello di camminata / zeri confrontando i dati ricevuti con quelli precedentemente registrati. Ma ora gestirà tutti i tipi di connessioni arbitrarie all'interno del cablaggio.