Circuiti logici digitali elementari
Le porte logiche non sono vendute singolarmente ma sono vendute in delle unità chiamate circuiti integrati o chip . Questi chip sono pezzi di silicio di forma rettangolare su cui è stampato il circuito.

I chip vengono classificati in base al numero di porte che contengono :
- SSI - Small Scale Integrated : da 1 a 10 porte
- MSI - Medium Scale Integrated : da 10 a 100 porte
- LSI - Large Scale Integrated : da 100 a 100 000 porte
- VLSI - Very Large Scale Integrated : più di 100 000 porte
Circuiti combinatori
Important
I circuiti combinatori sono quei circuiti dove l’output dipende esclusivamente dall’input.
Infatti non tutti i circuiti hanno questa proprietà, per esempio un circuito con elementi di memoria generano l’output dipendendo non solo dall’input ma anche dai valori memorizzati ( circuiti sequenziali )(vedremo in seguito).
Multiplexer
Important
Un multiplexer è un circuito con input, input di controllo ( selettori ) e un output. Il valore dell’input selezionato dagli input di controllo viene “direzionato” verso l’uscita.
Per esempio questo è un MUX :

e la sua tabella di verità sarà :

Usando quindi un multiplexer adatto possiamo implementare una qualsiasi funzione.
Example
Consideriamo la funzione di maggioranza, ovvero che da se il numero di “zeri” è maggiore del numero di “uni” e da viceversa :
quindi se vogliamo utilizzare un multiplexer avremo bisogno di input di controllo e “adattare” gli input secondo la tabella di verità e l’output “voluto”, quindi daremo in input :
- ( con ) a
- ( con GND ovvero massa ) ai restanti con :
quindi il nostro MUX sarà di questo tipo :
Decoder
Important
Un decoder ha input e output. Il numero in binario formato dagli -bit, “seleziona” (setta a ) uno dei input.
Example
Prendiamo per esempio un decoder :
supponiamo che come input entra , allora l’unico output che sarà è , siccome
Questo circuito sequenziale è utile quando alla memoria viene presentato un indirizzo e si vuole selezionare il chip corrispondente.
Comparatore
Un comparatore, “confronta” due word in input e restituisce se sono uguali e viceversa. Prendiamo per esempio un comparatore a 4 bit ( ovvero che prende in input word a 4 bit ) : review

questo circuito comparatore infatti prende due word da 4 bit e mette a XOR ogni 2 bit, e con . Viene utilizzata la porta XOR, infatti la porta XOR da in output se sono diversi gli input e se sono uguali, quindi se mettiamo in XOR ogni bit di con , ognuno deve restituire se sono uguali, quindi poi basta metterli in NOR, infatti se tutti sono il NOR restituisce , se almeno uno è il NOR restituisce .
Array logici programmabili - PLA
Important
Il PLA ( Programmable Logic Array ) è un chip con porte AND e OR programmabili, che permette di implementare una qualsiasi funzione in formato somma di prodotti ( SOP ).

le caratteristiche di un PLA sono :
- ha 12 ingressi, dove ogni ingresso passa anche per il suo inverso, quindi avremo 24 segnali ( 12 originali + 12 invertiti ).
- matrice 24x50 AND : il primo stadio è composto da 50 porte AND programmabili
- ogni porta AND è connessa attraverso un fusibile a qualsiasi sottoinsieme dei 24 segnali
- se il fusibile è intatto il segnale passa
- se il fusibile è bruciato il segnale non passa
- ogni porta AND è connessa attraverso un fusibile a qualsiasi sottoinsieme dei 24 segnali
- matrice OR : il secondo stadio è composto da 6 porte OR programmabili
- ogni porta OR prende in input l’uscita di tutte le 50 porte AND del primo stadio, anche qui le connessioni cono stabilite con i fusibili
Circuiti aritmetici
Important
I circuiti aritmetici sono un’altro classico esempio dei circuiti combinatori
Shifter
Lo shifter è un circuito con 8 bit in input ( word a 8 bit ) e 8 bit in output, che “shifta” (fa scorrere) verso sinistra o destra tutti gli 8 bit di 1 bit. review

