Multiplexer / Selettori di dati di grandi dimensioni


10

Sto cercando un IC multiplexer con 128: 1 o più input (256 sarebbe abbastanza carino). Avrei pensato che un dispositivo del genere sarebbe abbastanza comune, ma non riesco a individuarlo. Potrebbe essere che sto guardando i posti sbagliati ma in qualche modo penso che mi manchi qualcosa - forse i grandi multiplexer di input non vengono usati così spesso? In tal caso, qual è l'alternativa?

Il max. Sono stato in grado di trovare il vecchio fidato 74150 con 16 ingressi.

Capisco che posso costruire un grande multiplexer combinando più 16 input mux, ma spero in una soluzione più integrata.


Sto progettando un circuito in grado di provare circuiti aperti e in corto in un cablaggio automobilistico. Un cablaggio tipico può contenere circa 200 fili. Attualmente, il circuito utilizza 16 multiplexer per gestire 128 fili.

I multiplexer sono collegati a un singolo multiplexer a 16 ingressi e questo a sua volta è collegato a un uC. Allo stesso modo, dall'altra parte, ci sono 16 demultiplexer. I demultiplexer commutano i fili su una tensione. Allo stesso tempo, questo filo viene commutato su uno degli ingressi uC tramite il mux.

Se il filo è OK, l'uC dovrebbe vedere un alto al suo ingresso. L'UC controlla quindi tutti gli altri fili. Se uno di essi è alto, significa che c'è un corto tra quei due fili.

Nota: questo circuito non è stato progettato da me. Questo è stato fatto nel 2003. Sto solo cercando di migliorare questo circuito. Si noti inoltre che nessuno dei cablaggi contiene un bus dati CAN o qualsiasi altro tipo di bus. Sono solo semplici fili per alimentazione e segnali.

Ecco uno schema a blocchi molto approssimativo che ho realizzato rapidamente solo per questo post. Spero che questo renda il problema più chiaro poiché l'inglese non è la mia prima lingua e ho difficoltà a spiegare le cose tramite testo. Anche se il diagramma non è molto buono, spero che renda le cose migliori. Le linee che vanno lateralmente nel demux e nel mux dall'MCU sono le linee degli indirizzi.

Si noti che uno dei fili è diviso in 3. L'ho fatto intenzionalmente per mostrare che alcune connessioni sono una-a-molte e non solo una a una. Quello più complesso che ho visto è un filo diviso in 60 giunzioni. Questo è il motivo per cui demux e mux hanno linee di indirizzi separate. Il demux potrebbe essere all'ingresso n. 20 mentre il mux può commutare tra 20,21,22 ecc. Controllare tutte le linee che sono congiunte dalla linea 20.

inserisci qui la descrizione dell'immagine

Se ritieni che ci sia un modo migliore per progettarlo, per favore fatemelo sapere.


Stai cercando 128: 1 o 128 volte 2: 1?
Majenko,

128: 1. Scusa, ho dimenticato di menzionare. Chiedo scusa.
Saad,

@saad La mia esperienza ha dimostrato che quasi ogni volta che qualcuno chiede questo genere di cose, è perché stanno facendo qualcosa di fondamentalmente sbagliato. Suggerisco di affermare cosa stai cercando di realizzare, piuttosto che quale pensi sia la soluzione. In questo modo potremmo essere in grado di darti una soluzione migliore rispetto a un mucchio di mux 16: 1.

@ David Kessner, per favore vedi la modifica. In realtà ho fatto qualche domanda sul design di questo sito poche settimane fa, ma poca risposta. Gradirei qualsiasi modulo sull'input.
Saad,

1
A seconda di quanto velocemente, quanto spesso e con quanto preavviso si commuteranno gli ingressi, l'uso di multiplexer in cascata potrebbe facilitare notevolmente il routing. Invece di dover indirizzare 256 segnali verso un singolo punto sulla scheda, si potrebbero instradare 16 segnali a ciascuno dei 16 punti, instradare un segnale da ciascuno di quei punti a un chip a 16 input e indirizzare quattro segnali condivisi a tutti i multiplexer. L'uso di un chip consentirebbe in teoria di ottenere uno qualsiasi dei 256 segnali dall'ingresso all'uscita con un singolo "ritardo di gate" corrispondente a due transistor in serie (tipo N per fronte di discesa; P per aumento), ma ...
supercat

