Reti Logiche - Reti combinatorie
Cerca per parola chiave 0/0

Reti combinatorie

Porte logiche, algebra di Boole, decoder e multiplexer, sintesi a costo minimo

Un calcolatore, visto da vicino, è un enorme intreccio di circuiti che elaborano segnali a due valori. Questo modulo parte dal modello che ci permette di ragionarci sopra, la rete logica, e arriva a progettare, a partire da una tabella, il circuito più economico che la realizza. Molti schemi sono interattivi: clicca sugli ingressi e guarda i fili che portano un 1 colorarsi di rosso.

Le reti logiche come modello

Variabili logiche e segnali fisici

Immaginiamo due scatole collegate da un filo: a sinistra si può impostare una tensione tra 0 e 5 volt, a destra c'è una lampadina. Se ci interessa soltanto sapere se la lampadina è accesa o spenta, possiamo dimenticare la fisica e dire che sul filo viaggia una variabile logica w, che vale 0 o 1. Una tensione bassa (tra 0 e 0,8 V) vale 0, una alta (tra 2 e 5 V) vale 1; in mezzo c'è una fascia in cui il valore non è determinato.

TxRxwtensione impostatatra 0 V e 5 V0 V0,8 V2 V5 V1 logico: lampada accesafascia di indeterminazione0 logico: lampada spenta
Il modello «rete logica» guarda solo a quale delle due fasce appartiene la tensione: la variabile logica w vale 0 o 1.

Rete logica. Modello astratto di un sistema fisico fatto di dispositivi che si scambiano informazioni codificate in due valori. È caratterizzata da:

  1. N variabili logiche di ingresso: i loro valori in un istante formano lo stato di ingresso; gli stati possibili sono 2N;
  2. M variabili logiche di uscita, che formano lo stato di uscita;
  3. una legge di evoluzione nel tempo, che dice come le uscite dipendono dagli ingressi.

Il modello astrae sia dal fenomeno fisico (tensioni, correnti, magnetizzazione: non importa) sia da chi usa la rete (chi imposta gli ingressi e chi legge le uscite). È proprio questa astrazione a renderlo potente.

Combinatorie e sequenziali, asincrone e sincronizzate

Le reti logiche si classificano secondo due criteri, entrambi legati alla legge di evoluzione:

  • memoria: nelle reti combinatorie lo stato di uscita dipende solo dallo stato di ingresso presente, come una funzione matematica; nelle reti sequenziali dipende anche dalla storia degli ingressi passati, e quindi la rete deve ricordare;
  • temporizzazione: nelle reti asincrone le uscite si adeguano agli ingressi continuamente; nelle reti sincronizzate solo in certi istanti, scanditi da un segnale di sincronizzazione (il clock).
asincronasincronizzata
combinatoriareti combinatorie (questo modulo)caso particolare di quella sotto
sequenzialereti sequenziali asincrone (latch, flip-flop)reti sequenziali sincronizzate (registri, contatori, automi)

I limiti del modello

Ogni modello trascura qualcosa. Il nostro trascura due fatti fisici, che conviene avere sempre presenti:

  1. Le transizioni non sono istantanee. Una tensione passa da un livello all'altro in un tempo Δt, attraversando la fascia di indeterminazione. Il modello funziona se Δt è molto minore del tempo ΔT per cui i segnali restano stabili: allora possiamo dire, con un piccolo abuso, che la variabile «cambia all'istante t0».
  2. Due segnali non cambiano mai esattamente insieme. Se lo stato di ingresso passa da 10 a 01, la rete vedrà per un attimo uno stato intermedio, 11 oppure 00, a seconda di quale ingresso arriva prima. Nelle reti asincrone bisogna quindi supporre che stati di ingresso consecutivi siano adiacenti, cioè che differiscano per un solo bit.
Una transizione richiede tempofascia di indeterminazionet₀t₀ + Δttensionevariabile logicaDue ingressi non cambiano mai insiemex1x0per un attimola rete vede 11stato 10stato 01
Il modello tratta i cambiamenti come istantanei (va bene finché Δt è molto minore del tempo per cui i segnali restano stabili), ma non può contare sul fatto che due segnali cambino nello stesso istante.

Le reti combinatorie

Definizione e tempo di attraversamento

Una rete combinatoria ha N ingressi, M uscite e una descrizione funzionale F: X → Z che associa a ogni stato di ingresso uno stato di uscita. La legge di evoluzione è semplice: continuamente, detto X lo stato di ingresso, la rete porta l'uscita a F(X).

Nessun circuito reale però risponde all'istante. Una rete ha un tempo di attraversamento (o di risposta): dire che è di 20 ns significa che, 20 ns dopo un cambiamento degli ingressi, l'uscita si è adeguata e la rete è a regime.

xztempo di attraversamentot₀xzun invertitore
L'uscita si adegua all'ingresso dopo un tempo finito. Chi pilota la rete deve aspettare che vada a regime prima di cambiare di nuovo gli ingressi: si dice che la rete è pilotata in modo fondamentale.

Tabelle di verità, descrizione e sintesi

Il modo più immediato per descrivere una rete combinatoria è la tabella di verità: a sinistra tutti gli stati di ingresso, a destra le uscite corrispondenti. Si dice che un'uscita riconosce gli stati di ingresso in cui vale 1.

x2x1x0z1z0
00000
00101
01010
01110
10011
10111
11000
11100

Qui z1 riconosce gli stati 010, 011, 100, 101 e z0 gli stati 001, 100, 101. A volte, per un certo stato di ingresso, il valore dell'uscita non interessa, per esempio perché quello stato non si presenterà mai. Allora si scrive un trattino, «–», detto non specificato. Non è un terzo valore logico: l'uscita varrà comunque 0 o 1, semplicemente ci riserviamo di scegliere più tardi il valore che renderà il circuito più economico.

Descrizione

Dice che cosa fa la rete: il suo comportamento osservabile. Si dà a parole, con una tabella di verità, con espressioni booleane o con un linguaggio come il Verilog.

Sintesi

Dice come è fatta: quali componenti usare e come collegarli perché si comporti come descritto. Per ogni tipo di rete vedremo come si descrive e come si sintetizza.

Quante reti combinatorie esistono

Una rete con N ingressi e un'uscita è definita dalla sua tabella, che ha 2N righe; in ciascuna l'uscita vale 0 o 1. Le tabelle diverse, e quindi le reti diverse, sono 22N. Con due ingressi sono 16: due sono costanti, quattro ripetono un ingresso (diretto o negato), le altre sono le porte che vedremo tra poco. Con tre ingressi le reti diverse sono già 28 = 256. Una rete con più uscite, poi, si può sempre pensare come M reti a un'uscita messe una accanto all'altra: per questo ci concentreremo sulle reti a un'uscita.

Le porte logiche

NOT, AND, OR e le altre

Le reti combinatorie più semplici si chiamano porte. Si trovano in commercio come componenti elettronici e sono i mattoni con cui si costruisce tutto il resto.

NOT0 → 11 → 0z = x̅AND00 → 001 → 010 → 011 → 1z = x1 · x0OR00 → 001 → 110 → 111 → 1z = x1 + x0XOR00 → 001 → 110 → 111 → 0z = x1 ⊕ x0NAND00 → 101 → 110 → 111 → 0z = NOT (x1 · x0)NOR00 → 101 → 010 → 011 → 0z = NOT (x1 + x0)XNOR00 → 101 → 010 → 011 → 1z = 1 se gli ingressi sono ugualielemento neutro0 → 01 → 1z = x (ritardo, rigenerazione)
Le porte elementari. Le tabelle vanno lette «ingressi → uscita». Una bolla sull'uscita indica la negazione: NAND, NOR e XNOR sono AND, OR e XOR seguite da un invertitore.
  • NOT (invertitore): l'uscita è il contrario dell'ingresso.
  • AND: l'uscita vale 1 solo se tutti gli ingressi valgono 1.
  • OR: l'uscita vale 1 se almeno uno degli ingressi vale 1.
  • XOR (OR esclusivo): l'uscita vale 1 se gli ingressi sono diversi.
  • NAND, NOR, XNOR: le tre precedenti con l'uscita negata. La XNOR vale 1 se gli ingressi sono uguali.
  • L'elemento neutro (buffer) ripete l'ingresso. Sembra inutile, ma serve a ritardare un segnale e a rigenerarlo: una rete logica interpreta correttamente ingressi un po' degradati e produce uscite vicine al fondo scala, ripulendo il segnale.
a0b0ANDa · bORa + bXORa ⊕ bNANDNOT (a · b)NORNOT (a + b)XNORNOT (a ⊕ b)

AND e OR a più ingressi

Una AND a N ingressi vale 1 se tutti gli ingressi valgono 1; una OR a N ingressi se almeno uno vale 1. Si possono costruire con N − 1 porte a due ingressi, ma conta come le si dispone: il segnale deve attraversare il minor numero possibile di porte, cioè di livelli di logica, perché ogni livello aggiunge ritardo.

In cascata: 3 livellix0x1x2x3zAd albero bilanciato: 2 livellix0x1x2x3zil segnale di x0 attraversa 3 porteogni segnale attraversa 2 porte
Stesso numero di porte, ritardo diverso: con N ingressi l'albero bilanciato ha ⌈log₂ N⌉ livelli, la cascata N − 1.

Con le XOR succede una cosa interessante: un albero di XOR non generalizza la XOR «a due», ma riconosce gli stati di ingresso con un numero dispari di 1. Con le NAND e le NOR, invece, l'albero non dà né una NAND né una NOR a più ingressi: provalo con un esempio.

x30x20x10x00z = 1 se il numerodi 1 è dispari00

È il bit di parità: aggiunto a un dato, permette a chi lo riceve di accorgersi se un bit si è corrotto lungo la strada. Con le XNOR si riconosce invece un numero pari di 1.

Algebra di Boole

