Come si implementa la seguente funzione usando nient'altro che 2: 1 MUX?


8

Ho difficoltà a capire come implementare le funzioni booleane, in particolare dato che posso usare solo i mux 2: 1 e la variabile D come variabile residua.

La funzione è la seguente:

F(A,B,C,D,E)=(6,7,12,13,14,15,22,23,24,25,26,27,28,29,30,31)

Ho creato la tabella della verità e, usando una mappa di Karnaugh, ho minimizzato la funzione in questo modo:

F(UN,B,C,D,E)=UNB+BC+CDE¯+CDE

Sono anche riuscito a progettare un MUX 16: 1 con A, B, C ed E come selettore e D come variabile residua.

Capisco come funziona un multiplexer e sono pienamente in grado di derivare una tabella di verità da un'implementazione esistente, ma semplicemente non capisco come prendere la tabella di verità, la mappa di Karnaugh e la funzione SOP minimizzata e implementare la funzione usando solo 2: 1 MUX e D come variabile residua.

Non sto necessariamente chiedendo la risposta, anche se sarebbe bello vederlo. Sono più interessato a una spiegazione, a un algoritmo o davvero a qualsiasi cosa che possa aiutarmi a trovare l'implementazione da solo.

Voglio essere in grado di visualizzare la connessione tra la funzione e l'implementazione, non solo imparare a implementarla a memoria senza capire perché sia ​​così.

Grazie per il tuo tempo!

Modifica: Mentre ho capito la risposta accettata ed è la risposta corretta, mi è stato quindi richiesto di utilizzare solo i seguenti input per le linee di dati dei miei mux 2: 1: logica 0, logica 1 e la variabile D. Le variabili A, B, C dovrebbe essere usato solo come linee di selezione.

Ho creato la mappa VK per F (A, B, C, D) = AB + BC + CD e quindi ho usato quella mappa per derivare una mappa VK per F (A, B, C) come si può vedere sotto.

inserisci qui la descrizione dell'immagine Modifica: per la mappa a destra il valore per ABC = 000 dovrebbe essere 0, non 1. Un errore che ho fatto quando ho copiato sul tavolo dal mio notebook in Excel.

Successivamente ho creato la seguente implementazione mux:

inserisci qui la descrizione dell'immagine

Il design mux è stato preso da un libro di elettronica. L'implementazione, sebbene non terribilmente efficiente, funziona. Ho calcolato l'output dei mux usando la formula M (X, Y, Z) = XZ '+ YZ e l'output del mux più a destra è:

MUX7=UNBC¯+DB¯C+BC

Usando ancora un'altra mappa di Karnaugh, quanto sopra si semplifica in AB + BC + CD che è la funzione che avevo bisogno di implementare.

Il design dei MUX stessi è preso in prestito da un libro di elettronica. Nel libro, gli input di dati del livello più a sinistra dei MUX erano numerati come si può vedere nel mio diagramma e le etichette rappresentano l'equivalente decimale delle celle della mappa VK F (A, B, C). Se si osserva, ad esempio, la cella 101 (binaria per 5), il valore in quella cella è l'ingresso per l'ingresso MUX con l'etichetta corrispondente nell'implementazione, in questo caso 'D'.

Qualcuno può chiedere perché le righe di input dei dati sono etichettate in quel particolare ordine (0, 4, 2, 6, 1, 5, 3, 7)?


F (A, B, C, D, E) non si riduce a A (B + C) + CD?
Tony Stewart Sunnyskyguy EE75

per A = msb, F = 00110 + 00111 + 011xx + da 10110 a 11111 è così che hai iniziato?
Tony Stewart Sunnyskyguy EE75

Grazie per aver dedicato del tempo a leggere la mia domanda. Potrebbe benissimo ridursi a quello. Non ho usato alcuna algebra per minimizzare la funzione, solo la mappa di Karnaugh. In ogni caso, la funzione stessa non è pertinente come l'obiettivo finale della domanda. Tecnicamente, sono interessato all'implementazione stessa indipendentemente dall'aspetto della funzione.
user1969903

Riduce a F = AB + BC + C D.
Jon

Risposte:


8

Non è troppo complesso, penso, supponendo che tu abbia elaborato l'equazione che volevi correttamente (suppongo che tu abbia fatto bene lì.) Inizia guardando l'equazione per un MUX da 2 pollici:

