Upload
ledat
View
246
Download
1
Embed Size (px)
Citation preview
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
1 / 55
FONDAMENTI DI INFORMATICA Prof. Lorenzo Mezzalira
Appunti del corso di Fondamenti di informatica
Fascicolo integrativo - 1 -
Rappresentazione e trasporto delle informazioni
Segnali Cifre binarie: bit Codifiche binarie Variabili, operatori e funzioni logiche Bistabili (flip-flop) Registri Contatori
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
2 / 55
Segnali e informazioni
Una trattazione formale e completa della teoria dell'informazione e della sua rappresentazione e
trasmissione mediante segnali, va oltre gli scopi di questa presentazione, che rimanda quindi i
lettori ad altri insegnamenti. Tuttavia si ritiene utile una serie di richiami dei concetti
fondamentali, con l’attenzione al punto di vista informatico ma con aperture interdisciplinari.
Cosa sono i segnali
I segnali sono grandezze fisiche utilizzate per rappresentare e trasportare informazioni.
Le informazioni di cui ci occupiamo qui, a loro volta, possono essere descrittive di fenomeni fisici
(ad esempio una temperatura, la velocità di rotazione di un motore, ecc.) o essere di tipo astratto
(ad es. valori numerici, caratteri di un testo, simboli, ecc.).
Ogni singolo segnale è prodotto da uno o più generatori, generalmente in mutua esclusione,
mentre può venire utilizzato da uno o più ricevitori anche contemporaneamente.
E' importante notare che il livello energetico delle grandezze fisiche che costituiscono i segnali è
solo connesso alla loro pratica utilizzabilità fisica in un determinato contesto, cioè deve essere
adeguato per il trasporto e per la percezione da parte dei riceventi, con adeguata insensibilità agli
agenti perturbanti (il classico rapporto “segnale/rumore”), ma che tale livello energetico non ha
ulteriore importanza concettuale.
Con i dispositivi elettronici i segnali sono generalmente costituiti da grandezze elettriche, ed in
particolare da tensioni o da correnti. Con i dispositivi a funzionalità intrinseca i segnali sono “attivi”
e stimolano il meccanismo di percezione dell’informazione, mentre con i dispositivi a funzionalità
programmata (i calcolatori) le informazioni dei segnali sono “lette” quando l’esecuzione del
programma incontra le istruzioni di acquisizione (lettura - input).
I segnali di tipo elettronico rendono economicamente possibili varie elaborazioni a bassi livelli
energetici e (quindi) ad elevate velocità e quindi nella maggior parte dei casi vengono utilizzati
segnali di questo tipo.
Un crescente interesse presentano anche i segnali luminosi, soprattutto grazie al continuo
progresso delle tecnologie di conversione da/verso grandezze elettriche (optoelettronica) e di
trasporto (fibre ottiche).
Si noti che sono interessanti i segnali più facilmente “convogliabili” verso una specifica
destinazione, ad esempio mediante conduttori o fibre ottiche.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
3 / 55
Come si rappresentano le informazioni
Per un corretto progetto di generazione e ricezione dei segnali occorre stabilire chiaramente quali
informazioni sono associate a quali caratteristiche del segnale.
Si sottolinea che il tipo di associazione tra informazioni e caratteristiche del segnale è convenzionale e, a priori, arbitrario.
Analizziamo ora l’importante ruolo dei segnali di rappresentare delle informazioni.
La rappresentazione è basata sulla corrispondenza tra caratteristiche di valore e temporali dei
segnali e le informazioni che essi rappresentano.
Le caratteristiche sono impresse per costruzione dal dispositivo generatore del segnale e ad esse
devono essere sensibili i dispositivi ricevitori. Queste caratteristiche sono il valore, l’andamento
temporale e gli eventi del segnale. L’informazione rappresentata può essere il valore, l’andamento
temporale o gli eventi di un fenomeno.
E’ molto importante notare che la costruzione di un segnale non deve necessariamente trasferire le informazioni
sulle caratteristiche omologhe, ma la corrispondenza può essere arbitraria, tecnologie permettendo.
Ad esempio un valore costante può essere rappresentato da un segnale a frequenza costante, un evento può essere
rappresentato da un segnale di determinata ampiezza, un andamento esponenziale può essere rappresentato da
un segnale che presenta una successione di eventi binari (trasmissione seriale) che codificano il valore
istantaneo e la costante di tempo, ecc. Occorre quindi chiaramente distinguere tra stati, andamenti ed eventi del
segnale e del fenomeno (cioè dell’informazione) da esso descritto.
La correlazione più spontanea tra informazione e segnale è quella che associa il valore
dell'informazione all'ampiezza del segnale, ma sono utilizzate anche altre correlazioni:
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
4 / 55
Segnali in “banda base”
Il valore dell’informazione da rappresentare può essere
Associato all’ampiezza del segnale – con segnali “a livello”
associato a una durata (durata = intervallo fra variazioni discordi del segnale) – con segnali “ad impulsi”
associato a un periodo (periodo = intervallo fra variazioni concordi del segnale) – con segnali “ad impulsi”
Segnali con “modulazione”, cioè trasposizione dei valori di informazione sui parametri di un andamento sinusoidale
S(t) = A sin (Wt + F)
valore associato all’ampiezza A – modulazione di ampiezza
valore associato alla frequenza W – modulazione di frequenza
valore associato alla fase F – modulazione di fase
E' importante notare che tutti i segnali fisici sono continui a tempo continuo se si adottano i
consueti modelli fisici ad energia cinetica / energia potenziale con grandezze finite, mentre non è
detto che siano di tipo continuo le informazioni ad essi associate.
La rappresentazione delle informazioni può infatti essere di tipo analogico o di tipo digitale, a
seconda che l'informazione sia associata biunivocamente al valore del segnale o sia associata al
particolare intervallo finito cui tale valore appartiene (v. nel seguito segnali analogici e digitali).
In altre parole l'attributo "analogico" o "digitale" non si riferisce a caratteristiche intrinseche del
segnale ma a caratteristiche di codifica dell'informazione da esso rappresentata, anche se in
genere si parla, per brevità, di segnali analogici e segnali digitali.
NOTA.
Si può avere un segnale digitale in ampiezza ma analogico in durata (oppure in periodo) e che quindi corrisponde ad uno stato discreto tempo-continuo. Questo è il caso tipico di molti segnali impulsivi.
Es. controllo di riscaldante a duty-cycle variabile.
DUTY-CYCLE => percentuale di tempo in cui un segnale digitale binario periodico ha un valore appartenente all'intervallo detto ON (attivo).
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
5 / 55
Note - Disturbi ed errori
Un tipico problema riguardo ai segnali è costituito dagli scostamenti rispetto al valore "ideale" a
causa di interferenze non volute di vari fenomeni fisici “disturbanti” con quelli utilizzati per la
generazione ed il trasporto dei segnali.
Questi scostamenti sono generalmente introdotti da:
scostamenti dei parametri dei dispositivi di generazione o conversione (dispositivi non ideali) rumore (disturbi) in sede di generazione del segnale o conversione da una forma ad un’altra
rumore in sede di propagazione del segnale (trasporto dell’informazione) e tipicamente danno luogo ad errori con componenti sistematiche e casuali sulle informazioni rappresentate.
Si tende generalmente a minimizzare l'entità dei disturbi all'origine, ma oltre un certo limite ciò non è
(economicamente) possibile.
Alcuni disturbi sono chiaramente distinguibili dalle informazioni significative adottando opportuni criteri,
generalmente basati sulla distinzione di bande di frequenza o in generale su caratteristiche temporali diverse tra
segnale e rumore.
I disturbi, o gli errori ad essi connessi, possono in questi casi essere eliminati o ridotti con tecniche circuitali (filtri) o
algoritmiche (filtraggio numerico o altre elaborazioni).
Nel caso di segnali digitali i disturbi che ne deformano il valore senza però portarlo a superare le
soglie dell'intervallo significativo di appartenenza, non producono errori nell'informazione
rappresentata. Quando invece i disturbi superano la soglia di margine di rumore (v. seguito -
segnali digitali) si hanno errori che entro certi limiti possono essere rilevati o anche corretti con
l’adozione di particolari codifiche (ad es. bit di parità, codifica Hamming, ecc.).
Segnali analogici
I segnali analogici rappresentano valori numerici reali.
Sono segnali in cui il valore dell’informazione rappresentata è una funzione continua (spesso
lineare) della grandezza assunta come significativa. Generalmente si assume la loro ampiezza, o
più raramente altri parametri (ad es. la frequenza). Il valore rappresentato corrisponde al valore
di grandezze fisiche (misure), o comunque di valori numerici (numeri reali), che possono
assumere tutti i valori in un certo intervallo finito.
Con i segnali analogici si rappresentano solo informazioni numeriche. Sequenze di informazioni
numeriche possono però essere utilizzate per generare suoni (vibrazioni) o immagini (intensità
luminose)
I segnali analogici sono generati da sensori o trasduttori che creano una corrispondenza tra la
grandezza fisica che è oggetto di informazione (ad esempio una temperatura da conoscere) e la
grandezza fisica, il segnale, che costituisce il veicolo di tale informazione (ad esempio una tensione
elettrica) (v. seguito)
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
6 / 55
Corrispondenza tra segnali analogici e le informazioni rappresentate
Per un buon progetto delle interfacce è molto importante conoscere in modo accurato la
corrispondenza tra valori del segnale e valori dell’informazione rappresentata, e i rispettivi
intervalli.
Le corrispondenze tra segnali e valori sono rappresentabili graficamente con segmenti o curve su
un piano cartesiano, come negli esempi seguenti. Sull’asse delle ascisse sono riportati i valori del
segnale che possono spaziare solo in un definito intervallo, mentre sull’asse delle ordinate sono
riportati i valori delle informazioni rappresentate.
Da un punto di vista informatico le corrispondenze vengono descritte con coefficienti di funzioni analitiche oppure
con tabelle (array di coordinate di punti).
Nelle figure seguenti sono rappresentate le corrispondenze tra segnale e valore rappresentato con
esempi di segnale lineare e non lineare. Il valore rappresentato è l’informazione costituita da un
numero reale. Il valore del segnale è costituito dalla sua caratteristica significativa, ad esempio
l’ampiezza, adottata per rappresentare l’informazione.
Valore del segnale
Valore rappresentato
Fondo scala
Intervallo di Valori
rappresentati
Inizio scala
Intervallo di valori del segnale
Fig. - Segnale lineare.
Valore del segnale
Valore rappresentato
Fondo scala
F.S.
Inizio scala
I.S.
Fig. - Segnale non lineare
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
7 / 55
Pregi dei segnali analogici I segnali analogici presentano vari interessanti aspetti positivi che in molti casi ne garantiscono la sopravvivenza anche
in ambienti sempre più invasi dalle tecnologie digitali.
I principali pregi dei segnali analogici sono:
- Esistono vari fenomeni che generano spontaneamente segnali analogici. (sensori, trasduttori). Le leggi della fisica
classica operano tipicamente nel “continuo”.
- Esistono vari dispositivi semplici, a funzionalità intrinseca, che sono in grado di interpretare e trasformare i segnali
analogici (amplificatori, trasduttori, attuatori).
- Anche nell'uomo è ben radicato il concetto di "continuo", che spesso è più consono alle attitudini umane.
- Eventuali perturbazioni deformano un segnale analogico, ma generalmente non lo stravolgono completamente, cioè
introducono, nel riconoscimento delle informazioni, errori percentualmente limitati e “proporzionali” all’entità del
disturbo.
- E' sufficiente un unico conduttore (ed eventuale ritorno) per trasmettere informazioni "ricche" (cioè appartenenti ad
un insieme ad elevata cardinalità), cioè per rappresentare idealmente gli infiniti valori numerici in un certo intervallo.
Difetti dei segnali analogici - I dispositivi di elaborazione dei segnali analogici sono relativamente poco precisi, poco stabili nel tempo e poco
immuni alle perturbazioni.
Volendo migliorare le loro caratteristiche in tal senso, il loro costo cresce molto rapidamente, ed in ogni caso piccoli
errori sono ineliminabili.
- Le trasformazioni eseguibili direttamente sui segnali analogici con i dispositivi sopra citati sono poco flessibili e si
riducono sostanzialmente a operazioni di somma algebrica e operazioni di tipo integro/differenziale.
- E’ molto difficile realizzare buone memorie permanenti di segnali analogici. I circuiti Sample & Hold sono
relativamente costosi e “perdono” gradualmente il valore analogico memorizzato.
- Ogni elaborazione dei segnali analogici produce un degrado della precisione, e ciò limita il numero di dispositivi
collegabili in cascata e quindi la complessità globale delle elaborazioni effettuabili.
- Nelle applicazioni in cui sono previsti strumenti informatici di elaborazione sono necessarie (relativamente costose)
tecniche di "conversione" (A/D analogico/digitale, e D/A digitale/analogico).
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
8 / 55
Segnali digitali
I segnali digitali rappresentano simboli. I valori numerici sono un caso particolare.
Per la rappresentazione di informazioni digitali (cioè dotate di un numero finito di valori)
mediante segnali viene creata una corrispondenza convenzionale tra i valori del segnale (o meglio
"fasce" di valori del segnale) e le informazioni rappresentate, che sono costituite da simboli di un
alfabeto finito.
Queste corrispondenze, descritte in forma grafica, assumono tipicamente una forma a scala, in
cui l’estensione orizzontale di ogni scalino rappresenta la fascia di valori del segnale che è
associata all’informazione digitale corrispondente all’ordinata dello scalino.
Valore del segnale
Valore rappresentato Significato (Simbolo)
A
Campo utile dei valori del segnale
B
C
Fig - Corrispondenza tra ampiezza e "significato" di un segnale digitale ternario.
In questo esempio viene presentato il caso ternario, cioè di segnale che con tre intervalli (fasce) di
valori della grandezza fisica può rappresentare tre valori dell’informazione contrassegnati in
questo esempio dai simboli A, B, C).
Il caso binario (informazioni a due valori) che è il più usato negli attuali sistemi digitali, viene
presentato più a fondo nel seguito.
CODIFICHE
Poichè per motivi di semplicità costruttiva e di sfruttamento dei segnali si adotta normalmente un
numero estremamente limitato di intervalli, cioè un alfabeto a cardinalità (pari a 2 nel caso
binario) troppo bassa per molte applicazioni, si assume in generale la seguente impostazione:
CODIFICA => corrispondenza significato <=> simbolo
ogni simbolo è rappresentato da una successione di cifre (digit)
ogni cifra è rappresentata da un segnale “digitale”
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
9 / 55
Ciò implica che informazioni caratterizzate da una certa ricchezza di valori richiedono vari (talora
anche numerosi) segnali (cioè cifre) per la loro rappresentazione, come dalla seguente nota
relazione:
N = logbaseD (S)
N = ceiling (log base D (S)) S <= DN
dove N = n. segnali utilizzati per un’informazione, cioè n. di cifre (n. di bit) D = cardinalità delle cifre (n. valori assumibili da una cifra) S = cardinalità dell'alfabeto dei simboli (n. informazioni rappresentabili)
Quindi a seconda della cardinalità (S) dell’insieme di valori dell’informazione da rappresentare con una certa variabile, quest’ultima dovrà essere composta da un opportuno numero di bit maggiore o uguale al numero (N) indicato dalla relazione precedente. Ceiling(x) significa
L’operatore ceiling(x) = x rappresenta il minimo intero >= X (“intero non inferiore al valore(x)”) Pensando ad una variabile come “contenitore” il numero di bit di cui è composta ne determina la “capienza”, che ovviamente dovrà essere adeguata alla cardinalità dei valori assegnabili alla variabile stessa, cioè a quanti diversi valori di informazioni dovranno poter essere di volta in volta assegnati alla variabile.
Segnali digitali binari Sono caratterizzati da due fasce di valori (alto e basso), spesso chiamati H (High) e L (Low) a cui
sono convenzionalmente associati i significati:
Logica positiva H = 1 = TRUE = ON
L = 0 = FALSE = OFF
Logica negativa H = 0 = FALSE = OFF
L = 1 = TRUE = ON
NOTA
H, L fanno riferimento ai valori elettrici.
0, 1 sono valori numerici, ma per brevità usati anche in senso logico.
TRUE, FALSE sono valori di verità logica.
ON, OFF sono usati nel gergo dell’automazione per indicare attivazione (ON) o disattivazione (OFF) di dispositivi.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
10 / 55
Notiamo che un confine netto tra le fasce di valori del segnale associate a diversi simboli digitali è significativo solo
concettualmente. Infatti i dispositivi fisici, per tutta una serie di motivi, presenteranno sempre una, sia pur ristretta,
fascia di incertezza tra le fasce che sono chiaramente attribuite a valori di informazione. Di tali fasce di incertezza
occorre tener conto per un’analisi del funzionamento di tali dispositivi. Nella figura tale fascia di incertezza
corrisponde all’intervallo di valori del segnale indicato col punto interrogativo.
La rappresentazione della tipica corrispondenza tra valori H e L e valori del segnale binario è
rappresentata nella fig. seguente. La fascia di valori contrassegnata con il “?” corrisponde
all’intervallo di indeterminazione.
Valore del segnale
Valore rappresentato
L
Campo utile dei valori del segnale
H
?
Fig. - Caratteristica Ampiezza / valore di segnale binario
Nell'intervallo di indeterminazione si accetta che il valore rappresentato non sia precisato a priori.
Si noti bene che non si tratta di un terzo valore del digit rappresentato, ma di un intervallo in cui non è
specificato a priori quale dei due valori di informazione verrà di fatto attribuito al segnale dal particolare
dispositivo ricevente.
E’ molto importante notare che non si tratta di un fenomeno di isteresi. Si ricordi infatti che l’isteresi si riferisce a
diversi comportamenti dei dispositivi in corrispondenza a diversi sensi di variazione dei segnali. Naturalmente per
alcuni dispositivi, come ad esempio i circuiti trigger di Schmitt, si ha un (voluto) fenomeno di isteresi oltre ad avere
una fascia di indeterminazione.
Valori tipici di segnali digitali
Per i segnali digitali si hanno diverse specifiche dei valori prodotti in uscita e dei valori accettati in
ingresso. In particolare si specificano le fasce di valori garantiti in uscita (nelle condizioni di carico
previste) e valori richiesti in ingresso per una corretta interpretazione. Ovviamente la condizione
favorevole, e quindi perseguita nei progetti dei circuiti elettronici digitali, è quella in cui le fasce di
valori garantiti in uscita sono strettamente contenute nelle fasce dei valori richiesti in ingresso.
Per margine di rumore si intende il massimo scostamento, rispetto ai valori di segnale garantiti in
uscita dal circuito generatore, che rientra ancora nella fascia di corretta interpretazione del
segnale in ingresso nel circuito ricevitore.
Il margine di rumore è quindi una proprietà di una coppia ordinata di circuiti generatore e
ricevitore. In genere il margine di rumore viene specificato dal costruttore dei circuiti, rispetto a
qualunque coppia di circuiti della stessa famiglia e quindi omogenei tra loro nelle specifiche
elettriche rispettivamente sugli ingressi e sulle uscite.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
11 / 55
Valore del segnale
Volt
Valore rappresentato
L
Margine di rumore L
H
?
GuH RiH
GuL RiL
Margine di rumore H
Fig. - Margini di rumore per i valori L e H di un segnale digitale binario.
GuL = max valore L garantito in uscita VOLmax
RiL = max valore L richiesto in ingresso VILmax
GuH = min valore H garantito in uscita VOHmin
RiH = min valore H richiesto in ingresso VIHmin
NOTE
Varie famiglie di circuiti digitali presentano una dissimmetria tra i margini di rumore rispetto al livello alto (H) e al livello basso (L), come pure una dissimmetria nel valore di impedenza d’uscita per i due livelli H e L.
La sensibilità ai disturbi elettromagnetici indotti è crescente con l’impedenza d’uscita del circuito generatore.
La robustezza rispetto a fenomeni disturbanti risulta dalla sovrapposizione dei due aspetti appena citati (margine di rumore e impedenza), che possono anche compensarsi se al livello con minore margine di rumore corrisponde un’impedenza d’uscita più bassa che rende tale livello meno perturbabile.
Le caratteristiche appena discusse devono essere tenute presenti nella scelta del significato da attribuire ai due valori (H e L), in modo da adottare il livello più robusto per asserire il valore più critico, scegliendo tra logica positiva o negativa.
NOTA
Perchè segnali a due valori invece che a tanti valori ?
Semplicità circuitale (conduzione/interdizione) anche con una sola tensione di alimentazione.
Mappaggio immediato dei due valori sulla logica vero/falso.
La base "e" (e = 2.71828) minimizza il prodotto Ncif*Base.
Se assumiamo come "costo" della rappresentazione di un'informazione il prodotto del numero di cifre (digit) necessarie moltiplicato per la cardinalità delle cifre (che è un indice della loro "complessità"), il costo associato alla rappresentazione del valore numerico K mediante cifre in base x è esprimibile da:
logx (K) * x
dove logx (K) rappresenta il numero di cifre richieste per rappresentare l’informazione.
Per trovare la base x che minimizza tale costo passiamo ai logaritmi naturali (base e):
logx (K) * x = x * ln(K) / ln(x)
la cui derivata è:
ln(K) * (1/ln(x) + x * ((-1/x) * (1/ln(x)) exp 2)
che si annulla per ln(x) = 1 quindi per x = e
Con questa impostazione le basi intere ottimali sono 2 e 3.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
12 / 55
Pregi dei segnali digitali
I numerosi ed interessanti pregi dei segnali digitali (soprattutto binari) sono alla base della ben
nota evoluzione (o rivoluzione) elettronica ed informatica. Citiamo brevemente i principali:
Possibilità di rappresentare con esattezza e senza incertezza configurazioni di un alfabeto finito. L’aumento della precisione (cardinalità dell’alfabeto) ha un costo (numero di bit necessari) crescente solo con il logaritmo della cardinalità.
Semplicità e robustezza dei circuiti di generazione e riconoscimento dei segnali.
Elevata immunità ai disturbi (consente la rappresentazione esatta con elevata probabilità).
Semplicità dei circuiti di memoria (bistabili).
Semplicità dei circuiti per semplici elaborazioni.
Realizzabilità di elaborazioni complesse con (elevato) numero di circuiti semplici, senza degrado (v. eccezioni) della precisione dei risultati, grazie all'effetto di rigenerazione consentito dai margini di rumore dei circuiti digitali.
Difetti dei segnali digitali
I difetti dei segnali digitali sono, come è spontaneo pensare, complementari ai pregi dei segnali
analogici. Su questi punti vanno quindi effettuate attente analisi quando si debba decidere per
l'una o l'altra forma.
Gli errori possono colpire indifferentemente i bit meno significativi (LSB) o (purtroppo!) i più significativi (MSB)
Gli errori possono quindi "stravolgere" l'informazione (corollario del punto precedente).
L'interpretazione del valore è poco "immediata" (passa attraverso una codifica).
Occorrono vari bit (in parallelo o in sequenza temporale) per rappresentare informazioni "ricche".
Con bit in parallelo si hanno problemi di commutazioni non contemporanee (corse critiche), da cui l’uso di codice Gray.
Si ha la necessità di conversione (A/D = Analogico-Digitale) nei numerosi casi di informazioni che sono intrinsecamente continue, accettando i costi e gli errori di quantizzazione di tale conversione.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
13 / 55
Rappresentazione delle informazioni con segnali digitali binari
La grandezza fisica che si utilizza (segnale elettrico di tensione) assume solo valori in due fasce discrete
(binaria)
H
L
Segnale (volt)0 5valori accettati
valori emessi
Informazione
Valori binari
L’elemento tecnologico base per la realizzazione di circuiti digitali è il transistore il cui funzionamento può essere modellato (in modo molto semplificato) come il funzionamento di un interruttore (aperto o chiuso), quindi con due stati fisici, cui corrispondono 2 opportune tensioni (in genere 0V e 5V)..
BIT (binary digit) = cifra binaria. (unità di informazione elementare)
Un bit può assumere due valori che possono essere associati ai simboli:
L(ow) H(igh) aspetto fisico del segnale
0 1 aspetto aritmetico
false true aspetto logico
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
14 / 55
Codifiche binarie
Con N bit si hanno M = 2N configurazioni diverse (simboli).
Un’informazione di un certo tipo è rappresentabile da una sequenza (configurazione) di bit (cifre).
Quanti sono i valori distinti rappresentabili di un certo tipo di informazioni?
se sono disponibili N cifre binarie si possono avere 2N configurazioni diverse e quindi rappresentare al più 2N valori distinti dell’informazione
Tra M informazioni e le (o un sottoinsieme delle) configurazioni di N bit si può creare
una convenzionale corrispondenza biunivoca, detta codifica.
Una codifica è un insieme di regole per costruire e interpretare la sequenza di cifre
– nel caso in esame cifre binarie, cioè bit – che rappresenta l’informazione di un
dato tipo (caratteri, numeri interi, ecc.)
corrispondenza biunivoca tra
rappresentazione (i bit) dell’informazione e
significato (valore) dell’informazione
codifica
RAPPRESENTAZIONE SIGNIFICATO
Corrispondenza:
è definita in modo arbitrario (è una convenzione) ma deve essere nota e sempre rispettata da chi
genera e da chi utilizza le informazioni. Vengono quindi in genere definite delle codifiche
standard.
L'arbitrarietà della scelta convenzionale di codifica viene di solito sfruttata per godere di proprietà utili, quali:
- facilità di operazioni aritmetiche tra numeri (codifica pesata e complemento a 2) - ordinamento alfabetico tra le lettere (codifica ASCII) - ordinamenti naturali delle informazioni (codifiche enumerative) - raggruppamenti naturali delle informazioni (significato dei singoli bit o di gruppi) - facilità di conversione in base 10 (codifica BCD) - proprietà di simboli contigui (codifica Gray) - riconoscimento e correzione di alcuni errori (codifica Hamming)
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
15 / 55
La corrispondenza, una volta decisa, va scrupolosamente rispettata tra il produttore dell’informazione che è generatore del codice (codificatore) e il destinatario dell’informazione che è interpretatore del codice (decodificatore) se si vuole che quest’ultimo sia in grado di ricostruire correttamente le informazioni. Le informazioni che consideriamo sono destinate ad essere rappresentate ed elaborate da macchine (calcolatori elettronici).
Aspetto fondamentale:
il numero di elementi “fisici” (elementi di memoria, collegamenti ....) disponibile per
supportare i segnali, cioè per contenere e comunicare la rappresentazione di ogni tipo di
informazione, è finito.
Poichè ogni singolo elemento fisico “contiene” il valore di una cifra binaria, in ogni componente di
un calcolatore il numero di cifre binarie disponibili per rappresentare l’informazione è finito.
Quindi il numero di valori distinti rappresentabili per ogni informazione è finito.
Nasce quindi il concetto di non rappresentabilità di valori di informazioni che richiedono un
numero di cifre maggiore di quelle disponibili.
NOTA – il concetto di tipo di informazione, che è un concetto fondamentale della rappresentazione delle informazioni e quindi della programmazione, si riferisce al numero di bit adottati e alla codifica adottata per rappresentare i valori di quell’informazione.
Categorie di informazioni da rappresentare
Possiamo classificare le informazioni in enumerative e numeriche (quantitative)
- Informazioni enumerative Alle diverse informazioni sono associate diverse configurazioni di N bit, che in genere possono
anche essere interpretate come numeri interi.
Caratteristiche delle informazioni enumerative:
Numerabili (associabili a un sottoinsieme dei numeri naturali)
non numeriche
l’ordine di enumerazione è significativo: può denotare delle proprietà tra le informazioni e consentire delle operazioni (ad es. confronto) tra le informazioni
Esempi di informazioni enumerative:
Caratteri ASCII Si utilizzano 7 bit per rappresentare tutti i caratteri di stampa oltre ad un certo numero di caratteri di controllo (8 bit per ASCII esteso)
Colori dell’arcobaleno: 7 colori 3 bit e quindi 8 possibili configurazioni distinte
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
16 / 55
scelta della corrispondenza (arbitraria, ma si può preservare la posizione nell’arcobaleno, cioè l’ordine per frequenze della luce crescenti)
la configurazione libera disponibile può venire usata per rappresentare il “non colore” (nero)
significato codifica
nero 000 Questa tabella riporta
rosso 001 una possibile (non standard)
arancio 010 codifica binaria dei 7 colori.
giallo 011
verde 100
azzurro 101
indaco 110
violetto 111
Le istruzioni macchina di un calcolatore Le istruzioni macchina costituiscono una delle più importanti informazioni di tipo enumerativo che vanno, ovviamente, rappresentate in forma binaria per poter essere memorizzate nella memoria di lavoro ed utilizzate nel calcolatore. La codifica delle istruzioni macchina è generalmente diversa per i vari modelli di calcolatori.
Giorni della settimana
Mesi dell’anno
Note musicali .....
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
17 / 55
Informazioni enumerative: caratteri alfanumerici
I caratteri alfanumerici ci consentono di rappresentare tutte le informazioni “scrivibili” (e, con
qualche difficoltà, anche immagini, suoni, sensazioni, ecc.).
Si tratta quindi di una codifica molto importante ed utilizzata.
Con questa codifica si devono rappresentare:
lettere maiuscole/minuscole A a .. Z z
spazio
cifre decimali 0 .... 9
segni di interpunzione , : ; .
simboli di stampa ! “ # % @ ) < =
caratteri di controllo per gestire la visualizzazione, la stampa, la trasmissione dei caratteri (fine riga, salto di riga, salto pagina, inizio messaggio ....)
La rappresentazione dei caratteri alfanumerici fa uso di una codifica standard
universalmente accettata: codifica ASCII (American Standard Code for Information
Interchange)
La codifica ASCII è la codifica ufficiale per i caratteri nel linguaggio C
Codifica ASCII: caratteristiche
7 bit per rappresentare ogni carattere quindi si possono rappresentare 128 caratteri alfanumerici distinti: le possibili configurazioni vanno da 0000000 a 1111111
Generalmente si usa un byte (8 bit) per rappresentare un carattere, lasciando a zero il bit più significativo.
la codifica è stata scelta in modo da rispettare alcune “proprietà” dei caratteri:
ordinamento del valore numerico delle cifre
ordinamento alfabetico delle lettere introduce le seguenti ulteriori proprietà:
le lettere maiuscole precedono tutte le lettere minuscole
la “distanza” (differenza tra i valori interpretati numericamente) tra una lettera maiuscola e la sua corrispondente minuscola è la stessa per tutte le lettere e vale 3210
ASCII esteso (8 bit) 256 configurazioni:
le prime 128 (da 00000000 a 01111111) sono associate ai caratteri dell’ASCII Standard, le rimanenti
128 (da 10000000 a 11111111) sono associate a lettere accentate..., a caratteri semigrafici ...
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
18 / 55
Tabella della codifica ASCII dei caratteri alfanumerici
bit meno significativi
bit più significativi
000 001 010 011 100 101 110 111
0000 NUL DLE SP32 0 48 @ 64 P 80 ` 96 p 112
0001 SOH DC1 ! 33 1 49 A 65 Q 81 a 97 q 113
0010 STX DC2 “ 34 2 50 B 66 R 82 b 98 r 114
0011 ETX DC3 # 35 3 51 C 67 S 83 c 99 s 115
0100 EOT DC4 $ 36 4 52 D 68 T 84 d 100 t 116
0101 ENQ NAK % 37 5 53 E 69 U 85 e 101 u 117
0110 ACK SYN & 38 6 54 F 70 V 86 f 102 v 118
0111 BEL ETB ’ 39 7 55 G 71 W 87 g 103 w 119
1000 BS CAN ( 40 8 56 H 72 X 88 h 104 x 120
1001 HT EM ) 41 9 57 I 73 Y 89 i 105 y 121
1010 LF SUB * 42 : 58 J 74 Z 90 j 106 z 122
1011 VT ESC + 43 ; 59 K 75 [ 91 k 107 { 123
1100 FF FS , 44 < 60 L 76 \ 92 l 108 | 124
1101 CR GS – 45 = 61 M 77 ] 93 m 109 } 125
1110 SO RS . 46 > 62 N 78 ^ 94 n 110 ~ 126
1111 SI US / 47 ? 63 O 79 – 95 o 111 DEL
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
19 / 55
N.B.
I valori numerici in piccolo sono il valore decimale corrispondente al codice ASCII (interpretato
numericamente)
La codifica ASCII di un carattere nella tabella è ottenuta prendendo i 3 bit corrispondenti alla
colonna, seguiti dai 4 bit corrispondenti alla riga (questi gruppi di bit sono anche facilmente
associabili a cifre esadecimali - v.seguito).
E’ molto importante aver chiara la differenza tra l’informazione costituita da una cifra (intesa
come carattere) e l’informazione numerica (valore numerico) rappresentata da una (o più) cifra.
Cioè le cifre sono caratteri alfanumerici, come tali codificati in ASCII, che rappresentano valori
numerici che possono essere rappresentati con le codifiche numeriche presentate nel seguito.
Esempio
La cifra 5 è rappresentata su un byte con 0011 0101 (ASCII)
il numero 5 con 0000 0101 (binario pesato, vedi seguito)
Esempi di codifica ASCII:
il carattere B è codificato con 100 0010 e il carattere b (minuscolo) con 110 0010
la cifra 1 è codificata con 011 0001 – qui è considerata come un carattere di stampa.
Lo spazio SP è codificato con 010 0000
Il CR detto anche Carriage Return, o Enter, o Invio è codificato con 000 1101
Codifiche di valori numerici
Caratteristiche:
devono consentire di rappresentare in modo “adeguato” gli insiemi della matematica (naturali, interi, razionali, reali)
codificano dei sottoinsiemi di alcuni degli insiemi della matematica del punto precedente
devono essere possibili tutte le operazioni della matematica (e, almeno quelle fondamentali, devono essere facili da realizzare con dei circuiti)
Codifiche numeriche a granularità costante
Le codifiche numeriche seguenti presentano una risoluzione (granularità) costante in valore assoluto, in
tutto il campo di valori rappresentati.
Il campo di valori rappresentabili costituisce un sottoinsieme dei numeri della matematica.
I numeri interi presentano, ovviamente, granularità pari ad una unità.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
20 / 55
Codifica di numeri naturali binario puro (codifica pesata) corrisponde alla rappresentazione in base 2, dove ogni cifra è rappresentata da un bit. Il valore P è dato da: P2 = bN-1 2N-1+ bN-2 2N-2+......+ b2 22+ b1 21+ b0 20
Cioè ogni bit ha un peso dato dalla potenza di 2 (la base) elevato ad un esponente corrispondente
alla posizione del bit nell’ambito del numero.
bit più significativo: bN-1 bit meno significativo: b0
Questa è la codifica standard del linguaggio C per i tipi unsigned (unsigned int
unsigned long) e si basa sulla notazione posizionale o “pesata” che adottiamo usualmente
anche per i numeri codificati in decimale e che ha la proprietà di facilitare l’esecuzione delle
operazioni aritmetiche. I motivi di questa facilitazione nelle operazioni sono esattamente gli stessi
di altre rappresentazioni pesate, come ad esempio quella decimale usuale cui siamo abituati, e
cioè la possibilità di trattare separatamente le cifre di un dato peso da quelle di peso superiore,
eventualmente propagando il semplice riporto. E’ facile osservare che con rappresentazioni non
pesate, come ad esempio quella dei numeri “romani” ciò non è possibile.
Quella pesata è la codifica tipica dei tipi unsigned, del C, per cui vale l’interessante proprietà:
siano V1, V2 e D valori interi rappresentabili con N bit, cioè minori di 2N
Es. N=8 bit, V1=250, D=16, V2=10
ADD (X, Y) e SUB (X, Y) siano le istruzioni assembler di somma e sottrazione
se V2 = ADD (V1, D) eventualmente anche con overflow,
allora D = SUB (V2, V1)
Questa proprietà consente di usare un normale contatore (unsigned) e calcolare la differenza D tra le letture V2 e V1, indipendentemente dall’overflow del contatore.
Nella notazione pesata posizionale, in qualunque base, il valore numerico rappresentato da una
cifra dipende
dal valore della cifra
dalla posizione della cifra nel numero, con peso dato dalla base elevata alla potenza con esponente pari alla posizione.
Esempio in base 10 P10= 12110 = 1102+2101+1100
Data una base B e un numero di cifre disponibili N i numeri naturali P (interi 0)
rappresentabili sono
0 P BN-1
Ad esempio in base 2 se il numero di bit disponibili è N=3
i valori numerici rappresentabili sono
0 P 23-1 cioè 0 P 7
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
21 / 55
Esempi con N = 3 bit
decimale binario valore
0 000 0 *22+0 *21+0 *20
1 001 0 *22+0 *21+1 *20
2 010 0 *22+1 *21+0 *20
3 011 0 *22+1 *21+1 *20
4 100 1 *22+0 *21+0 *20
5 101 1 *22+0 *21+1 *20
6 110 1 *22+1 *21+0 *20
7 111 1 *22+1 *21+1 *20
Esempio:
numero di bit disponibili N=5 i valori numerici P rappresentabili sono
0 P 25-1 cioè 0 P 31
decimale binario valore
0 00000 0* 24+0* 23+0* 22+0* 21+0* 20
1 00001 0* 24+0* 23+0* 22+0* 21+1* 20
2 00010 0* 24+0* 23+0* 22+1* 21+0* 20
..... ......
7 00111 0* 24+0* 23+1* 22+1* 21+1* 20
8 01000 0* 24+1* 23+0* 22+0* 21+0* 20
..... ......
15 01111 0* 24+1* 23+1* 22+1* 21+1* 20
16 10000 1* 24+0* 23+0* 22+0* 21+0* 20
..... ......
30 11110 1* 24+1* 23+1* 22+1* 21+0* 20
31 11111 1* 24+1* 23+1* 22+1* 21+1* 20
Nella tabella sono riportati solo alcuni dei valori codificabili con 5 bit, ed in particolare sono
indicati alcuni valori consecutivi che presentano una codifica in cui molti bit “commutano”, come
ad esempio nel passaggio dal valore 15 al valore 16.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
22 / 55
Gli zeri davanti “non contano” ma ci devono essere.
Siamo abituati a non scrivere gli zeri non significativi, lasciandoli impliciti. Invece i segnali fisici previsti sono sempre presenti e possono solo indicare i valori 0 o 1 per tutti i bit usati per rappresentare un valore numerico, e non possono “sparire”. Per ogni dato tipo di informazioni si adotta un numero fisso di bit, che deve essere stabilito a priori per quel tipo di informazioni, e non una quantità di bit che dipende dal valore di volta in volta rappresentato. Potenze di 2 da sapere a memoria o saper ricavare rapidamente:
N=6 26 = 64
N=7 27 = 128
N=8 28 = 256
N=10 210 = 1024 (1 K)
N=16 216 = 26210 = 65536 64.000 (64 K)
N=32 232 = 22210 210 210 4.000.000.000 (4 G)
E’ opportuno ricordare che i campi di valori interi naturali rappresentabili con codifica binaria pesata sono:
8 bit 0 . . 255
10 bit 0 . . 1023 1 K
12 bit 0 . . 4095 4 K
16 bit 0 . . 65535 64 K
20 bit 0 . . circa 1 milione 1 M
30 bit 0 . . circa 1 miliardo 1 G
32 bit 0 . . circa 4 miliardi
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
23 / 55
Codifica esadecimale (HEX)
E’ la codifica pesata dei numeri naturali in base B=16, sono quindi previste 16 cifre
diverse. Vengono usate le usuali cifre 0 .. 9 e poi le lettere A, B, C, D, E, F
NOTA – La codifica esadecimale non è, ovviamente, una codifica binaria, e non è
utilizzata all’interno dei calcolatori. Come la codifica decimale può essere usata
nell’ambito di programmi e di documenti in genere. Qui le cifre sono codificate
come caratteri in codice ASCII ed è solo la traduzione del programma in codice
macchina eseguibile che trasforma i numeri decimali ed esadecimali in codifica
binaria pesata.
valore cifra
hex
binario
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111
La comodità della rappresentazione HEX sta nella
facilità di conversione in binario e viceversa:
ogni gruppo di 4 bit corrisponde direttamente ad
una cifra HEX, come nella tabella accanto.
ESEMPIO
binario 0110 1001 1101 0100
HEX 6 9 D 4
Generalmente si premette uno “0” iniziale e una
“h” finale.
cioè 069D4h
oppure, nel linguaggio C si premette 0x
cioè 0x69d4
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
24 / 55
Il valore di un generico numero rappresentato in esadecimale si ottiene dalla
relazione (dove N rappresenta il numero di cifre esadecimali):
P16=bN-1 16N-1+bN-2 16N-2+......+b2 162+b1 161+b0 160
Cioè la normale rappresentazione pesata in base 16
Nella documentazione tecnica di calcolatori ed in generale di circuiti logici occorre
spesso citare delle configurazioni binarie (codifiche, indirizzi, ecc.).
Sequenze di 16 o 32 bit rappresentati con “1” e “0” sono, per l’uomo, scomode da
gestire e difficili da ricordare.
Si ricorre quindi generalmente alla rappresentazione esadecimale (HEX) che è più
compatta di quella binaria equivalente. In particolare la forma HEX è usata spesso
nel linguaggio Assembler.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
25 / 55
Numeri naturali Codifica Gray
Questa codifica è caratterizzata dalla seguente proprietà:
dato un valore numerico da rappresentare
la sua rappresentazione è diversa per il valore di una sola cifra (distanza di Hamming = 1) dalla rappresentazione del valore numerico precedente e dalla rappresentazione del valore numerico successivo. Cioè passando da un valore al successivo (o precedente) commuta un solo bit.
Decimale Codifica Gray
0 000
1 001
2 011
3 010 Esempio di codifica Gray
4 110 con 3 bit
5 111
6 101
7 100
Utile per rappresentare senza incertezze, con segnali fisici, dei valori numerici che nel tempo si incrementano e decrementano, evitando di richiedere le commutazioni di più di un bit alla volta, che potrebbero verificarsi non contemporaneamente. Si noti infatti che nella codifica pesata il passaggio da un valore (es. 7 = 0111) al successivo (es. 8 =1000) può comportare la commutazione anche di numerosi bit. Durante l’intervallo di tempo in cui alcuni bit sono già commutati ma altri devono ancora commutare si hanno configurazioni anche drasticamente non significative che, se memorizzate, darebbero luogo ad errori anche grossolani. Questa codifica Gray è usata in applicazioni di automazione industriale. Il codice Gray è detto anche codice riflesso perchè, come è facile notare la seconda metà della tabella presenta il primo bit a 1 ed i successivi bit con configurazioni speculari rispetto a quelle della prima metà tabella. Da questa osservazione si ricava anche un procedimento per la generazione di una tabella Gray di 2M righe a partire da una tabella data di M righe: si antepone uno 0 alle prime M configurazioni e le successive M configurazioni presenteranno un 1 seguito da configurazioni speculari rispetto alle precedenti.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
26 / 55
Codifica di numeri naturali Codifica BCD (Binary Coded Decimal)
Con questa codifica si utilizza un gruppo di 4 bit (detto anche nibble) per rappresentare in binario
puro una cifra decimale (Binary Coded Decimal).
Usata talora nelle interfacce con dispositivi di gestione o visualizzazione di cifre decimali, oppure
per eseguire calcoli in “decimale”, in cui ad esempio 1/10 non è periodico come sarebbe invece in
base 2.
Poichè le cifre decimali vanno da 0 a 9, il valore numerico massimo da rappresentare in binario è 9: sono quindi necessari 4 bit per ogni cifra decimale. Le 6 configurazioni rimanenti dei 4 bit non sono utilizzate.
Cifra decimale Codifica BCD
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001 Ad esempio: il valore decimale 1429 è codificato come 0001 0100 0010 1001 1 4 2 9 Questa codifica ha la proprietà di rendere facile la conversione con i numeri rappresentati in base dieci. Richiede circuiti un po’ più complessi per l’esecuzione delle operazioni aritmetiche. Non sfrutta tutte le combinazioni dei bit. Ad es. con 12 bit binario puro 0 – 4095
con 12 bit BCD 0 – 999 Nota – Si tratta di una codifica pesata “doppia”, che inserisce cioè i bit pesati con potenze di 2 nei nibble a loro volta pesati con potenze di 10.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
27 / 55
Conversione della rappresentazione pesata
Conversione =
passaggio dalla rappresentazione pesata di un numero naturale da una base b1 ad una
base b2.
Le regole di conversione si basano:
sull’uguaglianza dei valori numerici, cioè indipendentemente dalla base di rappresentazione il valore del numero deve essere lo stesso
sul concetto di notazione pesata, cioè con peso delle cifre dato da potenze della base
Consideriamo i casi di conversione da binario a decimale e da decimale a binario di numeri naturali
Conversione binario → decimale (numeri naturali):
è molto semplice se si ricorda il significato di rappresentazione posizionale pesata
P2=111102 = 124+123+122+121+020
= 16 + 8 + 4 + 2 + 0 = 3010
Conversione decimale → binario di numeri naturali
La rappresentazione di un valore numerico in codifica binaria pesata può essere trovata con un
procedimento (algoritmo) che permette di calcolare i bit a partire dal meno significativo al più
significativo.
Esempio: Algoritmo, descritto con pseudocodice, di conversione in binario del numero intero
decimale VALORE:
Inizio algoritmo V = VALORE n = 0 Ripetere il ciclo finchè V > 0
Bn = resto divisione intera (V/2) V = risultato divisione intera (V/2) Incrementa n di 1
Fine ciclo Fine algoritmo
Bn sono i bit della rappresentazione binaria pesata del numero decimale VALORE.
Il numero di iterazioni necessarie per arrivare al termine del procedimento determina il numero
minimo di bit necessari per rappresentare quel particolare numero in codifica binaria pesata.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
28 / 55
Si ricordi che in generale il numero di bit disponibili è prefissato da aspetti costruttivi del sistema
digitale usato.
Se i bit disponibili non sono in quantità sufficiente il valore dato non è rappresentabile in binario
con quel numero di bit.
Se i bit sono in quantità maggiore di quelli necessari, gli eventuali bit più significativi eccedenti
assumono il valore 0.
Esempio: convertire in base 2 il numero decimale 37.
V 37 B0 1
V 18 B1 0
V 9 B2 1
V 4 B3 0
V 2 B4 0
V 1 B5 1
V 0
3710 = 1001012 rappresentazione col numero minimo di bit
La rappresentazione con 8 bit (un byte) è
3710 = 001001012
Nell’esempio, il numero minimo di bit è 6. B5 rappresenta il bit più significativo.
Si noti che continuando il procedimento si otterrebbero (correttamente) degli 0 nelle posizioni più significative. Quindi l’algoritmo di conversione adatto al caso di numero prefissato NB di bit potrebbe essere: Inizio algoritmo V = VALORE n = 0 Ripetere il ciclo finchè n < NB
Bn = resto divisione intera (V/2) V = risultato divisione intera (V/2) Incrementa n di 1
Fine ciclo Se V > 0 allora VALORE non è rappresentabile con NB bit (OVERFLOW)
Fine algoritmo
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
29 / 55
Operazioni aritmetiche tra naturali in notazione posizionale
Le operazioni aritmetiche in base 2 seguono le stesse “regole” di quelle in base 10.
E’ fondamentale ricordarsi del problema della rappresentabilità dell’informazione con un numero di bit predefinito.
Ad esempio, nel caso di addizione di due interi rappresentati su N bit, il risultato della somma
può richiedere N+1 bit (overflow = traboccamento, o superamento) e quindi non essere
rappresentabile con i soli N bit.
I circuiti per eseguire le operazioni aritmetiche in notazione posizionale sono molto semplici perchè il peso “posizionale” consente di trattare le varie posizioni una dopo l’altra, come siamo abituati a fare anche con la rappresentazione decimale.
Questo è il notevole vantaggio della codifica posizionale.
Esempio: tabella della somma aritmetica su un bit.
Come nella rappresentazione decimale esiste il riporto verso la cifra più
significativa (indicato tra parentesi).
La tabella viene di seguito presentata in due forme interessanti ed equivalenti tra loro.
Nella tabella a sinistra (a matrice bidimensionale) si assegna una riga per ugnuno dei due valori
del bit addendo a ed una colonna per ogni valore del bit addendo b. Il valore del bit di somma è
riportato nella cella individuata dai valori dei due addendi.
Nella tabella a destra (a coppia di vettori configurazioni / risultati) si adotta una riga per ognuna
delle quattro combinazioni di valori dei due bit addendi e nella colonna accanto sono riportati i
valori del bit di somma e tra parentesi il valore del riporto.
b a b a+b
+ 0 1 0 0 0 (0)
a 0 0 (0) 1 (0) = 0 1 1 (0)
1 1 (0) 0 (1) 1 0 1 (0)
1 1 0 (1)
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
30 / 55
Operazioni aritmetiche con codifica binaria pesata: esempi
Somma: N = 4 bit valori rappresentabili da 0 a 15
111 riporti
7 + 0111 + 3 0011
10 1010
1 110 riporti
7 + 0111 + 10 1010
17 (1)0001 non rappresentabile
Sottrazione: N = 4 bit valori rappresentabili da 0 a 15
110 prestiti
12 - 1100 - 6 0110
6 0110
1 000 prestiti
5 -- 0101 - 8 1000
- 3 (1)1101 non rappresentabile come intero naturale su 4 bit
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
31 / 55
Codifica di numeri interi relativi complemento a 2
E’ la codifica dei tipi int e long del linguaggio C
Questa codifica ha la notevole proprietà di unificare operazioni di somma e di sottrazione nella
somma algebrica. E’ la tipica codifica degli interi relativi nella maggior parte dei calcolatori, come
ad es. il tipo int del linguaggio C.
In aritmetica decimale, per rappresentare i numeri relativi siamo abituati ad
utilizzare la rappresentazione in modulo e segno che però è scomoda per
l’esecuzione automatica di operazioni di somme algebriche con circuiti.
Le operazioni aritmetiche (algebriche) di somma e sottrazione, così come siamo abituati ad
eseguirle, lavorano in modulo e segno e implicano una serie di operazioni elementari per ottenere
il risultato corretto:
analisi dei segni degli operandi esempio: 5 + (-7) sottrazione
confronto tra i moduli degli operandi 7 > 5 7 è il minuendo
somma tra moduli (naturali) se i segni sono concordi oppure
sottrazione tra moduli (naturali) 7 - 5 = 2 (modulo del risultato)
determinazione del segno del risultato risultato negativo -2
All’interno dei calcolatori per i numeri interi relativi si utilizza usualmente non una
rappresentazione in modulo e segno, ma la rappresentazione detta in complemento
a 2 (two’s complement) che consente di trattare somme e sottrazioni algebriche in
modo indifferenziato e quindi è realizzabile con circuiti aritmetici più semplici.
Date N cifre binarie, sono disponibili 2N configurazioni distinte: di queste
2N-1 vengono utilizzate per rappresentare valori 0 e 2N-1 vengono utilizzate per rappresentare valori < 0.
Ad esempio, se N = 4 sono disponibili 16 configurazioni distinte, con queste posso rappresentare
valori 0: da 0 a 2N-1-1 cioè da 0 a 7
valori < 0: da -1 a - 2N-1 cioè da -1 a -8 Esempi di campi di valori rappresentabili
N=6 da -32 a +31
N=7 da -64 a +63
N=8 da -128 a +127
N=10 da -512 a + 511
N=16 da -32.768 a +32.767
N=32 da - 2.000.000.000 a + 2.000.000.000
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
32 / 55
Rappresentazione in complemento a 2
Esempio di codifica su 4 bit
+7 0111
+6 0110
+5 0101
+4 0100
+3 0011
+2 0010
+1 0001
0 0000
-1 1111
-2 1110
-3 1101
-4 1100
-5 1011
-6 1010
-7 1001
-8 1000
La rappresentazione del valore numerico intero positivo P in cpl 2 su N bit si ottiene
nel modo seguente:
P ( 0) P in cpl2 = P2 in codifica pesata su N bit
Cioè la rappresentazione dei positivi coincide con la normale rappresentazione binaria pesata ma è valida solo se il primo bit (più significativo) risulta 0. E il suo opposto
P (<0) P in cpl2 = (2NP)2 in codifica pesata su N bit
La rappresentazione dei negativi può essere calcolata sottraendo il modulo da 2N e calcolando la
rappresentazione binaria pesata del risultato.
In genere risulta più semplice procedere come descritto nel seguito.
Nota bene:
dal valore del bit più significativo si
può dedurre il segno:
0 valore 0
1 valore < 0
ma il primo bit non è il segno: non
basta cambiarlo per cambiare
segno al numero!!! +1 -1
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
33 / 55
Problema:
dato un valore numerico intero relativo individuarne la rappresentazione su N bit in cpl 2
Regola di conversione da decimale a cpl 2 su N bit
Si considera il valore assoluto del numero da rappresentare Lo si converte in notazione binaria posizionale su N cifre (bit) verificando che il primo bit sia 0
se il numero da rappresentare è 0, questa è già la rappresentazione in complemento a 2
se il numero da rappresentare è < 0, si deve calcolare l’opposto
Calcolo dell’opposto di un intero rappresentato in complemento a due
si complementano tutti i bit e si somma 1
oppure in alternativa,
partendo dal bit meno significativo, si lasciano inalterati i valori dei bit fino al primo 1 incluso e
si complementano i rimanenti bit
Ovviamente la regola di calcolo dell’opposto vale sia per passare da un valore positivo al
corrispondente negativo sia per passare da un valore negativo al corrispondente positivo.
Esempio su 4 bit.
P = - 6 610 = 01102
complemento i bit 1001
sommo 1 1010
- 610 = 1010cpl2
E’ fondamentale ricordare che nella rappresentazione in cpl2 è essenziale
rappresentare tutti i bit previsti, inclusi gli zeri iniziali che compaiono per i valori
positivi.
E’ inoltre importante notare che non è rappresentabile l’opposto del minimo
numero negativo, con il numero di bit adottato.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
34 / 55
Esempi di operazioni aritmetiche di somma algebrica tra interi relativi in
complemento a 2
011
3 + 0011 + -5 1011
-2 1110
Risultato negativo corretto
1 111 - 1 + 1111 + 1 0001
0 (1)0000
Qui c’è riporto sul bit più significativo che va trascurato. Il risultato (zero) è corretto.
Nota –
Se i due addendi hanno segno opposto non si avrà mai supero e l’eventuale riporto a monte del bit più significativo va ignorato e il risultato è corretto.
Se i due addendi hanno lo stesso segno, si ha supero se il risultato appare di segno opposto, anche se non si ha riporto a monte del bit più significativo, e il risultato in questo caso ovviamente non è corretto.
Quindi si ha OVERFLOW se gli addendi hanno segno concorde ed il risultato ha segno discorde da essi. Questo è il modo con cui la ALU (unità logica e aritmetica della CPU) determina il valore del bit di Overflow.
110 2 + 0010 + 7 0111
9 1001
1001 e’ negativo!
Qui c’è superamento (overflow) anche
se non c’è riporto.
Risultato non corretto, che in cpl2 su
4 bit rappresenta il valore - 7
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
35 / 55
Le codifiche intere considerate finora sono
- codifica pesata (binario puro) - codifica in complemento a 2 - codifica Gray - codifica BCD
Queste codifiche hanno in comune la proprietà di avere una risoluzione costante in valore
assoluto, e pari all’unità, in tutto il campo di valori rappresentati, e quindi una risoluzione relativa
che è percentualmente più elevata per i valori più piccoli.
Quando si deve fare attenzione alla risoluzione relativa?
Quando i valori da rappresentare in realtà sarebbero continui, come ad esempio le misure di
grandezze fisiche (tensioni, forze, velocità, pressioni, ecc.).
In questi casi la risoluzione corrisponde agli errori di quantizzazione che si commettono
adottando una codifica intera. In molti casi per le misure non è accettabile un errore di
quantizzazione relativo elevato per piccoli valori di misura.
Quindi le codifiche intere
sono adatte per conteggi di oggetti
sono adatte per quantità monetarie
sono da usare con cautela per rappresentare misure di grandezze continue
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
36 / 55
Codifica di numeri razionali: Rappresentazione in virgola fissa (fixed point)
Costituisce un’estensione della codifica posizionale pesata che considera anche le cifre dopo la virgola, con pesi dati dalle potenze negative della base 2, analogamente a quanto si fa normalmente in base 10.
La virgola (point) non viene rappresentata, ma la sua posizione viene prefissata e rigidamente
osservata anche se sottintesa.
Es. Rappresentazione in virgola fissa su 2 byte, di cui uno dopo la virgola:
0000 0110 1100 0000 ^ posizione prefissata della virgola
il valore è 22 + 21 + 2-1 + 2-2
4 + 2 + 0,5 + 0,25 = 6,7510
La rappresentazione in virgola fissa ha la proprietà di avere una risoluzione costante in valore
assoluto, ma che può essere scelta piccola a piacere dedicando un opportuno numero K di bit alla
parte frazionaria
Con K bit dedicati a rappresentare la parte frazionaria si ha una risoluzione = 2-K
Ad es. dedicando 10 bit alla parte dopo la virgola, la risoluzione è 1/1024 cioè circa un millesimo.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
37 / 55
Conversione decimale → binario virgola fissa
La conversione tratta separatamente la parte intera e la parte frazionaria. Parte intera – si procede per divisioni successive, come precedentemente indicato per i numeri
naturali.
Parte frazionaria – si procede per moltiplicazioni x2 come nell’esempio seguente.
Es. 25,3510 da convertire in due byte, uno per la parte intera e uno per la parte
frazionaria
parte intera 25 12 1
12 6 0
6 3 0
3 1 1
1 0 1 00011001 byte prima della virgola
parte frazionaria – si moltiplica per 2 la parte dopo la virgola e ad ogni passaggio si ottiene un bit che è la parte davanti alla virgola
0,35 0,70
0,70 1,40
0,40 0,80
0,80 1,60
0,60 1,20
0,20 0,40
0,40 0,80
0,80 1,60 01 0110 01.. byte dopo la virgola (periodico !!! antiperiodo 01 e
periodo 0110)
25,3510 = 0001 1001 0101 1001 fixed point [byte],[byte]
N.B. anche il valore 1/10 è periodico in base 2 !! In particolare non tutti i numeri frazionari
esprimibili esattamente con un numero finito di cifre decimali sono anche esprimibili esattamente
con un numero finito di bit.
L’essere periodico è una caratteristica che dipende dalla base e non solo dal valore numerico.
Si noti che i tipi interi, pur di tener conto esplicitamente di fattori di scala delle unità di misura, possono essere considerati come un caso particolare di rappresentazione a virgola fissa, con Nf = 0. Ciò consente calcoli anche con valori inferiori all’unità pur usufruendo della maggior velocità (specie nei microcontrollori) delle operazioni tra interi rispetto a quella delle istruzioni tra valori in virgola mobile. Naturalmente occorre valutare attentamente l’accettabilità degli errori relativi e la garanzia di evitare overflow.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
38 / 55
Codifica di numeri razionali:
Rappresentazione in virgola mobile (floating point)
Tutte le codifiche numeriche sopra riportate presentano per tutti i valori rappresentati una
risoluzione costante in valore assoluto ma in molti casi si devono rappresentare valori
(sottoinsieme dei numeri razionali) con codifiche a risoluzione relativa costante.
Numeri in virgola mobile (float o real) Sono separatamente rappresentate la caratteristica e la mantissa.
Presentano risoluzione costante in valore percentuale rispetto al valore rappresentato.
Questa è la rappresentazione tipica di misure e valori ingegneristici.
Risoluzione relativa Rr con Nm bit dedicati alla mantissa Rr = 2 Nm che con il tipico Nm = 23 bit (+1 bit implicito = 24 bit) vale circa uno su 16 milioni.
Il valore di un numero razionale R è esprimibile con la seguente forma (detta anche
notazione ingegneristica) generale per qualunque base b
R = M • b E (R non periodico)
R - valore razionale da rappresentare, positivo o negativo M - mantissa frazionaria con segno b - base E - esponente intero con segno
Quindi, data e sottintesa una base b, un numero rappresentato in virgola mobile può avere la forma
E M Dove M è la rappresentazione con un certo numero di cifre della mantissa nella base b, ed E è la rappresentazione con un certo numero di cifre, anche questa nella base b, dell’esponente da dare alla base. Si noti che:
l’estensione del campo di valori rappresentabili dipende dal numero di cifre adottate per E
la risoluzione (precisione) dipende dal numero di cifre adottate per M Si noti che non è unica la coppia E, M che corrisponde ad un dato valore numerico. Si parla quindi di normalizzazione quando si sceglie la coppia E, M che utilizza al meglio le cifre disponibili per M.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
39 / 55
Codifica di numeri razionali: rappresentazione in virgola mobile
Tipo float del linguaggio C
STANDARD IEEE 754 di codifica floating point su 32 bit
L’attribuzione dei 32 bit ( = 4 byte) è la seguente:
Seeeeeee emmmmmmm mmmmmmmm mmmmmmmm
S = segno mantissa (0 = + 1 = -)
E = esponente + 127
M = parte dopo la virgola della mantissa normalizzata col primo 1 prima della virgola
Il valore numerico rappresentato V vale:
).1(2)1( 127 MV ES
Nota – lo standard IEEE754 adotta
per la mantissa la rappresentazione in modulo (M) e segno (S)
per l’esponente la codifica “eccesso 127”, cioè E = esp +127 quindi NON modulo e segno NE’ complemento a 2.
Campo di valori rappresentabili (nota: 2126 ≈1038 ) L’esponente di 8 bit consente valori di ±126
~ -10 38 . . ~-10 -38 0 ~10 -38 . . ~10 38
Risoluzione relativa uno su 16 milioni (2-24) 23 bit di mantissa M più il primo bit sottinteso perchè sempre = 1 per effetto della
normalizzazione.
La mantissa di 24 bit corrisponde a circa 7 cifre decimali (nota: 224 .≈ 1,6*107 )
casi particolari
Categoria Esp. Mantissa
Zeri 0 0
Numeri denormalizzati 0 non zero
Numeri normalizzati 1 - 254 qualunque
Infiniti 255 0
Nan (not a number) 255 non zero
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
40 / 55
Esempio
Si voglia rappresentare nella forma a virgola mobile secondo lo standard IEEE 754 il valore
numerico decimale negativo -6,625
Passo 1 – conversione in binario pesato (base 2) del modulo del numero
Parte intera 6 -> 110 (ottenuta con le solite successive divisioni per 2)
Parte frazionaria 0,625 -> 0,101000... (ottenuta con le solite successive moltiplicazioni per 2)
Codifica in base 2 del modulo 6,625 -> 110,101000... (da considerare moltiplicato per 2 elevato a zero)
Passo 2 – normalizzazione
1,10101000... da moltiplicare per 2 elevato a 2 (la virgola è stata spostata a sinistra di 2 posti)
Si sposta la virgola fino a portarla subito dopo il primo bit che vale 1. Per ogni spostamento a destra
decremento l’esponente, mentre per ogni spostamento a sinistra incremento l’esponente.
Passo 3 – calcolo del segno S
S = 1 dato che il valore da rappresentare è negativo
Passo 4 – calcolo dell’esponente
E = 127 + 2 = 129 -> 10000001
Passo 5 – mantissa normalizzata e privata dell’uno prima della virgola, considerato implicito
M = 10101000... (allineata a sinistra!)
Passo 6 – giustapposizione dei bit della rappresentazione nei 4 byte ad essa dedicati
Seeeeeee emmmmmmm mmmmmmmm mmmmmmmm
11000000 11010100 00000000 00000000
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
41 / 55
N.B. 1/10 è periodico in base 2 !! In particolare non tutti i numeri frazionari esprimibili
esattamente con un numero finito di cifre decimali sono anche esprimibili esattamente con un
numero finito di bit. Se la mantissa risulta periodica si mantengono solo i 23+1 bit utilizzabili, e il
valore rappresentato presenta uno scostamento rispetto a quello corretto. Tale scostamento sarà
comunque inferiore a VALORE / 16.000.000
NB. I circa 4 miliardi di configurazioni dei 32 bit usati per la codifica, --consentono di coprire un campo di valori molto ampio con una risoluzione relativa costante, grazie alla distribuzione non uniforme dei valori associati alle configurazioni di bit. Infatti per numeri molto piccoli i valori sono “fitti”, ma si vanno “diradando” per i numeri via via più grandi.
0- +
Approssimativamente gli intervalli tra valori contigui (risoluzione) sono:
per valori di 10000 l’intervallo è di un millesimo
per valori di 10 milioni l’intervallo è di un’unità
per valori di 10 miliardi l’intervallo è di mille (!!!)
ecc. Meditare sulle conseguenze!
Operando con floating point di 32 bit si ha che: Un miliardo più dieci risulta un miliardo.
Cioè i valori non rappresentabili non sono solo quelli esterni all’intervallo di rappresentabilità,
ma anche valori interni.
Ci sono anche gli standard IEEE floating point su 64 (tipo double) e su 80 bit che estendono
notevolmente il campo di valori rappresentabili e riducono la risoluzione rendendola molto più
fine e consentendo quindi precisioni molto maggiori. Importanti per calcolo scientifico, per il quale
è generalmente consigliabile adottare variabili di tipo double..
Le principali proprietà della codifica floating point sono:
esteso campo di valori rappresentabili
risoluzione (errore di quantizzazione) percentualmente costante in tutto il campo di valori
Queste proprietà rendono la rappresentazione floating point
adatta a rappresentare misure di grandezze fisiche
non adatta a rappresentare quantità monetarie
non adatta a rappresentare conteggi di oggetti Si noti che le caratteristiche della rappresentazione floating point sono “complementari” a quelle delle rappresentazioni intere (cpl2, Gray, BCD, ecc.)
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
42 / 55
Varianti delle codifiche, dotate di ridondanza
In vari casi ai normali codici si aggiungono bit ridondanti per i seguenti scopi:
-- per rilievo di errori (ad es. bit di parità)
-- per rilievo e correzione di errori (codici di Hamming)
Si noti che con la ridondanza il numero di informazioni corrette rappresentabili è una frazione del numero di configurazioni possibili dei bit utilizzata. Ogni bit ridondante raddoppia il numero di configurazioni possibili a parità di informazioni rappresentabili.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
43 / 55
Funzioni logiche e circuiti logici Algebra di Boole
L’algebra di Boole definisce
costanti e variabili logiche che possono assumere i due valori Vero e Falso (True False),
gli operatori logici And, Or e Not, che applicati a valori logici producono risultati logici,
e fornisce le regole per comporre, con l’eventuale uso di parentesi, le espressioni logiche il cui valore è Vero o Falso.
Funzioni logiche Le funzioni logiche sono importanti perchè consentono di esprimere delle condizioni, dipendenti da valori logici, sul cui esito basare la decisione di compiere o meno determinate operazioni. Un aspetto importante è la possibilità di mappare facilmente le funzioni logiche su circuiti elettronici digitali (detti circuiti logici o reti logiche) in modo da rendere concreto e automatico il comportamento descritto dalle funzioni logiche. Le funzioni logiche quindi assumono un’importanza fondamentale
sia negli aspetti SW (programmazione) per descrivere le condizioni nei costrutti di controllo condizionali, di selezione o di iterazione
sia negli aspetti HW (architettura) dei calcolatori.
Variabili logiche e circuiti logici- Le variabili logiche possono assumere due valori. I bit possono rappresentare i valori logici vero (true) e falso (false) con i livelli di segnale elettrico H (high = 5V) e L (low = 0V) Quindi un bit è adatto a rappresentare una variabile logica. Ii bit sono usati sia per rappresentare valori logici vero e falso, sia per rappresentare valori numerici 1 e 0. Spesso per comodità i due valori logici sono rappresentati mediante le cifre 0 e 1 anche quando non si attribuisce loro un valore numerico.
Operatori logici Gli operatori logici rappresentano le operazioni applicabili alle variabili e alle costanti logiche
AND - prodotto logico *
OR - somma logica +
NOT - negazione ! Si può dimostrare che con questi tre operatori sono esprimibili tutte le possibili funzioni logiche. L’operatore AND ha precedenza sull’operatore OR, quindi A + B * C = A + (B * C) Nelle espressioni si possono usare le parentesi per indicare eventuali diverse precedenze. Nota – per indicare gli operatori logici vengono usati anche altri simboli, e comunque dal contesto deve essere chiaro se si indicano operatori logici o operatori aritmetici. Quindi nei linguaggi di programmazione sono previsti simboli diversi ad esempio per indicare la somma logica e la somma aritmetica che sono operazioni nettamente diverse!!!
Porte logiche (Gate) Sono dispositivi fisici in grado di eseguire un’operazione logica tra le variabili in ingresso (segnali in) e produrre in uscita (segnale out) il risultato. Sono realizzate generalmente mediante circuiti elettronici.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
44 / 55
Tabelle della verità Il risultato delle operazioni logiche, e quindi il comportamento delle porte logiche è in genere definito in modo esaustivo descrivendolo mediante tabelle di verità, cioè tabelle che elencano tutte le combinazioni dei valori di ingresso ( gli operandi) e per ogni combinazione riportano il corrispondente valore del risultato. Queste tabelle hanno quindi un numero di righe pari alla potenza di 2 corrispondente al numero di variabili in ingresso.
Teorema di De Morgan Importante teorema dell’algebra booleana Il teorema afferma che per qualunque valore delle variabili logiche A e B vale la seguente eguaglianza:
A * B = !(!A + !B) E nella forma duale
A + B = !(!A * !B) Le equivalenze dettate dal teorema di De Morgan sono utili per effettuare eventuali semplificazioni nelle espressioni logiche, soprattutto quando si voglia passare da logica positiva a logica negativa. Logica positiva – segnali “attivi alti” valore True associato al segnale H (es. +5 V) Logica negativa – segnali “attivi bassi” valore True associato al segnale L (es. 0 V) Generalmente si adotta la logica positiva per i bit che rappresentano valori numerici, mentre per i bit che rappresentano valori o comandi logici si sceglie tra logica positiva o negativa in base ad altre considerazioni di progetto. Nota Si rifletta sulla rilevante differenza tra un comando attivo (ON) e a riposo (OFF) nelle varie situazioni:
Nelle condizioni normali (default)
senza alimentazione quando i segnali assumono necessariamente il livello L (basso)
in caso di guasto quando i segnali assumono un valore dipendente dal tipo di dispositivo e dal tipo di guasto. Ad esempio per una lampadina la tipica condizione di guasto porta alla condizione “lampadina accesa” = falso
Spesso, date due situazioni una rappresenta la condizione di sicurezza. Ad esempio “motore in movimento” vero o falso. Falso è la condizione di sicurezza.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
45 / 55
PORTE LOGICHE Le porte logiche rappresentano circuiti che forniscono in uscita il risultato di operazioni logiche elementari sui valori delle variabili in ingresso. Per ogni porta logica si ha un simbolo grafico che la rappresenta e una tabella della verità che ne definisce il comportamento
Porta AND - Prodotto logico Simbolo
A
B
U
Porta OR - Somma logica Simbolo
A
B
U
Porta NOT - Complemento Simbolo
A U
Tabella della verità
A B U
0 0 0
0 1 0
1 0 0
1 1 1
Tabella della verità
A B U
0 0 0
0 1 1
1 0 1
1 1 1
Tabella della verità
A U
0 1 1 0
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
46 / 55
FUNZIONI LOGICHE Le funzioni logiche sono descrivibili con espressioni logiche che contengono variabili e costanti logiche, operatori logici ed eventuali parentesi. Sono del tutto analoghe, sintatticamente, alle usuali espressioni algebriche.
Esempio
S = A * !B + !A * B S = A AND NOT B OR NOT A AND B
R = A * B R = A AND B
Poichè le due funzioni logiche S ed R dell’esempio contengono entrambe le variabili A e B, si possono fondere le due tabelle della verità riportando su ogni riga di combinazione dei valori di A e B il corrispondente valore assunto dalla funzione S e dalla funzione R Il comportamento descritto dalle tabelle della verità dice che:
S è vero se uno e uno solo di A e B è vero
R è vero se entrambi A e B sono veri Le funzioni logiche sono realizzabili circuitalmente (cioè a livello hardware - HW) mediante opportune connessioni (reti) di porte logiche
Primo esempio di rete logica (Semisommatore)
A
BS
R
Si noti che la rete logica sopra rappresentata realizza la somma aritmetica di due numeri binari ciascuno da un bit, dove A e B sono le cifre binarie da sommare, S è la somma e R è il riporto.
A e B sono
gli ingressi S e R sono le uscite
Tabelle della verità congiunte
A B S R
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
47 / 55
Secondo esempio di rete logica combinatoria – Sommatore completo (Full Adder)
S = A*!B*!RI + !A*B*!RI + !A*!B*RI + A*B*RI
RO = A*B + A*RI + B*RI Si noti che la tabella della verità che descrive il comportamento di queste funzioni è composta di 8 righe dato che le variabili di ingresso sono 3 ed hanno quindi 23 = 8 combinazioni. Tabella della verità (Sommatore completo)
A B RI S RO
0 0 0 0 0
0 0 1 1 0 A e B sono le cifre degli addendi
0 1 0 1 0
0 1 1 0 1 RI è il riporto da cifra meno significativa
1 0 0 1 0
1 0 1 0 1 RO è il riporto verso cifra più significativa
1 1 0 0 1
1 1 1 1 1
A B
S
RI
RO
La rete realizza la somma S delle due cifre binarie (bit) A e B di peso 2i e il riporto RO di peso 2i+1 nell’ambito di un numero di n bit, tenendo conto del riporto RI generato dalla somma dei due bit di peso 2i-1 Con n reti di questo tipo e collegando in cascata i riporti uscenti RO con quelli entranti RI, si possono dunque sommare due numeri di n bit rappresentati con la codifica binaria pesata o con la codifica in complemento a due.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
48 / 55
Esempio di circuito sommatore per addendi a 4 bit codificati in compl. a 2
Composto da 4 sommatori completi (FA = Full Adder) collegati con i riporti in cascata, cioè il riporto
generato da una posizione viene fornito come riporto in ingresso al sommatore in posizione più
significativa.
Questo circuito sommatore opera correttamente con codifica pesata o in cpl2 (non Gray, BCD, e altre)
CY 0
Gli addendi sono contenuti nei due registri da 4 bit. Il risultato in uscita è di 4 bit e l’eventuale riporto è presente sul bit RO3. All’ingresso RI0 è presentato, come è ovvio, un segnale di valore 0 (collegamento a massa). Ogni sommatore (FAi – Full Adder iesimo) corrisponde al circuito logico del sommatore completo presentato sopra e qui schematizzato con il seguente blocco funzionale. NOTA importante: il circuito di questo esempio è un circuito logico che però è stato progettato in modo da fornire in uscita dei bit con valori interpretabili numericamente come risultato della somma aritmetica dei valori numerici rappresentati dai bit degli operandi in ingresso. Si noti che l’interpretazione aritmetica è corretta solo per valori numerici codificati in binario pesato o in complemento a 2. Per altre codifiche il circuito logico di somma aritmetica sarebbe diverso e molto più complesso
ADDENDO 1 ADDENDO 1 ADDENDO 2
FA3 FA2 FA1 FA0
Ai Bi
ROi RIi
Si
RISULTATO (Somma)
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
49 / 55
CIRCUITI DI MEMORIA Per memorizzare un bit occorre un dispositivo fisico in grado di assumere due diversi stati e di mantenere lo stato attuale fino a quando venga dato un comando che lo porta nell’altro stato. Il circuito elementare di memoria binaria è costituito dal flip-flop (bistabile) che memorizza un bit e ne presenta il valore in uscita. In genere i bistabili presentano in uscita oltre al valore del bit (Q) anche il suo negato (!Q) I flip-flop (FF) mantengono il loro stato 0 o 1 fino a quando ne viene comandata la commutazione. Esistono vari tipi di FF che si differenziano per le diverse modalità di comando della commutazione o della memorizzazione di un nuovo valore binario.
FF-SR - Set - Reset Sono presenti i segnali di comando in ingresso detti Set e Reset Nell’esempio seguente la variabile A fornisce il valore all’ingresso di comando Set, mentre la variabile B fornisce il valore all’ingresso di comando Reset. A riposo A e B devono essere di valore 0 e il valore presentato dall’uscita U rimane memorizzato indefinitamente Il comportamento in dipendenza dei segnali di commutazione è il seguente:
un valore 1 di A porta a U = 1 (operazione di set)
un valore 1 di B porta a U = 0 (operazione di reset) Poi A e B devono tornare a riposo (0)
S
R
QUA
B
FF-DT - Data - Trigger I segnali di comando in ingresso sono il bit di dato D e il bit di comando trigger T. A riposo B ha il valore 0 e qualunque sia il valore di A il valore dell’uscita U non cambia Il comportamento in dipendenza dei segnali di commutazione è il seguente:
quando B passa da 0 a 1 il valore di A presente in quel momento viene memorizzato e presentato sull’uscita U. Quindi il segnale fornito all’ingresso T ha il significato di comando di caricamento (scrittura) del bit da memorizzare.
Poi B deve tornare a riposo (0)
D
T
QUA
B
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
50 / 55
REGISTRI Sono memorie che contengono una parola di N bit (in genere 8, 16, 32), ottenute affiancando N flip-flop di tipo FF-DT Esempio di registro di 8 bit. carica D7 D1 D2 D3 D4 D5 D6
Q7
D0
Q0 Q1 Q2 Q3 Q4 Q5 Q6
T T T T T T T T
Il segnale carica presenta la variabile logica di comando della memorizzazione (load = caricamento) ed è collegato in parallelo a tutti gli ingressi di comando T degli 8 FF-DT. Si noti che il segnale “carica” è un esempio di bit utilizzato per rappresentare un’informazione di tipo comando e non un’informazione di tipo dato. D7 . . D0 sono gli 8 bit del dato da memorizzare collegati ai rispettivi ingressi D dei bistabili. Quando carica passa da 0 a 1 i valori degli 8 bit vengono memorizzati nei corrispondenti bistabili del registro. Q7 . . Q0 sono le uscite dei FF-DT e presentano i valori degli 8 bit del dato memorizzato.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
51 / 55
Registri contatori - Modello funzionale
Una interessante categoria di registri è costituita dai registri contatori che sono in grado di
modificare il loro contenuto incrementandone (o decrementandone) di uno il valore.
Il caso più frequente è costituito dai contatori in binario pesato o in cpl 2, ma si possono realizzare
contatori per qualunque codifica di numeri interi.
I contatori possono essere dotati in ingresso di diversi bit di comando e spesso anche di ingressi
per i bit che rappresentano un valore da caricare. In uscita sono presenti i bit che rappresentano il
valore attualmente contenuto nel registro contatore. I bit di comando sono spesso attivi bassi
(logica negativa) e ciò è indicato da un cerchietto in corrispondenza del segnale sul simbolo del
contatore.
D3 D2 D1 D0
CK WR
Contatore a 4 bit EN CL
CY Q3 Q2 Q1 Q0
IMPULSI da contare
Abilita - ENABLE
Riporto - CARRY
Carica - LOAD
Azzera - RESET
MSB - ingressi - LSB
MSB - uscite - LSB
Valore di ingresso VI da caricare
Valore contenuto nel contatore
Fig. Schema funzionale di un contatore, ad incremento, di 4 bit, con il corredo di bit di
comando per abilitare o meno il conteggio, caricare un nuovo valore nel contatore o
azzerarne il contenuto.
Il contenuto è di tipo numerico intero, spesso binario naturale (codifica pesata) e viene
presentato in uscita ai morsetti QK-1 ... Q0
il contenuto viene azzerato con l’attivazione dell’ingresso Reset (o Clear)
viene caricato il valore VI con l’attivazione dell’ingresso Load (il valore da caricare è quello presentato agli ingressi DK-1 ... D0
se l’ingresso Enable è attivo il valore contenuto viene incrementato (decrementato) di 1 quando si presenta un fronte sull’ingresso Clock (detto anche tick)
viene generato in uscita un segnale di Carry quando viene superato il massimo conteggio (contatori UP) o il valore zero (contatori DOWN)
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
52 / 55
Esempi di contatori UP e DOWN
Solitamente i contatori sono di 4, 8 o 16 bit, ma per semplicità negli esempi viene
presentata un’implementazione con K=3 bit,
codifica binario puro, conteggio UP, asincrono con FF-DT
D Q T !Q CL
D Q T !Q CL
D Q T !Q CL
Impulsi
LSB - Q0 Q1 Q2 - MSB
Carry
Azzera
Attivando a livello basso il comando Azzera tutti i FF si portano a 0. Ad ogni fronte di salita dell’ingresso
Impulsi il contenuto si incrementa di 1, fino a raggiungere la configurazione 111 = 7. Il successivo impulso
porta tutti i bit a zero ed un fronte di salita sul Carry.
codif. binario puro, DOWN, asincrono con FF-DT
Impulsi
LSB - Q0 Q1 Q2 - MSB
Borrow
Azzera
D Q T !Q CL
D Q T !Q CL
D Q T !Q CL
Dopo il comando Azzera tutti i bit sono a 0 e il prossimo fronte di salita del segnale Impulsi porta i bit a 111
con un fronte di salita sull’uscita Borrow (= prestito)
Si noti che collegando Carry (o rispettivamente Borrow) con l’ingresso Impulsi di un ulteriore
contatore si ottiene un contatore complessivo con un numero di bit pari alla somma del numero di
bit dei contatori così collegati in cascata. In tal modo si possono realizzare contatori di un numero
grande a piacere di bit.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
53 / 55
Modi tipici di funzionamento dei contatori
Funzionamento free-running (evoluzione libera) con K bit
Si forniscono gli impulsi al contatore senza intervenire a modificare il valore contenuto.
Con 3 bit si ha la sequenza: 000 001 010 011 100 101 110 111 000 001 ........ecc.
periodo = 2k impulsi (Tick) – cioè ogni 2k Tick il contatore ripassa per il valore zero
Funzionamento comandato – prefissato a CONT con K bit
a) - Per contatori UP –
Quando raggiunge il valore CONT il contatore viene azzerato. Ciò si ottiene mediante un
circuito comparatore che confronta il contenuto del contatore con il valore prefissato
CONT, contenuto in un registro ausiliario. Quando il confronto da esito positivo Il
comparatore di conteggio raggiunto comanda Reset ed il contatore ricomincia da zero
periodo = CONT Tick – ogni CONT Tick ripassa per il valore zero – CONT deve essere
minore di 2k
b) - Per contatori DOWN –
Quando raggiunge il valore zero il contatore viene ricaricato con il valore CONT. Ciò si
ottiene facendo in modo che Il Borrow attivi il comando Load
periodo = CONT Tick – ogni CONT Tick ripassa per il valore zero – CONT deve essere
minore di 2k
Gli incrementi (o i decrementi) vengono effettuati in corrispondenza dei fronti di salita (o
spesso di discesa) del segnale presentato al morsetto di ingresso di conteggio (CK =
clock).
Il periodo 2k di conteggio dipende solo dal numero di bit del contatore nel funzionamento
free-running, mentre nel funzionamento comandato, un po’ più complesso a livello
circuitale, il periodo CONT < 2k può essere scelto arbitrariamente fino al valore massimo
dato dal numero di bit.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
54 / 55
Utilizzo di contatori
Se gli impulsi di conteggio sono generati da una generica sorgente si parla di
registro contatore di eventi. Ogni verificarsi di un evento provoca l’incremento
(UP) o il decremento (DOWN) del contenuto del contatore.
Se gli impulsi sono generati da un circuito oscillatore, o comunque presentano una
frequenza regolare di periodo P, si parla di temporizzatori. Il valore contenuto nel
contatore indica quanti intervalli di tempo pari a P sono trascorsi da quando è stato
dato l’ultima volta il comando di Azzeramento.
I contatori, per uso di conteggio o di temporizzazione, sono collegati ai calcolatori
tramite
porte di ingresso per leggere i bit QK-1 ... Q0 che rappresentano il valore di conteggio
porte di uscita per emettere l’eventuale valore di caricamento (VI) nei bit DK-1 ... D0
porte di uscita per comandare i bit di Enable, Load, Reset.
Tutti i calcolatori sono dotati di almeno un circuito temporizzatore che consente di
“percepire” il tempo ed eventualmente di eseguire determinate elaborazioni negli istanti
temporali voluti.
Fondamenti di informatica – Prof. Lorenzo Mezzalira – Fascicolo 1
55 / 55
Schema di principio di temporizzatore per calcolatori
OSC PRE TBC
TBV
TIMER
TRBUF
TBC_TICK
OVERFLOW
Lettura Tempo
Impostazione Periodo
INT_req
INT_req
Nello schema riportato gli elementi hanno le seguenti funzioni.
OSC – circuito oscillatore che genera impulsi a frequenza prefissata e regolare.
PRE – Prescaler, cioè registro contatore utilizzato come divisore di frequenza. Produce in uscita
un impulso ogni 2k impulsi dell’oscillatore (se si usano k bit di conteggio).
TBV – Time Base Value – registro porta di uscita su cui si imposta la durata del periodo di
temporizzazione voluta.
TBC – Time Base Counter – registro contatore che conta gli impulsi del prescaler e quando
raggiunge il conteggio pari al valore di TBV attiva un segnale in uscita (TBC-TICK). Questo segnale è
generalmente inoltrato alla CPU come segnale di richiesta di interruzione.
TIMER - registro contatore che conta gli impulsi del prescaler. Quando arriva al conteggio
massimo (2N – 1 cioè tutti “1”) al prossimo impulso va al valore 0 (cioè tutti “0”) e ricomincia il
conteggio degli impulsi. Funziona quindi come un orologio che indica l’ora (ciclicamente).
TRBUF – Timer Read Buffer – registro di appoggio che costituisce la porta di ingresso tramite la
quale la CPU può leggere l’ora attuale, cioè il contenuto del timer.
Nella maggior parte dei calcolatori sono presenti dei temporizzatori più complessi che funzionano
anche a calcolatore spento, alimentati da piccole batterie incorporate, e che forniscono
indicazione di tempo anche relative a giorni, mesi, anni. Sono detti calendar clock.