Operatori e proprietà

L'algebra di Boole descrive le reti combinatorie con espressioni. Lavora su variabili a due valori con tre operatori, definiti elencando tutti i casi: il complemento x (realizzato dalla NOT), il prodotto logico x · y (la AND) e la somma logica x + y (la OR). Le proprietà che seguono si dimostrano tutte con la tabella di verità, e vanno conosciute bene perché ogni semplificazione si basa su di esse.

ProprietàPer la sommaPer il prodotto
involutivacomplementare due volte restituisce x
commutativax + y = y + xx · y = y · x
associativa(x + y) + z = x + (y + z)(x · y) · z = x · (y · z)
distributivax + y · z = (x + y) · (x + z)x · (y + z) = x · y + x · z
complementazionex + x = 1x · x = 0
elementi neutro e assorbentex + 0 = x,   x + 1 = 1x · 1 = x,   x · 0 = 0
idempotenzax + x = xx · x = x
assorbimentox + x · y = xx · (x + y) = x

Attenzione alla distributiva: a differenza dell'aritmetica, in Boole vale in tutti e due i versi, anche la somma rispetto al prodotto. Per abbreviare, il punto del prodotto spesso si omette: xy vuol dire x · y.

Principio di dualità. Le due colonne della tabella sono speculari: ogni proprietà della somma diventa quella del prodotto scambiando + con · e 0 con 1, lasciando le variabili come sono. Vale in generale: se un'identità è vera, è vera anche la sua duale, perciò ogni teorema dimostrato ne regala un secondo. Non va confusa con la negazione: la duale di x + 0 = x è x · 1 = x, e nessuna variabile viene negata.

I teoremi di De Morgan

Sono le due identità più usate di tutta la materia, e valgono per un numero qualsiasi di variabili:

x0 · x1 · … · xN−1 = x0 + x1 + … + xN−1
x0 + x1 + … + xN−1 = x0 · x1 · … · xN−1

«Il complemento di un prodotto è la somma dei complementi, e viceversa». Per due variabili si verifica con la tabella di verità; il caso generale si dimostra per induzione: chiamato α il prodotto delle prime N variabili, si applica il caso a due variabili ad α · xN e poi l'ipotesi induttiva ad α. In termini di circuiti, De Morgan dice che una bolla di negazione si può «spostare» attraverso una porta scambiando AND e OR:

=NANDOR con ingressi negatiNOT (x1 · x0) = x̅1 + x̅0=NORAND con ingressi negatiNOT (x1 + x0) = x̅1 · x̅0
I teoremi di De Morgan in forma di circuito: negare l'uscita di una porta equivale a scambiare AND e OR e negare gli ingressi. Le bolle si possono «spingere» da una parte all'altra di una porta.

Applicando De Morgan più volte, dall'esterno verso l'interno, si nega qualsiasi espressione. Il risultato si riassume in una regola pratica: si scambiano + e ·, si scambiano 0 e 1, e si nega ogni letterale (in pratica si scrive la duale con i letterali negati). La trappola è la precedenza: il prodotto lega più forte della somma, e quando diventa una somma va protetto con le parentesi.

Sbagliato

a + bc = a · b + c

Scambiando gli operatori «a occhio» si perde il raggruppamento: bc era un prodotto, e il suo complemento deve restare tutto insieme.

Giusto

a + bc = a · bc = a · (b + c)

Un passo alla volta: prima De Morgan sulla somma esterna, poi sul prodotto. Per scoprire l'errore basta una riga: con a = 1 e c = 0 l'espressione di partenza vale 1, quindi il complemento deve valere 0; la versione giusta dà 0, quella sbagliata 1.

Espressioni, circuiti e costo

Tra espressioni booleane e reti combinatorie c'è una corrispondenza perfetta: ogni rete si descrive con un'espressione per ciascuna uscita, e ogni espressione si realizza con una rete. Espressioni equivalenti (trasformabili l'una nell'altra con le proprietà) danno reti logicamente equivalenti, che però possono avere costi molto diversi.

xyzx · (y + z)2 portexyzx · y + x · z3 porte
Logicamente equivalenti (stessa tabella di verità), fisicamente diverse: la seconda costa una porta in più. Le porte costano, introducono ritardo, consumano e si guastano: meno ce ne sono, meglio è.

Un esempio di semplificazione algebrica: il cosiddetto teorema del consenso. Il trucco è moltiplicare un termine per 1 = x1 + x1, sviluppare e raccogliere:

x1x2 + x1x3 + x2x3 = x1x2 + x1x3 + (x1 + x1)x2x3
= x1x2(1 + x3) + x1x3(1 + x2) = x1x2 + x1x3

Il termine x2x3 è superfluo: un'intera porta AND risparmiata. Fare questi conti a occhio però è artigianale; tra poco vedremo un metodo sistematico.

Teoremi utili, dimostrati con l'algebra

Oltre alle proprietà di base, nelle semplificazioni tornano sempre le stesse poche identità. Conviene saperle dimostrare, non solo ricordare: bastano due righe, e la dimostrazione fa vedere quali mosse usare negli esercizi. Ognuna ha la sua duale, che si ottiene gratis.

NomeIdentitàDualeDimostrazione
assorbimentox + xy = xx(x + y) = xx + xy = x(1 + y) = x · 1 = x
letterale superfluox + xy = x + yx(x + y) = xydistributiva della somma: x + xy = (x + x)(x + y) = 1 · (x + y)
fusionexy + xy = x(x + y)(x + y) = xxy + xy = x(y + y) = x · 1 = x
consensoxy + xz + yz = xy + xz(x + y)(x + z)(y + z) = (x + y)(x + z)vista qui sopra: yz = (x + x)yz, poi assorbimento
idempotenza «al contrario»α = α + αα = α · αè l'idempotenza letta da destra a sinistra: permette di usare un termine in due fusioni

La seconda è la più sottovalutata. In x + xy il letterale x è superfluo: quando x = 1 il risultato è 1 comunque, e quando x = 0 la condizione x è già vera. Ragionare così, «caso x = 0, caso x = 1», è un ottimo modo per controllare una semplificazione: è l'espansione di Shannon.

Come si semplifica un'espressione

A mano non c'è una procedura che garantisca il risultato minimo (per quello servono Quine-McCluskey e le mappe di Karnaugh), ma una sequenza di mosse che funziona quasi sempre:

  1. Portare le negazioni sui letterali con De Morgan, dall'esterno verso l'interno, e togliere le doppie negazioni.
  2. Sviluppare con la distributiva fino a una somma di prodotti; cancellare i prodotti che contengono xx (valgono 0) e le lettere ripetute (xx = x).
  3. Fondere le coppie di termini che differiscono per una sola variabile, diretta in uno e negata nell'altro: αx + αx = α. Se un termine serve a due fusioni, prima lo si duplica (α = α + α).
  4. Assorbire: un termine che contiene per intero un altro termine sparisce (α + αβ = α), un letterale negato inutile pure (x + xβ = x + β).
  5. Controllare il risultato su qualche riga della tabella di verità, scegliendo righe in cui l'espressione cambia valore. Con tre o quattro variabili conviene controllarle tutte.

Per i prodotti di somme si usano le mosse duali: la fusione diventa (α + x)(α + x) = α e l'assorbimento α(α + β) = α.

Esercizi svolti di algebra di Boole

Le tracce vengono dalle dispense e dalle lezioni del corso. In ogni passaggio, a destra, c'è la proprietà usata: è proprio quello che all'esame fa la differenza tra un conto giusto e un conto «che torna». Prova a fare ogni esercizio prima di leggere lo svolgimento.

Esercizio 1 Semplificare una somma di prodotti

Semplificare al massimo, con le proprietà dell'algebra:

f = abcd + abcd + abcd + abd + bcd + abd

Prima di cominciare conviene guardare i termini a coppie. Il primo, abcd, differisce dal secondo solo per b e dal terzo solo per a: può fondersi con tutti e due, purché lo si scriva due volte. Anche abd e abd differiscono per la sola a.

f = abcd + abcd + abcd + abcd + abd + abd + bcd
idempotenza: abcd = abcd + abcd; commutativa per riordinare
= acd(b + b) + bcd(a + a) + bd(a + a) + bcd
distributiva: raccolgo acd, bcd e bd
= acd + bcd + bd + bcd
complementazione (x + x = 1) ed elemento neutro (α · 1 = α)
= acd + bcd + bd(1 + c)
distributiva: raccolgo bd
= acd + bcd + bd
1 + c = 1 e α · 1 = α: è l'assorbimento

Si passa da sei AND (tre a quattro ingressi e tre a tre) e una OR a sei ingressi a tre AND e una OR a tre ingressi: il costo a porte scende da 7 a 4, quello a diodi da 27 a 11.

È il minimo? Lo strumento qui sotto è una mappa di Karnaugh, che si spiega più avanti: per ora basta leggerne il risultato. La funzione ha due sintesi SP di costo minimo: questa e f = abc + bcd + bd, che costa uguale, perché lo stato abcd si può coprire in due modi. L'algebra ha trovato una buona forma, il metodo sistematico le trova tutte. E il pulsante «Sintesi PS» mostra che la forma PS, (b + d)(c + d)(a + b + d), costa ancora un diodo in meno.

Esercizio 2 Semplificare un prodotto di somme

Semplificare al massimo:

g = (a + b + c)(a + b + c)(a + b + c)(a + b + c)(a + b)

È la versione duale del precedente: i fattori che differiscono per una sola variabile si fondono con (α + x)(α + x) = α, che è la distributiva della somma rispetto al prodotto.

