Progettazione digitale [2 ed.]
 9788838663529

  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up
File loading please wait...
Citation preview

Franco Fummi Mariagiovanna Sami Cristina Silvano

P rogettazione digitale Seconda edizione

M c G r a W 'H ill Milano • New York • San Francisco • Washington D.C. • Auckland Bogotà • Lisboa • London • Madrid • Mexico City • Montreal New Delhi • San Juan • Singapore • Sydney • Tokyo • Toronto

Indice

Prefazione

xi

1

Introduzione

1

l.1 1.2 1.3 1.4

1

2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8

Introduzione Codifica dell’informazione non numerica Codifica dell’informazione numerica: notazione posizionale Conversioni di base Codifica ottale e esadecimale Codifica binaria delle cifre decimali Rappresentazione geometrica dei numeri binari Distanza di Hamming 2.8.1 Codici a distanza di Hamming unitaria 2.9 Aritmetica binaria 2.9.1 Addizione binaria 2.9.2 Sottrazione binaria 2.9.3 Rappresentazione dei numeri negativi 2.9.3.1 Rappresentazione in modulo e segno 2.9.3.2 Rappresentazione in complemento a 2 2.9.3.3 Rappresentazione in complemento a 1 2.9.4 Scorrimento 2.9.5 Moltiplicazione binaria 2.9.6 Divisione binaria 2.10 Notazione in virgola fissa e in virgola mobile 2.11 Notazione in virgola mobile 2.11.1 Rappresentazione non biunivoca 2.11.2 Definizione della mantissa



Codifica dell'informazione

CN

2

Evoluzione della progettazione dei sistemi digitali Flusso di progettazione dei sistemi digitali Obiettivi del libro Struttura ragionata del libro

11 11 12 13 14 17 18 19 21 22 24 24 26 27 27 29 32 33

33 37 39 4\ 42 43

L

vi

Indice

2.12 2.13

3

Algebra di commutazione 3.1 3.2

3.3 3.4 3.5 3.6 3.7

4

2.11.3 Relazione tra numero di bit della mantissa e dell’esponente 2.11.4 II problema delle eccezioni 2.11.5 Convenzioni per la rappresentazione dei numeri in virgola mobile 2.11.6 Standard IEEE 754-1985 Esercizi risolti Esercizi proposti

Perché l’algebra booleana Identità e teoremi fondamentali 3.2 .1 Teorema di De Morgan 3.2.2 Teorema di Shannon 3.2.3 Semplificazione di espressioni Dalla funzione al circuito 3.3.1 Operatori universali Forme canoniche Esercizi con strumenti automatici Esercizi risolti Esercizi proposti

43 45 46 47 50 58

61 59 63 63 64 64 65 69 71 75 79 82

Ottimizzazione delle reti combinatorie

83

4.1 4.2

83

4.3 4.4

4.5 4.6

Motivazioni Minimizzazione a due livelli di reti combinatorie a un’uscita 4.2.1 Metodo di Quine-McCluskey 4.2.1.1 Funzioni completamente specificate 4.2.1.2 Funzioni non completamente specificate Minimizzazione a due livelli di reti combinatorie a più uscite 4.3.1 Metodo di Quine-McCluskey per funzioni a più uscite Minimizzazione a più livelli di reti combinatorie 4.4.1 Modelli di rappresentazione 4.4.2 Modello algebrico 4.4.3 Trasformazioni algebriche 4.4.3.1 Sweep 4.4.3.2 Eliminazione 4.4.3.3 Scomposizione 4.4.3.4 Estrazione 4.4.3.5 Semplificazione 4.4.3.6 Sostituzione 4.4.4 Trasformazioni booleane La valutazione dei ritardi Esercizi con strumenti automatici 4.6.1 Minimizzazione a due livelli di reti combinatorie 4.6.2 Minimizzazione a più livelli di reti combinatorie 4.6.3 La valutazione dei ritardi

86 91 91 96 99 100 103 106 108 109 109 109 110 111 112 112 112 117 119 120 123 126

\ \

i :

Indice

4.7 4.8

5

135

5.1 5.2

135 136 136 140 145 147 148 152 155 161

5.5 5.6 5.7

Introduzione Bistabili 5.2.1 Bistabili asincroni 5.2.2 Bistabili sincroni Registri a scorrimento; bistabilimaster-slave Contatori 5.4.1 Progetto di contatori sincroni Esercizi con strumentiautomatici Esercizi risolti Esercizi proposti

Ottimizzazione delle macchine sequenziali sincrone 6A 6.2 ' 6.3

6.4

6.5

6.6 6.7

6.8 6.9

7

128 133

Dalle reti combinatorie ai circuiti sequenziali

5.3 5.4

6

Esercizi risolti Esercizi proposti

vii

Introduzione Macchine a stati finiti La progettazione basata su macchine a stati finiti 6.3.1 FSM come modello di descrizione di un circuito sequenziale 6.3.2 Dalla FSM al circuito sequenziale Minimizzazione degli stati 6.4.1 Macchine completamente specificate 6.4.2 Macchine non completamente specificate Codifica degli stati Minimizzazione logica Esercizi con strumenti automatici 6.7.1 Dalla FSM al circuito sequenziale 6.7.2 Minimizzazione degli stati 6.7.3 Codifica degli stati 6.7.4 Minimizzazione logica Esercizi risolti Esercizi proposti

163 163 164 . ' 167 168 177 179 179 185 191 194 196 198 204 208 209 211 225

Progetto di circuiti aritmetici

231

7.1 7.2 7.3

231 232 234 234 238 238

Introduzione Realizzazione di un’operazione aritmetica Realizzazione di operazioni aritmetiche su numeri interi 7.3.1 Addizione binaria 7.3.2 Sottrazione 7.3.3 Prodotto 7.3.3.1 Determinazione della matrice per il prodotto di fattori positivi 1 3 3 2 Prodotto come somma per righe 7.3.3.3 Prodotto come somma per diagonali

239 240 242

viii

Indice

7.4

7.5

8

Progetto controllore data path 8.1 8.2

8.3

8.4 8.5

8.6 8.7

8.8 8.9 8.10

9

M otivazioni Algoritm i euristici di associazione II problem a dell’associazione per componenti programmabili Esercizi con strumenti automatici

Linguaggi di descrizione dell'hardware A .l A.2

%

Introduzione Registri 8.2.1 Registro parallelo/parallelo 8.2.2 Registro seriale/seriale 8.2.3 Registro parallelo/seriale Unità funzionali 8.3.1 Selezione 8.3. 1.1 Multiplexer 8.3.1.2 Demultiplexer 8.3.1.3 Decoder 8.3.1.4 Shifter 8.3.2 Aritmetiche 8.3.2 .1 Sommatore 83.2.2 Moltiplicatore 8.3.3 Logiche 8.33.1 And 8.3.4 Confronto 83.4.1 Maggiore La progettazione di un data path L ’approccio controllore-data path M acchina a stati finiti con unità di elaborazione (FSMD) 8 .6.1 Esempio: semaforo con priorità temporizzato II miglioramento delle prestazioni: il pipelining Esercizi con strumenti automatici Esercizi risolti Esercizi proposti

Tecnologie per la progettazione di dispositivi digitali 9.1 9.2 9.3 9.4

A

73.3.4 Prodotto come somma per colonne 7.3.4 Divisione Aritmetica in virgola mobile 7.4.1 Addizione 7.4.2 Sottrazione 7.4.3 Moltiplicazione 7.4.4 Divisione Esercizi con strumenti automatici

M otivazioni VHDL

242 249 253 254 257 258 258 259

263 263 264 264 266 267 269 269 270 272 273 275 276 277 278 279 281 282 283 284 287 289-* 289 291 301 310

314

317 317 318 321 327

331 331 335

Indice

A.2.1 A.2.2 A.2.3

A.3

B

Caratteristiche generali Dichiarazione di entità Architettura A.2.3.1 Descrizione strutturale A.2.3.2 Descrizione data-flow A.2.3.3 Descrizione comportamentale A.2.3.4 Descrizione mista A.2.4 Configurazione A.2.5 Stile di descrizione concorrente A.2.6 Stile di descrizione sequenziale A.2.7 Confronto A.2.8 Costrutti maggiormente utilizzati A .2.8.1 Definizione di tipi A.2.8.2 Dichiarazione di package A.2.8.3 Librerie A.2.8.4 Sottoprogrammi A.2.8.5 Overloading e funzioni di risoluzione A.2.8.6 Ritardi A.2.8.7 Attributi A.2.9 Regole di sintesi automatica dal livello RT SystemC A.3.1 Progettazione basata su SystemC A.3.2 Moduli e gerarchia A.3.3 Porte, segnali e tipi A.3.4 Concorrenza A.3.5 Waiting e watching A.3.6 Un esempio completo A.3.6.1 Modello in C++ A.3.6.2 Testbench A.3.6.3 Compilazione, simulazione e verifica A.3.7 Stile di descrizione transazionale A.3.8 Note sulla sintesi automatica

Strumenti automatici di progettazione B .l B.2 B.3

SIS B. 1-1 BVE VHDL SystemC

ix 336 337 339 339 340 340 341 342 343 344 348 349 349 351 353 354 357 357 358 359 361 362 363 364 368 370 371 371 373 375 375 376

379 379 381 381 385

Prefazione

La progettazione dei sistemi digitali è un argomento di ricerca e di insegnamento che, oramai da molti decenni, si pone come anello di congiunzione tra informatica ed elet­ tronica. Le basi matematiche, ma anche una buona parte delle tecniche di sintesi e ad­ dirittura di ottimizzazione che su tali basi si fondano, hanno mantenuto gran parte della propria validità e applicabilità anche a fronte dell’impetuosa evoluzione tecnologica. Una ovvia conseguenza di questo fatto è 1’esistenza di un gran numero di testi che si occupano di progetto digitale, che, pur rivolgendosi a diverse esigenze e considerando sistemi con diversi livelli di complessità, mantengono almeno in parte la loro pratica significatività. Ci aspettiamo quindi la domanda: “Perché ancora uno”? La risposta nasce dalla nostra esperienza di insegnamento, nelle facoltà di Ingegne­ ria e di Scienze Matematiche, Fisiche e Naturali: ci è sembrato che potesse essere utile un testo in italiano dedicato tipicamente a studenti universitari (dei primi due livelli di laurea) il cui scopo fosse la presentazione dei principi e delle metodologìe fondam enta­ li del progetto di sistemi digitali, implicando il minimo insieme possibile di prerequisiti sotto l’aspetto informatico (si richiede semplicemente che l’allievo conosca i principi della programmazione), sotto quello tecnologico (il testo è in larghissima misura com­ prensibile anche ignorando l’elettronica) e infine sotto quello matematico (anche se una buona base di algebra e di logica non guasta!). Un testo, in altre parole, che possa essere usato anche da chi, p er la prima volta, si trovi ad affrontare il problema del progetto digitale, ma che lo guidi poi attraverso pro­ blemi mano a mano più sofisticati e complessi. Un libro che non raggiunga però il li­ vello di complessità e dettaglio di corsi magistrali e di dottorato per i quali esistono già affermati libri di riferimento più volte citati anche in questo testo. Sarebbe poi assurdo ignorare che oggi una gran parte del progetto digitale viene realizzata servendosi di strumenti di progettazione automatica: i vari tool CAD 0Computer Aided Design) offerti dai diversi produttori del settore EDA (Electronic Design Automation). Ci è sembrato quindi fondamentale collegare continuam ente la teoria con la possibilità di sperimentazione pratica basata su strumenti autom atici di progettazione. Questo aspetto è abbastanza innovativo ed è uno dei contributi princi­ pali che il libro vuole fornire alla didattica italiana sulla progettazione digitale. Si è scelto di mantenersi il più possibile svincolati dagli aspetti tecnologici del progetto per non fare riferimento a specifici strumenti commerciali di progettazione, e di uti­ lizzare, ove possibile, strumenti di dominio pubblico. Tutte le informazioni per orga­

