https://www.youtube.com/watch?v=Js088Mc5GQI
Il video spiega lo schema logico e il funzionamento dell'ALU (Arithmetic Logic Unit), un componente fondamentale della CPU che esegue operazioni aritmetiche e logiche.
ALU a 1 bit:
È composta da un decoder, un full adder e un'unità logica.
Il decoder seleziona se eseguire una somma (tramite il full adder) o un'operazione logica (AND, OR, NOT).
Il full adder esegue la somma di due bit più un eventuale riporto in ingresso.
L'unità logica esegue operazioni AND, OR e NOT.
ALU a 4 bit:
È composta da più unità a 1 bit collegate tra loro.
Contiene un'unità aritmetica (composta da quattro full adder in serie) e un'unità logica che esegue una funzione tra AND, OR, XOR in base ai segnali di controllo.
I segnali di controllo F0, F1, F2 e F3 determinano quale operazione (aritmetica o logica) e quale funzione logica eseguire.
Il video include anche dimostrazioni pratiche del funzionamento delle ALU a 1 e 4 bit utilizzando il software Logisim. Spiega come impostare i segnali di controllo e gli operandi per eseguire diverse operazioni aritmetiche e logiche, mostrando gli output corrispondenti.
Le due seguenti simulazioni didattiche in flash permettono di comprendere in modo molto intuitivo il funzionamento miminale di una cpu (scaricare il file ed eseguire con l'estensione Chrome Ruffle). Si può osservare l'esecuzione passo passo di due semplici programmi attraverso uno schema a blocchi essenziale
Il seguente video in inglese spiega più in dettaglio e con un livello di difficoltà elevato come si costruisce una CPU (Central Processing Unit) partendo da componenti base come transistor, porte logiche, ALU (Arithmetic Logic Unit) e latch.
I circuiti logici consentono di realizzare in modo HW operazioni aritmetiche e di confronto sui numeri rappresentati in forma binaria.
Questi circuiti sono alla base delle ALU (arithmetic logic unit) presenti nelle CPU dei microprocessori.
Ci occuperemo solo delle operazioni fondamentali e nella loro versione più semplice; attualmente le ALU sono disponibili all'interno dei micro e non ha più senso un utilizzo separato. Quindi lo studio dei CI che realizzano singolarmente queste funzioni è puramente didattico.
Si consideri che la maggior parte delle operazioni della CPU coinvolge l'ALU che è quindi responsabile delle prestazioni finali del micro. L'argomento è quindi molto importante.
Si pongono due problematiche:
la conoscenza di blocchi base che agiscono su pochi bit, anche singoli bit.
l'interconnessione di blocchi base per espandere il numero di bit; l'intera operazione dovrebbe essere eseguita in un ciclo di clock del sistema, quindi in modo estremamente veloce
Confrontano parole di n bit e stabiliscono se una parola è maggiore, minore o uguale risetto all'altra. Quindi il circuito ha tre uscite.
Comparatore a 2 bit.
Tabella, mappe K., schema logico.
ES. Il comparatore a 4 bit 74HC_HCT85. Espansione degli ingressi.
http://www.nxp.com/documents/data_sheet/74HC_HCT85_CNV.pdf
Full adder.
Tabella, mappe K., schema logico.
Bit di carry e registro di stato.
Schemi di principio per l'espansione in parallelo e in serie. Tempi di risposta.
ES. Sommatore 74F283 4-bit binary full adder with fast carry
http://www.nxp.com/documents/data_sheet/74F283.pdf
ES. Si definisce half adder un sommatore senza riporto in ingresso.
Realizzare un full adder utilizzando half adder.
Se il sistema utilizza la rappresentazione dei numeri negativi in complemento a 2 (alla base 2) il full adder diventa un sommatore algebrico ( con segno ); la sottrazione si esegue sostituendo al sottraendo (sia positivo che negativo) il suo complemento a due e scartando il bit fuori rappresentazione.
L'utilità della rappresentazione dei numeri negativi in complemento alla base è basata sulla seguente osservazione:
Consideriamo il sistema di numerazione decimale a 2 cifre e scegliamo due numeri qualsiasi, ad es:
N1=85; N2=11
N1-N2=85-11=85-11+100-100= 85+(100-11)-100=N1+N2c-100; con N2c=100-11 detto complemento alla base del numero 11.
Quindi N1-N2=N1+N2c-100
Sottrarre 100 non è un problema: basta eliminare la 3 cifra che è fuori rappresentazione delle 2 cifre.
Se il calcolo di N2c è più semplice di una sottrazione (come avviene in base 2, ma non in base 10!) la sottrazione iniziale si può eseguire con un sommatore.
Si definisce complemento alla base di un numero X di n cifre la quantità: (base)n- X
Ritorniamo in base 2. E' fondamentale dichiarare preventivamente il numero di bit della rappresentazione, nei casi pratici 8, 16, 32...
Per semplicità supponiamo di utilizzare parole di 3 bit per rappresentare numeri relativi.
Segniamo in rosso la 4° cifra perchè non rientra nella rappresentazione
Es. rappresentare +3 e -3 in base 2.
3(10) = 011
-3(10) =1000-011=101
Per ottenere il complemento a due di un numero positivo, da 0 (000) a +3 (011), si esegue la differenza (2)3- X;
Es. +3=011; -3= 1000-011=101
Tuttavia si può procedere senza eseguire una differenza usando due metodi:
Metodo complicato da realizzare: a partire da destra, non si inverte fino al primo 1 compreso, i successivi bit si invertono
Es.
100001000
011111000
Metodo semplice da realizzare e usato nelle ALU: basta invertire tutti i bit e aggiungere 1; basta una porta NOT e porre a 1 il bit di carry iniziale.
Es.
100001000
011110111+
1=
------------------
011111000
Per la conversione da binario a decimale vale sempre la notazione polinomiale assegnando peso negativo al bit MSB:
110 = (-1)*22+(1)*21+0*20 = -4+2 = -2
100 = (-1)*22+(0)*21+0*20 = -4
011 = (0)*22+(1)*21+1*20 = 2+1 = +3
Si osserva che il bit più significativo rappresenta il segno, come nella rappresentazione in modulo e segno.
Ricomplementando un numero già complementato si ritorna alla configurazione positiva.
ll bit MSB di segno impone la dichiarazione preventiva del numero di cifre della rappresentazione. Ad es. con 3 bit 110 = -2, ma con 4 bit, aggiungendo zeri a sx, 0110=+6! Del resto nella pratica i micro hanno un numero ben definito di bit per ogni parola. Non è possibile svolgere esercizi che non dichiarano il numero di cifre.
Es. Considerando numeri con tre cifre, calcolare +1+ (-2); deve risultare -1; sostituendo i valori della tabella si ha:
+1 + (-2) = 001+110 = 111 ok
Es. Considerando numeri con tre cifre, calcolare -1+ (-1); deve risultare -2.
111+ 111 = 1110 = 110 ok; il 4° bit più significativo si elimina
Es.Considerando numeri con tre cifre, calcolare -1 - (-2); deve risultare +1.
111- 110 = 111+010 = 1001 ok; 010 è il complemento alla base di -2
Es. Considerando numeri con tre cifre, calcolare 0 - (-2); deve risultare +2.
000 - 110 = 000+010 = 010 ok;
Il microprocessore che riceve da tastiera un numero negativo, non memorizza la sua rappresentazione in binario naturale ma il suo complemento alla base.
Nel linguaggio C se si vuole utilizzare la rappresentazione senza complemento alla base, ad es. con 8 bit da 0 a 255, si può usare nella dichiarazione della variabile la parola chiave unsigned; altrimenti si possono avere numeri codificati da +127 a -128 (in totale 256 casi compreso lo zero).
Il problema è molto delicato nella trasmissione dei dati numerici a 8 bit (microcontrollori), che possono essere interpretati come caratteri (0-255) dai i vari protocolli seriali con le relative interfacce, RS232, bluetooth, USB nelle varie classi di emulazione..
In complemento a 2 il full adder si comporta da sommatore algebrico. Per realizzare la sottrazione (algebrica!) basta invertire i bit del sottraendo e aggiungere 1, tramite il carry iniziale ( il primo blocco non può essere un half adder).
Il codice operativo dell'istruzione,sottrazione o somma, deve agire su un multiplexer, per invertire o meno il sottraendo, e sul carry iniziale
OVERFLOW
Disponendo di un numero limitato di cifre è possibile che il risultato della somma superi il massimo valore rappresentabile.
In tal caso il risultato non accettabile è segnalato da un bit detto di overflow posto nel registro di stato del micro.
Si ha overflow se gli addendi hanno lo stesso segno e se il risultato ha segno opposto.
Es. verificare la regola precedente sommando -3 con -2 e considerando parole di tre bit.
101 +
110
_______
1011
Il risultato 011 non è accettabile in quanto di segno opposto agli operandi.
Si osserva che gli ultimi due riporti sono opposti: condizione di overflow!
Quindi per determinare la condizione di overflow basta una porta EX-OR.
Si sottolinea che la condizione di carry è indipendente da quella di overflow.
ALU
http://www.ti.com/lit/ds/symlink/sn74ls181.pdf
https://www.ti.com/lit/ds/symlink/sn54ls181.pdf?ts=1683292911131
E' un circuito combinatorio con:
due parole di ingresso, A e B, ognuna di n bit (ad es. 32)
un bit di carry di ingresso
una parola di uscita O di n bit
un numero k di selettori di ingresso (codice operativo) che stabiliscono quale operazione deve essere eseguita tra A e B
alcuni bit di uscita F (flag, registro di stato) come l'overflow e l'uguaglianza a zero.
Molto spesso la parola di uscita O, collegata ad un registro particolare detto accumulatore, ritorna indietro su A o B. Questo spiega la sintassi di alcune istruzioni assembler e l'impossibilità di altre istruzioni semplici da immaginare ma non disponibili.
L'architettura di una ALU può risultare abbastanza semplice se composta da n unità base che elaborano ciascuna un bit; ogni unità base è composta da un full adder ed alcune porte logiche elementari: il codice operativo agisce su un multiplexer che seleziona una delle possibili operazioni. L'unita base relativa al MSB deve calcolare anche l'overflow.
http://home.deib.polimi.it/silvano/FilePDF/ArchI/Rosti_ALU.pdf
Es.
Progettare una rete logica con:
due parole di ingresso A e B di 1 bit
nessun bit di carry in ingresso
due selettori S0 e S1 per realizzare And, OR, EX-OR, somma aritmetica
una parola di uscita O di 1 bit
tre flag in uscita: un bit di carry, un bit di uguaglianza, un bit di risultato nullo