g = (a + b + c)(a + b + c) · (a + b + c)(a + b + c) · (a + b)
commutativa: avvicino i fattori che differiscono per la sola c
= (a + b + cc) · (a + b + cc) · (a + b)
distributiva della somma: (α + c)(α + c) = α + cc
= (a + b)(a + b)(a + b)
complementazione (cc = 0) ed elemento neutro (α + 0 = α)
= (a + b)(a + b) · (a + b)(a + b)
idempotenza del prodotto: il fattore (a + b) serve due volte
= (b + aa) · (a + bb)
distributiva della somma, due volte
= b · a
complementazione ed elemento neutro

Cinque OR e una AND a cinque ingressi si riducono a una sola AND a due ingressi (più gli invertitori sugli ingressi, che non si contano). Controllo: g deve valere 1 solo per a = b = 0, e infatti con b = 0 i primi quattro fattori contengono b = 1 e l'ultimo vale a. Il passo chiave è lo stesso dell'esercizio 1, letto allo specchio: un fattore usato due volte grazie all'idempotenza.

Esercizio 3 Dimostrare un'identità

Dimostrare che

(x1 + x2)(x2 + x3)(x1 + x3) = (x1 + x2)(x1 + x3)

La risposta più breve è una riga: è la duale del teorema del consenso, già dimostrato, quindi è vera. Rifarla però allena alle mosse duali. Il trucco è lo stesso del consenso: si «gonfia» il fattore superfluo aggiungendogli un termine nullo, x1x1, e lo si fa poi assorbire.

(x1 + x2)(x2 + x3)(x1 + x3) = (x1 + x2)(x2 + x3 + x1x1)(x1 + x3)
complementazione (x1x1 = 0) ed elemento neutro
= (x1 + x2)(x1 + x2 + x3)(x1 + x2 + x3)(x1 + x3)
distributiva della somma, con α = x2 + x3
= (x1 + x2)(x1 + x2 + x3) · (x1 + x3)(x1 + x3 + x2)
commutativa e associativa
= (x1 + x2)(x1 + x3)
assorbimento duale, due volte: α(α + β) = α

Come si legge il risultato: il fattore (x2 + x3) vale 0 solo quando x2 = x3 = 0, ma in quel caso uno tra (x1 + x2) e (x1 + x3) vale già 0, qualunque sia x1. Non aggiunge nulla.

Esercizio 4 Negare un'espressione

Data z = ab + c(a + d), scrivere z come somma di prodotti.

z = ab + c(a + d)
il punto di partenza
= ab · c(a + d)
De Morgan sulla somma esterna
= (a + b) · (c + a + d)
De Morgan sui due prodotti; involutiva (il complemento di b è b)
= (a + b)(c + ad)
De Morgan sulla somma; involutiva
= ac + aad + bc + abd
distributiva: sviluppo il prodotto
= ac + bc + abd
complementazione (aa = 0) ed elemento neutro

Controllo su una riga: con a = b = c = 1 e d = 0 si ha z = 1 · 0 + 1 · (0 + 0) = 0, quindi z deve valere 1; e infatti l'ultimo termine, abd, vale 1. Fermandosi alla quarta riga e applicando la distributiva della somma a (c + ad) si ottiene invece una forma PS: z = (a + b)(a + c)(c + d), pronta per la sintesi a porte NOR.

Esercizio 5 Da somma di prodotti a prodotto di somme

Trasformare z = ab + cd in forma PS, cioè in un prodotto di somme.

Serve la distributiva della somma rispetto al prodotto, α + βγ = (α + β)(α + γ): è la mossa che in aritmetica non esiste, ed è quella che fa il lavoro.

z = ab + cd = (ab + c)(ab + d)
distributiva della somma, con α = ab
= (c + ab)(d + ab)
commutativa
= (c + a)(c + b)(d + a)(d + b)
distributiva della somma, su ciascun fattore
= (a + c)(b + c)(a + d)(b + d)
commutativa

La forma SP costa 3 porte e 6 diodi, la PS 5 porte e 12 diodi: per questa funzione la PS non conviene. Non c'è una regola generale, dipende dalla funzione: per questo la sintesi di costo minimo si fa in tutte e due le forme e poi si confronta.

Esercizio 6 Analizzare una rete: che cosa calcola?

La rete qui sotto è fatta di quattro porte NAND. Scrivere l'espressione dell'uscita in funzione degli ingressi e semplificarla. Prima di leggere la soluzione, prova a capirlo dalla tabella di verità del circuito.

x0y0wpqzNAND 1NAND 2NAND 3NAND 4

Ogni NAND vale 0 solo quando entrambi i suoi ingressi valgono 1.

Si procede dagli ingressi verso l'uscita, dando un nome a ogni filo interno:

w = xy = x + y
definizione di NAND; De Morgan
xw = x(x + y) = xx + xy = xy
distributiva; complementazione ed elemento neutro
yw = y(x + y) = xy
allo stesso modo
p = xy     q = xy
definizione di NAND
z = pq = p + q = xy + xy
De Morgan; involutiva
z = x ⊕ y
è la definizione di XOR

È lo XOR, costruito con sole NAND (lo si sapeva possibile, perché la NAND è universale; qui si vede come). Il filo w vale 0 solo quando x = y = 1: in quel caso porta a 1 sia p sia q, e l'uscita va a 0 proprio nell'unico caso in cui gli ingressi a 1 sono due.

L'algebra dello XOR

Lo XOR, x ⊕ y = xy + xy, vale 1 quando i due ingressi sono diversi. Non è uno degli operatori dell'algebra di Boole, ma compare dappertutto: nei sommatori, nei controlli di parità, in reti come quella appena analizzata. Le sue proprietà si verificano con la tabella di verità:

ProprietàIdentitàChe cosa vuol dire
commutativa e associativax ⊕ y = y ⊕ x
(x ⊕ y) ⊕ z = x ⊕ (y ⊕ z)
si scrive x ⊕ y ⊕ z senza parentesi, in qualunque ordine
elemento neutrox ⊕ 0 = xuno 0 lascia passare l'altro ingresso
invertitore comandatox ⊕ 1 = xun 1 nega l'altro ingresso
annullamentox ⊕ x = 0
x ⊕ x = 1
un termine ripetuto due volte si cancella
distributivax(y ⊕ z) = xy ⊕ xzil prodotto si distribuisce sullo XOR, ma non il viceversa
complementox ⊕ y = x ⊕ y = x ⊕ yè lo XNOR; negando entrambi gli ingressi non cambia nulla: x ⊕ y = x ⊕ y

Le due regole d'oro. Con α ⊕ α = 0 e α ⊕ 0 = α lo XOR si «risolve» come un'equazione: se a ⊕ b = c, facendo ⊕ b da tutte e due le parti si ha a ⊕ b ⊕ b = c ⊕ b, cioè a = c ⊕ b. Un termine passa da un membro all'altro senza cambiare segno. E, contando gli 1: x1 ⊕ x2 ⊕ … ⊕ xn vale 1 se e solo se un numero dispari di variabili vale 1. È la parità, e la useremo tra poco.

Esercizio 7 La distributiva dello XOR

Dimostrare con l'algebra che x(y ⊕ z) = xy ⊕ xz.

xy ⊕ xz = xy · xz + xy · xz
definizione: α ⊕ β = αβ + αβ, con α = xy e β = xz
= (x + y)xz + xy(x + z)
De Morgan
= xxz + xyz + xxy + xyz
distributiva
= xyz + xyz
complementazione (xx = 0) ed elemento neutro
= x(yz + yz) = x(y ⊕ z)
distributiva; definizione di XOR

Il contrario invece è falso: x ⊕ yz e (x ⊕ y)(x ⊕ z) sono diverse. Per dimostrare che un'identità è falsa basta un controesempio: con x = 1, y = 1, z = 0 la prima vale 1 ⊕ 0 = 1 e la seconda 0 · 1 = 0.

Decoder, demultiplexer e multiplexer

Il decoder

Un decoder N to 2N ha N ingressi e 2N uscite: ogni uscita riconosce uno e un solo stato di ingresso. L'uscita zj vale 1 se e solo se gli ingressi, letti come numero in base 2, valgono j. Ogni uscita è quindi il prodotto di tutti gli ingressi, diretti o negati: per due ingressi

z0 = x1x0    z1 = x1x0    z2 = x1x0    z3 = x1x0

x10x00x̅1x̅0z0z1z2z3= x̅1 · x̅0= x̅1 · x0= x1 · x̅0= x1 · x0

Servono 2N AND a N ingressi e N invertitori, messi direttamente sugli ingressi (metterli davanti a ogni AND ne richiederebbe molti di più). La tabella di verità di un decoder è una matrice identità.

Decoder con enabler e decoder in cascata

Il decoder appena visto non è espandibile: non si possono costruire decoder grandi mettendo insieme quelli piccoli. Si aggiunge allora un ingresso di abilitazione e (enabler): se e = 1 la rete funziona da decoder, se e = 0 tutte le uscite valgono 0. Poiché y · 1 = y e y · 0 = 0, basta aggiungere e come ingresso in più a ogni AND: zj = e · (prodotto di prima). Mettere invece una seconda AND in cascata sarebbe uno spreco: due porte uguali in cascata si fondono sempre in una sola.

Dₑe₀e₁e₂e₃x3 x2eD0z0z1z2z3x1 x0D1z4z5z6z7x1 x0D2z8z9z10z11x1 x0D3z12z13z14z15x1 x0Ogni decoder Dᵢ lavorasolo quando x3 x2 = i:è Dₑ, un altro decoder2 to 4, ad abilitarlo.L'enabler generale eva su Dₑ: se e = 0tutte le uscite sono a 0.
Un decoder 4 to 16 fatto di decoder 2 to 4 con enabler. La tabella di verità di un decoder è una matrice identità: ogni blocco di quattro uscite è un decoder 2 to 4 attivo per un solo valore di x3 x2.

Il demultiplexer

Un demultiplexer (o demux) ha N + 1 ingressi e 2N uscite. Uno degli ingressi, x, è la variabile da commutare; gli altri N, bN−1 … b0, sono le variabili di comando. In pratica è un selezionatore: le variabili di comando decidono quale uscita è collegata all'ingresso.