xii

Prefazione

nizzare laboratori didattici di progettazione digitale sono reperibili sul sito Internet de­ dicato al libro, all’indirizzo ht t p: / / www. at eneonl i n e . l t / f u m m i , dove sonopresenti anche supporti per Tutilizzo del libro in aula. Desideriamo ringraziare i numerosi colleghi che hanno fornito informazioni, sugge­ rimenti e indicazioni durante la stesura di questo libro, in particolare i professori Negrini, Stefanelli, Salice, Sciuto, Bolchini, Fm e Pravadelli e i docenti che hanno rivisto le bozze della seconda edizione.

Gli Autori

Ringraziamenti dell'editore L ’editore ringrazia i revisori che con le loro preziose indicazioni hanno contribuito alla realizzazione della seconda edizione di Progettazione digitale: Michele Di Santo, Università degli Studi del Sannio Michele Favalli, Alma Mater Studiorum Università di Bologna Enrico Martinelli, Università degli Studi di Siena Alessandro Paccagnella, Università degli Studi di Padova

Introduzione

1.1 Evoluzione della progettazione dei sistemi digitali Dal momento della pubblicazione della prima edizione di questo libro, la diffusione dei sistemi elettronici digitali si è ulteriormente estesa, giungendo alla creazione di quelli che vengono oramai definiti “sistemi pervasivi”, presenti nei più diversi ambiti. In meno di cento anni - se si vogliono prendere come punto di partenza i sistemi elettromeccanici per la tabulazione o per i controlli - si è passati da soluzioni dedicate a poche e specifiche applicazioni a soluzioni flessibili e adattabili ai campi più vasti, 'grazie allo sviluppo (a partire dagli anni Settanta del XX secolo) delle tecnologie microelettroniche, e in particolare della tecnologia CMOS (Complementary Metal Oxide Semiconductor). La disponibilità di un insieme relativamente ridotto di regole di sintesi per i sistemi digitali - regole dipendenti solo dalle specifiche funzionali e non da caratteristiche tec­ nologiche - insieme alla possibilità di applicare tecniche di ottimizzazione di comples­ sità accettabile, hanno portato fin dai primi anni Cinquanta alla realizzazione di stru­ menti automatici p er la sintesi (i cosiddetti CAD tools, dove CAD sta per Computer Aided Design), che col passare degli anni sono divenuti capaci di supportare non solo il progetto di sistemi di elevatissima complessità, ma anche la verifica della validità di tale progetto e la ricerca dei guasti nel sistema realizzato. Sempre più spesso il proget­ tista del sistema si trova a fare uso di blocchi pre-progettati e ottimizzati; a parte le librerkTecnologiche - che forniscono unità elementari utilizzabili per progettare qual­ siasi circuito digitale - oggi si rendono disponibili al progettista blocchi pre-progettati di complessità anche molto elevata (quali interi microprocessori, coprocessori per fun­ zioni specifiche ecc.). Un simile approccio alla progettazione rende possibile la crea­ zione in tempi relativamente brevi di circuiti integrati che oggi possono contenere an­ che miliardi di transistori. Si sta ora affermando una metodologia di progettazione che viene indicata come platform-based design; alla base di questo approccio è la definizione di piattaform e, identificate ai diversi livelli di astrazione nel flusso di progettazione, per ognuna delle quali si può pensare che i dettagli e i passi di sintesi dei livelli sottostanti vengano “ma-

2

Capitolo 1

sc h e ra tr al progettista (salvo quanto indispensabile) in modo da facilitare il suo compi to e rendere più veloce il processo di progettazione. La progettazione di un sistema digitale inizia così da una specifica funzionale che descrive comportamento e interfaccia di ingresso-uscita del sistema, per g iu n g e re ^ traverso una successione di passi di sintesi e ottimizzazione fino alla trasposizione (mapping) su una specifica tecnologia microelettronica, secondo un tipico approccio "dall’alto verso il basso” {top-down). A ll’opposto, la definizione delle piattaforme - ai vari livelli di astrazione - procede “dal basso verso l’alto” {bottom-up) così che una metodologia platform-based” diventa di fatto una soluzione in cui i due approcci si “incontrano a mezza via” {meet in thè middle). Non ultimo dei vantaggi di una metodo­ logia come questa è la possibilità di trasferire uno stesso progetto di sistema su tecno­ logie differenti, cosa certamente non possibile se il progetto venisse affrontato imme­ diatamente al livello di astrazione più basso. E quindi ragionevole affrontare il problema della progettazione dei sistemi digitali in termini essenzialmente informatici (come si farà in questo libro) piuttosto che elet­ tronici: la fase di progetto e ottimizzazione elettronica può essere di fatto separata da quella del progetto di sistema, e al progettista di quest’ultimo non si chiedono cono­ scenze di dettaglio in campo elettronico. Chiaramente, una sia pur modesta conoscenza delle caratteristiche e del comportamento dei dispositivi elettronici è, se non del tutto indispensabile, certamente molto utile per comprendere aspetti di fattibilità, particolari limiti di applicazione, motivazioni sottostanti la scelta di specifiche cifre di merito e così via.

1.2 Flusso di progettazione dei sistemi digitali Attualmente, parlando di sistemi di grande complessità (non necessariamente digitali o anche più generalmente elettronici) si fa spesso riferimento al concetto di “livello di astrazione”. Un livello di astrazione può essere visto come correlato, da un lato, all’informazione riguardante la realizzazione fìsica (o implementazione) del sistema (quanto più alto è il livello di astrazione a cui si descrive un sistema, tanto più i dettagli relativi all’implementazione risultano nascosti) e, dall’altro lato, aH’informazione che definisce le funzionalità e il “comportamento” del sistema come visti dall’utente finale (il quale di norma ben comprende una descrizione in termini generali del comporta­ mento del sistema, mentre non riuscirebbe ad astrarla da una descrizione in termini di componenti elettronici!). Si pensi per esempio a un sistema complesso di grandissima diffusione quale la centralina elettronica per il controllo di un’auto: al massimo livello di astrazione, si vuole sapere semplicemente come la centralina gestirà il controllo dell’iniezione piut­ tosto che quello dell’ABS, in risposta alle diverse condizioni di funzionamento e agli stimoli esterni, indipendentemente dalla tecnologia di realizzazione. A un livello di astrazione più basso si vuole definire 1*architettura della centralina, tipicamente in ter­ m ini di una struttura costituita da microprocessori, memorie, circuiti digitali progettati ad-hoc, interconnessioni fra i diversi blocchi ecc. Se ci si fermasse alla descrizione della struttura hardware, si perderebbe in buona p arte la conoscenza del comportamento, dato che questo dipenderebbe dal software e-

Introduzione

3

seguito dai microprocessori. A livelli di astrazione ancora più bassi, non risulterebbe più possibile riconoscere microprocessori o circuiti specifici, ma si vedrebbero solo un gran numero di componenti digitali elementari (le cosiddette “porte logiche”) collegati fra loro; al livello mimmo possibile, esaminando con un microscopio di grande potenza Tfcircuito integrato, non si vedrebbero che schemi geometrici che compongono le co­ siddette “maschere di integrazione” realizzate sul substrato di silicio. Il progetto di un sistema digitale può essere affrontato a diversi livelli di astrazione: da quello più elevato —di sistema —a quello più basso —quello di porta logica (i livelli sottostanti sono propri piuttosto dell’elettronica). Idealmente si può considerare un classico flusso di progettazione di tipo top-down che può essere rappresentato schema­ ticamente come in Figura 1.1. Una descrizione di questo tipo è del tutto indipendente dall’insieme di strumenti di progettazione assistita da calcolatore che si utilizzano; in effetti, è addirittura indipen­ dente dal fatto che tali strumenti vengano utilizzati oppure no. Il committente del progetto fornisce le specifiche del sistema da progettare, sia in termini funzionali (che cosa il sistema deve fare e come si interfaccia con l’esterno) sia in termini non funzionali (i vincoli temporali, i limiti al consumo di potenza ecc.). Quello che egli descrive è essenzialmente il comportamento del sistema, unitamente ai vincoli non funzionali.

Livelli di astrazione

Compiti di progetto

Livello comportamentale

Livello registrounità funzionale

Livello logico

Livello geometrico

Figura 1.1 Flusso di progettazione dei sistemi digitali.

0

4

Capitolo 1

Dalle specifiche funzionali, il progettista digitale deduce uno schema ad alto livello*’ che definisce Varchitettura in termini di unità funzionali collegate fra loro mediante percorsi di dati e segnali di controllo', anche in questo caso - e a seconda della natura del sistema - possiamo in realtà distinguere più livelli di dettaglio: per esempio, dal livello “microprocessore - memorie - unità di collegamento col mondo esterno” verso una descrizione in termini di “unità aritmetiche - contatori - memorie elementari”. Questo nuovo schema “architetturale” ottenuto al livello di maggior dettaglio (minore astrazione) è spesso indicato con il termine schema RTL (Register Transfer Level). Dalla descrizione formale RTL si deriva tipicamente, sulla base di vincoli non funzionali (quali tempo di elaborazione, area, costo ecc.), il progetto logico, che fornisce una rete di porte logiche o di altri componenti di comparabile complessità opportunamente interconnessi: si noti che a questo livello si è persa ogni visibilità, non solo del comportamento, ma anche delle funzionalità svolte e del flusso di controllo. Inizialmente, sulla base delle specifiche, il progettista si trova - almeno in linea di principio - a dover esplorare uno “spazio di progetto” che per sistemi complessi può essere estremamente - addirittura eccessivamente - vasto; in tale esplorazione viene guidato dai vincoli imposti dalle specifiche (in particolare, dai requisiti non funzionali - per esempio la latenza, il consumo energetico ecc.) nonché, inevitabilmente, dalla sua esperienza, dai progetti sviluppati in precedenza e - oggi, sempre di più - dalla di­ sponibilità di blocchi pre-progettati, schemi di interconnessione, anche software nel caso di sistemi che includano microprocessori o altre unità programmabili, così da ri­ correre a un “riuso” che riduca i tempi di progettazione e di verifica. A ogni passaggio da un livello di astrazione più elevato a uno inferiore corrisponde una fase di sintesi, che nel più tradizionale progetto “manuale” è compiuta dal progettista senza il suppor­ to di strumenti informatici: una sintesi non è solo una trasformazione da un livello a un altro, ma comporta anche un'aggiunta di informazione1e una riduzione dello spazio di progetto (la sintesi comporta in genere l’esclusione di un certo numero di scelte poten­ ziali). Si può anche vedere un passo di sintesi come la trasformazione da una specifica (iniziale o intermedia) a un’implementazione (completa o intermedia). Nelle fasi di sin­ tesi si può ricorrere a strumenti di sintesi automatica, che realizzano il passo richiesto applicando opportuni criteri di ottimizzazione. Ricorrere a una metodologia platform-based significa fra l’altro consentire al pro­ gettista di ridurre lo spazio di progettazione che deve esplorare. Facendo riferimento alla definizione proposta da Sangiovanni-Vincentelli per una tale metodologia12, secon­ do cui la “definizione generale di piattaforma è un livello di astrazione nel flusso di progettazione che facilita un certo insieme di possibili raffinamenti verso un successi­ vo livello di astrazione dello stesso flusso”, una volta identificati in modo preciso i li­ velli a cui si associano le astrazioni di potenziali implementazioni sottostanti, il proget­ tista si muove astraendo dai dettagli di tali implementazioni se non per quanto riguarda l’informazione che gli consentirà di valutare con ragionevole accuratezza le proprietà della realizzazione finale.

