circuiti elettronici

esempi:


codifica binaria

ingressi espressi in binario
quindi booleani

anche le uscite

le uscite dipendono dagli ingressi

una formula per uscita:

variabili della formula
gli ingressi
valore della formula
quanto vale una uscita con quegli ingressi

pulsantiera numerica

ingressi
un bit per pulsante 1-9
uscita
un numero a tre bit

ingressi e uscite per la pulsantiera

ingressi p1 … p9
uno per pulsante

uscite n2 n1 n0
un numero a tre bit


primo bit della pulsantiera

qual è la formula?


formula per il primo bit della pulsantiera

nessun tasto premuto
0 (falso)
tasto premuto, da uno a sette
0 (falso)
tasto otto premuto oppure tasto nove premuto
1 (vero)

qual è la formula?


formula per il primo bit della pulsantiera

p1=falso … p9=falso
0 (falso)
p1=vero … p7=vero
0 (falso)
p8=vero oppure p9=vero
1 (vero)

il primo bit vale uno (vero) quando
l'ottavo pulsante viene premuto oppure
il nono pulsante viene premuto

p8 ∨ p9

secondo bit della pulsantiera

tutti gli ingressi a 0
uscita 0
primo ingresso vero
uscita 0
secondo ingresso vero
uscita 1
terzo ingresso vero

formula complicata
tabella ingresso-uscita


ingressi e uscite

pulsanti valore
0 0 0 0 0 0 0 0 0 0000
1 0 0 0 0 0 0 0 0 0001
0 1 0 0 0 0 0 0 0 0010
0 0 1 0 0 0 0 0 0 0011
0 0 0 1 0 0 0 0 0 0100
0 0 0 0 1 0 0 0 0 0101
0 0 0 0 0 1 0 0 0 0110
0 0 0 0 0 0 1 0 0 0111
0 0 0 0 0 0 0 1 0 1000
0 0 0 0 0 0 0 0 1 1001

pulsanti p1 … p9

secondo bit uscita u2


selezione ingressi e uscite

pulsanti valore
p1 p2 p3 p4 p5 p6 p7 p8 p9 u1 u2 u3 u4
0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 1
0 1 0 0 0 0 0 0 0 0 0 1 0
0 0 1 0 0 0 0 0 0 0 0 1 1
0 0 0 1 0 0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0 0 0 1 0 1
0 0 0 0 0 1 0 0 0 0 1 1 0
0 0 0 0 0 0 1 0 0 0 1 1 1
0 0 0 0 0 0 0 1 0 1 0 0 0
0 0 0 0 0 0 0 0 1 1 0 0 1

seconda uscita


pulsanti valore
p1 p2 p3 p4 p5 p6 p7 p8 p9     u2
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 1
0 0 0 0 1 0 0 0 0 1
0 0 0 0 0 1 0 0 0 1
0 0 0 0 0 0 1 0 0 1
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 1 0

l'uscita vale 1
se uno dei pulsanti p4 … p7 viene premuto

u2 = p4 ∨ p5 ∨ p6 ∨ p7

tutte le formule

pulsanti valore
p1 p2 p3 p4 p5 p6 p7 p8 p9 u1 u2 u3 u4
0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 1
0 1 0 0 0 0 0 0 0 0 0 1 0
0 0 1 0 0 0 0 0 0 0 0 1 1
0 0 0 1 0 0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0 0 0 1 0 1
0 0 0 0 0 1 0 0 0 0 1 1 0
0 0 0 0 0 0 1 0 0 0 1 1 1
0 0 0 0 0 0 0 1 0 1 0 0 0
0 0 0 0 0 0 0 0 1 1 0 0 1
u1 = p8 ∨ p9
u2 = p4 ∨ p5 ∨ p6 ∨ p7
u3 = p2 ∨ p3 ∨ p6 ∨ p7
u4 = p1 ∨ p3 ∨ p5 ∨ p7 ∨ p9

barrette numeriche di un display

ognuna può essere accesa (true) o spenta (false)


schema delle barrette

[display-01.fig]