un commutatore comandato da bxz0= 0z1= 0z2= xz3= 0b1 b0 = 1 0 → posizione 2il simboloDEMUX1 → 4xz0z1z2z3b1b0variabili di comando
Il demultiplexer è un deviatore: le variabili di comando scelgono su quale uscita far passare x; le altre uscite non sono «staccate», valgono 0.

La descrizione funzionale, a parole, è questa:

l'uscita zj insegue x se e solo se (bN−1 … b1 b0)2 = j; altrimenti vale 0

«Insegue» vuol dire che, finché i comandi non cambiano, l'uscita scelta ha lo stesso valore di x istante per istante (a meno del tempo di attraversamento). Per un demultiplexer 1 to 4 la tabella di verità si può scrivere in forma compatta, con x nelle caselle:

b1b0z3z2z1z0
00000x
0100x0
100x00
11x000

La tabella completa avrebbe 8 righe (con x = 0 tutte le uscite valgono 0); questa forma è più leggibile e dice la stessa cosa.

Dalla descrizione alle porte

Si ragiona un'uscita alla volta. Per z0 serve una rete che dia x quando i comandi valgono 00…0 e 0 altrimenti. «I comandi valgono 00» è un prodotto, b1 · b0, che vale 1 solo in quel caso. E poiché α · 1 = α e α · 0 = 0, moltiplicare per quel prodotto lascia passare x o lo azzera:

z0 = x · b1 · b0    z1 = x · b1 · b0    z2 = x · b1 · b0    z3 = x · b1 · b0

In generale zj = x · (prodotto di tutte le variabili di comando, negate dove la cifra j-esima vale 0). Servono 2N porte AND a N + 1 ingressi e N invertitori, messi una volta sola sulle variabili di comando. Prova: scegli un'uscita con b1 b0, poi accendi e spegni x.

x0b10b00b̅1b̅0z0= x · b̅1 · b̅0z1= x · b̅1 · b0z2= x · b1 · b̅0z3= x · b1 · b0

Ogni AND riceve x più una delle combinazioni di b1 b0: è un decoder 2 to 4 con l'ingresso x al posto dell'enabler.

Decoder con enabler e demultiplexer sono la stessa rete. Confrontando le espressioni con quelle del decoder con enabler, zj = e · (prodotto degli ingressi), cambiano solo i nomi: l'enabler e diventa la variabile da commutare x, gli ingressi del decoder diventano le variabili di comando. Si sceglie il nome in base all'uso: «decoder» se interessa riconoscere uno stato di ingresso, «demultiplexer» se interessa instradare un segnale.

Due equivoci frequenti

Pensare che le uscite non scelte siano «scollegate»: valgono 0, e un'altra rete che le legge vede uno 0 vero, non un'alta impedenza (quella la danno le porte tri-state). E pensare che un demultiplexer sia un multiplexer usato al contrario: le porte hanno un verso, i segnali non tornano indietro.

Come ragionarci

Il demultiplexer è una rete combinatoria come le altre, con 2N uscite sempre definite: una vale x, tutte le altre 0. Il suo duale, il multiplexer, ha invece 2N ingressi e una sola uscita; insieme permettono di far passare più segnali, uno alla volta, su un unico filo.

Demultiplexer grandi con demultiplexer piccoli

Proprio perché è un decoder con enabler, il demultiplexer è espandibile. Un 1 to 8 si ottiene con un 1 to 2 al primo livello, comandato dalla variabile più significativa b2, che manda x a uno di due 1 to 4 comandati da b1 b0. Il demultiplexer del secondo livello che non viene scelto riceve 0 e tiene a 0 tutte le sue uscite, come deve.

x0DEMUX1 → 2b20DEMUX1 → 4DEMUX1 → 4a0a1z0z1z2z3b1b0z4z5z6z7b1b0b10b00comandi delsecondo livello

La variabile di comando più significativa, b2, sta al primo livello: così le uscite si numerano in ordine, zj con j = (b2 b1 b0)2. Il demultiplexer del secondo livello che non viene scelto riceve 0, quindi tutte le sue uscite valgono 0.

Mettere la variabile più significativa al primo livello non è obbligatorio, ma fa sì che le uscite si numerino in ordine: le prime quattro sono quelle con b2 = 0. Con la scelta opposta la rete funziona lo stesso, ma le uscite vanno ricollegate con un'altra numerazione.

Esercizio. Costruire un demultiplexer 1 to 16 usando solo demultiplexer 1 to 4. Quanti ne servono, e come si collegano?

Soluzione

Servono due livelli, perché ogni livello consuma due variabili di comando. Al primo un demultiplexer 1 to 4 riceve x ed è comandato da b3 b2; le sue quattro uscite fanno da variabile da commutare per altri quattro demultiplexer 1 to 4, tutti comandati da b1 b0. In tutto cinque demultiplexer, esattamente come il decoder 4 to 16 fatto con cinque decoder 2 to 4 con enabler: è la stessa costruzione. In generale per un 1 to 2N con blocchi 1 to 2k servono ⌈N/k⌉ livelli.

Il demultiplexer in Verilog

Anche qui conviene distinguere la descrizione, che dice che cosa fa la rete, dalla sintesi, che dice con quali porte è fatta. La descrizione si scrive con l'operatore condizionale, una riga per combinazione dei comandi; la sintesi riporta le espressioni trovate sopra.

Descrizione
Sintesi

Un dettaglio di stile: le variabili di comando si raccolgono in un unico ingresso a più bit con un nome parlante (b1_b0), così i confronti si scrivono b1_b0=='B10 invece di combinare i bit a mano; e si scrive la base delle costanti ('B10, non 10, che in Verilog sarebbe dieci).

A che cosa serve

  • Condividere una linea. Con un multiplexer da una parte e un demultiplexer dall'altra, comandati dalle stesse variabili, più comunicazioni si alternano sullo stesso filo: il comando sceglie insieme da quale sorgente prendere e a quale destinazione consegnare.
  • Scrivere in una memoria. In una RAM i dati arrivano a tutte le righe di latch, ma solo una deve memorizzarli: il comando di scrittura passa da un demultiplexer comandato dai fili di indirizzo, che lo consegna solo alla riga scelta (lo si vede nel modulo sulle reti sequenziali).
  • Abilitare una sorgente su un bus. Le abilitazioni delle porte tri-state, una sola attiva alla volta, sono le uscite di un decoder: un segnale che dice «adesso parla tu» va instradato a una sola rete.
sorgente 0destinazione 0sorgente 1destinazione 1sorgente 2destinazione 2sorgente 3destinazione 3MUXDEMUXuna sola linea, lunga e costosab1 b0: lo stesso comando ai due capi (ad esempio un contatore)
Multiplexer e demultiplexer in coppia: quattro comunicazioni si alternano su una sola linea, una alla volta. Se il comando b1 b0 scorre abbastanza in fretta, ognuna ha l'impressione di avere la linea per sé. Era il principio delle vecchie centrali telefoniche.

Il multiplexer

Il multiplexer è il duale: 2N ingressi xi, N variabili di comando e una sola uscita, che vale xi quando le variabili di comando codificano i. Si sintetizza con un decoder sulle variabili di comando, una AND tra ogni uscita del decoder e l'ingresso corrispondente (tutte valgono 0 tranne una, che vale come xi) e una OR finale. Fondendo le AND del decoder con quelle dopo, resta una rete a due livelli di logica:

z = x0b1b0 + x1b1b0 + x2b1b0 + x3b1b0

b10b00x00x10x20x30z

Una rete a due livelli di logica (AND e OR; gli invertitori sugli ingressi non si contano): l'uscita insegue l'ingresso xi con i = (b1 b0)2.

Il multiplexer come rete universale

Un multiplexer con N variabili di comando può realizzare qualsiasi rete combinatoria a N ingressi e un'uscita: basta collegare gli ingressi della rete alle variabili di comando e attaccare all'ingresso xj la costante della riga j della tabella di verità (1 = alimentazione, 0 = massa). Anzi, ne basta uno con N − 1 variabili di comando: si prendono le righe a coppie, e per ogni coppia l'uscita vale 0, 1, x0 oppure x0.

Con 3 variabili di comandoMUX0011020314151607x2 x1 x0zCon 2 variabili di comandoMUXx000112x̅03x2 x1zx2 x1 = 00: z vale come x001: sempre 0 · 10: sempre 1 · 11: vale x̄0
Il multiplexer come rete universale. A sinistra ogni ingresso è la costante della riga corrispondente della tabella di verità; a destra le righe si prendono a coppie e a ogni ingresso basta una tra 0, 1, x0 e x̄0.

Conseguenza fondamentale. Il multiplexer si fa con AND, OR e NOT su due livelli, realizza qualsiasi rete a un'uscita, e le reti a più uscite sono reti a un'uscita in parallelo. Quindi ogni rete combinatoria si può costruire con AND, OR e NOT in al più due livelli di logica. Questo pone un limite superiore al ritardo di qualsiasi rete combinatoria.

Esercizio svolto: un multiplexer a N − 1 variabili di comando

Esercizio 8 Un multiplexer con una variabile di comando in meno

È data la tabella di verità di una rete combinatoria a tre ingressi (le prime quattro colonne qui sotto). Realizzarla con un multiplexer a 2 variabili di comando, collegandone opportunamente gli ingressi e aggiungendo al più una porta NOT. Poi discutere la generalità del risultato: vale per tutte le tabelle di verità? Vale per qualunque numero di ingressi, cioè con N ingressi e un multiplexer a N − 1 variabili di comando?

x2x1x0zz in funzione di x0ingresso
0000x0h0
0011
01000h1
0110
10011h2
1011
1101x0h3
1110

