Architetture di computereintroduzione alle reti 1
Architetture di computer
Introduzione
La disponibilità di un insieme relativamente ridotto di regole di sintesi per i sistemi digitali insieme alla possibilità di applicare tecniche di ottimizzazione di complessità accettabile, ha portato fin dai primi anni Cinquanta alla realizzazione di strumenti automatici per la sintesi.
Con il passare degli anni, gli strumenti CAD sono divenuti capaci di supportare non solo il progetto di sistemi di elevatissima complessità, ma anche le fasi di verifica della funzionalità, di analisi delle prestazioni e di ricerca dei guasti nel sistema realizzato.
La progettazione di un sistema digitale inizia sempre da una specifica funzionale che descrive il comportamento e l’interfaccia di ingresso–uscita del sistema, per giungere attraverso una successione di passi di sintesi e ottimizzazione fino ad arrivare alla trasposizione su una specifica libreria tecnologica, secondo un tipico approccio “dall’alto verso il basso”.
La definizione delle piattaforme 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”; è quindi ragionevole affrontare il problema della progettazione dei sistemi digitali in termini essenzialmente informatici piuttosto che elettronici.
Un livello di astrazione può essere visto come correlato, da un lato, all’informazione riguardante la realizzazione fisica del sistema e, dall’altro lato, all’informazione che definisce le funzionalità e il “comportamento” del sistema come questi vengono visti dall’utente finale.
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.
Il committente del progetto fornisce le specifiche del sistema da progettare, sia in termini funzionali sia in termini non funzionali; il progettista deduce uno schema “ad alto livello” che definisce l’architettura in termini di unità funzionali collegate fra loro mediante percorsi di dati e segnali di controllo.
In realtà, è possibile distinguere più livelli di dettaglio: dal livello microprocessore verso una descrizione in termini di unità aritmetiche – contatori – registri.
Il progetto logico comprende una rete di porte logiche o di altri componenti di comparabile complessità opportunamente interconnessi.
Sulla base delle specifiche, il progettista si trova a dover esplorare uno “spazio di progetto” che per sistemi complessi può essere estremamente – addirittura eccessivamente – vasto; è guidato dai vincoli imposti dalle specifiche non funzionali nonché dalla sua esperienza, dai progetti sviluppati in precedenza e in particolare dalla disponibilità di blocchi pre-progettati, schemi di interconnessione, e persino software nel caso di sistemi che includano microprocessori o altre unità programmabili.
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 supporto di strumenti informatici; il processo di sintesi non è solo una trasformazione da un livello a un altro, ma comporta anche un’aggiunta di informazione e una riduzione dello spazio di progetto.
Nelle fasi di sintesi 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 tra l’altro consentire al progettista di ridurre lo spazio di progettazione che deve esplorare.
Piattaforma: livello di astrazione nel flusso di progettazione che facilita un certo insieme di possibili raffinamenti verso un successivo livello di astrazione dello stesso flusso.
Al termine di ogni passo di sintesi si presenta la necessità di verificare che il risultato della sintesi sia congruente 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. 2
Analizzando i risultati della simulazione, il progettista verifica se questi coincidono con i valori attesi e quindi se il prodotto della sintesi è corretto, inoltre la simulazione può fornire informazioni di vario tipo.
La simulazione richiede la disponibilità di librerie di modelli a cui il progettista possa fare riferimento e che vengono richiamate dai programmi di simulazione; all’interno di queste sono contenuti i modelli dei componenti che il progettista può utilizzare per la simulazione, modelli che forniscono al simulatore l’insieme di informazioni necessarie.
Le stesse librerie vengono di fatto adottate anche durante la sintesi, sebbene l’informazione utilizzata in questo caso sia in genere più ridotta.
Si identifica subito il principale problema della “verifica per simulazione”: la necessità di determinare un insieme di vettori di ingresso sufficiente a garantire la correttezza del progetto, o più propriamente la rispondenza del progetto alle specifiche.
È pressoché impossibile garantire che il sottoinsieme di vettori d’ingresso effettivamente adottato sia sufficiente a “coprire” tutte le situazioni possibili e quindi a fornire la richiesta garanzia; deve identificare, sulla base della propria esperienza, l’insieme di situazioni che giudica più “critiche” ai fini della sollecitazione del sistema.
Il ricorso a strumenti automatici di simulazione e di sintesi rende evidente l’indispensabilità di un linguaggio formale per la descrizione dei circuiti digitali.
La definizione di linguaggi per la descrizione hardware ha coinvolto gli studiosi del settore: si sono distinte due diverse tendenze – estendere un linguaggio di programmazione esistente in modo da supportare le esigenze del progetto hardware, oppure introdurre un linguaggio specifico per il quale le esigenze della progettazione hardware siano le principali linee guida.
I linguaggi della famiglia HDL di maggiore diffusione e adottati dai più noti pacchetti CAD seguono la seconda tendenza: sono in particolare Verilog e VHDL.
Codifica dell’informazione
Un problema di importanza fondamentale nella progettazione dei sistemi di elaborazione dell’informazione consiste nella rappresentazione dell’informazione; infatti le informazioni – gli oggetti – da rappresentare costituiscono un insieme finito: per rappresentarli in modo non ambiguo occorre disporre di un insieme altrettanto grande di nomi da associare ai diversi elementi dell’insieme e questi nomi sono le codifiche, il cui insieme costituisce il codice prescelto.
Sarebbe possibile immaginare un codice in cui ogni nome sia un simbolo diverso da tutti gli altri; tuttavia, a meno che gli oggetti non fossero molto pochi, ci si ritroverebbe di fronte alla necessità di creare un insieme di simboli diversi molto grande.
Questo è il problema affrontato da tutti i popoli che hanno in passato creato un proprio sistema di scrittura, infatti alcuni hanno preferito associare un simbolo ad ogni oggetto da rappresentare, altri hanno scelto un numero molto più ridotto di simboli elementari con i quali costruire sequenze arbitrariamente lunghe usate per identificare l’insieme più vasto degli oggetti da rappresentare e questo è il modello adottato nei sistemi digitali.
In tutti i sistemi digitali attualmente in uso si ricorre ad un alfabeto composto da due soli simboli: 1 e 0; questa scelta è essenzialmente legata al problema del segnale che deve rappresentare fisicamente: è infatti facile realizzare dispositivi, elettrici, magnetici o elettronici, che possano essere facilmente portati in una fra due condizioni distinte a cui corrispondono i due valori estremi del segnale.
Il ricorso a due soli valori per le variabili in gioco permette di adottare una particolare algebra, detta algebra di commutazione.
Il simbolo o cifra binaria si indica come bit e si è dunque di fronte al problema di una rappresentazione binaria dell’informazione; il problema stesso si pone in modo nettamente diverso a seconda che l’informazione sia di natura non numerica o di natura numerica, nel primo caso ci si trova essenzialmente di fronte a un problema di scelta dei codici e di definizione dei processi di traduzione tra codici, nel secondo caso occorre prima di tutto scegliere una base per l’aritmetica che si vuole adottare, e in corrispondenza sviluppare tale aritmetica. 3
Il problema della rappresentazione o codifica dell’informazione non numerica in un sistema digitale consiste nel trovare, per gli oggetti appartenenti a un insieme Ω, una codifica su un insieme di simboli S.
È necessario stabilire la lunghezza delle codifiche (nomi) che si dovranno attribuire agli oggetti, affinché ogni oggetto in Ω abbia almeno un nome distinto da quello di tutti gli altri.
Si supponga di scegliere tutti i nomi di uguale lunghezza, se i simboli diversi in S sono s, e se l è la lunghezza del nome, cioè il numero di simboli che lo costituiscono, si può ottenere un insieme di s nomi diversi; se il numero degli oggetti in Ω è pari a ω, perché ognuno di essi ottenga un nume distinto occorre che s ≥ ω.l
In generale, sono noti ω e s, mentre si vuole determinare proprio il minimo valore di l, che risulta dalla disuguaglianza: l ≥ [log ω] dove con [x] si indica il minimo intero non inferiore a x.s
Successivamente, occorre scegliere una corrispondenza uno a uno tra le configurazioni di l bit disponibili e gli oggetti dell’insieme Ω; nel caso in cui l > [log ω], occorre inoltre scegliere, tra le 2 configurazioni possibili, le ω configurazioni l che verranno effettivamente usate.
Il più diffuso dei codici alfanumerici in uso nei calcolatori, il codice ASCII è un codice a 7 bit in grado di codificare 128 caratteri (27 = 128).
Ricorda: per tutte le basi, in tutti i casi, il numero di caratteri delle stringhe necessarie a rappresentare un certo numero n è [log B n].
La caratteristica più importante del metodo di rappresentazione numerica che si utilizza abitualmente non è la base ma la notazione posizionale; ciò significa che un numero è rappresentato come una successione di simboli o cifre, e che il valore da attribuire alla singola cifra è legato alla posizione che essa possiede nel numero.
A ogni posizione, dunque, è associato un peso e il valore attribuito alla cifra deriva dal prodotto di tale peso per il valore della singola cifra.
Esempio
[ Esempio
327 = 300 + 20 + 7
• posizione 2
• posizione 1
• posizione 0
è dato da
• 101 = 1 x 7 = 70
• 101 = 10 x 2 = 20
• 102 = 100 x 3 = 300 ]
Si consideri dapprima il caso di un numero intero positivo N, se si indica 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, …, n – 1) il peso associato alla i–esima posizione e con ci (i = 0, 1, 2, …, n – 1) la generica cifra scritta alla i–esima posizione, il numero intero positivo N risulta rappresentato dalla sequenza di cifre: cn – 1 cn – 2 …c1 c0 e il suo corrispondente valore risulta dato da: N = cn – 1 x pn – 1 + cn – 2 x pn – 2 + … + c1 x p1 + c0 x p0.
Le cifre ci sono espresse in una base B, in modo che ogni cifra possa assumere uno qualsiasi dei valori da 0 a (B – 1); un caso di notazione posizionale si ha quando il peso associato alla posizione i–esima coincide con l’i–esima potenza della base.
La numerazione decimale risulta un caso particolare di notazione posizionale.
Ricorda: se si ha una stringa di n caratteri in base b, è possibile rappresentare bn valori diversi.
Passando a una qualunque altra base B’, si deve ricordare che le singole cifre devono essere espresse nella base B’ e che le posizioni sono associate alle potenze della base B’.
Riferendosi alla base 2 le cifre possono assumere solo i due valori 0 e 1 e le posizioni sono associate alle potenze del 2; si parla in questo caso di numeri binari. 4
Se si considera 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 si dispone di coefficienti numerici nell’intervallo da 10 a (B – 1) con B > 10, si utilizzano le lettere dell’alfabeto A, B, C, …
Se si considera la base 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}, in particolare [log2 16] = 4 e con 4 bit riesco a rappresentare 16 combinazioni diverse.
- 0 = 0 0 0 0
- 1 = 0 0 0 1
- 2 = 0 0 1 0
- 3 = 0 0 1 1
- 4 = 0 1 0 0
- 5 = 0 1 0 1
- 6 = 0 1 1 0
- 7 = 0 1 1 1
- 8 = 1 0 0 0
- 9 = 1 0 0 1
- A = 1 0 1 0
- B = 1 0 1 1
- C = 1 1 0 0
- D = 1 1 0 1
- E = 1 1 1 0
- F = 1 1 1 1
La notazione posizionale contiene in sé anche il concetto di conversione da una base a un’altra; siano Bs la base sorgente nella quale è espresso il numero e Bo la base oggetto nella quale si vuole convertire il numero della base Bs: cn – 1 x Bsn – 1 + cn – 2 x Bsn – 2 + … + c1 x Bs + c0 + Bo.
Questo metodo diretto o polinomiale risulta particolarmente comodo quando la base oggetto è la base 10: in questo caso cifre ci e potenze Bs risultano facilmente convertite a una notazione molto familiare.
Esempio
[ Esempio
Si consideri la conversione di un numero intero N dalla base 2 alla base 10; sia N = (1 0 0 1 0 1)2
Esprimendo N secondo la notazione posizionale esplicita nella base 2, e riscrivendo tale espressione utilizzando cifre e potenze nella base 10, si ottiene:
N = 1 x 25 + 0 x 24 + 0 x 23 + 1 x 22 + 0 x 21 + 1 x 20 = 37 ]
Per effettuare la conversione da base 10 a base B si utilizzano invece metodi iterativi; in particolare, occorre usare due differenti metodi per parte intera e per quella frazionaria.
Si consideri dapprima la conversione della parte intera, e si faccia riferimento alla conversione decimale–binaria, se si vuole ottenere la notazione binaria del numero N sarà sicuramente k ≥ n2, a priori anche k è a sua volta un’incognita.
Si consideri l’operazione N/2 in notazione decimale: se N è pari, il resto R0 dell’operazione è 0, altrimenti è 1; si ha dunque N/2 = N0 con un resto che può valere 0 oppure 1.
Il resto R0 dell’operazione di divisione decimale fornisce il valore del bit meno significativo b0 della notazione binaria; ripetendo l’identica operazione di divisione decimale su N0 si ottiene b1, e così via finché il risultato di una divisione non diventa pari a 0.
La conversione da notazione decimale a binaria comporta problemi di possibile errore da superamento di capacità per la parte intera e di precisione per la parte frazionaria; l’errore da superamento di capacità nasce quando il numero di bit necessari per rappresentare la parte intera supera quello effettivamente disponibile nella macchina data, o quando il massimo intero rappresentabile con una macchina è inferiore a quello che si vorrebbe rappresentare e si pone quindi la scelta tra il semplice troncamento e l’arrotondamento.
-
Riassunto esame Strategia, gestione e sviluppo dell'innovazione, Prof. Petrocelli Michele, libro consigliato Incosc…
-
Riassunto esame di Neuropsicologia, prof. Cavallo, libro consigliato Neuropsicologia, (III edizione), Làdavas, Bert…
-
Riassunto esame Laboratorio di archeologia egiziana, prof. Silvano, libro consigliato The mummy in Ancient Egypt, I…
-
Riassunto esame cultura e potere, prof. Favole, libro consigliato L'identità etnica (III edizione), Fabietti