ingressi
la cifra, da zero a nove
rappresentato in binario con quattro bit
uscite
una per ogni barretta
dice se deve essere accesa o spenta

cifre sul display

[display-02.fig] [display-03.fig] [display-04.fig] [display-05.fig] [display-06.fig] [display-07.fig] [display-08.fig] [display-09.fig] [display-10.fig] [display-10.fig]

ingressi e uscite

[display-02.fig] [display-03.fig] [display-04.fig] [display-05.fig] [display-06.fig] [display-07.fig] [display-08.fig] [display-09.fig] [display-10.fig] [display-10.fig]
barretta orizzontale in alto
accesa per i numeri 0, 2, 3, 5, 6, 7, 8, 9
barretta verticale in alto a sinistra
accesa per i numeri 0, 4, 5, 6, 8, 9

barretta verticale in alto a sinistra

vera per i valori 0, 4, 5, 6, 8, 9
falsa altrimenti

valore acceso
0 0 0 0 1
0 0 0 1 0
0 0 1 0 0
0 0 1 1 0
0 1 0 0 1
0 1 0 1 1
0 1 1 0 1
0 1 1 1 0
1 0 0 0 1
1 0 0 1 1

barretta: nomi delle variabili

cifre dell'ingresso: c3, c2, c1, c0
valore dell'uscita: as

vera per i valori 0, 4, 5, 6, 8, 9
falsa altrimenti

valore acceso
c3 c2 c1 c0 as
0 0 0 0 1
0 0 0 1 0
0 0 1 0 0
0 0 1 1 0
0 1 0 0 1
0 1 0 1 1
0 1 1 0 1
0 1 1 1 0
1 0 0 0 1
1 0 0 1 1

formula as=…?


formula per l'uscita

valore acceso
c3 c2 c1 c0 as
0 0 0 0 1
0 0 0 1 0
0 0 1 0 0
0 0 1 1 0
0 1 0 0 1
0 1 0 1 1
0 1 1 0 1
0 1 1 1 0
1 0 0 0 1
1 0 0 1 1

uscita vera quando gli ingressi valgono:


formula per un valore di ingresso

uscita vera quando gli ingressi valgono:

l'ingresso vale 0000 quando c3=false, c2=false, c1=false, c0=false

¬c3 ∧ ¬c2 ∧ ¬c1 ∧ ¬c0

l'ingresso vale 0100 quando c3=false, c2=true, c1=false, c0=false

¬c3 ∧ c2 ∧ ¬c1 ∧ ¬c0

formula complessiva

ingresso formula
0000 ¬c3 ∧ ¬c2 ∧ ¬c1 ∧ ¬c0
0100 ¬c3 ∧ c2 ∧ ¬c1 ∧ ¬c0
0101 ¬c3 ∧ c2 ∧ ¬c1 ∧ c0
0110 ¬c3 ∧ c2 ∧ c1 ∧ ¬c0
1000 c3 ∧ ¬c2 ∧ ¬c1 ∧ ¬c0
1001 c3 ∧ ¬c2 ∧ ¬c1 ∧ c0

la barretta in alto a sinistra è accesa quando

(¬c3 ∧ ¬c2 ∧ ¬c1 ∧ ¬c0) ∨ (¬c3 ∧ c2 ∧ ¬c1 ∧ ¬c0) ∨ (¬c3 ∧ c2 ∧ ¬c1 ∧ c0) ∨ (¬c3 ∧ c2 ∧ c1 ∧ ¬c0) ∨ (c3 ∧ ¬c2 ∧ ¬c1 ∧ ¬c0) ∨ (c3 ∧ ¬c2 ∧ ¬c1 ∧ c0)

semplificazione

(¬c3 ∧ ¬c2 ∧ ¬c1 ∧ ¬c0) ∨ (¬c3 ∧ c2 ∧ ¬c1 ∧ ¬c0) ∨ (¬c3 ∧ c2 ∧ ¬c1 ∧ c0) ∨ (¬c3 ∧ c2 ∧ c1 ∧ ¬c0) ∨ (c3 ∧ ¬c2 ∧ ¬c1 ∧ ¬c0) ∨ (c3 ∧ ¬c2 ∧ ¬c1 ∧ c0)