L'idea. Gli ingressi della rete sono tre e le variabili di comando due: due ingressi vanno sui comandi, il terzo deve arrivare agli ingressi del multiplexer. Colleghiamo i due più significativi, b1 = x2 e b0 = x1. Così l'ingresso hj viene scelto in due righe della tabella, quelle con (x2 x1)2 = j, che differiscono solo per x0. In ognuna di queste coppie l'uscita dipende solo da x0: le ultime due colonne della tabella dicono come.

Con l'algebra. L'uscita del multiplexer, con quei collegamenti, è

z = h0x2x1 + h1x2x1 + h2x2x1 + h3x2x1

La forma canonica SP della tabella si riordina raccogliendo i mintermini a coppie, secondo il valore di x2 x1:

z = x2x1x0 + x2x1x0 + x2x1x0 + x2x1x0
forma canonica: le righe 1, 4, 5 e 6
= x2x1 · x0 + x2x1 · 0 + x2x1 · (x0 + x0) + x2x1 · x0
distributiva; la coppia 01 non ha mintermini (α · 0 = 0)
= x2x1 · x0 + x2x1 · 0 + x2x1 · 1 + x2x1 · x0
complementazione

Confrontando termine a termine con l'espressione del multiplexer: h0 = x0, h1 = 0, h2 = 1, h3 = x0. Lo 0 è la massa, l'1 l'alimentazione, e per x0 serve l'unica NOT.

MUXh3h2h1h0b1b0x00x20x1010x̅0x0alimentazionemassaz

La tabella che il circuito produce coincide con quella del testo. Il nome dell'ingresso scelto si colora di rosso.

Generalità del risultato.

  • Vale per tutte le tabelle. In ogni coppia di righe x2 e x1 sono fissati, e l'uscita è una funzione della sola x0. Ma le funzioni di una variabile sono 221 = 4: se la coppia di valori di z è 00 serve la costante 0, se è 01 serve x0, se è 10 serve x0, se è 11 la costante 1. Non esiste un quinto caso.
  • Vale per qualunque N. Con N ingressi si collegano xN−1 … x1 alle N − 1 variabili di comando: l'ingresso hj corrisponde alle righe 2j e 2j + 1, che differiscono solo per x0, e il ragionamento è identico. E basta sempre una NOT: x0 è un solo segnale, che si porta a tutti gli ingressi che ne hanno bisogno.
  • La variabile «esclusa» si può scegliere. Niente obbliga a lasciare fuori x0: con x1 e x0 sui comandi, per esempio, le coppie sono le righe che differiscono per x2. Cambiano i collegamenti, non il ragionamento.

In formula, è l'espansione di Shannon fatta rispetto a tutte le variabili tranne una: f(x2, x1, x0) = x2x1 · f(0, 0, x0) + x2x1 · f(0, 1, x0) + x2x1 · f(1, 0, x0) + x2x1 · f(1, 1, x0). E se si togliesse un'altra variabile di comando? Ogni ingresso dovrebbe realizzare una funzione di due variabili: i casi diventano 24 = 16 (fra cui AND, OR e XOR), e una NOT non basta più.

Esercizio. Con un multiplexer a 2 variabili di comando, realizzare la funzione maggioranza di tre variabili, che vale 1 quando almeno due ingressi su tre valgono 1. Serve la NOT?

Soluzione

Con b1 = x2 e b0 = x1: per x2 x1 = 00 l'uscita vale 0 in tutte e due le righe (h0 = 0); per 01 e per 10 vale 1 solo se x0 = 1 (h1 = h2 = x0); per 11 vale sempre 1 (h3 = 1). La NOT non serve, perché nessuna coppia ha la forma «1, 0». In formula: z = x2x1 · 0 + x2x1 · x0 + x2x1 · x0 + x2x1 · 1, che semplificata dà z = x2x1 + x2x0 + x1x0.

Modello strutturale universale e forma SP

Un decoder seguito da una barriera di OR

C'è un modo meccanico per sintetizzare qualsiasi tabella di verità: un decoder N to 2N riconosce ogni stato di ingresso, e una porta OR per ciascuna uscita raccoglie le uscite del decoder degli stati in cui quell'uscita deve valere 1. Per la tabella vista sopra, chiamate v0 … v7 le uscite del decoder: z1 = v2 + v3 + v4 + v5 e z0 = v1 + v4 + v5.

decoder3 to 8x2x1x0v0v1v2v3v4v5v6v7z1 = v₂ + v₃ + v₄ + v₅z0 = v₁ + v₄ + v₅
Il modello strutturale universale: un decoder (che riconosce ogni stato di ingresso) e una barriera di OR, una per uscita. Ogni OR raccoglie le uscite del decoder degli stati in cui la sua uscita deve valere 1.

Funziona sempre, ma costa: 8 AND a tre ingressi e due OR. Le AND degli stati che nessuna uscita riconosce (v0, v6, v7) si possono togliere subito, e restano 5 AND e 2 OR. Per scendere ancora serve l'algebra: si sostituisce a ogni vj il suo mintermine e si fondono i termini a coppie.

z1 = v2 + v3 + v4 + v5 = x2x1x0 + x2x1x0 + x2x1x0 + x2x1x0
vj è il mintermine che riconosce lo stato j
= x2x1(x0 + x0) + x2x1(x0 + x0)
distributiva
= x2x1 + x2x1
complementazione ed elemento neutro
z0 = v1 + v4 + v5 = x2x1x0 + x2x1x0 + x2x1x0
gli stati 1, 4 e 5
= x2x1x0 + x2x1x0 + x2x1x0 + x2x1x0
idempotenza: v5 = v5 + v5, perché v5 serve a due fusioni
= x1x0(x2 + x2) + x2x1(x0 + x0)
distributiva
= x1x0 + x2x1
complementazione ed elemento neutro

Il passaggio con l'idempotenza è quello che non viene spontaneo: v5 è adiacente sia a v1 (differisce per x2) sia a v4 (differisce per x0), e per fonderlo con tutti e due lo si scrive due volte. Disegnando le due reti come griglie (in alto gli ingressi diretti e negati, al centro le AND, in basso le OR; ogni punto è un collegamento) il guadagno si vede a colpo d'occhio:

Punto di partenzax2x1x0ANDv5ANDv4ANDv3ANDv2ANDv1ORz1ORz05 AND e 2 OR: 7 porte, 22 diodiPunto di arrivox2x1x0ANDy2ANDy1ANDy0ORz1ORz03 AND e 2 OR: 5 porte, 10 diodi
Dal modello strutturale alla rete semplificata. A destra il prodotto x2x1 (la colonna y2) serve a tutte e due le uscite e si realizza una volta sola; x0 non serve più, e il suo invertitore sparisce.

Restano tre AND a due ingressi e due OR a due ingressi: da 7 porte e 22 diodi a 5 porte e 10 diodi. Si potrebbe fare ancora meglio uscendo dalla forma «somma di prodotti»: z1 = x2 ⊕ x1, una sola XOR.

Espansione di Shannon e forma canonica SP

Il punto di partenza teorico è un risultato di Shannon: ogni legge combinatoria si può scrivere come somma di prodotti degli ingressi, diretti o negati. L'espansione di Shannon scrive z come somma di 2N termini, uno per riga della tabella: il valore f di quella riga moltiplicato per il prodotto di tutti gli ingressi presi diretti (se valgono 1 in quella riga) o negati (se valgono 0). Le righe in cui f = 0 spariscono (0 · α = 0), e nelle altre il fattore 1 si toglie. Resta la forma canonica SP:

  • SP perché è una somma di prodotti;
  • canonica perché ogni prodotto contiene tutti gli ingressi;
  • ciascun prodotto si chiama mintermine e riconosce esattamente uno stato di ingresso.

In formula, l'espansione rispetto a una sola variabile si scrive

f(xN−1, …, x1, x0) = x0 · f(xN−1, …, x1, 0) + x0 · f(xN−1, …, x1, 1)

e si dimostra sostituendo i due valori possibili: con x0 = 0 il secondo termine si annulla e il primo vale 1 · f(…, 0), cioè proprio f; con x0 = 1 succede il contrario. Per esempio, espandendo x ⊕ y rispetto a x si trova x · (0 ⊕ y) + x · (1 ⊕ y) = xy + xy. Ripetendo l'espansione su tutte le variabili, una dopo l'altra, si ottiene la somma di 2N termini da cui nasce la forma canonica. Un multiplexer 2 to 1, z = b · h0 + b · h1, è l'espansione di Shannon fatta circuito: è per questo che il multiplexer è una rete universale.

Esercizio svolto: una rete programmabile con AND e XOR

Esercizio 9 Programmare una rete con i comandi

La rete in figura ha due ingressi x, y, un'uscita z e quattro variabili di comando a, b, c, d: a seconda dei comandi realizza una legge f(x, y) diversa.

  1. Scrivere l'espressione che lega z agli ingressi e ai comandi.
  2. Calcolare a, b, c, d in modo da realizzare una generica f(x, y) nota, cioè conoscendo f(0,0), f(1,0), f(0,1) e f(1,1).
  3. Calcolare i comandi nei casi particolari f(x, y) = xy e f(x, y) = xy.
a0b0c0d0x0y0xbycxydXORz

La XOR a quattro ingressi vale 1 quando un numero dispari dei suoi ingressi vale 1.

a) Le tre AND calcolano xb, yc e xyd, e la XOR le combina con a:

z = a ⊕ xb ⊕ yc ⊕ xyd

b) Si sostituiscono i quattro stati di ingresso, usando α · 1 = α, α · 0 = 0 e α ⊕ 0 = α:

f(0,0) = a ⊕ 0 ⊕ 0 ⊕ 0 = a
x = y = 0: le tre AND valgono 0
f(1,0) = a ⊕ b
passa solo la prima AND
f(0,1) = a ⊕ c
passa solo la seconda
f(1,1) = a ⊕ b ⊕ c ⊕ d
passano tutte