M2(UN,B,S)=UNS¯+BS

Da questo, puoi ricavare alcuni risultati utili:

M2(0,X,y)=XyM2(X,0,y)=Xy¯M2(X,y,0)=XM2(1,X,y)=X+y¯M2(X,1,y)=X+yM2(X,y,1)=yM2(X,y,X)=XyM2(X,y,y)=X+yM2(0,0,X)=0M2(0,1,X)=XM2(1,0,X)=X¯M2(1,1,X)=1

Quindi ne segue che:

F=UNB+BC+CDX=UNB=M2(UN,B,UN)y=BC=M2(B,C,B)z=CD=M2(C,D,C)F=X+y+zF=M2(M2(X,y,y),z,z)

In breve, avrai bisogno di (5) mux da 2 pollici:

schematico

simula questo circuito - Schema creato usando CircuitLab

C'è anche una bella simmetria lì. Notarlo?

AGGIUNTO: Hai chiesto di poter utilizzare solo 0, 1 o D come sorgente di input di dati mux. Presumo con questo che intendi dire che tutte le A, B, C e D possono essere usate come selettori mux. (Altrimenti, non credo che il risultato possa essere raggiunto.) Quindi, questo significa solo che è necessario utilizzare alcuni degli altri risultati utili che ho menzionato in precedenza. L'idea più semplice sarebbe quella di aggiungere solo altri tre mux 2-in:

schematico

simula questo circuito

Non sono sicuro che esista un modo per ottimizzarlo ulteriormente. Non ho esaminato tutte le possibilità.

MODIFICA ANCORA: Sì! Utilizzando la soluzione appena aggiunta dell'OP, le due seguenti sono appena uscite. Quello di sinistra risponde alla sua prima parte della domanda, quello di destra risponde alla sua seconda parte.

schematico

simula questo circuito

MODIFICA DI NUOVO: L'ordinamento non è complicato. Sta solo assegnando le lettere a cui appartengono. L'autore ha considerato (A) il bit di ordine superiore di un valore binario a tre bit, quindi rappresenta uno dei due022=0 o 122=4; ha preso (B) come bit centrale di un valore binario a tre bit, quindi rappresenta uno dei due021=0 o 121=2; e ha preso (C) come bit di ordine basso di un valore binario a tre bit, quindi rappresenta uno dei due020=0 o 120=1. Una varietà di diverse prospettive funzionerebbe ugualmente bene. Ma è quello che sembrano aver scelto.

Quindi ora hanno iniziato con il primo livello (sinistro), disposto (4) mux controllati da (A), e sono rimasti mentalmente convenienti numerando questi mux come ABC = "x00", ABC = "x01", ABC = "x10" e per quello in basso ABC = "x11".

Ora, poiché per quello in alto, ABC = "x00", questo significa che accetta "000" = 0 o "100" = 4. Quindi, per l'ingresso "0" di quel mux (mux1), hanno cercato nella tabella ABC = "000" = 0 e hanno inserito la voce della tabella nel suo ingresso laterale "0". Per l'input "1" di quel mux, hanno esaminato la tabella per ABC = "100" = 4 e hanno inserito la voce della tabella nel suo input laterale "1". (Quella tabella sembra sbagliata qui, poiché il loro dovrebbe essere uno 0 in quella casella, confermato guardando le colonne espanse precedenti.)

Il prossimo mux down (mux2) è per ABC = "x10" e quindi utilizzato ABC = "010" = 2 e ABC = "110" = 6; il prossimo mux down (mux3) è per ABC = "x01" e quindi utilizzato ABC = "001" = 1 e ABC = "101" = 5; e infine l'ultimo mux down (mux4) è per ABC = "x11" e quindi utilizzato ABC = "011" = 3 e ABC = "111" = 7.

Sia mux1 (ABC = "x00") che mux2 (ABC = "x10") vengono alimentati congiuntamente a mux5. Puoi vedere qui che B è la variazione tra questi, 0 o 1, quindi è così che li hanno collegati qui. L'output di mux5 sarà ABC = "xy0", dove i primi due bit sono già stati decodificati e tutto ciò che rimane è decodificare la situazione C = 0. Quindi l'output di mux5 va all'ingresso "0" di mux7. Allo stesso modo, mux3 (ABC = "x01") e mux4 (ABC = "x11") vengono alimentati congiuntamente a mux6. B è di nuovo la variazione tra cui mux6 seleziona. L'output di mux6 è sempre correlato al caso C = 1 e viene immesso nell'input "1" di mux7.