1

Nel corso del passaggio si compiono delle scelte (per esempio, la “forma” logica scelta, la famiglia di porte logiche, le fasi di ottimizzazione e di conseguenza le relative scelte di meri­ to) che corrispondono ad altrettanti incrementi d’informazione.

2

Sangiovanni Vincentelli A., “Defming Platform-based design”, EETimes, 2006

Introduzione

5

Al termine di ogni passo di sintesi si presenta evidentemente la necessità di verificare che il risultato della sintesi - il progetto, sia pure parziale, così ottenuto - sia con­ gruente con la specifica a partire dalla quale la sintesi è stata effettuata. Oggi, la verifica della correttezza e della completezza delle diverse descrizioni del sistema ottenute ai diversi livelli di astrazione viene compiuta prevalentemente mediante successive fasi di simulazione, utilizzando strumenti di CAD che “simulino” il fun­ zionamento del sistema (ai diversi livelli di astrazione: funzionale, logico, elettrico) in risposta a opportuni insiemi di stimoli d ’ingresso (vettori d ’ingresso). Analizzando i risultati della simulazione, il progettista verifica se questi coincidono con i valori attesi e quindi se il prodotto della sintesi è corretto. La simulazione può fornire informazioni di vario tipo: per esempio, riferendosi al livello di porta logica, si può fare una simulazione “logica”, considerando che tutti i componenti siano ideali e introducano ritardo nullo (in questo caso i risultati ottenuti riguardano solo i valori lo­ gici delle uscite, a prescindere daH’influenza dei ritardi) oppure si possono introdurre anche le caratteristiche temporali dei componenti e dei segnali e ottenere quindi anche un’analisi temporale dei risultati. La simulazione richiede la disponibilità di librerie di modelli cui il progettista possa fare riferimento e che vengono richiamate dai programmi di simulazione; in esse sono registrati i “modelli” dei componenti che il progettista può utilizzare per la simulazio­ ne, modelli che forniscono al simulatore l’insieme di informazioni necessarie (dal comportamento funzionale a quello logico, elettrico, temporale ecc., a seconda del li­ vello di astrazione cui ci si riferisce e delle informazioni che si vogliono estrarre dalla simulazione). Le stesse librerie vengono di fatto impiegate anche durante la sintesi, sebbene l’informazione utilizzata in questo caso sia in genere più ridotta. Al program­ ma di simulazione si forniscono in ingresso:• • • •

la descrizione del sistema da simulare, in un opportuno “linguaggio per la descri­ zione di hardware” (HDL - Hardware Description Language)', la libreria di modelli; i vettori di ingresso.

All’uscita si ricavano le risposte in termini di livelli logici e le forme d’onda dei segna­ li, eventualmente le temporizzazioni e altri parametri. Si identifica subito il principale problema della “verifica per simulazione”, e cioè la necessità di determinare un insie­ me di vettori di ingresso sufficiente a garantire la correttezza del progetto - o più pro­ priamente la rispondenza del progetto alle specifiche. A meno che il sistema non sia molto piccolo, una simulazione esaustiva (che valuti cioè le risposte a tutti i possibili vettori d ’ingresso) è ovviamente improponibile in termini di tempo di calcolo; peraltro, è pressoché impossibile garantire che il sottoinsieme di vettori d’ingresso effettivamen­ te adottato sia sufficiente a “coprire” tutte le situazioni possibili e quindi a fornire la richiesta garanzia. In genere il progettista deve identificare sulla base della propria esperienza l’insieme di situazioni che giudica più “critiche” ai fini della sollecitazione del sistema; alcuni ben noti casi di circuiti digitali anche di notevole diffusione che hanno mostrato - una volta già diffusi sul mercato - di essere afflitti da errori di progetto, sono dovuti proprio a una fase di verifica basata su simulazione che non aveva sollecitato tutti i possibili percorsi di attivazione presenti all’interno del sistema.

6

Capitolo 1

Il ricorso a strumenti automatici di simulazione e di sintesi rende evidente r spensabilità di un linguaggio form ale per la descrizione dei circuiti digitali: in un formalismo rigoroso risulta utile anche indipendentemente dalle attività di CAD ’ per esempio, per garantire che un circuito anche di grande complessità sia acco " pagnato da una documentazione completa che risulti leggibile e comprensibile a u gruppo di progetto che può cambiare nel tempo o a utenti del progetto stesso che vogliano integrare il circuito in un proprio sistema più complesso. La definizione di linguaggi per la descrizione di hardware ha coinvolto gli studiosi del settore oramai da diversi decenni: si sono distinte due diverse tendenze - estendere un linguaggio di programmazione esistente, in modo da supportare le esigenze del pro­ getto hardware, oppure introdurre un linguaggio specifico (sia pure allineato con le ca­ ratteristiche dei linguaggi di programmazione recenti) di cui le esigenze della progetta­ zione hardware siano le principali linee guida. Un esempio della prima tendenza è SystemC, estensione del C++. I linguaggi della famiglia HDL oggi di maggiore diffusione (adottati dai più noti pacchetti CAD) se­ guono la seconda tendenza, e sono in particolare Verilog e VHDL? Verilog ha origini essenzialmente commerciali, mentre VHDL nasce da un progetto del ministero della difesa americano (il progetto VHSIC) di cui costituiva appunto il linguaggio di descri­ zione hardware, ed è stato definito in modo da rispondere a un certo numero di requisi­ ti essenziali. Sebbene l’obiettivo di questo libro non sia certo lo studio dei linguaggi HDL, nell’Appendice A è proposta una breve introduzione a VHDL e SystemC.

1.3 Obiettivi del libro Scopo di questo libro è introdurre il lettore alle metodologie di progetto dei circuiti e sistemi digitali, partendo dal livello di astrazione più basso e dai circuiti più semplici (quindi dal livello di porta logica e dai circuiti combinatori, cioè privi di memoria) per passare a circuiti più complessi e a livelli di astrazione più elevati, muovendosi verso architetture più complesse basate su blocchi pre-progettati di tipo RTL. Facendo ancora una volta riferimento alla Figura 1.1, nel presente libro si affronta­ no gli aspetti del progetto logico e del progetto architetturale, introducendo formalismi descrittivi, metodologie di sintesi e tecniche di ottimizzazione. La presentazione non esaurisce certo la molteplicità di soluzioni proposte nella letteratura scientifica; in par­ ticolare, ci si è voluti concentrare sugli approcci meglio assestati e più ampiamente uti­ lizzati nella pratica. Anche se - proprio sulla base di quanto indicato in precedenza - il progettista oggi spesso ricorre a strumenti di CAD che rendono “trasparenti” sintesi e ottimizzazione, o fa addirittura uso (meglio, ri-uso) di unità preprogettate, è anche vero che più volte si troverà a dover sintetizzare blocchi digitali semplici, per i quali riesce più immediato operare una sintesi manuale. Comunque, è indispensabile conoscere le basi teoriche degli strumenti CAD che si utilizzano (o che si valutano per una succes­ siva utilizzazione) per poterne interpretare i risultati e al fine di comprenderne validità e limiti di utilizzo. Spesso inoltre può essere utile intervenire nel flusso automatico di 3

VHSIC Hardware Description Language, dove VHSIC significa Very High Speed Integrated Circuit

Introduzione

7

progettazione al fine di guidare gli strumenti là dove sono possibili scelte alternative; ancora una volta, ciò è possibile solo quando il progettista sia in grado di comprendere i criteri secondo i quali gli strumenti medesimi operano. Per indicare come le metodologie descritte siano rispecchiate da strumenti CAD, si farà riferimento nel libro a SIS, un pacchetto software di dominio pubblico sviluppato presso l’Università di California a Berkeley, e dotato poi di interfacce grafiche utente presso l’Università degli Studi di Verona. Questo strumento CAD permette di applica­ re direttamente tutti gli algoritmi di progettazione e ottimizzazione descritti nel libro, algoritmi che vengono oramai nascosti all’utente nei software commerciali. Inoltre viene dedicato ampio spazio, in ciascun capitolo del libro, agli aspetti progettuali me­ diante numerosi esempi di circuiti digitali descritti nei linguaggi VHDL e SystemC. Queste descrizioni possono essere in parte analizzate mediante strumenti CAD di do­ minio pubblico e in parte solamente mediante strumenti commerciali (si veda l’Appendice B). Lo sforzo degli autori in tal senso è stato dettato dall’importanza fon­ damentale rivestita oggi dagli strumenti CAD per supportare le diverse fasi della pro­ gettazione dei circuiti e sistemi digitali. Gli autori hanno ritenuto opportuno mettere in grado il lettore di affrontare le pro­ blematiche relative alla progettazione di sistemi digitali complessi non soltanto cono­ scendone gli aspetti teorici, ma soprattutto acquisendo la necessaria sensibilità e m a­ nualità di utilizzo dei linguaggi e degli strumenti “informatici” di supporto alla proget­ tazione, senza i quali sarebbe oggi impensabile affrontare i livelli di complessità, inte­ grazione e prestazioni raggiunti dagli attuali sistemi digitali, nel rispetto dei tempi di progetto. Infine, qualche parola sugli aspetti tecnologici. Come si è già detto, il libro affronta il progetto sotto il profilo “informatico”; si presenteranno a puro scopo indicativo gli schemi-tipo in tecnologia CMOS dei più semplici componenti logici, onde far meglio intuire poi le motivazioni che portano alla definizione e alla scelta di particolari cifre di merito quando si affronta l’ottimizzazione dei circuiti. Si dedicherà quindi qualche spazio al problema del cosiddetto mapping tecnologico - cioè della trasposizione di un progetto elaborato in termini generali o astratti, su componenti logici “reali” apparte­ nenti a una precisa “libreria tecnologica”.