È un sistema di quattro equazioni, e si risolve dall'alto verso il basso con le regole d'oro dello XOR: per isolare un'incognita si fa ⊕ con lo stesso termine da tutte e due le parti, e α ⊕ α = 0 lo cancella.

a = f(0,0)
prima equazione
b = f(1,0) ⊕ a = f(1,0) ⊕ f(0,0)
seconda equazione, con ⊕ a da tutte e due le parti: a ⊕ a ⊕ b = b
c = f(0,1) ⊕ f(0,0)
terza equazione, allo stesso modo
d = f(1,1) ⊕ a ⊕ b ⊕ c
quarta equazione, con ⊕ a ⊕ b ⊕ c da tutte e due le parti
= f(1,1) ⊕ f(0,0) ⊕ f(1,0) ⊕ f(0,0) ⊕ f(0,1) ⊕ f(0,0)
sostituisco a, b e c
d = f(0,0) ⊕ f(1,0) ⊕ f(0,1) ⊕ f(1,1)
f(0,0) compare tre volte: due copie si cancellano, ne resta una

c) Ora basta mettere i numeri nelle formule.

f = xy (NAND)

f(0,0) = 1, f(1,0) = 1, f(0,1) = 1, f(1,1) = 0, quindi a = 1, b = 1 ⊕ 1 = 0, c = 0, d = 1 ⊕ 1 ⊕ 1 ⊕ 0 = 1.

Verifica: z = 1 ⊕ xy = xy, perché α ⊕ 1 = α.

f = xy

f(0,0) = 0, f(1,0) = 1, f(0,1) = 0, f(1,1) = 0, quindi a = 0, b = 1, c = 0, d = 1.

Verifica: z = x ⊕ xy = x(1 ⊕ y) = xy, con la distributiva del prodotto sullo XOR.

Provale sul circuito: imposta i comandi e fai scorrere x e y sulle quattro combinazioni.

Osservazione. I comandi sono 4 bit, quindi 16 combinazioni; anche le reti a due ingressi sono 222 = 16; e le formule del punto b) danno sempre una e una sola soluzione. Quindi la corrispondenza è biunivoca: questa rete realizza tutte le reti combinatorie a due ingressi, ciascuna in un modo solo. È un'altra rete universale, come il multiplexer con le costanti sugli ingressi. Eccole tutte, con i loro comandi:

f(0,0)f(1,0)f(0,1)f(1,1)leggeabcdz
0000la costante 000000
0001AND: xy0001xy
0010xy0011y ⊕ xy
0011y0010y
0100xy0101x ⊕ xy
0101x0100x
0110XOR: x ⊕ y0110x ⊕ y
0111OR: x + y0111x ⊕ y ⊕ xy
1000NOR: x + y11111 ⊕ x ⊕ y ⊕ xy
1001XNOR: x ⊕ y11101 ⊕ x ⊕ y
1010x11001 ⊕ x
1011x + y11011 ⊕ x ⊕ xy
1100y10101 ⊕ y
1101x + y10111 ⊕ y ⊕ xy
1110NAND: xy10011 ⊕ xy
1111la costante 110001

Sintesi SP a costo minimo

Che cosa vuol dire costo

Cercheremo, tra le reti a due livelli di logica in forma SP, quella di costo minimo. Non è detto che sia la rete più economica in assoluto (forme diverse o reti a più livelli possono costare meno), ma trovare l'ottimo assoluto è troppo difficile, e le reti a due livelli hanno il vantaggio di essere le più veloci. Due criteri di costo:

Costo a porte

Ogni porta conta 1. Con Ns prodotti: CP = Ns + 1 (le AND più la OR finale).

Costo a diodi

Ogni ingresso di porta conta 1: CD = Ns + Σ letterali dei prodotti (gli ingressi della OR più quelli delle AND).

Gli invertitori sugli ingressi non si contano. Il metodo vale per reti a un'uscita; per quelle a più uscite si applica uscita per uscita, sapendo che così non si trova necessariamente l'ottimo globale (due uscite potrebbero condividere un prodotto).

Implicanti e implicanti principali