ultimi due termini:

(c3 ∧ ¬c2 ∧ ¬c1 ∧ ¬c0) ∨ (c3 ∧ ¬c2 ∧ ¬c1 ∧ c0) = (c3 ∧ ¬c2 ∧ ¬c1 )

altre semplificazioni

(¬c3 ∧ ¬c2 ∧ ¬c1 ∧ ¬c0) ∨ (¬c3 ∧ c2 ∧ ¬c1 ∧ ¬c0) ∨ (¬c3 ∧ c2 ∧ ¬c1 ∧ c0) ∨ (¬c3 ∧ c2 ∧ c1 ∧ ¬c0) ∨ ( c3 ∧ ¬c2 ∧ ¬c1 )

primo e secondo termine:

(¬c3 ∧ ¬c2 ∧ ¬c1 ∧ ¬c0) ∨ (¬c3 ∧ c2 ∧ ¬c1 ∧ ¬c0) ∨ = (¬c3 ∧ ∧ ¬c1 ∧ ¬c0)

secondo e terzo

secondo e quarto


formula semplificata

(¬c3 ∧ ¬c1 ∧ ¬c0) ∨ (¬c3 ∧ c2 ∧ ¬c1 ) ∨ (¬c3 ∧ c2 ∧ ∧ ¬c0) ∨ ( c3 ∧ ¬c2 ∧ ¬c1 )

si semplifica ancora, ma in un altro modo

( c3 ) ∨ ( ¬c1 ∧ ¬c0) ∨ ( c2 ∧ ¬c1 ) ∨ ( c2 ∧ c1 ∧ ¬c0)

valori degli input

0900001001

i valori 10101111 non si possono presentare in ingresso

si può scegliere arbitrariamente se l'uscita vale 0 oppure 1

( c3 ) ∨ ( ¬c1 ∧ ¬c0) ∨ ( c2 ∧ ¬c1 ) ∨ ( c2 ∧ c1 ∧ ¬c0)

altri circuiti


sommatore a tre ingressi

a b c   somma
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

prima uscita vera se:
¬a ∧ b ∧ c oppure a ∧ ¬b ∧ c oppure…

seconda uscita vera se:
¬a ∧ ¬b ∧ c oppure ¬a ∧ b ∧ ¬c oppure…

semplificazioni?


semplificazioni, dalla tabella

a b c   somma
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

prima uscita vera se
a ∧ b ∧ ¬c oppure a ∧ b ∧ c

quindi a ∧ b

i due termini vengono dalla tabella


semplificazioni direttamente dalla tabella

a b c   somma
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

dalla tabella:

a ∧ b ∧ ¬c
viene da 110
a ∧ b ∧ c
viene da 111

a ∧ b sono i primi due uno
¬c e c sono l'ultima cifra, 0 e 1


semplificazioni direttamente dalla tabella

a b c   somma
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

regola:

se ci sono due uscite 1 per due righe che differescono di un solo bit
quel bit si elimina

altre semplificazioni

a b c   somma
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

righe simili per prima uscita true:

prima e terza uguali, basta tenerne una

(a ∧ b) ∨ (b ∧ c)

sintesi di circuiti

mappe di Karnaugh
metodo manuale, comodo fino a quattro ingressi
metodo di Quine-McCluskey
algoritmo, anche molte variabili

mappe di Karnaugh

a b c   somma
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

differente disposizione degli 0 e 1 della prima uscita

ab
00 01 11 10
c 0 0 0 1 0
1 0 1 1 1

11 prima di 10 non è un errore!
garantisce che valori di ab simili sono vicini

metodo manuale
righe simili ⇒ caselle vicine
più facile trovare le semplificazioni


metodo di Quine-McCluskey

metodo automatizzabile


il problema teorico

data una funzione booleana,
ne esiste una più piccola per la stessa tabella?
se esiste trovarla

algoritmi veloci con poche variabili
rallentano quando le variabili sono tante

complessità computazionale:
quanto rallentano?

l'argomento verrà ripreso più avanti