Risposte:


12

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:

  1. Inserire una resistenza di pull-down su ciascun pin. Qualcosa tra 20K e 50k ohm dovrebbe andare bene.

  2. 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.

  3. 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).

  4. 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.


Grazie mille. Inizierò a leggere di più su questo immediatamente.
Saad,

Ci ho pensato. Hai detto di usare SIPO per il lato guida e PISO per la rx. Ora, se ho capito bene, dovrei SIPO su un pin di output sull'MCU e PISO su un pin di input. Supponendo che i fili siano tutti uno a uno, quindi dovrei inviare alcuni dati attraverso il cablaggio e se li ricevo indietro, i fili superano il test. È un metodo valido? Inoltre, come dovrei modificarlo per gestire le linee che si dividono in più di 1 sull'estremità ricevente? È questo che stavi suggerendo o sono completamente fuori pista?
Saad,

Pensando di più su queste linee - supponiamo di avere 4 fili di ingresso e uno di questi (il 4 °) si divide in 2 fili. Quindi abbiamo 5 fili all'estremità rx. Supponiamo di spostare i bit 0101, se riceviamo indietro 01011, allora tutti i fili sono a posto. Supponiamo che il 3o bit sia alto (01111), quindi sappiamo che il 3o filo è in cortocircuito. Ma questo non ci dirà con quale filo è cortocircuitato. Forse un modo migliore sarebbe quello di lasciare "1" increspare i registri. Quindi, all'inizio abbiamo 1000 e rec. 10000. Quindi 1 increspa, e otteniamo 0100 e 01000. Fino a raggiungere l'ultimo bit, 0001.
Saad,

In questo caso sappiamo che dovremmo ricevere 00011, poiché l'ultimo è stato diviso in due. Se c'è un cortocircuito sul 4 ° filo e stiamo inviando 0010, allora rx 00111 - che sappiamo non è corretto e possiamo visualizzare un errore che specifica dove si trova il cortocircuito. Questo metodo ti suona bene?
Saad,

@saad Ho aggiornato la mia risposta con molti più dettagli per coprire il tuo commento.

7

Non credo che esistano soluzioni a chip singolo. Sarebbero costosi a causa del gran numero di I / O e probabilmente anche a causa della bassa domanda. La maggior parte dei progetti eseguirà la cascata a 8 o 16 multiplexer di input.

Se vuoi davvero una soluzione più integrata dovrai cercare un CPLD . Esistono CPLD con oltre 256 I / O, come Xilinx CoolRunner XC2C512 , disponibile in una versione BGA con 270 I / O utente. Tieni presente che per un multiplexer a 256 ingressi sono necessari altri 8 ingressi per i segnali selezionati, un'uscita ovviamente e forse anche un'abilitazione, quindi i 270 I / O non saranno troppi.

Dovrai anche tenere presente che molto probabilmente il tuo packaging sarà BGA ; non sono sicuro che ti piacerà. Non ho ancora visto QFP con circa 300 pin ...


2
Grazie. Ho avuto la sensazione che sarebbe stato così. Penso che mi limiterò a fare un mux più grande su 16 input.
Saad,

@saad - sembrerebbe la tua migliore scommessa, a meno che tu non prenda un PLD di grandi dimensioni (conteggio dei pin, non cancelli / logici) come suggerito (i vantaggi sono più efficienti / dimensioni, in realtà sarebbe necessaria pochissima esperienza con loro o HDL, ma il pacchetto sarebbe davvero un dolore - dev board?)
Oli Glaser

In realtà ho ALCUNA esperienza con HDL e FPGA (Handel-C - che non è stato piacevole lavorare con) attraverso la scuola. Non ho mai lavorato su un CPLD però. Ma non ho mai fatto un casino con un pacchetto BGA e sembra davvero un dolore. EDIT: XC2C512 è disponibile anche in PQFP, anche se ora mi chiedo se qualcuno con la minima esperienza come la mia in HDL e FPGA può funzionare con tali dispositivi. È anche abbastanza caro - vale £ 60 al Farnell UK.
Saad,