1.4 Struttura ragionata del libro I percorsi proposti dai Corsi di Laurea in Ingegneria e in Informatica variano m olto da ateneo ad ateneo, e spesso anche in uno stesso ateneo garantiscono una notevole flessi­ bilità di scelta allo studente. Come diretta conseguenza i corsi che affrontano il proget­ to dei circuiti e dei sistemi digitali sono molto diversi per durata, contenuti, livello di approfondimento e anche per quanto riguarda le nozioni che gli allievi hanno acquisito in corsi precedenti. D ’altra parte si è preferito limitare al massimo l ’insieme di conoscenze preliminari da considerare acquisite prima di affrontare la lettura di questo libro; analogam ente si è scelto di condurre a un buon grado di compimento i diversi argomenti (sia pure senza eccessivi dettagli specialistici che il lettore potrà approfondire su articoli e libri della

?

8

Capitolo 1

letteratura scientifica): il lettore potrà “ritagliare” il percorso di studio più ad» all’interno del materiale presentato. Essenzialmente, l’unico presupposto per affrontare la lettura di questo libro è la co. noscenza delle basi dell’informatica, inclusa la capacità di realizzare o analizzare Un semplice algoritmo nonché quella di comprendere le caratteristiche di un linguaggio di programmazione e di realizzare un programma (o di comprendere un frammento di un programma dato). Si suppone quindi che la nomenclatura essenziale sia nota, anche se ciò non impedirà di ridefinirla in termini rigorosi quando si debbano introdurre concetti e metodi di progetto che di tali termini fanno uso. Anche se i principi essenziali riguardanti la codifica dell’informazione sono certa­ mente noti, si è preferito riprenderli e approfondirli nel Capitolo 2, per definire alcuni concetti di base che saranno utili nei capitoli successivi. Gli aspetti di codifica sono trattati qui in modo relativamente ampio: si è voluto in particolare concedere spazio alla rappresentazione dell'informazione numerica e non numerica, e ai relativi stan­ dard. Il lettore che non volesse approfondire gli aspetti di aritmetica può evitare di sof­ fermarsi sui relativi paragrafi e sul Capitolo 7, interamente dedicato ai circuiti che rea­ lizzano le operazioni aritmetiche. Analogamente, si è deciso di affrontare l’algebra di commutazione in termini gene­ rali, introducendone nel Capitolo 3 proprietà e caratteristiche, prima di costruire su quest’algebra le regole per realizzare i circuiti digitali di tipo combinatorio (cioè circui­ ti privi di memoria, le cui uscite in un qualunque istante dipendono solamente dai valo­ ri degli ingressi applicati nello stesso istante). L ’algebra di commutazione costituisce la base anche per le tecniche di ottimizza­ zione dei circuiti combinatori descritte nel Capitolo 4: oltre ai metodi esatti di ottimiz­ zazione di circuiti a una e a più uscite, si delineano anche alcune delle soluzioni euri­ stiche più usate negli strumenti di progettazione automatica. È sembrato utile indicare anche brevemente come da una sintesi “astratta”, quale quella così ottenuta, si possa passare all’effettivo schema (sia pure ancora logico) del circuito reale, facendo riferi­ mento alle “librerie” di celle elementari ottimizzate che una data tecnologia microlettronica (o una data azienda produttrice di silicio) mette a disposizione. Questo proble­ ma, detto di “mapping tecnologico”, viene visto sia in termini di celle elementari su si­ licio sia con riferimento alle tecnologie di logica programmabile (i cosiddetti FPGA Field Programmable Gate Array) che oggi sono adottati sempre più ampiamente nella progettazione digitale. Dai circuiti combinatori si passa quindi ad affrontare il progetto dei circuiti sequen­ ziali sincroni (circuiti nei quali è possibile introdurre in modo esplicito il concetto di tempo, scandito da un segnale periodico o di sincronizzazione generato indipendente­ mente): il loro progetto sarà visto dapprima in termini elementari, che consentano di realizzare semplici circuiti in modo essenzialmente intuitivo nel Capitolo 5 , trattandone poi la sintesi e l’ottimizzazione sotto vari aspetti nel Capitolo 6. Con questo capitolo si completa la parte più “tradizionale” del progetto digitale: quella a livello di porta logica. Prima di passare a soluzioni a più alto livello di astra­ zione, si è giudicato opportuno inserire un capitolo sul progetto dei circuiti aritmetici (Capitolo 7), nel quale vengono presentate alcune fra le più note soluzioni per i circuiti che realizzano le operazioni aritmetiche in virgola fissa, e indicare gli algoritmi per l ’implementazione delle operazioni in virgola mobile. La trattazione è relativamente

Introduzione

9

estesa; sta al lettore stabilire se fermarsi ai “rudimenti” deH’aritmetica (sostanzialmente ai circuiti addizionatori ed eventualmente allo schema-base dei moltiplicatori) o se ap­ profondire le varie soluzioni presentate. Come per 1 aritmetica, anche per altre funzionalità di larghissimo impiego esistono soluzioni preprogettate e ottimizzate che vengono usate come “macrocelle” nella sinte­ si a livello RT: in effetti, le librerie tecnologiche oggi esistenti non si limitano al livello di porta logica, ma propongono anche blocchi standard di maggiore complessità e di più elevato livello di astrazione. Tali componenti vengono descritti nel Capitolo 8, con lo scopo di comprendere come mediante tali componenti si possa realizzare un flusso di elaborazione dati (data patii) e progettare un’architettura anche complessa basata sulla filosofia controllore data patii. Agli aspetti più tecnologici della progettazione digitale è dedicato il Capitolo 9. Vi vengono presentati i principali algoritmi per la trasformazione (mapping) della descri­ zione logica ottimizzata di un circuito in un dispositivo reale e vengono inoltre descrit­ te le librerie tecnologiche di porte logiche, gli elementi di memoria e i dispositivi pro­ grammabili (FPGA). I capitoli che trattano aspetti progettuali sono ampiamente corredati da esempi ed esercizi risolti con strumenti automatici e manuali. In particolare, ciascuno dei capitoli relativi ad aspetti progettuali contiene un paragrafo intitolato “Esercizi con strumenti automatici'’, che descrive la realizzazione delle diverse fasi di progetto, descritte nel capitolo stesso, con un esempio significativo risolto tramite l’applicazione dello stru­ mento CAD di dominio pubblico cui si fa riferimento nel testo. Tali paragrafi sono inoltre corredati da semplici esempi di circuiti e sistemi digitali descritti nei due lin­ guaggi VHDL e SystemC. Alla fine di ogni capitolo, due paragrafi, intitolati rispettivamente “Esercizi risolti' ed “Esercizi proposti", contengono una raccolta di esercizi “manuali”, di difficoltà comparabile a quella degli esempi trattati nel capitolo corrispondente, con i quali il let­ tore è invitato a confrontarsi. Nei primi è ampiamente descritto il processo logico ne­ cessario alla soluzione, mentre i secondi sono lasciati all’approfondimento del lettore. Infine, al termine del libro sono inserite due appendici che descrivono, la prima (Appendice A), gli aspetti essenziali dei due linguaggi VHDL e SystemC e, la seconda (Appendice B), le funzionalità e le interfacce utente dei tool di progettazione automati­ ca a cui si fa riferimento nel testo. Il lettore interessato, e il gestore dei laboratori colle­ gati a un corso di progettazione digitale, potranno approfondire questi aspetti sul sito web del libro: h t t p : / / www. at eneonl i ne. i t/fummi.

Codifica deirinformazione b l5 C fc t'n :2-;ZA Z.>O N £,-^ CoM StM re. fcl R.lt,u£££ UM £ C A O P IO N ftM ^N rO F I N T O bi e iE N v e N T »

co. In generale sono noti eoe s, mentre si vuo­ le determinare proprio il minimo valore di 1, che risulta dalla disuguaglianza: / > Tlogi col dove con IV] si indica il minimo intero non inferiore a x. Individuare la lunghezza minima necessaria per i nomi degli oggetti non è che il prim o passo della fase di codifica dell’informazione. Successivamente occorre scegliere una corrispondenza uno a uno. tra le configurazioni di / bit disponibili e gli oggetti dell’insieme 12. Nel caso in cui / > log^ coI occorre inoltre scegliere, tra le 2l configu­ razioni possibili, le co configurazioni che verranno effettivamente usate. Se conside­ riam o per esempio il caso binario (s = 2), per rappresentare la più elementare informa­ zione alfanumerica, cioè i 25 caratteri alfabetici più le dieci cifre decimali, dovremo considerare configurazioni di / bit dove / = l~log2 35~| = 6 . Se poi per ogni carattere alfa­ betico si volessero rappresentare sia la versione maiuscola sia quella minuscola, e si volessero inoltre rappresentare anche i fondamentali simboli grafici e di interpunzione (alm eno quindici simboli), gli oggetti da rappresentare diventerebbero 75 e la lunghez­ za / sarebbe data da: / = l~log2 75 I = 7. In effetti, il più diffuso de] codici alfanumerici in uso nei calcolatori, il codice ASCII (American Standard Code f o r Inform ation Interchange), e un codice a 7 bit, in grado quindi di codificare 128 caratteri (2 7 = 1 2 8 )7 detti A SC II Standard. Sorgp spontangaJa-dom anda: .perché utilizzare. 7 bit e non utilizzare | un num ero di bit pari a ^m -PO tenza di 2, per esempio 8 bit per rappresentare l’in- | form azione alfanumerica. Questa ovvia considerazione ha dato origine al Codice

Codifica dell'informazione 13 ASCII E s te s o n e bit, in grado di codificare 256 caraneri (2* = 256). In pratica, aLcodice ASCII Standard è s ^ ^ a g g iu n to jin bit: se questo bit è a 0 (Oxxx xxxxji caratteri codificati sono q u e llio rig in ^ (A S C II Standard), se è a l (lxxx xxxx)i caratterLcsprimono caratteri semi grafìa (caratteri ASCII estesi), come elementi di comici, lettere nazionali, simboli matematici ere

2.3 Codifica dell'informazione numerica: notazione posizionale -A c a p a t a

+- IrAPfcprArsire

La caratteristica più importante del metodo di rappresentazione numerica che utiliz­ ziamo abitualmente non è la base, il 10 —grandi civiltà come quella babilonese o quella maya svilupparono matematiche notevoli utilizzando basi diverse, rispettivamente 60 e 20 - ma la notazione posizionale. Questo significa che un numero è rappresentatocome una successione di simboli o cifieTe che il valore da attribuire alla singola cifra è legato alla posizione che essa possiede nel numero. Più esattamente, a ogni posizione è associato un peso, e il valore attribuito alla cifra deriva dal prodotto di tale peso per il valore della singola cifra. Si consideri dapprima il caso di un numero intero positivo N. Se indichiamo con 0. 1, 2, . . . , n —1 il numero d’ordine delle posizioni delle varie cifre a partire da destra, con Pi (i = 0 , 1, 2, . . . , « —1) il peso associato alla /-esima posizione e con c, (/ = 0, 1, 2, . . . , n - 1) la generica cifra scritta nella /-esima posizione, il numero intero positivo N risulta rappresentato dalla sequenza di cifre: C*-l Cn-2 "• C1C0 e il suo corrispondente valore risulta dato da: N=

x / v , + c ^ x p ^ + ... + c l x p i + c0x p 0

Le cifre c, sono espresse in un base B, in modo che ogni cifra possa assumere uno qual­ siasi dei valori da 0 a {B - 1). Un caso particolarmente interessante di notazione posi­ zionale - anzi, quello di interesse pratico - si ha quando il peso associato alla posizio­ ne /-esima coincide con l’i-esima potenza della base: N = c ì x B r ' + cHT x B r 2 + . . . + c l x B ' + c 0x B ° = H c . x f l ' . La numerazione decimale risulta dunque un caso particolare di notazione posizionale. Per esempio, 4027 rappresenta il numero: /V10= 4 x IO3+ 0 x IO2+ 2 x 10' + 7x10°. Questo tipo di notazione è immediatamente estendibile dai numeri interi ai numeri rea­ li: il concetto di peso si estende alla parte frazionaria, e quindi a potenze negative della base. Un numero reale N risulta espresso come. Nb= ± Cix B \ «w Per esempio, 0,234 rappresenta il numero:

r 14

Capitolo 2______________________ _____________________________________ ^

N 10= 0 x 10° + 2 x IO-1 + 3 x IO"2+ 4 x IO"3 Passando a una qualunque altra base B \ si deve solo ricordare che le singole cifre devono essere espresse nella base B ' (con valori interi com presi tra 0 e B' - j) e che le posizioni sono associate alle potenze della base B'. Riferendosi alla base 2 la più piccola base significativa - le cifre possono assumere solo i due valori 0 e i e le posizioni sono associate alle potenze del 2. Si parla in questo caso di numeri binari. Se consideriam o, per esempio, la base B = 8 (numeri ottali), l’insieme dei simboli è composto dall’insieme {0, 1, 2, 3, 4, 5, 6 , 7}. In generale, poiché non disponiam o di coefficienti numerici nell’intervallo da 10 a (B - 1) con B > 10, si utilizzano le lettere dell’alfabeto A, B, C ecc. Per esempio, se consideriamo la ba­ se B = 16 (numeri esadecimali), l’insieme dei simboli diversi è composto dall’insieme (0 , 1, 2, 3, 4, 5, 6 , 7, 8, 9, A, B, C, D, E, F}. Le rappresentazioni dei | num eri interi da 0 a 15 sono fornite nella Tabella 2.1 per diverse basi.

