Le principali unità funzionali di questo livello sono le porte logiche, che combinano segnali di ingresso per produrre un risultato binario. Questi circuiti formano la base di tutti i processi di calcolo, dall’esecuzione di operazioni aritmetiche alle decisioni condizionali.

Circuiti Combinatori e Sequenziali

Nel livello logico digitale, i circuiti possono essere classificati in due grandi categorie: combinatori e sequenziali.

Circuiti Combinatori

I circuiti combinatori sono quei circuiti in cui l’uscita dipende esclusivamente dagli ingressi correnti, senza tener conto di alcun input passato. In altre parole, il loro comportamento è determinato solo dallo stato attuale dei segnali di ingresso. Un esempio classico è il sommatore binario, che esegue addizioni tra numeri binari.

Circuiti Sequenziali

Diversamente, i circuiti sequenziali hanno una memoria interna, e l’uscita dipende sia dagli ingressi attuali sia dallo stato precedente. I circuiti sequenziali sono essenziali per realizzare funzioni come contatori, registri e memorie, fondamentali per il funzionamento di processori e altri dispositivi di calcolo.

Circuiti Combinatori Notevoli

Multiplexer

Il Multiplexer (abbreviato come MUX) è un dispositivo logico combinatorio fondamentale nel campo dell’elettronica digitale. Il suo scopo è selezionare uno tra diversi segnali di ingresso e indirizzarlo verso un’unica uscita. Questo dispositivo è particolarmente utile in contesti dove è necessario trasmettere più segnali attraverso un unico canale di comunicazione o quando bisogna scegliere tra diverse fonti di dati per un’unità di elaborazione.

Definizione e Funzionamento del Multiplexer

Un multiplexer può essere definito come un selettore di dati. Esso riceve in ingresso diverse linee di dati (di solito rappresentate come $ D_0, D_1, D_2, \dots, D_n $) e una serie di linee di selezione. Queste ultime determinano quale tra le linee di ingresso sarà trasmessa all’uscita.

L’uscita $ Y $ di un multiplexer si può esprimere come funzione degli ingressi e delle linee di selezione. In particolare, per un multiplexer 2:1, la logica di selezione è piuttosto semplice: se il segnale di selezione $ S $ è 0, l’uscita sarà uguale all’ingresso $ D_0 $; se $ S $ è 1, l’uscita sarà uguale a $ D_1 $.

Esempio di un Multiplexer 2:1

Nel caso di un multiplexer 2:1, vi sono due ingressi, $ D_0 $ e $ D_1 $, e una linea di selezione $ S $. La funzione logica che descrive il comportamento del MUX è la seguente:

$ Y = \overline{S} \cdot D_0 + S \cdot D_1 $

Multiplexer N:1

In generale, un multiplexer N:1 ha N ingressi, $\log_2(N)$ linee di selezione e un’unica uscita. Ad esempio, un multiplexer 4:1 avrà 4 ingressi $ D_0, D_1, D_2, D_3 $, 2 linee di selezione $ S_0 $ e $ S_1 $, e un’uscita $ Y $.

Demultiplexer

Il dispositivo opposto al multiplexer è il demultiplexer (DEMUX). Mentre il MUX seleziona un ingresso tra molti per mandarlo all’uscita, il DEMUX prende un singolo ingresso e lo distribuisce su una delle varie uscite, in base al segnale di selezione.

Sommatore 1-bit

Un sommatore a 1 bit è un circuito logico combinatorio che esegue l’operazione di addizione tra due singoli bit binari, generando una somma e un riporto. Esistono due tipi principali di sommatore a 1 bit: il Half Adder (sommatore parziale) e il Full Adder (sommatore completo). Il sommatore parziale gestisce l’addizione di due bit senza riporto in ingresso, mentre il sommatore completo gestisce anche il riporto proveniente dall’addizione precedente.

Half Adder (Sommatore Parziale)

Il Half Adder è un circuito combinatorio che prende in ingresso due bit, $ A $ e $ B $, e genera:

  • Un bit di somma $ S $.
  • Un bit di riporto $ C_{\text{out}} $.
Equazioni Logiche dell’Half Adder
  • Somma ($ S $):

    $ S = A \oplus B $

    Dove $ \oplus $ rappresenta l’operazione logica XOR.

  • Riporto ($ C_{\text{out}} $):

    $C_{\text{out}} = A \cdot B$

    Dove $ \cdot $ rappresenta l’operazione logica AND.

Tabella della Verità dell’Half Adder
$ A $$ B $$ S $$ C_{\text{out}} $
0000
0110
1010
1101

L’Half Adder è utile per addizionare due bit, ma non è in grado di sommare un eventuale riporto proveniente da un’addizione precedente, motivo per cui viene utilizzato principalmente in combinazione con altri circuiti.

Full Adder (Sommatore Completo)

Il Full Adder è una versione estesa del sommatore a 1 bit, in grado di sommare tre bit: due bit di ingresso, $ A $ e $ B $, e un bit di riporto in ingresso $ C_{\text{in}} $ proveniente da un’addizione precedente. Il Full Adder produce:

  • Un bit di somma $ S $.
  • Un bit di riporto $ C_{\text{out}} $.
Equazioni Logiche del Full Adder
  • Somma ($ S $):

    $S = A \oplus B \oplus C_{\text{in}}$

    L’operazione XOR è utilizzata per sommare i tre bit.

  • Riporto ($ C_{\text{out}} $):

    $C_{\text{out}} = (A \cdot B) + (C_{\text{in}} \cdot (A \oplus B))$

    Dove il riporto viene generato se due o più degli ingressi sono a 1.

Tabella della Verità del Full Adder
$ A $$ B $$ C_{\text{in}} $$ S $$ C_{\text{out}} $
00000
00110
01010
01101
10010
10101
11001
11111
Struttura del Full Adder

Un Full Adder può essere costruito combinando due Half Adder e una porta OR. La somma viene calcolata tramite la doppia operazione XOR sui bit in ingresso, mentre il riporto viene determinato dall’uscita del secondo Half Adder e una porta OR che combina i riporti parziali generati dai due Half Adder.

Applicazioni

Il sommatore a 1 bit è uno dei blocchi fondamentali nella progettazione di Unità Aritmetiche e Logiche (ALU), che svolgono operazioni aritmetiche nei processori. Più Full Adder possono essere collegati in cascata per costruire sommatori multi-bit, capaci di sommare numeri binari di diverse lunghezze (ad esempio, 4, 8 o 16 bit).

ALU

L’Unità Aritmetica e Logica (ALU, Arithmetic and Logic Unit) è uno dei componenti centrali di un microprocessore o di una CPU. È responsabile dell’esecuzione delle operazioni aritmetiche (come addizioni e sottrazioni) e logiche (come AND, OR, NOT) su dati binari. La ALU svolge un ruolo cruciale nell’elaborazione dei dati, poiché implementa le operazioni fondamentali necessarie per l’esecuzione di programmi e per il funzionamento di un sistema di calcolo.

Struttura e Funzionamento della ALU

Componenti principali della ALU

Una ALU tipica è composta da vari sottocircuiti e componenti logici, tra cui:

  • Sommatori: Eseguono operazioni aritmetiche come l’addizione e la sottrazione.
  • Operatori logici: Implementano funzioni logiche come AND, OR, XOR, NOT.
  • Multiplexer: Utilizzati per selezionare quali operazioni devono essere eseguite in base al comando ricevuto.
  • Registri di condizione: Memorizzano informazioni sullo stato del risultato dell’operazione (ad esempio, flag di overflow, carry, zero).

Funzioni della ALU

Le principali operazioni eseguite da una ALU possono essere suddivise in due categorie: aritmetiche e logiche.

  • Operazioni aritmetiche:

    • Addizione: Somma di due numeri binari.
    • Sottrazione: Differenza tra due numeri binari.
    • Moltiplicazione e divisione (in alcune ALU avanzate).
    • Incremento/Decremento: Aumentare o diminuire un numero di una unità.
  • Operazioni logiche:

    • AND: L’output è 1 solo se entrambi gli ingressi sono 1.
    • OR: L’output è 1 se almeno uno degli ingressi è 1.
    • NOT: Inverte l’ingresso (0 diventa 1, 1 diventa 0).
    • XOR: L’output è 1 se uno e solo uno degli ingressi è 1.

Controllo delle operazioni

La ALU esegue le operazioni in base ai segnali di controllo ricevuti dall’unità di controllo della CPU. Ogni operazione specifica della ALU viene attivata tramite un codice di operazione (opcode) che specifica quale funzione deve essere eseguita su un determinato set di operandi. Questi codici sono generati dall’unità di controllo del processore durante l’esecuzione di un programma.

Output della ALU

Oltre al risultato dell’operazione aritmetica o logica, la ALU produce vari flag di stato che forniscono informazioni aggiuntive sul risultato:

  • Zero Flag: Se il risultato è 0.
  • Carry Flag: Se c’è un riporto oltre il bit più significativo.
  • Overflow Flag: Se si verifica un overflow aritmetico (cioè, se il risultato non può essere rappresentato correttamente con il numero di bit disponibili).
  • Sign Flag: Indica se il risultato è positivo o negativo.

Architettura della ALU

Le ALU variano in termini di complessità a seconda dell’architettura del processore. Un’ALU di base può supportare solo operazioni aritmetiche semplici (come l’addizione e la sottrazione) e operazioni logiche di base, mentre le ALU più complesse, utilizzate nei moderni microprocessori, supportano operazioni avanzate come la moltiplicazione, divisione e persino il calcolo di operazioni in virgola mobile.

ALU

ALU a 4 bit

Un’ALU a 4 bit è in grado di elaborare operazioni su numeri binari di lunghezza 4 bit. Questo tipo di ALU è utilizzato nei sistemi di calcolo di base e nei microcontrollori a basso costo. L’ALU può eseguire operazioni sui seguenti insiemi di bit di ingresso:

  • Due operandi a 4 bit (ad esempio, $ A_3A_2A_1A_0 $ e $ B_3B_2B_1B_0 $).
  • Un insieme di segnali di controllo che determinano l’operazione da eseguire.

ALU a 32 bit e oltre

Nelle CPU moderne, le ALU possono processare operandi di 32 bit, 64 bit o più, il che permette al processore di eseguire operazioni su numeri molto più grandi e complesse. Le ALU avanzate possono anche supportare operazioni in virgola mobile e calcoli vettoriali per le elaborazioni parallele, come nel caso dei processori grafici (GPU).