@saad: il PQFP ha solo 173 I / O utente. un mio collega ha programmato il suo CPLD (semplice applicazione: decodificatore di indirizzo) in Abel , che dal suo aspetto sembra molto più semplice di VHDL o Verilog. Probabilmente non è potente come VHDL / Verilog, ma questo non dovrebbe essere un problema per la tua applicazione
stevenvh,

@stevenvh: Abel è in qualche modo un po 'brutto, ma specificare i comportamenti dei pin in termini di orologi ed equazioni a volte può essere molto più naturale che scrivere cose più verbalmente in VHDL o Verilog. Mi chiedo perché gli strumenti non supportano un linguaggio basato sull'equazione più bello?
supercat

3

Sebbene CPLD / FPGA sembri l'idea giusta per un conteggio dei pin elevato, un cablaggio automobilistico in genere sarà fisicamente abbastanza esteso e i connettori moderatamente grandi, quindi invece di passare da un dispositivo ad alto numero di pin a un numero elevato di connettori, un un sistema modulare con, diciamo, 16 IO su registri a scorrimento, interconnessi dal basso numero di linee clock / shift può essere più appropriato e anche molto scalabile.
Qualcos'altro da considerare è per il test dei cavi, è possibile utilizzare una catena di resistori per applicare, diciamo, 16 tensioni a 16 linee e un mux analogico per controllare la tensione su ciascuna estremità all'altro. Questo rileverebbe aperture e pantaloncini, ed sarebbe economico.


Intendi dire che dovrei implementare i registri a scorrimento in blocchi a 16 bit su CLPD? Molto probabilmente non userò un singolo CPLD di grandi dimensioni per fare tutto il lavoro. Voglio evitare i pacchetti BGA e quindi probabilmente rimarrò con i CLPD più piccoli. Al momento, per ogni nuovo cablaggio richiesto è stata sviluppata una nuova "scheda di connessione" e su cui sono montati tutti i connettori. Questi connettori sono quindi a loro volta collegati al circuito che ho descritto nella domanda precedente. Nel nuovo sistema, manterremo questo meccanismo: che tipo di problemi dovrò affrontare se collego un gran numero di IO su un chip?
Saad,

1

L'uso di un registro a scorrimento per leggere molti input è un modello piacevole. Dato che David Kessner ha suggerito di usare un CPLD, suggerirei un altro modello. Supponiamo che tu voglia che ogni CPLD gestisca 32 input. Fornisci a ciascun CPLD un input di clock condiviso, un input di abilitazione individuale, un output di abilitazione (che si collega all'input di abilitazione del chip successivo) e un output di dati condiviso. Ogni chip ha un contatore a cinque bit e un indicatore di overflow. Quando l'ingresso di abilitazione viene disattivato, cancellare il contatore e l'indicatore di troppo pieno. Quando viene attivato l'ingresso di abilitazione ma l'indicatore di overflow non è impostato, emettere lo stato del bit di ingresso indicato dal contatore. Quando viene ricevuto un impulso di clock e il chip è abilitato e il contatore non ha traboccato, eseguire il bump del contatore. Il bit di overflow alimenterebbe l'output "abilita". L'effetto netto di tutta questa logica è che si può ottenere necessitando solo di circa 8 macrocellule per gestire 32 input. Uno potrebbe quindi essere in grado di adattare all'interno del CPLD altre funzioni che sono più ad alta intensità di calcolo o ad alta intensità di registro ma non richiedono molto I / O.