Tutto ciò che rimane è che mux7 scelga tra C = 0 e C = 1.


Ammetto di non aver mai pensato di usare le formule del mux per guidarmi. A volte posso essere un po 'ignorante.
user1969903

@ user1969903: È solo questione di lasciar vagare la mente, un po '. Non farti confondere. Siediti e gioca. Potresti trovare qualcosa di interessante. La scoperta è di per sé la maggior parte del divertimento. Questo è, ovviamente, il motivo per cui sono qui e rispondo. Ho anche imparato qualcosa dal tuo problema e mi è piaciuta la sensazione di giocarci. Basta imparare ad andare con quello, te stesso. Pensalo come un puzzle che vuoi risolvere. (Se non ti
piacciono i

Dopo aver studiato la tua risposta mi sono preso il tempo di ricavare la formula per AND e OR con un mux e ho implementato la funzione da solo. Sono stato felice di vedere che era esattamente come quello che hai postato ma capovolto (ho collegato gli ultimi 2 input viceversa, ma è ancora corretto). Se vuoi giocarci un po 'oltre, ora mi viene richiesto di implementare di nuovo la funzione solo con mux 2: 1, ma questa volta non mi è permesso usare A, B, C o E come input per qualsiasi linea di dati per qualsiasi dei mux. Gli unici input di dati che posso usare sono la logica 0, la logica 1 e D.
user1969903

@ user1969903: Probabilmente dovresti aggiungerlo alla tua domanda attuale (in modo che una mia risposta abbia più senso) oppure creare una nuova domanda. Per ora, aggiungerò qualche altra condizione M (), che non farà male.
Jon

Beh, in realtà l'ho capito, ma non sono sicuro di come lo condividerei qui. Domani, dopo aver finito il lavoro, modificherò la domanda originale e aggiungerò la mia versione dell'implementazione affinché tutti possano vederla e anche correggere se è sbagliata.
user1969903

3

Un mux 2: 1 contiene un inverter, due porte AND e una porta OR. Con un cablaggio appropriato, è possibile utilizzarlo come una porta AND, una porta OR, un inverter e alcune altre funzioni. In effetti, alcune famiglie di FPGA si basano interamente su questo concetto.

Questo dovrebbe essere un suggerimento sufficiente per consentirti di realizzare qualsiasi funzione arbitraria usando i mux 2: 1.


2

Un multiplexer a due ingressi ha tre ingressi (a, b e seleziona). Considera ciò a cui degenera quando ne scegli uno qualsiasi, e collega l'altro a "0" o "1". Considera cosa succede quando ne scegli uno qualsiasi e collega il terzo a uno di questi. Fondamentalmente, ci sono un sacco di modi per degenerare quello spazio di input tre in uno spazio di input due.

Senza fare nulla di così sofisticato, devi solo capire che un multiplexer ti consente di impostare esplicitamente il valore di output per le righe della tabella di verità che corrispondono agli input di selezione decodificati. Quindi, con un multiplexer a quattro ingressi (e quindi due bit di selezione), è possibile rappresentare qualsiasi funzione booleana a 2 ingressi semplicemente cablando gli ingressi in modo appropriato.

Inoltre, dovrebbe essere chiaro che è possibile creare un multiplexer 4: 1 da tre multiplexer 2: 1, un multiplexer 8: 1 da sette multiplexer 2: 1, e quindi quarto, creando una topologia ad albero e cablando le selezioni in modo appropriato. Basta mettere giù abbastanza multiplexer 2: 1 per ottenere il numero di input necessari, quindi trasferire le uscite, in coppia, in multiplexer downstream 2: 1 fino ad arrivare a una singola uscita e pensare a come collegare gli ingressi selezionati.

Puoi cavartela con una variabile nascosta perché hai solo 16 minterm anche se hai una tabella di verità a 32 righe, e sono raggruppati in modo tale che interi sottotitoli siano ignorabili.

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.