L’input determina se fare uno left shift ( ) o right shift ( ), per capire come funziona analizziamo gli AND “interni” :
- quando (right shift) : gli AND di destra di ogni coppia si “attivano” e quindi il risultato di quel AND sarà uguale al corrispondente
- quando (left shift) : la cosa è inversa verso sinistra notiamo inoltre che nel caso di un right shift , sempre, mentre nel caso di un left shift, .
Lo shifter serve per fare operazioni di moltiplicazione e divisione per potenze di 2 :
- left shift (
<<) di bit è uguale a moltiplicare per - right shift (
>>) di bit è uguale a dividere per
Example
Come possiamo moltiplicare un numero per , beh abbiamo bisogno sia dello shifter che del sommatore, infatti possiamo osservare che :
ora la domanda è come faccio a fare ? Ora è più facile perché , quindi posso “shiftare” volte a sinistra il numero . Una volta ottenuto il risultato basta sommarlo a e otteniamo . PS : questa è una domanda di esame
Sommatori
Important
Un sommatore è un circuito capace di fare la somma tra bit.
Half-adder
Un primo “prototipo” è un “mezzo-sommatore” ( perché non gestisce il riporto in entrata ) che prende in input due bit e , e ritorna la somma e l’eventuale riporto :

Full-adder
Il full-adder è un circuito sommatore composto da due half-adder è fa la somma tra 3 bit dove è un eventuale riporto in input, restituisce quindi in output la somma e un eventuale riporto in output :

_sum = (a xor b) xor cin
cout = (a and b) or (cin and (a xor b))Quindi se vogliamo costruire un adder (ripple carry adder) che sommi due word da 16 bit, basta mettere in serie e replicare 16 full-adder.
Dal corso di LRL sappiamo abbastanza su sta roba e sappiamo anche come costruire un adder più efficiente ( propagazione del riporto → Adder-Subtractor ).
ALU - Arithmetic Logic Unit
Important
La ALU ( ad 1-bit ) contiene 3 unità principali :
- DECODER
- UNITÀ LOGICA
- FULL-ADDER e può eseguire una di queste funzioni :
- (somma)

- DECODER : serve per selezionare secondo gli input e quale funzione eseguire.
- Per esempio se allora viene eseguito
- UL : ha il compito di eseguire , e
- FULL-ADDER : ha il compito di eseguire , considerando anche eventuali riporti in input e ritornando anche l’eventuale riporto in output
Inoltre ci sono altre caratteristiche :
- possibilità di lavorare con grazie al bit in input
INVA - possibilità di forzare a 0 gli input e , basta negare passare 0 a
ENAoENB( rispettivamente )
È possibile collegare tra di loro più ALU a 1-bit per costruire ALU di lunghezza variabile, questa tecnica si chiama ==bit slice==.
Example
ALU a 8-bit costruito con 8 ALU da 1-bit ognuna :
È possibile passare anche un segnare INC in input alla nostra ALU a -bit, utile solo per le operazioni di addizione, per esempio per eseguire o .
Clock
Molti circuiti digitali usano i clocks per avere sincronizzazione.
Important
Un clock è un circuito che emette una serie di impulsi con larghezza precisa e a intervalli precisi. Ad ogni impulso la CPU esegue una operazione elementare o passa alla successiva.
Ogni intervallo compreso tra le due estremità di due impulsi consecutivi è chiamato ==ciclo di clock== o periodo ( T ) :

La frequenza di clock è di solito tra 100 MHz e 4 GHz, corrispondenti ai 10 nanosecondi (0,00000001 sec) e 250 picosecondi (0,00000000025 sec).
In un computer, molti eventi possono accadere durante un singolo ciclo di clock, però alcune volte è molto utile farli accadere seguendo un ordine preciso, per questo è necessario dividere il ciclo di clock in sotto-cicli. Una tecnica molto utilizzata per dividere il ciclo di clock in sotto-cicli è di :
- intercettare il clock originale e inserirlo in circuito di cui si conosce il ritardo
- questo circuito genererà un secondo clock dopo il primo


Infatti quest’ultima figura (b) rappresenta un diagramma temporale che fornisce 4 “momenti” diversi che possono essere utilizzati per sincronizzare eventi diversi :
- Fronte di salita di
C1( rosa ) - Fronte di discesa di
C1( blu ) - Fronte di salita di
C2( verde ) - Fronte di discesa di
C2( rosso )
A volte invece di avere un momento preciso, è utile l’intervallo di tempo in cui un’azione deve avvenire.
Per esempio : leggimi questo dato ogni volta che il segnale è alto.
Infatti ad un evento gli può essere consentito di verificarsi solo quando C1 è alto e invece un’altro evento verificarsi solo quando C2 è alto.
Se abbiamo bisogno di più di due diversi intervalli, possiamo fare in modo che quando i segnali dei due clock ( C1,C2 ) sono alti, si sovrappongono (in AND) in modo da avere 4 diversi intervalli :
C1 AND NOT C2( verde )NOT C1 AND C2( viola )C1 AND C2( rosso )NOT C1 AND NOT C2( arancione )






