ElettroNewbie ha scritto:Il problema è che il circuito mi da anche uscita alta per le due stringhe A=111 ed b=111 cioè per due stringhe uguali
La parte destra del circuito che citi è il classico "parity detector" (in questo caso a tre soli bit), concepito per indicare se la quantità di bit 1 in ingresso è pari (in questo caso 0 e 2) oppure dispari (in questo caso 1 e 3).
In altre parole: con tre bit hai otto possibili configurazioni binarie, e cioè 000, 001, 010, 011, 100, 101, 110, 111.
La 000 non ha bit a livello 1, quindi il conteggio dei bit a livello 1 è nullo. Le configurazioni 001, 010, 100 hanno un solo bit a livello 1, e dato che 1 è una cifra dispari, il conteggio dei bit a livello uno è dispari; 011, 101, 110 hanno due bit a livello 1, e dato che la cifra 2 è pari, il conteggio è pari; 111 ha tre bit a livello 1, dando luogo a un conteggio dispari.
Le tre XOR della parte destra accettano tre bit in ingresso e "reagiscono" ponendo l'uscita ad un livello tot, se il conteggio di bit 1 è dispari, e al livello opposto, se il conteggio è pari.
Dico solo "livello tot", senza specificare 1 o 0, perché in realtà l'ultima unità logica a destra è una XNOR, e quindi fornisce in uscita l'opposto di ciò che si avrebbe con una XOR.
Livelli reali a parte, l'importante è sapere che la "cascata" di XOR (qui ne abbiamo tre, ma potrebbero essere in quantità a piacere) "capisce" se la stringa di bit in ingresso ha una quantità pari oppure dispari di bit a livello 1.
Ciò detto, aggiungiamo al circuito le tre XOR di sinistra, che qui fanno il proprio mestiere consistente nell'indicare se i due ingressi stanno ricevendo bit uguali, entrambi a 0 o entrambi a 1, oppure bit diversi, cioè uno a 1 e l'altro a 0.
Tu dici che il circuito si lascia ingannare quando in ingresso presenti le configurazioni 111, e in effetti, se ci pensi su, noti che 111 ha tre bit a livello 1, e 3 è una quantità dispari.
Ad occhio, sembrerebbe lecito aspettarsi che il circuito fallisca anche con le configurazioni 000, ma per ora lasciamo da parte tale ipotesi.
Restano le configurazioni con uno oppure due bit diversi, e sappiamo che a te interessa segnalare solo la seconda.
Il ragionamento che ha portato al mio circuito è semplice: ho un "parity detector" che discrimina tra i casi con zero e due bit diversi (che hanno parità pari), e i casi con uno e tre bit diversi (che hanno parità dispari).
Se fai in modo che il circuito emetta un livello uno per i casi a parità pari, devi solo togliere di mezzo il caso con "zero bit diversi" capace d'ingannare il detector, e puoi farlo aggiungendo una OR a tre ingressi e una AND a due.
In breve, la OR ti indica con un livello 0 in uscita la condizione di stringhe nulle, e se usi tale livello 0 come "gate" per il segnale in uscita (attraverso la AND), fai in modo che il circuito non si lasci più ingannare dai due gruppi di bit 000 che, avendo parità pari, attiverebbero a sproposito la segnalazione in uscita.
Capisco che quanto sopra possa apparire (salvo errori) come la classica pensata "Steve Rogers" che toglie il fermo all'asta della bandiera invece di arrampicarsi come fanno gli altri soldati, ma se il fine giustifica i mezzi, probabilmente il rozzo disallinea gli interi
Se sbagli perché non sai, commetti un errore. Se sbagli perché non vuoi sapere, ne commetti due.