Partendo dalla forma canonica si applicano a oltranza due regole: la fusione, αx + αx = α (due termini che differiscono per una sola variabile, diretta in uno e negata nell'altro, ne generano uno senza quella variabile), e l'idempotenza α + α = α (niente duplicati). I termini prodotti per fusione sono implicanti: prodotti di alcune variabili che valgono 1 solo in stati riconosciuti dalla rete. Un implicante che non si fonde con nessun altro è principale.

lista di copertura

Un insieme di implicanti la cui somma è una forma SP della funzione: copre tutti gli stati riconosciuti.

non ridondante

Togliendo un qualsiasi implicante non è più una lista di copertura. La lista dei mintermini lo è; quella degli implicanti principali spesso no.

costo minimo

Togliere un implicante significa togliere una AND e un ingresso della OR: la sintesi minima si cerca tra le liste non ridondanti di implicanti principali.

Esercizio svolto: le due regole, a mano

Nelle slide la prima regola è scritta in una forma un po' diversa:

αx + αx = αx + αx + α     α + α = α

Non è un dettaglio: il termine fuso α si aggiunge e i due di partenza restano, perché potrebbero fondersi anche con altri. È lecito perché αx + αx + α = α + α = α = αx + αx. Alla fine i termini che si sono fusi spariscono da soli per assorbimento (α + αx = α): nel metodo di Quine-McCluskey è il segno ✓. La seconda regola, invece, evita di portarsi dietro dei doppioni.

Esercizio 10 Applicare le regole esaustivamente

Applicare esaustivamente le due regole alla funzione f(x2, x1, x0) che riconosce gli stati 1, 3, 5, 6 e 7, e scriverne la forma SP semplificata. Chiamiamo mj il mintermine dello stato j. La forma canonica è

f = x2x1x0 + x2x1x0 + x2x1x0 + x2x1x0 + x2x1x0

Primo giro: coppie di mintermini. Si confronta ogni mintermine con tutti gli altri, e ogni coppia che differisce per una sola variabile genera un termine nuovo, che si aggiunge alla lista:

coppiastatidifferiscono pertermine fuso
m1 + m3001, 011x1x2x0   (0-1)
m1 + m5001, 101x2x1x0   (-01)
m3 + m7011, 111x2x1x0   (-11)
m5 + m7101, 111x1x2x0   (1-1)
m6 + m7110, 111x0x2x1   (11-)

Tutti i mintermini si sono fusi almeno una volta, e il 7 addirittura tre volte: è la prima regola, che lascia i termini a disposizione, a permetterlo.

Secondo giro: i termini appena trovati. Si confrontano solo termini con le stesse variabili che differiscono per una sola di esse:

x2x0 + x2x0 = x0
0-1 e 1-1 danno --1
x1x0 + x1x0 = x0
-01 e -11 danno ancora --1: c'è già, e la seconda regola (α + α = α) lo scarta

x2x1 non si fonde con nessuno: servirebbe x2x1 oppure x2x1, che non ci sono. Al terzo giro x0 è rimasto solo, e ci si ferma. I termini che non si sono mai fusi, x0 e x2x1, sono gli implicanti principali; tutti gli altri spariscono per assorbimento (per esempio x0 + x2x0 = x0). Risultato:

f = x0 + x2x1

La strada «furba». Con l'occhio allenato si arriva allo stesso risultato in tre righe, riusando il mintermine 7 grazie all'idempotenza:

f = (m1 + m3) + (m5 + m7) + (m6 + m7)
idempotenza: m7 = m7 + m7
= x2x0 + x2x0 + x2x1
tre fusioni: su x1, su x1 e su x0
= x0 + x2x1
fusione su x2

Funziona, ma bisogna «vedere» le coppie giuste, e con più variabili è facile perdersene una. Il procedimento esaustivo non sbaglia mai: ecco perché si insiste sulla parola esaustivamente. Le mappe di Karnaugh, che vedremo tra poco, rendono le coppie visibili a colpo d'occhio: qui x0 è il quadrato delle due colonne centrali e x2x1 le due caselle a destra nella riga in basso.

Il costo scende da cinque AND a tre ingressi e una OR a cinque (6 porte e 20 diodi) a 3 porte e 5 diodi secondo la formula del corso, che conta anche l'implicante x0 come una AND a un ingresso. In realtà quel filo entra direttamente nella OR: bastano una AND e una OR, 2 porte e 4 diodi.

Il metodo di Quine-McCluskey

È il modo ordinato di trovare gli implicanti principali, adatto anche a un programma. Esempio: una rete a 4 ingressi che riconosce gli stati 1, 2, 3, 6, 7, 8, 9, 10.

  1. Si scrivono gli stati riconosciuti in binario e si raggruppano per numero di 1.
  2. Si confrontano solo gruppi adiacenti (con un 1 di differenza): due termini che differiscono in una sola posizione si fondono, e quella posizione diventa «–». Si marcano i termini che si sono fusi.
  3. Si ripete sulla nuova lista, finché ci sono fusioni, senza duplicati.
  4. I termini mai marcati sono gli implicanti principali.
n. di 1minterminiprima fusioneseconda fusione
10001 ✓ · 0010 ✓ · 1000 ✓00-1 · -001 · 001- ✓ · 0-10 ✓ · -010 · 100- · 10-00-1-
20011 ✓ · 0110 ✓ · 1001 ✓ · 1010 ✓0-11 ✓ · 011- ✓
30111 ✓

Gli implicanti principali (in grassetto) sono sei: 0-1-, 00-1, -001, -010, 100-, 10-0. Leggere una coordinata è facile: «1» dà la variabile diretta, «0» negata, «–» assente. Per esempio 0-1- = x3x1 e 10-0 = x3x2x0.

Le mappe di Karnaugh

Una mappa di Karnaugh è una tabella di verità disegnata in modo che stati adiacenti (che differiscono per un bit) siano caselle vicine. Le coordinate seguono il codice Gray, 00, 01, 11, 10, e la mappa va pensata avvolta su sé stessa: il bordo destro tocca il sinistro e quello in alto tocca quello in basso. Le convenzioni del corso: per tre variabili x2 sulle righe e x1x0 sulle colonne; per quattro, x3x2 sulle righe e x1x0 sulle colonne.

Una casella con un 1 è un sottocubo di ordine 1. Due sottocubi adiacenti formano un sottocubo di ordine 2, due di ordine 2 adiacenti uno di ordine 4, e così via: i sottocubi sono rettangoli di 1, 2, 4, 8 caselle (anche «a cavallo» dei bordi). Il bello è che c'è una corrispondenza biunivoca: ogni sottocubo principale è un implicante principale, e un sottocubo di ordine p corrisponde a un prodotto di N − log2p variabili. Un sottocubo è principale se nessun sottocubo più grande lo contiene.

  1. Si segnano tutti i sottocubi del massimo ordine presenti: sono certamente principali.
  2. Se coprono tutti gli 1, ci si ferma. Altrimenti si passa all'ordine inferiore e si segnano tutti i sottocubi di quell'ordine non già contenuti in quelli segnati.
  3. Si ripete fino a coprire tutti gli 1. Errore tipico: fermarsi a metà di un passo, appena gli 1 sono coperti. Un passo iniziato va finito.

Ecco la mappa dell'esempio di prima. Lo strumento trova i sottocubi principali, li classifica e calcola la sintesi di costo minimo; clicca sulle caselle per cambiare la funzione.

Essenziali, eliminabili e liste di copertura

La lista degli implicanti principali può essere ridondante. Per ridurla si classificano i sottocubi principali. È una tipica domanda d'esame:

TermineDefinizione
forma canonica SPla somma di mintermini ottenuta dall'espansione di Shannon
mintermineprodotto di tutte le variabili, dirette o negate; riconosce un solo stato di ingresso
implicanteprodotto di alcune variabili che compare in una forma SP della legge; riconosce alcuni stati
implicante principaleimplicante che non si fonde con nessun altro (sopravvive alla regola αx + α = α)
essenzialeè l'unico implicante principale a coprire un certo stato riconosciuto: deve stare in ogni lista di copertura. Sulla mappa: copre un 1 cerchiato una volta sola
assolutamente eliminabilericonosce solo stati già riconosciuti da implicanti essenziali: non deve stare in nessuna lista non ridondante
semplicemente eliminabilericonosce solo stati riconosciuti anche da altri implicanti principali, almeno uno dei quali non essenziale

Gli essenziali formano il cuore della mappa. Per i semplicemente eliminabili si procede con un albero binario di scelte: se ne prende uno e si fanno due ipotesi, «lo tengo come se fosse essenziale» (e altri diventano assolutamente eliminabili) oppure «lo scarto» (e altri diventano essenziali). Si continua finché non restano semplicemente eliminabili: le foglie sono tutte le liste di copertura non ridondanti, e tra queste si sceglie quella di costo minimo con il criterio voluto. Con i nomi dello strumento qui sopra (A = 0-1-, B = 00-1, C = -001, D = -010, E = 100-, F = 10-0):

{A}C essenzialeC eliminato{A, C}{A, B, E}F sìF noF sìF no{A, C, F}{A, C, D, E}{A, B, E, F}{A, B, D, E}3 termini: costo minimo4 termini4 termini4 termini
Ogni sottocubo semplicemente eliminabile si considera prima come essenziale, poi come eliminato; ogni scelta rende altri sottocubi essenziali o assolutamente eliminabili. Le foglie sono tutte le liste di copertura non ridondanti.

z = x3x1 + x2x1x0 + x3x2x0    (costo a porte 4, a diodi 11)

Il risultato non dipende dall'ordine in cui si scelgono i sottocubi; bisogna solo evitare di aggiungere un sottocubo che renderebbe la lista ridondante. I criteri di costo intervengono soltanto alla fine, nella scelta tra le foglie.

La procedura completa

  1. Dalla tabella di verità (o da un'espressione) si ricava la mappa di Karnaugh, o la lista dei mintermini.
  2. Si trovano gli implicanti principali: con la mappa fino a 4 variabili, con Quine-McCluskey oltre.
  3. Si individuano gli essenziali e poi gli assolutamente eliminabili.
  4. Con l'albero delle scelte sui semplicemente eliminabili si generano tutte le liste di copertura non ridondanti.
  5. Si applica il criterio di costo e si scrive l'espressione: all'esame servono le espressioni algebriche, non i disegni.

Funzioni non completamente specificate

Un decodificatore BCD a 7 segmenti riceve una cifra decimale codificata in binario su 4 bit (BCD, Binary Coded Decimal) e accende i segmenti di un display. Gli stati da 1010 a 1111 non sono cifre e non si presenteranno mai: per quegli stati le uscite sono non specificate.

x30x20x10x00decodificatoreBCD → 7 segmentiABCDEFGLe uscite A…G accendonoi segmenti. Con un codiceda 10 a 15 il display restaspento: in quei casi le uscitesono non specificate, e quiabbiamo scelto 0.

Nella sintesi i non specificati si usano a nostro vantaggio, in due modi diversi:

  • per trovare i sottocubi principali si trattano come 1, così i sottocubi diventano più grandi (meno letterali);
  • per classificarli e scegliere la copertura si trattano come 0: bisogna coprire solo gli 1 veri.

Per il segmento E, che si accende per le cifre 0, 2, 6 e 8, si trovano cinque sottocubi di ordine 4: due sono essenziali e gli altri tre coprono solo stati già coperti, o solo non specificati. Risultato: zE = x2x0 + x1x0.

Reti con più uscite

Sintetizzando a costo minimo una uscita alla volta non si ottiene necessariamente la rete a più uscite di costo minimo. Esempio: con z1 = ac + bc e z0 = bc + ab (le singole sintesi minime) servono 6 porte; ma scrivendo z1 = ac + abc e z0 = bc + abc, cioè usando in entrambe il mintermine comune abc, bastano 5 porte, perché quel prodotto si realizza una volta sola. In una rete a più uscite possono quindi convenire implicanti che non sono principali per nessuna delle singole uscite.

Sintesi PS

Prodotti di somme

Ogni legge si può scrivere anche in forma PS, come prodotto di somme: z = S1 · S2 · … · Sk, dove ogni Si è una somma di variabili dirette o negate, detta implicato. La teoria è duale a quella SP (forma canonica PS, maxtermini che corrispondono agli stati non riconosciuti, implicati principali…), ma in pratica si procede così:

  1. si scrive la mappa di F, cioè quella con 0 e 1 scambiati (i non specificati restano tali);
  2. si fa la sintesi SP a costo minimo di F, cioè si coprono gli 0 di F;
  3. si nega tutto e si applica De Morgan due volte: la somma finale negata diventa il prodotto delle negazioni, e ogni prodotto negato diventa la somma degli ingressi negati.

La sintesi PS così ottenuta ha lo stesso costo della SP di F (sia a porte sia a diodi) ed è di costo minimo tra le PS: se ne esistesse una più economica, esisterebbe anche una SP di F più economica, contro l'ipotesi. Per la nostra funzione di esempio gli implicati principali sono quattro, tutti essenziali:

z = (x2 + x1) · (x3 + x2) · (x3 + x1 + x0) · (x3 + x1 + x0)

Costa 14 a diodi contro gli 11 della SP. Non c'è una regola generale su quale delle due forme costi meno: dipende dalla funzione, e conviene provarle entrambe. Nello strumento della mappa di Karnaugh, il pulsante «Sintesi PS» fa proprio questo.

Porte universali: sintesi a NAND e a NOR

NAND e NOR bastano da sole

Con sole porte NAND (oppure con sole NOR) si costruiscono NOT, AND e OR, e quindi qualsiasi rete: per questo si chiamano porte universali. Con le NAND: un NOT è una NAND con gli ingressi collegati insieme; una AND è una NAND seguita da un NOT-NAND; una OR è una NAND con gli ingressi negati (De Morgan). Con le NOR è tutto duale.

Dalla forma SP alle NAND, dalla PS alle NOR

SP → NAND

Si nega due volte l'espressione SP e si applica De Morgan una volta:

z = P1 + P2 + … = P1 · P2 · …

Ogni AND diventa una NAND, la OR finale una NAND. Stesso circuito, stesso costo.

PS → NOR

Allo stesso modo, partendo dalla forma PS:

z = S1 · S2 · … = S1 + S2 + …

Ogni OR diventa una NOR, la AND finale una NOR. Stesso costo della PS.

Un esercizio d'esame

Sintetizzare a costo minimo la rete della mappa qui sotto sia a NAND sia a NOR, e dire quale delle due costa meno a diodi. Ricetta: SP minima e poi NAND; PS minima (cioè SP minima della mappa con 0 e 1 scambiati) e poi NOR. Prova a farlo da solo, poi controlla con lo strumento (passando da SP a PS).

Soluzione: la SP minima è z = x3x1 + x2x0 + x2x1 (costo a diodi 9), da cui a NAND z = x3x1 · x2x0 · x2x1. La PS minima è z = (x3 + x2) · (x2 + x1) · (x3 + x1 + x0) (costo 10), da cui a NOR. Vince la versione a NAND.

Esercizi svolti di sintesi

Dalla tabella di verità alla sintesi minima

Un esercizio completo nello stile della prova scritta: tutti i passi della procedura, uno dopo l'altro.

Esercizio 11 La procedura completa, come all'esame

Data la tabella di verità di una rete a 4 ingressi e 1 uscita:

  1. scrivere la forma canonica SP;
  2. trovare gli implicanti principali con il metodo di Quine-McCluskey;
  3. disegnare la mappa di Karnaugh e individuarvi gli implicanti principali, classificandoli;
  4. trovare tutte le liste di copertura non ridondanti e scegliere quella (o quelle) di costo minimo, sia a porte sia a diodi.
x3 x2 x1 x0z0x3 x2 x1 x0z0
0 0 0 001 0 0 01
0 0 0 111 0 0 11
0 0 1 001 0 1 00
0 0 1 111 0 1 10
0 1 0 001 1 0 01
0 1 0 101 1 0 11
0 1 1 001 1 1 00
0 1 1 111 1 1 11

1. Forma canonica. Un mintermine per ciascuno degli stati riconosciuti, 1, 3, 7, 8, 9, 12, 13 e 15: ogni variabile compare diretta se nello stato vale 1, negata se vale 0.

z0 = x3x2x1x0 + x3x2x1x0 + x3x2x1x0 + x3x2x1x0 + x3x2x1x0 + x3x2x1x0 + x3x2x1x0 + x3x2x1x0

2. Quine-McCluskey. Si raggruppano gli stati per numero di 1 e si confrontano solo gruppi vicini. Al primo giro si trovano nove termini; al secondo si fondono solo 100- con 110- (e 1-00 con 1-01, che dà lo stesso termine). Al terzo non c'è più niente da fondere.

n. di 1minterminiprima fusioneseconda fusione
10001 ✓ · 1000 ✓00-1 · -001 · 100- ✓ · 1-00 ✓1-0-
20011 ✓ · 1001 ✓ · 1100 ✓0-11 · 1-01 ✓ · 110- ✓
30111 ✓ · 1101 ✓-111 · 11-1
41111 ✓

Gli implicanti principali, in grassetto, sono sei. Con i nomi che usa lo strumento qui sotto: A = 1-0- = x3x1, B = 00-1 = x3x2x0, C = -001 = x2x1x0, D = 0-11 = x3x1x0, E = -111 = x2x1x0, F = 11-1 = x3x2x0.

3. Mappa e classificazione. Prova a disegnare i sottocubi da solo, poi premi il pulsante per vedere la soluzione:

  • A è essenziale: è l'unico a coprire gli stati 1000 e 1100. Copre anche 1001 e 1101.
  • Tutti gli altri sono semplicemente eliminabili: ognuno copre stati coperti anche da un altro implicante principale non essenziale. Dopo aver preso A restano da coprire quattro stati, ciascuno in due modi: 0001 (B o C), 0011 (B o D), 0111 (D o E), 1111 (E o F).

4. Liste di copertura. Si costruisce l'albero delle scelte partendo da B. Se B si tiene, C diventa assolutamente eliminabile (0001 è già coperto da B, 1001 da A); poi si decide su E: tenendolo, D e F diventano inutili; scartandolo, D e F diventano essenziali. Se B si scarta, C e D diventano essenziali (sono rimasti gli unici per 0001 e per 0011), e resta da coprire 1111 con E oppure con F.

{A}B essenzialeB eliminato{A, B}{A, C, D}E sìE noE sìE no{A, B, E}{A, B, D, F}{A, C, D, E}{A, C, D, F}porte 4 · diodi 11: minimaporte 5 · diodi 15porte 5 · diodi 15porte 5 · diodi 15
L'albero delle scelte dell'esercizio 11. I costi seguono le formule del corso: porte = numero di implicanti + 1, diodi = numero di implicanti + numero totale di letterali.

Le liste non ridondanti sono quattro, e una sola è di costo minimo con entrambi i criteri:

z0 = x3x1 + x3x2x0 + x2x1x0

Costa 4 porte e 11 diodi. Per completezza, la sintesi PS di costo minimo (pulsante «Sintesi PS») ha quattro implicati, tutti essenziali, e costa 5 porte e 14 diodi: qui conviene la SP.

Oltre la forma SP: somme esclusive di prodotti

La sintesi SP a costo minimo è minima solo tra le reti AND-OR a due livelli. Se si ammettono anche le porte XOR, a volte si scende parecchio.

Esercizio 12 Quando conviene lo XOR: la sintesi ESOP

Dimostrare che, data una legge F, una rete a due livelli costruita così ne è una sintesi:

  • ogni stato riconosciuto da F è coperto da un numero dispari di prodotti;
  • ogni stato non riconosciuto è coperto da un numero pari di prodotti (anche zero);
  • le uscite di tutti i prodotti vanno in ingresso a una XOR.

È la sintesi ESOP (Exclusive Sum Of Products). Poi trovare una sintesi ESOP più economica della SP minima per la funzione che vale 1 quando x1 e x0 sono diversi, e per z = x3x2 ⊕ x1x0.

Dimostrazione. Fissato uno stato di ingresso, ogni prodotto vale 1 se copre quello stato e 0 altrimenti. All'ingresso della XOR arrivano quindi tanti 1 quanti sono i prodotti che coprono lo stato, e la XOR di più bit vale 1 se e solo se gli 1 sono in numero dispari (è la parità). L'uscita vale 1 esattamente negli stati coperti un numero dispari di volte, cioè in quelli riconosciuti da F. ∎

Ecco la differenza con la forma SP: lì un 1 si può coprire quante volte si vuole e uno 0 mai; qui una casella coperta due volte vale 0. Si possono quindi usare sottocubi grandi che coprono anche degli 0, purché li coprano un numero pari di volte.

Primo esempio. La funzione che vale 1 quando x1 ≠ x0 ha come SP minima x1x0 + x1x0 (3 porte, 6 diodi). In ESOP bastano i due «sottocubi» x1 e x0, di metà mappa ciascuno: si sovrappongono proprio nelle caselle con x1 = x0 = 1, che devono valere 0. Risultato: x1 ⊕ x0, una sola porta XOR.

Secondo esempio. Per z = x3x2 ⊕ x1x0 la SP minima ha quattro implicanti di tre letterali, x3x2x1 + x3x2x0 + x3x1x0 + x2x1x0. La ESOP usa una riga e una colonna intere della mappa, che si incrociano nell'unica casella da spegnere:

x3x2\x1x000000101111110100010001011010010x3x2: la riga 11, quattro casellex1x0: la colonna 11, quattro caselleLa casella 1111 è coperta due volte:un numero pari, quindi lo XOR dà 0.z = x3x2 ⊕ x1x0ESOP: 2 AND e una XOR (3 porte, 6 diodi)SP minima: 4 AND e una OR (5 porte, 16 diodi)
Due sottocubi di ordine 4 che si sovrappongono in una casella: coperta due volte, vale 0. In forma SP la stessa mappa richiede quattro sottocubi di ordine 2.

Porte tri-state e bus

Collegare più uscite alla stessa linea

Spesso fa comodo che più reti scrivano, a turno, sulla stessa linea: un bus condiviso, o le linee dati di una memoria, che sono a volte ingressi e a volte uscite. Ma collegare due uscite normali è un disastro: elettricamente un'uscita è un generatore di tensione con una resistenza in serie, e se una vale 1 e l'altra 0 si chiude una maglia in cui scorre molta corrente (e i circuiti bruciano), mentre la tensione sulla linea finisce chissà dove, magari nella fascia di indeterminazione.

Due uscite discordi sulla stessa lineaVccR₁R₀uscita a 1uscita a 0scorre corrente,tensione incertaxzbbxz1001110–alta impedenzacon b = 0 l'uscita è scollegata:alta impedenza (HiZ)
Due uscite collegate insieme vanno in conflitto appena hanno valori diversi. La porta tri-state, con l'ingresso di abilitazione b a 0, scollega fisicamente la propria uscita.

La soluzione è la porta tri-state: con l'abilitazione b = 1 si comporta da elemento neutro, con b = 0 la sua uscita è come scollegata (in alta impedenza): qualunque tensione le si applichi, non scorre corrente. Se N uscite condividono una linea, ognuna passa da una tri-state e in ogni istante almeno N − 1 di esse sono in alta impedenza.

busrete 0b0rete 1b1rete 2b2In ogni istante al massimo una tra b0, b1, b2 vale 1: le altre uscite sono in alta impedenza.Se le b vengono da un decoder, il vincolo è rispettato per costruzione.
Un bus condiviso: più reti scrivono sulla stessa linea, una alla volta. È così che processore, memoria e interfacce si scambiano dati.

Due osservazioni. Primo: l'alta impedenza non è un valore logico e non si propaga: una porta che riceve in ingresso una linea «scollegata» produce comunque 0 o 1, solo che non sappiamo quale. Secondo: con le tri-state si costruisce un multiplexer decodificato (una tri-state per ingresso, con le abilitazioni prodotte da un decoder) e le linee bidirezionali, che una rete usa a volte come ingresso e a volte come uscita.

Circuiti di ritardo e formatori di impulsi

Ritardi asimmetrici e impulsi

Un elemento di ritardo Δ si fa con un numero pari di NOT in cascata, dimensionato sul ritardo voluto; il suo ritardo è simmetrico. Con una porta in più si ottengono ritardi asimmetrici: con una AND tra x e la sua copia ritardata y, l'uscita sale solo quando sale anche y (ritardo grande) ma scende appena scende x (ritardo piccolo): è il circuito Δ⁺. Con una OR si ottiene il duale Δ⁻. Negando l'ingresso ritardato si ottengono i formatori di impulsi: P⁺ genera un impulso di durata Δ dopo ogni fronte di salita, P⁻ (con una NOR) dopo ogni fronte di discesa.

ΔxyzΔ⁺: ritardo sulla salita (AND)xyzΔxy̅zP⁺: impulso sulla salita (AND, y negato)xy̅zCon una OR (e una NOR) si ottengonoi duali Δ⁻ e P⁻, sul fronte di discesa.
L'ingresso y è x ritardato di Δ. In alto, la AND va a 1 solo quando anche y è salito, ma torna a 0 subito con x. In basso, con y negato, la AND vale 1 solo nel breve intervallo dopo il fronte di salita: un impulso di durata Δ.

Verifica