Se uno ha un CPLD con circuiti pin-keeper, si potrebbe essere in grado di utilizzare un approccio simile per l'output, specialmente se c'è un modo per emettere l'uscita da una macrocellula a più pin (senza dover spendere una macrocellula per ogni pin). Il chip avrebbe input di dati e clock condivisi, un input di abilitazione e un output di abilitazione. Internamente, avrebbe bisogno di un contatore a cinque bit, una copia aggiuntiva del bit del contatore inferiore bloccato sul bordo dell'orologio opposto rispetto ai primi cinque, un bit di overflow e un segnale dati condiviso che alimenterebbe tutti i pin. Sette macrocellule, più comunque molte erano necessarie per copiare il segnale dei dati di input su tutti i pin (i controlli di abilitazione dell'uscita per i pin servirebbero come abilitazione del latch).

Una bella caratteristica di questo approccio (che, tra l'altro, viene spesso utilizzato nei driver LCD) è che si possono avere più linee di dati che spostano i dati in parallelo e che richiedono comunque un solo cavo a catena tra i chip. Inoltre consente di eliminare un circuito di blocco da ciascun ingresso o uscita.


1

Come suona questo per un'idea, supponendo che il più grande gruppo di pin che si suppone siano collegati, ad esempio, è 20 pin: usa un gruppo di chip driver LED con registro a scorrimento a collettore aperto (un'uscita per pin) ognuno dei quali può affondare almeno 2mA; collegare una resistenza da 1K da ciascun pin a un punto comune e utilizzare un circuito che alimenta una tensione a 20,1 mA (va bene se la tensione è maggiore quando la corrente è inferiore, a condizione che sia una tensione a 20,1 mA) e indicare se un tentativo è stato fatto per trarre più di tale importo. Per alcune configurazioni di cavi, potrebbe essere necessario disporre di un numero limitato di pin "di riserva" che hanno resistori da 1K, ma non sono collegati al cavo. Potrebbe essere desiderabile avere un pin di riserva con un resistore da 1K, uno con un resistore da 500 ohm (o due da 2K in parallelo), uno con un resistore da 250 ohm (quattro da 1K '

Per testare il cavo, formulare scenari che dovrebbero comportare l'abbassamento di esattamente venti pin e scenari che dovrebbero comportare l'abbassamento di esattamente venti (i pin di riserva possono essere utili per questo) e confermare che gli scenari a venti pin siano non segnalato come utilizzando più di 20,5 mA, ma gli scenari a 21 pin lo sono.

Supponiamo, ad esempio, che uno abbia un cablaggio che dovrebbe collegare 1-2, 3-4, 5-6, ecc. Fino a 39-40. Verificare la presenza di pantaloncini selezionando varie combinazioni di dieci coppie di pin e abbassare entrambe le coppie di ciascun pin. Stai andando a 20 pin in basso e nessun pin dovrebbe andare in basso tranne quelli che stai guidando, quindi la corrente dovrebbe essere sempre inferiore a 20 mA. Se va oltre, qualcosa è in corto. Se si riesce a trovare una combinazione di dieci coppie che non leggono sovracorrenti, una alla volta spegne una coppia attiva e accende un'altra coppia, fino a quando qualcosa diventa sovracorrente; l'ultima coppia accesa è in cortocircuito verso qualcosa che non dovrebbe essere.

Verifica la presenza di aperture spingendo un perno di riserva in basso, quindi selezionando varie combinazioni di dieci coppie, guidando un perno da ciascuna coppia (a volte quella dispari e talvolta quella pari). Se ci sono delle aperture, tale azione provocherà un abbassamento di meno di 21 pin e quindi una lettura sottocorrente. Se ciò si verifica, quindi uno alla volta, prendi ogni coppia in cui è guidato un filo e invece guida entrambi. Se ciò spinge la lettura corrente oltre 20,1 mA, quella coppia è aperta.

Si potrebbe usare un CPLD per questa applicazione, ma un sistema come ho descritto potrebbe essere migliore. Potrebbe essere ulteriormente migliorato aggiungendo circuiti per misurare effettivamente la corrente (piuttosto che semplicemente produrre un indicatore over / under). Tale misurazione consentirebbe di impostare valori di tolleranza per la resistenza.


1

È questo quello che stai cercando?

Maxwell 81840 - multiplexer a 128 canali


Probabilmente no. Questo è un multiplexer analogico, anche se probabilmente puoi anche multiplexare segnali digitali con esso, se tieni d'occhio la velocità del dispositivo. Anche questo è un dispositivo rad-hard, sarà costoso.
Stevenvh,

Benvenuto! Steven ha ragione, potrebbe non essere la soluzione appropriata, ma bella cattura! Forse aggiungi una descrizione del componente sotto il link
clabacchio

Grazie Clabacchio. Non sono sicuro di quanto più dettagliato possa descrivere il componente. Non l'ho mai usato prima e non ho ancora esperienza sufficiente.
Daniel,

sweeeeet chip :) Voglio usarne uno in un progetto di piano digitale, ma se non riesci a trovare il prezzo semplicemente cercando su google, non te lo puoi permettere!
Andrew Wagner,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.