Tabella 2.1 Rappresentazioni dei numeri interi da 0 a 15 per diverse basi.

Nb

Base 2

Base 3

Base 4

Base 5

0000

000

00

00

00

00

0

0001

001

01

01

01

01

1

0010

002

02

02

02

02

2

0011

010

03

03

0100

Oli

10

04

03 04

03 04

3 4

0101

012

11

10

05

05

5

Olio

020

12

11

06

06

6

Ol i i

021

13

12

07

07

7

1000

022

20

13

10

08

8

1001

100

21

14

11

09

9

1010

101

22

20

12

10

A

1011

102

23

21

13

11

B

1100

110

30

22

14

12

C

noi

111

31

23

15

13

D

Ilio

112

32

24

16

14

E

1111

120

33

30

17

15

F

...

Base 8

...

Base 10

...

Base 16

2.4 Conversioni di base L a notazione posizionale contiene in sé anche il concetto di conversione da una base a u n ’altra. Siano B%la base sorgente nella quale è espresso il numero e B0 la base oggetto

Codifica dell'informazione

15

nella quale si vuole convertire il numero. La conversione si effettua partendo dal[l’espressione del numero nella base Bs:

x b ;~'+ c ,_2x b ;-2+ . . . + c , x B ' + c „ x B ° e riscrivendola esprimendo sia le cifre c. che le potenze B ‘ nella base Ba. Questo metodo diretto o polinomiale risulta particolarmente comodo quando la base oggetto è la base 10. in questo caso, infatti, cifre c. e potenze B's risultano facilmente convertite a una notazione molto familiare. Si consideri per esempio la conversione di un numero intero W dalla base 2 alla base 10. Sia N = (100101)2. Esprimendo N secon­ do la notazione posizionale esplicita nella base 2, e riscrivendo tale espressione utiliz­ zando cifre e potenze nella base 10, si ottiene: N w = 1 x 25+ 0 x 24 + 0 x 23+ 1 x 22+ 0 x 21+ 1 x 2° = 37 . Analogamente si consideri come esempio la conversione di un numero decimale N dal­ la base 2 alla base 10. Sia N = (1011,101)2. Seguendo lo stesso metodo di conversione, il numero N risulta espresso nella base 10 da: N l0= 1 x 2 3+ 0

x

2 2+ 1 x 2 ' + 1 x 2 ° + 1 x 2 _1 + 0 x 2 ‘2+ 1 x2"3= 11,625.

Per effettuare la conversione da base 10 a base B si utilizzano invece metodi itera­ tivi. In particolare, occorre usare due differenti metodi per la parte intera e per quella frazionaria. Si consideri dapprima la conversione della parte intera, e si faccia riferimento in particolare alla conversione decimale-binaria. Utilizzando la notazione decimale, il numero intero N è espresso da1: N 10= d„_, x IO”-1 + dn_2 x IO"-2 + ... + d xx I0l + d0x 10°. Si vuole ottenere la notazione binaria del numero N, che sarà data da: N2 = bk_x x 2*-1 + bk_2 x 2 *~2+ ... + bx x 2’+ b0 x 2° Sarà sicuramente k > n (in genere sarà k > n); a priori, anche A; è a sua volta un’incognita: sappiamo solo che deve essere 2 > 10". Consideriamo ora - in notazione decimale - l’operazione N /l: se N è pari, il resto R0 dell’operazione è 0, altrimenti è 1. Si ha dunque NI2 = N0 con un resto che può vale­ re 0 oppure 1. Ripetendo l’operazione N /l sulla notazione binaria, si ottiene: (N I2\ = bk_x x 2k~2 + bk_2 x 2*"3+ ... + bx x 2°. con resto pari a b0. Ovviamente il valore del resto e identico al precedente, quindi il re­ sto R dell’operazione di divisione decimale fornisce il valore del bit meno significati­ vo b °della notazione binaria. Ripetendo l’identica operazione di divisione decimale su N0 si° ottiene b v e si procede finché il risultato di una divisione non diventa pan a 0: a questo punto l’operazione di conversione è finita. Si consideri per esempio jV10= 23:

1 Si indicherà con d, la generica cifra /-esima in notazione decimale, con b. la generica cifra jesima in notazione binaria (cioè ily'-esimo bit).

16

Capitolo 2

22a

Pertanto risulta 23 = 1011U. Il m etodo p e r ottenere la c o n v e rsio n e d e lla p a rte fra zh . è in un certo senso duale al precedente. U tilizzan d o la n o ta z io n e dectmale, il numero frazionario N è espresso da: N lo = 0 +

x IO-1 + d_2 x 10 2+ ... +

x 10

.

Si vuole ottenere la corrispondente notazione binaria: N 2 = 0 + * , x 2 -1 + b _2 x 2 "2+ ... + b_j x 2 ' ; + . . . Si calcoli N x2: il risultato deve essere ovviam ente identico p e r am b ed u e le notazioni. Riferendosi alla notazione binaria, si ottiene: (N x 2 \ = b_, x 2° + 6 2 x 2 _1 + ... + b_j x 2 "7"1+ ... Dunque la parte intera del risultato dell’operazione N x 2 coincide con il b it p iù signi­ ficativo della notazione binaria b_r Ripetendo l’identica operazione di prodotto sulla parte frazionaria resid u a si otterrà b_2; si procede iterando il procedimento finché il risultato del prodotto risulta 1. S i c o n ­ sideri per esempio N 10 = 0,875.

‘1 Prodotti

Parti intere

0,875 x 2 = 1,75

b. i = l

0 , 7 5 x 2 = 1,5

b.2=1

0,5x2= 1

*3=1

- 0,1112. Si noti che il procedim ento p o N m = 0,23:

Parti intere

0, 23x2 = 0,46

o il -o1

0 , 4 6 x 2 = 0,92 0 , 9 2 x 2 = 1,84 0,84 x 2 = 1,68

0,68 x 2 = 1,36 0,36 x 2 = 0,72 Pertanto risulta 0,2310 = (0,001110...),.

II o

Prodotti

*4*1 *4*1 *4*1 *-6 = 0

n o n term inare.

Codifica dell'informazione

0

17

T~LC'^J

Tenendo presente che il numero di bit disponibili nel sistema digitale è ovviamente limitato, la conversione da notazione decimale a binaria comporta quindi problemi di possibile errore da superamento di capacità per la parte intera e di precisione per la parte frazionaria. Per quanto riguarda l’errore da superamento di capacità, esso nasce evidentemente quando il numero dei bit necessari per rappresentare la parte intera supera quello effettivamente disponibile nella macchina data, o quando - come si suol dire - il massimo intero rappresentabile con una macchina è inferiore a quello che si vorrebbe rappresentare. Quanto alla precisione, già nell’esempio della conversione di I P 3 10 si nota come questo problema compaia durante la conversione di un numero frazionario, non solo a causa del limite del numero di bit disponibili nella macchina, ma anche perché il risultato della conversione può essere non razionale. Si pone in genere la scelta tra il semplice troncamento (tutti i bit successivi a quello di posizione - k vengono semplicemente ignorati) e l ’arrotondamento (il valore attribuito al bit di posizione —k dipende anche dal valore che avrebbe il bit successivo di posizione K*+ DìParte almeno dei problemi cui si è accennato - e, in particolare, il campo di valori relativamente ristretto consentito da una rappresentazione in virgola fissa, per un asse­ gnato numero di bit - può essere superato ricorrendo alla cosiddetta rappresentazione in virgola mobile, basata sull’uso, per ogni numero, di una mantissa e di un esponente. Questo approccio non contrasta ovviamente con l’uso di una notazione binaria, che viene comunque utilizzata sia per l’esponente sia per la mantissa (il cui valore è nor­ malmente contenuto entro due limiti, inferiore e superiore, in modo che il suo bit più significativo valga sempre 1). Alla rappresentazione in virgola mobile si dedicherà am­ pio spazio nel seguito di questo capitolo.

2.5 Codifica ottale e esadecimale Sebbene all’interno di un calcolatore la rappresentazione usata è sempre quella in base ~2, esistono altre basi che sono spesso usate riferendosi ai calcolatori: l’utente umano trova infatti più comodo fare riferimento a una notazione esterna più compatta —in una base più alta della base 2 - j n modo da maneggiare sequenze di cifr epi ùbr evi chenon le sequenze di 0 e 1 che si trovano effettivamente all’interno del calcolatore. Per poter "sfruttare ta ì^ o m o d ità , la nuova base B deve essere tale che le conversioni da base b a base 2 e viceversa siano estremamente facili: questo avviene se B è una potenza di 2. In pratica, le basi tradizionalmente usate nel campo dei calcolatori sono la base 8 (nota­ zione ottale) e la base 16 (notazione esadecimale). Nel primo caso i simboli vanno da 0 a 7, mentre nel secondo caso i simboli usati sono le cifre da 0 a 9 seguite dalle lettere dell’alfabeto da A a F. L ’operazione di conversione fra notazione binaria e ottale (esa­ decimale) risulta molto Semplice e immediata, in quanto si sfrutta il fatto che un gruppo di tre (quattro) bit copre esattamente tutti i valori da 0 a 7 (da 0 a 15)_e rappresenta cioè tutte le cifre della base 8 (16) - si veda la precedente Tabella 2.1. In generale, mentre all’interno del calcolatore non si ricorre all’uso di una rappresentazione e relativa aritmetica ottale (esadecimale) - bensì a quella binaria l ’uso delle cifre ottali (esadecimali) è molto comodo all’utente per rappresentare in

18

Capìtolo 2

modo. Ltodo compatto, sequenze dì. bìLathìtnirium cntcluiiglie. Infatti, partendo dal bit lestra e procedendo verso sinistra, una sequenza ui dì bit grunn” h ! ?- " destra un viene suddivisa in grunn’ (quattro) bit (aggiungendo a sinistra, se necessario, degli zeri) e quindi a ogni g n m 1^ sostituisce la corrispondente cifra ottale (esadecimale). Per esem pio" sìa h m ° sì seguente numero su 16-bit: * at0 ^

tV; = 1010 1100 1110 0010. Eseguendo la conversione da notazione binaria a notazione esadecimale si ricava: N 16= A C E 2 . A questo punto il corrispondente valore decimale del numero dato si può ottenere esc guendo direttamente la conversione da esadecimale a decimale: N w = A x 16? + C x 16: + E x 16* + 2 x 16°= 44258 . Analogam ente, per la conversione della parte frazionaria di un numero binario nella corrispondente rappresentazione ottale (esadecimale), si parte dal bit più a sinistra e si procede verso destra suddividendo il numero binario in gruppi di tre (quattro) bit (ag­ giungendo a destra, se necessario, degli zeri) e quindi si sostituisce a ogni gruppo la corrispondente cifra ottale (esadecimale).

2.6 Codifica binaria delle cifre decimali Si considera a questo punto il problema della codifico binario delle dieci cifre decimali (da 0 a 9). Poiché occorrono almeno 4 bit - dal momento che servono almeno dicci configurazioni diverse - delle sedici (24) possibili configurazioni disponibili, sci resta­ no inutilizzate. I diversi codici decimali su quattro bit esistenti differiscono tra loro sia per la scelta delle dieci configurazioni utili, sia per la corrispondenza fra la cifra deci­ m ale rappresentata e la configurazione che la rappresenta. La scelta delle dieci configu­ razioni utili è una qualsiasi delle disposizioni D 1C11Hcioè uno qualsiasi dei modi possibi­ li di definire una sequenza di dicci simboli diversi presi da un insieme di sedici simbo­ li. Di tutti questi codici, di seguito citiamo i più conosciuti. ILcodice decimale piu diffuso ò il codice S421,jiQfQ_a!ichc_c.onie codice BCD .(da B inary Coded Decimai). In questo codice si utilizza semplicemente nell’ordine la seqùenza*dei'pHnu'cfieci numeri interi (da 0 a 9) rappresentati in notazione binaria. Per quanto si è detto parlando di numerazione binaria, segue che a ogni bit del codice è as­ sociato un peso - codice pesato. Dall’insieme ordinato dei pesi associati, il codice stes­ so viene denominato 8421. Nella seconda colonna della Tabella 2.2 si riportano le die­ ci configurazioni su quattro bit usate per rappresentare le dieci cifre decimali, mentre le restanti sei configurazioni ( 1010, 1011, 1100, 1101, 1110, 1111) rappresentano confi­ gurazioni non utili - cioè non facenti parte del codice. & U n secondo codice m olto usato, ancora della tamiglia dei codici pesati, è il codice 2 4 21 nel quale i pesi sono attribuiti ai quattro bit secondo l’ordine indicato dal nome rterza colonna della Tabella 2.2). Una caratteristica interessante del codice 2421 è che, L r nani cifra, il complem ento a 9 (si veda il Paragrafo 2.8.3 per il concetto di com1 en to a n di u n ^ umero) si ottiene semplicemente complementando ogni singolo bit

Codifica dell'informazione Tabella

19

2.2 Codifiche binarie dei numeri decimali.

Codifica decimale

Codifica 8421_(BCD1

Codifica 2421

Codifica Eccesso 3.

Codifica 84-2-1

0 1 2 3 4 5 6 7 8 9

0000 0001 0010 0011 0100 0101 Olio Olii 1000 1001

0000 0001 0010 0011 0100 1011 1100 noi ilio

0011 0100 0101 0110 Olii 1000 1001 1010 1011 1100

0000 Olii 0110 0101 0100 1011 1010 1001 1000 1111

_____1111 »

della codifica; questa caratteristica può essere di evident^)interesse quando si vogliano utilizzare per i numeri negativi le rappresentazioni inf^mnplemento (in questo caso, in complemento a 9). Si tratta cioè di un codice autocnmplementante. In Tabella 2.2 si riporta un altro codice autocomplementante, ma non più pesato: è il codice eccesso 3, ricavato dal codice BCD per semplice somma del numero 3. Infine, iljcodice 84-2-1 è un codice pesato e autocomplementante. I pesi - positivi e negativi - del codice sono attribuiti ai quattro bit secondo l’ordine indicato dal nome (quinta colonna della Tabella 2.2). Il codice è autocomplementante, nel senso che il complemento a 1 del codice (ottenuto invertendo tutti i bit) corrisponde al complemento a 9 della cifra decimale associata.

2.7 Rappresentazione geometrica dei numeri binari Un numero binario su n-bit può essere rappresentato da un punto nello spazio ri­ dimensionale. Per comprendere il significato di tale rappresentazione2, si consideri l ’insieme dei numeri binari su 1-bit (0 e 1): tale insieme può essere rappresentato da due punti nello spazio monodimensionale. Questa rappresentazione è denominata 1cubo (o n-cubo di ordine 1) come mostrato in Figura 2A(b) (uno 0-ciibo è costituito da un singolo punto nello spazio degenere zero-dimensionale). Se si considera l’insieme dei numeri binari su 2-bit (cioè {00, 01, 10, 11}), tale insieme può essere rappresentato da quattro punti (denominati vertici o nodi) dello spazio bidimensionale. Questa rappresentazione è chiamata 2-cubo (o n-cubo di ordine 2) ed è mostrata in Figura 2 .l(c). Si noti come il 2-cubo possa essere ottenuto proiettando TI-cubo e aggiungendo come prefisso rispettivamente uno 0 allo 0 e all’ 1 dell’ 1-cubo originario e un 1 allo 0 e all ’1 dell’l-cubo proiettato.

2 Una trattazione più esauriente sull’argomento della rappresentazione geometrica dei numeri binari si può trovare nel testo: McCluskey E.J., Logic Design Principles - with Emphasis on Testable Semicustom Circuits, Prentice-Hall, 1986.

20

Capitolo 2

O

o

0

1

(b)

(a)

(c)

(cO*•

Figura 2.1 Rappresentazione di un n-cubo per n = 0, 1, 2, 3: (a) 0-cubo; (ò) 1-cubo; (c) 2-cubo; (d) 3-cubo. Attraverso un’analoga proiezione è possibile ottenere il cubo di dimensione immediatamente superiore: per esempio, la rappresentazione dell’insieme dei numeri binari su 3-bit può essere ottenuto proiettando il 2-cubo e aggiungendo come prefisso uno 0 ai punti del 2-cubo originario, e un 1 ai punti di quello proiettato. La rappre­ sentazione del 3-cubo (o «-cubo di ordine 3) così ottenuto è mostrata in Figura 2A(d). Una descrizione formale del metodo di proiezione descritto per definire un «-cubo è la seguente: • •

Uno 0-cubo è costituito da un singolo punto; Un «-cubo è costruito proiettando un (« - l)-cubo: un prefisso a 0 è aggiunto ai punti dell’( « - l ) - c u b o originario, mentre un prefisso a 1 è aggiunto ai punti dell’(« - l)-cubo proiettato.

In un «-cubo ci sono 2" punti. Un p-sottocubo di un «-cubo (con p < n ) è definito come un qualunque insiem e di 2Ppunti che possiedono esattamente (« - p ) bit corrispondenti uguali. Per esem pio, i quattro punti {100, 101, 000, 001} nel 3-cubo illustrato in Figura 2A (d) form ano un 2-cubo, poiché essi sono 2 2punti dei quali (3 - 2) = 1 bit (il secondo) è identico per tutti e quattro i punti. In generale, ci sono («! 2np)/[(n - p ) \ p i J differenti p-sottocubi in un «-cubo, poiché esistono ( C"_p ) = («! / (« - p)\ p \) modi nei quali (« - p ) bit possono essere uguali, e ci sono 2"~p combinazioni che questi bit pos­ sono assumere. Per esem pio, ci sono (3! 2 2)/(2! 1!) = 12 1-sottocubi in un 3-cubo e ci sono (3 ! 2)1( 1 !2 !) = 6 2 -sottocubi in un 3-cubo.

Codifica dell'informazione

21

2^8 Distanza di Hamming per molti problemi relativi alla codifica deirinformazione, in particolare per problemi relativi al rilevamento e alla correzione di errori, può essere interessante prendere in considerazione il concetto dì distanza o. più propriamente, il concetto di distanza di fra te oodifiche di due elementi. Per distanza di Hamming fra le codi fiche di due elementi a c b si intende il numero di bit che hanno vaìore diverso nella codifica di ^risp etto a quella di l\ Per esempio, se ci si riferisce nlln codifica binaria su n bit, la distanza fra la rappresentazione del numero 1 (0 ... 01) e quella del 2 (0 . . . 10) è pari a due 0 due bit meno significativi assumono valori diversi nelle due configurazioni); mentre la distanza fra 7 (0... 0 1 11) e 8 (0... 1000) è pari a quattro (i quattro bit meno significativi assumono valori diversi). Il concetto di distanza di Hamming tra due elementi può essere definito facendo ri­ ferimento al concetto di distanza tra due punti in un //-cubo. La distanza di Hamming tra due punti in un //-cubo è semplicemente data dal numero di coordinate (posizioni dei bit) che differiscono nella rappresentazione binaria dei due punti. Per esempio, i due punti 10110 e 01101 dì un 5-cubo differiscono per tutti i bit tranne il terzo. Poiché differiscono per quattro coordinate, la distanza tra loro è pari a 4 . Una definizione più formale del concetto di distanza di Hamming si ottiene nel se­ guente modo. Si definisce somma modulo-2 (chiamata anche or esclusivo oppure xor) tra due bit e indicata con il simbolo © , la seguente operazione:

0 ©0 = 0 ;

1© 0 = 1

0 © 1= 1 ;

1© 1=0

cioè la somma modulo -2 tra due bit vale 0 se i due bit sono uguali, e vale 1 se i due bit sono diversi. Se si considerano le rappresentazioni binarie di due punti, Pt = (a a ^ T ..., u0) e Pj = (Z/^p ..., b0) sull’/z-cubo, la somma modulo -2 di questi due punti si definisce come: Pt = P, © Pj = (fl„_, © /V p tfn-: ©

. Oo © K ) •

Tale somma Pt è la rappresentazione binaria di un altro punto sulf/t-cubo, e nella gene­ rica posizione //-esima di Pk troveremo un bit di valore 1 se e solo se nella stessa posi­ zione i corrispondenti bit di P( e P; hanno valori diversi (se quindi questi bit contribui­ scono alla distanza di Hamming tra i due numeri). Ora, definendo il numero di uno presenti nella rappresentazione binaria di un punto Ph come peso di Ph e indicandolo con il simbolo | p j , la distanza (o metrica) tra due punti si calcola come: D(P,P,)= Si dimostra che la funzione distanza soddisfa le seguenti tre proprietà. D (/>„ p p = 0

se e solo se Pt = P}

D (Pp Pj) = D (Pp Pf) > 0

se Pt * Pj

D (Pp p p + D (Pr P* ) ^ D (Pr Pt)

(disuguaglianza triangolare).

22 Capitolo 2 Poiché due punti adiacenti su un n-cubo (cioè connessi da un singolo segmento) for» mano un sottocubo monodimensionale, essi differiscono in esattamente una coordinata e quindi possiedono distanza di Hamming unitaria.

2.8.1 Codici a distanza di Hamming unitaria Nel caso di insiemi nei quali gli elementi risultino naturalmente ordinati, può essere utile considerare la distanza fra le codifiche associate a due elementi consecutivi nell’ordinamento. La numerazione binaria non risponde a caratteristiche consistenti per quanto riguarda la distanza: elementi di informazione consecutivi possono avere codi­ fiche a distanza superiore a 1 (e quindi non adiacenti se associamo il concetto di adia­ cenza tra due codifiche al concetto di distanza di Hamming unitaria tra due codifiche), mentre elementi di informazione non consecutivi possono presentare codifiche adia­ centi (si pensi per esempio alle codifiche binarie di 1 e 5). Quando può essere utile la consistenza tra l’ordinamento degli elementi di informazione e l’adiacenza tra le codi­ fiche corrispondenti, sarà necessario ricorrere a tecniche di codifica che la garantisca­ no. Tipiche applicazioni che richiedono questa caratteristica sono, per esempio, alcune famiglie di convertitori analogico-digitali e i circuiti digitali con requisiti di bassa dis­ sipazione di potenza. Un esempio di codice molto usato che associa sempre a due elementi consecutivi due configurazioni a distanza unitaria è il codice Gray, che viene definito codice rifles­ so per il meccanismo di “riflessione” con il quale si costruisce un codice su n bit par­ tendo da uno su (n - 1) bit. Consideriamo infatti il codice elementare, quello su un sin­ golo bit, per il quale esistono solo le due configurazioni 0 e 1. Per ottenere il codice Gray su 2 bit, immaginiamo di porre uno specchio sotto il codice a 1 bit e di “riflettervelo”; alle configurazioni originali si premette uno 0 e a quelle ottenute per riflessione si premette un 1 in modo da ottenere: 00 01

11 10 In modo analogo si ottiene il codice Gray su 3 bit (si pone uno specchio dopo la confi­ gurazione 10, e si premette 0 alle configurazioni originali e 1 alle configurazioni rifles­ se), e così via per ottenere il codice Gray su n bit. La Tabella 2.3 riporta il codice Gray su 4 bit: si nota immediatamente che la distanza di Hamming tra due codifiche conse­ cutive è sempre unitaria. L ’algoritmo per la conversione da codifica binaria su n-bit di un numero alla corrispondente codifica Gray è particolarmente semplice ed è descritto dalla seguente espressione: gì = bi ® b.

per i = 0 , 1, . . . , n - 1 (ipotizzando b - 0).

Codifica dell'informazione

23

Tabella 2.3 Codifiche decimale, binaria e Gray per i numeri interi tra 0 e 15. Codifica decimale

0 1 2 3 4 5

6 7

8 9

10 11 12 13 14 15

Codifica binaria

Codifica Gray

K

K

K

K

s3

s2



£o

0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0

0

0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0

0 1 1 1 1 0 0 0 0 1 1 1 1 0 0

Più in generale si parlerà di codici a distanza unitaria per indicare la classe di codici, tra i quali rientra il codice Gray, che associano sempre a due elementi consecutivi due configurazioni a distanza unitaria. In termini di rappresentazione geometrica, un codice corrisponde a un’associazione di un numero intero decimale con i punti di un n-cubo. In particolare, un codice a distanza unitaria corrisponde all’associazione di un nu­ mero intero decimale con i punti di un percorso connesso in un n-cubo tale che la di­ stanza sia unitaria tra i punti corrispondenti a un qualunque intero i e il punto corri­ spondente all’intero (/ + 1) (vedi Figura 2.2). Se P. è la parola di codice binaria asso­ ciata all’intero i, deve risultare: D (Pp PM) = 1

p e r / = 0, 1, 2, . . .

Può essere richiesto oppure no che la codifica associata all’intero più grande (2n - 1) si trovi a distanza unitaria da quella scelta per l’intero più piccolo (0). Se tale distanza è pari a 1, il percorso sull’n-cubo è chiuso. Risulta di particolare interesse il caso di un percorso chiuso senza intersezioni che raggiunga tutti i 2" punti dell’n-cubo. Nella teoria dei grafi tale percorso è conosciuto come linea di Hamilton (chiusa). In genere, ci si riferisce a un codice a distanza unitaria che corrisponda a una linea di Hamilton chiusa come a un codice n chiuso (closed n code), che è un codice a distanza unitaria contenente 2" parole di codice nel quale la codifica dell’intero più grande (2” - 1) si trova a distanza unitaria dalla codifica dell’intero più piccolo (0).

ai.

24

Capitolo 2

100-7

101-6

Figura 2.2 Percorso su un 3 cubo corrispondente a un codice a distanza di Hamming uni­ taria. Per esempio, il codice Gray sopra esaminato rientra nella classe di codici n chiusi. Analogamente, un codice n aperto è un codice a distanza unitaria contenente 2" parole di codice nel quale le codifiche associate al più grande e al più piccolo intero non si trovano a distanza unitaria.

2.9 Aritmetica binaria La maggior parte degli attuali sistemi digitali adotta il sistema di numerazione binaria su n bit (o “binaria naturale”) per rappresentare i numeri, ed esegue le operazioni arit­ metiche usando Varitmetica binaria. Sebbene una trattazione dettagliata dell’aritmetica per i sistemi di elaborazione esuli dagli scopi del presente libro, in questo paragrafo vengono presentate le tecniche elementari per eseguire le principali operazioni in aritmetica binaria e viene inoltre analizzato il problema della rappresentazione dei numeri negativi.

2.9.1 Addizione binaria Per operare con l ’aritmetica decimale è necessario memorizzare le tabelle dei risultati delle operazioni aritmetiche elementari per tutte le possibili coppie di cifre decimali. Analogamente, per l ’aritmetica binaria sono necessarie le tabelle delle operazioni ele­ mentari per le cifre binarie. Nella tabella dell’addizione binaria (a + b) oltre al bit di somma S occorre memorizzare il bit di riporto (carry) R : a

b

s

R

0

0

0

0

0

1

1

0

1

0

1

0

25

Si esamina innanzitutto la .somma di numeri interi positivi. La somma di due numeri di jnnghczza superiore al singolo bit sfrutta le regole note dall’aritmetica decimale: l’addizione si realizza allineando i due numeri in colonne da destra verso sinistra (cioè a partire dal bit meno significativo). Se i due numeri da sommare non possiedono la stessa lunghezza in termini di bit, si aggiungono in testa (bit più significativi) al nume­ ro più corto tanti zeri quanti sono necessari per raggiungere la lunghezza dciraltro ad­ dendo, I bit presenti nelle singole colonne vengono sommati a partire dal bit meno si­ gnificativo (quindi da destra verso sinistra), applicando le regole per la generazione del bit di somma e del bit di riporto espresse nella precedente tabella. Si noti che, per ogni singola colonna successiva alla colonna corrispondente al bit meno significativo, si de­ ve sommare il riporto generato dalla colonna alla sua destra, che viene trattato come bit da sommare ai due bit presenti nella colonna. In pratica, l’addizione binaria tra due bit a. c bj con un riporto in ingresso Rt genera il bit di somma S, e un riporto in uscita RM secondo la Tabella 2.4. Sejjjconsidcrano come addendi due numeri interi positivi rappresentati su n bit e si hanno a disposizione n bit per la rappresentazione del risultato, si verifica la condizione (ÌToveiflow ogni volta che il risultato supera 2". Tale situazione viene segnalata sempli­ cemente dal valore 1 del riporto in uscita dalla posizione più significativa. Si consideri un semplice esempio di somma di due numeri interi positivi. Gli ad­ dendi sono zz = 0101 e b= 1011 e le varie fasi dell’operazione sono rappresentate come segue: R

O l

i

i

_ b ___

0 0

1 0 1 0 1 1

510 3,0

a +b

1

0

810

a

0

0

Partendo dalla coppia di bit a destra (i bit meno significativi dei due addendi) si esegue la somma (1 + 1): il risultato è 0 con riporto di 1. Si scrive 0 nell’ultima colonna a de­ stra del risultato e 1 nella riga del riporto nella seconda colonna da destra. Si sommano nella seconda colonna da destra il riporto dalla colonna precedente e i corrispondenti Tabella 2.4 Addizione binaria tra due bit a,. e ò,. con un riporto in ingresso Rr at

b,

R,

s,

Rm

0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1

0 1 1 0 1 0 0 1

0 0 0 1 0 1 1 1

o v J e e H jo u u

Codifica dell'informazione

26 Capitolo 2 due bit dei due addendi; si scrive 0 nella riga del risultato della seconda colonna h destra, e 1 nella riga del riporto nella terza colonna da destra. Si prosegue così fm0 aj,a prima colonna da sinistra. Si può verificare che la riga del risultato contiene il Vai0 a corretto 1000. re Analogamente si procede per la somma di numeri frazionari positivi dopo av allineato i due numeri in colonne rispetto al punto decimale e tenendo conto che se • due numeri da sommare non possiedono la stessa lunghezza in termini di bit • aggiungono in testa (bit più significativi) alla parte intera del numero più corto tànt' zeri quanti sono necessari per raggiungere la lunghezza della parte intera dell’altro addendo e si aggiungono in coda (bit meno significativi) alla parte frazionaria del numero più corto tanti zeri quanti sono necessari per raggiungere la lunghezza della parte frazionaria dell’altro addendo. Per esempio, considerando come addendi a = 1001,011 e b = 0101,101 si ricava: 0

0

1

1

1

1

a

1

0

0

1,

0

1

1

9,37510

b

0

1

0

1,

1

0

1

5,62510

a +b

1

1

1

1,

0

0

0

15,00010

R

0

2.9.2 Sottrazione binaria Nella sottrazione binaria (a - b) oltre al bit di differenza D occorre memorizzare il bit di prestito (borrow) P: a

b

D

p

0

0

0

0

0

1

1

1

1

0

1

0

1

1

0

0

Si esamina innanzitutto la sottrazione tra due numeri interi positivi. Dopo aver scritto il minuendo sopra il sottraendo, l’operazione di sottrazione binaria si esegue in base alla precedente tabella operando da destra verso sinistra nel seguente modo. Nella posizio­ ne più a destra si sottrae il bit b0 del sottraendo dal bit a0 del minuendo e si generano un bit di differenza d0 e un bit di prestito p l definito in base alla tabella precedente. Per i bit successivi, la sottrazione binaria tra due bit con un prestito in ingresso Pi genera il bit di differenza Di e il bit di riporto in uscita PM secondo la Tabella 2.5. Si consideri come esempio la differenza tra il minuendo 1101 e il sottraendo 0110: Prestito

0

Minuendo Sottraendo Differenza

-

1

1

0

1

1

0

1

13io

0

1

1 0

~^10

0

1

1

1

7in

Codifica dell'informazione



27

a one *3'nand tra due bit a, e b, con un prestito in ingresso PM

0

K 0

r» 0

D, 0

p, 0

0

0

ì

1

1

0

1

0

1

1

0

1

1

0

1

1

0

0

1

0

1

0

1

0

0

1

1

0

0

0

1

1

1

1

1

Analogamente si procede per la somma di numeri frazionari positivi, allineando i due numeri rispetto al punto decimale. Seguendo la soluzione “manuale” ora vista per le operazioni di addizione e sottra­ zione - cioè adottando due algoritmi diversi per realizzare le operazioni di addizione e sottrazione —è necessario realizzare due circuiti separati (addizionatore e sottrattore). Se si considerano anche i numeri negativi, occorrerà inoltre tener conto anche dei segni e del valore assoluto degli operandi. È possibile evitare l’operazione di sottrazione ora vista usando un’opportuna rappresentazione per i numeri negativi.

2.9.3 Rappresentazione dei numeri negativi Si considera in questo paragrafo il problema della rappresentazione dei numeri negativi - problema che peraltro è indipendente dalla base utilizzata. Pertanto le soluzioni pre­ sentate nel presente paragrafo per la numerazione binaria sono del tutto generali e ap­ plicabili a una generica base b. Le rappresentazioni più usate per la rappresentazione dei numeri con segno sono tre:

P o S \ ^ w \ cf>

• modulo e segno; © • complemento a 2;, V) • complemento a l . ?

N P G & T ! V i A 0 ìt -f s i Gd IR

motivo

Nel caso binario, in tutti e tre i sistemi, il bit più significativo vale 0 neri numeri.,posi M , e vale l per quelli negatm . I Yalorlj^ilLyi-M ono, k stessajappnesentazioQ&dn .tutte e tre le rappresentazioni, mentre i valori negativi sono rappresentati in modo di­ verso. La Tabella 2.6 illustra queste tre rappresentazioni utilizzando numeri interi su 4 bit.

2.9.3.1

Rappresentazione in modulo e segno ©

Una prima soluzione è quella della rappresentazione in modulo e segno. In questo caso, & i l numero di bit disponibili per rappresentare un numero N è pari a n, il bit in po­ sizione più significativa è riservato alla rappresentazione del segno. Per mantenere la

Tabella 2.6

Rappresentazioni binarie su

4 bit di numeri interi con segno. Valore rappresentato

Valore binarlo bppp. 0000

Notazione modulo e segno +0

0001

+

1

0010

+

2

Notazione complemento a 2

Notazione complemento a 1

0

+0

+

1

+

1

+2

+2

+3

+3

0011

+3

+4

+4

0100

+4 +5

+5

+5

0101

0110

+

6

+6

+6

Olii

+7

+7

+7

1000

-0

-8

-7

1001

- 1

-7

-6

1010

-2

-6

-5

1011

-3

-5

-4

1100

-4

-4

-3

noi

-5

-3

-2

1110

-6

-2

-1

1111

-7

-1

-0

consistenza della rappresentazione nella base scelta, anche il segno viene rappresentato con una cifra nella stessa base: più precisamente, il segno positivo viene rappresentato come 0, mentre il segno negativo viene rappresentato come 1 (nel caso di una generica base b il segno positivo viene rappresentato come 0, mentre il segno negativo viene rappresentato come b - 1). Come esempio si consideri il numero 6 in notazione deci­ male. Per la rappresentazione binaria in modulo e segno, occorrono 4 bit, con il bit più significativo che rappresenta il segno: +6 = 0110 e - 6 = 1110. Questo tipo di rappresentazione è ridondante, dato che permette due diverse rappresentazioni per il valore j£ io : 00...0 e 10...0. Fissato il numero n di bit (compreso il bit di segno), il campo dei numeri rappresentabili è simmetrico. dato che risulta costituito da tutti gli N tali che: -(2 n~r- 1) < N < - 1 (in generale, per una base B, risulta -(B"~ - 1) < N < E T 1- 1) e la codifica del numero - N si ottiene immediatamente da quella di +N semplicemente cambiando il bit di segno. La rappresentazione in modulo e segno sembra quella più naturala perché, nei nostri calcoli manuali, siamo abituati a trattare con valori decimali espressi in modulo e segno. Tuttavia, tale rappresentazione risulta decisamente scomoda nel gaso di calcolo automatico; infatti, ogni somma algebrica richiede l’esecuzione delle seguenti operazioni:

j

_________________ ______________

Codifica dell'informazione

29

• controllare il segno dei due operandi; • se i due segni sono diversi, confrontare i valori assoluti e sottrarre il minore dal maggiore;

• se i due segni sono uguali, sommare i valori assoluti; • premettere al risultato il segno corretto. A parteJL maggior tempo rifihisslQ da questo insieme di operazioni che non possono essere contemporanee (rispetto al caso di una singola operazione), il circuito aritmetico che realizza Tinsieme stesso risulta relativamente complesso, dato che deve comprendere un addizionatore e un sottrattote separati. Diventa interessante cercare una forma ^ rap p resen tazione che consenta di eseguire la somma algebrica in un unico passo e senza richiedere, diversi circuiti aritmpHri Per tale ragione si ricorre a una rappresentazione in complemento.

2.9.3.2

Rappresentazione in complemento a 2 (? )

Nella rappresentazione_iaxQmplemen.to„a^due, se_sonp_rHsjQnifri1i n cifre, nn numero intero positivo viene rappresentato con la normale notazione posizionale in base b su. (n - 1) cifre, preceduta da 0 nella posizione più significativa, mentre un numero negativo si ottiene_popendQ c„ , = 1 (in generale, per una base B, cn_x = B - 1) nella posizio­ ne più significativa e facendola seguire dal numero 2"_l - £ c, x2' (in generale per una base B, da BC~l i=o

2

c ,x B ').

(=0

rappresentato mediante gli (n - 1) bit meno significativi. Per esempio, per rappresentare N = 6 occorrono, 4 bit (N = 0.1.1OL mentre, la-notazione di - 6 si ottiene ponendo il b i r più significativo a 1 e calcolando i tre bit successivi come il risultato di 23(c,22 + cl 2 + c0), cioè: 1000 - 110 = 010. Risulta quindi - 6 = 1010. Nel caso esaminato di B = 2, lo stesso risultato si ottiene direttamente dalla diffe­ renza 2" - N, che viene appunto definito complemento a 2. Nel caso dell’esempio pre­ cedente di - 6 risulta: 24 - N = 10000 - 0 1 1 0 = 1010. Questo tipo di notazione in complemento a 2 è non ridondante, dato che per lo zero esiste un’unica codifica possibile (00...0) e il campo dei numeri rappresentabili è asimmetrico, dato che risulta costituito da tutti gli N tali che: - 2 n~ < N < 2 n~ - 1 (in ge­ nerale, per una base B, risu lta-B " 1< N < B " 1- 1). Apparentemente, la notazione in complemento a 2 non porta a nessun vantaggio, dato che la complementazione richiede ancora una sottrazione. Si dimostra però facilm ente . che, dato un JlUinerf». N di a bit- i l suo complemento a 2 si ottiene invertendo tutti i bit del numero e som mando poi 1 al bìtm,eno_significativo. Tale tecnica viene applicata come esempio a parti frazionarie (cioè numeri minori di 1). Il complem ento a 2 di una parte frazionaria b è definito come: 2b = (2 - b )l0 = (2 -b )v per esem pio 2(0,1101) = (1 0 ,0 0 0 0 -0 ,1 1 0 1 ) = 1,0011. Se si tiene conto che 10,0000 = 1,1111 + 0,0001 si ricava che: (1 0 ,0 0 0 0 -0 ,1 1 0 1 ) = (1 ,1 1 1 1 -0 ,1 1 0 1 + 0,0001). La sottrazione (1 ,1 1 1 1 -0 ,1 1 0 1 ) costituisce il complemento a 1 del numero N, e si effettua agmBÌifigmfinte invertendo tutti i bit di N. Pertanto il com plem ento a 2 si ottiene dunque invertendo tutti i bit di N e som m ando poi un 1 al bit m eno signifi­ cativo.



Capitolo 2_____________ _______

—------------------

U n’ultima regola pratica per ottenere il complemento a 2 di un numero, in modo veloce stabilisce che, partendo. dalM jnsnQ-?>igniflcatÌYQ-£. procedendo. ve.Lso_sinjsjra, si lascino immutati tutti i hit fino al primo 1 ì f l ^ Qw^SLfiQlDPlsnK^o M U j_ b it succcs.si.vi (tale regola si giustifica immediatamente considerando la tabella dell operatore di sottrazione). .Il maggior vantaggio della rappresentazione in complemento a 2 sta nel fatto che il^ risultato della sottrazione tra due numeri (a —b) può essere ottenuto effettuandfi_la sòm m aùT + *b) = ( a + 2 - b): = (2 + (a - b ) ) r Si consideri ancora come esempio il caso di parti frazionarie. Se (a —b) > 0, allora (2 + a —b)2 vale 2 più la parte frazionaria positiva (a —b). Quindi è possibile ricavare (a —b) direttamente eliminando 1’ 1 più significativo della rappresentazione di (a + b). Per esempio: a =

0,

1110

a =

0, 1110

-b=

-0 ,

1101

+ 2b =

1, 0011 40, 0001

0, 0001

^w D ee

f i

o

Se (a - b) < 0, allora a + 2b = (2 - | a - b | )2 che corrisponde a 2(a - b). Nell’ipotesi che una parte frazionaria negativa venga rappresentata dal complemento a 2 del suo valore assoluto, anche questo caso viene risolto dall’adozione del complemento a 2. Per esempio: a =

0,

1101

a =

-b=

-0 ,

1100

+ 2b=

-0 ,

0001 S i

o,

noi

1, 0010

1, 1111

2(0,0001) = 1,1111

Si noti che l’ultima ipotesi sulla codifica di parti frazionarie in complemento a 2 fa sì che sia anche molto facile discriminare fra parti frazionarie positive e negative: queste ultim e presentano il bit più significativo (a sinistra della virgola) uguale a 1. L ’adozione della notazione in complemento a 2 richiede naturalmente, dì g e stire r>pportunam ente le operazioni di somma. In particolare, la somma di parti frazionarie con uguale segno porta a codifiche prive di significato qualora il valore assoluto di tale som m a sia > 1. Si deve quindi verificare che la somma di due parti frazionarie positive non dia luogo a una codifica negativa (generazione di overflow) e allo stesaamado clie la som m a di due parti frazionarie negative non dia luogo a una codifica positiva (gene­ razione di underflow). Il discorso visto per le parti frazionarie si può facilmente esten­ dere a jium eri (interi o frazionari).rappresentabili con un predefinito numero di b it Se si considera l’operazione di somma algebrica di due numeri di n bit dotati di se­ gn o e rappresentati in complemento a 2, si verifica facilmente che il risultato N della sem plice addizione è corretto, a patto che cada nel campo dei valori rappresentabili con il num ero di cifre dato (cioè —2 < N < 2 —1), pur di trascurare l’eventuale riporto in uscita dal bit più significativo. Infatti, siano i due operandi a, b numeri di n bit*, se sono ambedue positivi, è evi­ d en te che il risultato è immediatamente corretto. Se invece uno dei numeri è negativo —

Codifica dell'informazione 31

per esempio a - 1 operazione di somma algebrica con rappresentazione in complemen­ to a 2 diventa in realtà (2 - a ) + b. Ma, a patto di ignorare l’eventuale riporto fornito in uscita dal bit più significativo, questo costituisce esattamente il risultato che si desi­ derava (il cui valore rientra certamente nel campo di rappresentabilità). Considerando per esempio i seguenti numeri rappresentati con n = 4 bit: R a -

1 1 1 1 1 1 0

b a+b

1 +

- ° 1 1 1 0 1 0 0

- 3 I0 + 7,„ 4,0

Se poi ambedue i numeri sono negativi, si ha (2" - b) + (2" - a), cioè ancora una volta il risultato corretto, a patto ancora una volta di ignorare l’eventuale riporto fornito in uscita dal bit più significativo. Per esempio: R a

1 1 1 0 1 0 1 1 +

b a+b

J

l l O 1 0 0 1

—510 + -2,o - 7 10

Si considerino ora i seguenti due esempi di numeri rappresentati con 4 bit:

R a b a+b

0

1

1 0 0 1 0 1 1 0

0 1 1 0 0 1 0 1

0 1 0 1 0 0 1 1

1 0 1

0 0 0

+

+ ©

R a b a+b

4,o overflow

+

~4io -6,0 underflow

+

Il primo esempio corrisponde alla somma 7 10 + 4 I0 il cui risultato corretto sarebbe 11UT il risultato binario ottenuto è errato infatti il segno degli operandi è concorde e positivo mentre il segno del risultato è negativo e viene interpretato come - 5 10. Il secondo esempio corrisponde alla somma (-4 )10 + (—6)10, il cui risultato corretto sarebbe (—10)10, tuttavia il risultato binario è errato infatti il segno degli operandi è concorde e negativo mentre il segno del risultato è positivo e il risultato risulta 610. In ambedue i casi i risul­ tati binari ottenuti sono errati in quanto quelli corretti uscirebbero dai limiti di rappre­ sentabilità: è infatti n —4, e i numeri rappresentabili vanno da —2 a (2 —1), cioè da -8,o a 7 Generalizzando, si può concludere che si ha superamento di capacità se, sommando lue operandi positivi, si ottiene un risultato negativo (come nel primo esempio generazione di overflow), oppure se, sommando due operandi negativi, si ottiene un isultato positivo (come nel secondo esempio - generazione di underflow). Nel caso rii somma algehrica^Ldu&mume,ri.dLdÌ3^ersaJuDghgzza, per esempio:

/ 32

Capitolo 2

\ l

g

a: