Architettura. Indice:

Documenti analoghi
4 3 4 = 4 x x x 10 0 aaa

CALCOLATORI ELETTRONICI 15 aprile 2014

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello):

Architettura di tipo registro-registro (load/store)

CALCOLATORI ELETTRONICI 29 giugno 2011

CALCOLATORI ELETTRONICI 29 giugno 2010

CPU. Maurizio Palesi

Architettura del calcolatore

Architettura hardware

CALCOLATORI ELETTRONICI 31 marzo 2015

Ing. Paolo Domenici PREFAZIONE

L unità di controllo. Il processore: unità di controllo. Le macchine a stati finiti. Struttura della macchina a stati finiti

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

La macchina programmata Instruction Set Architecture (1)

Dispensa di Informatica I.1

C. P. U. MEMORIA CENTRALE

ARCHITETTURE MICROPROGRAMMATE. 1. Necessità di un architettura microprogrammata 1. Cos è un architettura microprogrammata? 4

Lezione 1: L architettura LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 10 Marzo 2014

Alessandro Pellegrini

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Informatica. Rappresentazione dei numeri Numerazione binaria

Struttura del calcolatore

Il processore. Il processore. Il processore. Il processore. Architettura dell elaboratore

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Lezione 8. La macchina universale

Sistema operativo: Gestione della memoria

SISTEMI DI NUMERAZIONE E CODICI

L unità di controllo di CPU multi-ciclo

Architettura di un calcolatore

Laboratorio di Informatica

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

I componenti di un Sistema di elaborazione. Memoria centrale. È costituita da una serie di CHIP disposti su una scheda elettronica

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.6. Unità di controllo microprogrammata

Memorie ROM (Read Only Memory)

Architettura degli Elaboratori I Esercitazione 1 - Rappresentazione dei numeri

Esercitazione Informatica I AA Nicola Paoletti

Laurea Specialistica in Informatica

Testi di Esercizi e Quesiti 1

Laboratorio di Informatica

Codifica dei numeri negativi

FONDAMENTI di INFORMATICA L. Mezzalira

INFORMATICA 1 L. Mezzalira

Informazione analogica e digitale

CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO

Gestione della memoria centrale

LABORATORIO DI SISTEMI

Convertitori numerici in Excel

Il calcolatore elettronico. Parte dei lucidi sono stati gentilmente forniti dal Prof. Beraldi

Il memory manager. Gestione della memoria centrale

Esame di INFORMATICA

Dispense di Informatica per l ITG Valadier

L architettura del calcolatore (Prima parte)

Introduzione all'architettura dei Calcolatori

Architettura della CPU e linguaggio assembly Corso di Abilità Informatiche Laurea in Fisica. prof. ing. Corrado Santoro

Esempio: aggiungere j

Sistemi di Numerazione Binaria NB.1

La microarchitettura. Didattica della strumentazione digitale e sistemi a microprocessore anno accademico pagina 1

ESEMPIO 1: eseguire il complemento a 10 di 765

Calcolatori Elettronici. La Pipeline Criticità sui dati Criticità sul controllo Cenni sull unità di controllo

(71,1), (35,1), (17,1), (8,1), (4,0), (2,0), (1,0), (0,1) 0, = 1, 431 0, = 0, 862 0, = 1, 792 0, = 1, 448 0, = 0, 896

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

Un circuito integrato è una piastrina di silicio (o chip), quadrata o rettangolare, sulla cui superficie vengono realizzati e collegati

Hazard sul controllo. Sommario

Obiettivi dell Analisi Numerica. Avviso. Risoluzione numerica di un modello. Analisi Numerica e Calcolo Scientifico

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

Logica e codifica binaria dell informazione

Esercitazione sulle CPU pipeline

Lezione n.19 Processori RISC e CISC

Linguaggi di programmazione

Registratori di Cassa

PROVA INTRACORSO TRACCIA A Pagina 1 di 6

Il Processore: i registri

Fogli Elettronici: MS Excel

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino

UNA LEZIONE SUI NUMERI PRIMI: NASCE LA RITABELLA

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

La Macchina Virtuale

Calcolatori Elettronici B a.a. 2006/2007

Uso di base delle funzioni in Microsoft Excel

Calcolatori Elettronici

Rappresentazione delle informazioni

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Calcolatori Elettronici A a.a. 2008/2009

Input/Output. Moduli di Input/ Output. gestiscono quantità di dati differenti a velocità diverse in formati diversi. n Grande varietà di periferiche

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione

Lezione 3: Architettura del calcolatore

Sistemi di Numerazione

Architettura del computer (C.Busso)

Calcolatori Elettronici

Modulo 8. Elettronica Digitale. Contenuti: Obiettivi:

4. Operazioni aritmetiche con i numeri binari

Controllo con macchina a stati finiti

Logica binaria. Porte logiche.

ALGEBRA DELLE PROPOSIZIONI

Aritmetica dei Calcolatori 2

Lezione 2 OPERAZIONI ARITMETICHE E LOGICHE ARCHITETTURA DI UN ELABORATORE. Lez2 Informatica Sc. Giuridiche Op. aritmetiche/logiche arch.

Operazioni Aritmetiche e Codici in Binario Giuseppe Talarico 23/01/2013

Appunti sulla Macchina di Turing. Macchina di Turing

Transcript:

Architettura Indice: Architettura 1 Architettura degli elaboratori (3 / 10 / 2006)...4 Livelli di astrazione...4 Architettura di Von Neumann...4 La CPU...5 La memoria...5 Rappresentare gli interi...6 Rappresentazione numeri in virgola mobile...9 Circuiti logici...10 Circuito per la somma di 2 numeri...13 Circuiti sequenziali...14 Il 3-state...15 Ritornando ai registri...15 Architettura MIPS e Assembler...17 La memoria 2...18 Assembler parte 2...20 Ciclo fondamentale...21 Struttura dei registri del MIPS 32...22 Esempio completo di una istruzione di somma...22 Assembler parte 3...23 Flusso di istruzioni...23 Pseudoistruzioni...27 Convenzioni di uso della memoria...28 Implementazione hardware delle istruzioni macchina...29 Unità Operativa (DataPath) multiciclo...33 Simulatore SPIM per architettura MIPS32...36 Unità di controllo: macchina a stati finiti...38 Supporto alle eccezioni / interruzioni...42 Le periferiche e gli interrupt...44 Il gestore delle eccezioni...48 DMA (Direct Memory Access)...51 Modularizzazione del software...53 Esercitazioni...56 Architettura 2 Reti (8 / 1 / 2007)...60 Introduzione (8 / 1 / 2007)...60 Accesso alla rete...60 Dentro la rete...60 Circuit Switching...61 Packet Switching (9 / 1 / 2007)...61 Reti datagram e a circuito virtuale...62 Ritardi e sorgenti di ritardo...62 I Livelli...63 Esercitazione del 10 / 1 / 2007...64 2

Quaderno virtuale di teoria Strato di applicazione (15 / 1 / 2006)...67 Protocollo http (15 / 1 / 2006)...68 Protocollo ftp (16 / 1 / 2006)...71 Posta elettronica (16 / 1 / 2006)...72 DNS (domain name system) (16 / 1 / 2006)...74 Web cache 2 (22 / 1 / 2007)...75 P2P (22 / 1 / 2007)...75 emule (22 / 1 / 2007)...76 Strato di trasporto (22 / 1 / 2007)...77 Principi di trasporto affidabile (22 / 1 / 2007)...78 Esercitazione del 24 / 1 / 2007...84 Principi di trasporto affidabile 2 (29 / 1 / 2007)...88 TCP (Generalità)(29 / 1 / 2007)...90 Esercitazione del 31 / 1 / 2007...100 Strato di rete (19 / 2 / 2007)...103 Router (19 / 2 / 2007)...104 Protocollo IP (20 / 2 / 2007)...107 IPv6 (20 / 2 / 2007)...114 Algoritmi di routing (26 27 / 2 / 2007)...115 Strato di link e strato fisico (27 / 2 / 2007 6 / 3 / 2007)...122 Multimedialità in rete (12 13 / 3 / 2006)...134 Esercitazioni del 28 / 2 / 2007 7 / 3 / 2007 14 / 3 / 2007...138 Appendici collegate: Appendice 1 Datapath ultima modifica: 16/11/2006 (Contiene 0 errore/i) Appendice 2 FSM Diagram ultima modifica: 27/11/2006 (Contiene 1 errore/i) Appendice 3 Gestione delle eccezioni ultima modifica: 29/11/2006 (Contiene 0 errore/i) Appendice 4 P2P (peer to peer) ultima modifica: 23/01/2007 (Contiene 0 errore/i) Dati riguardanti il quaderno virtuale: Ultima sezione aggiunta: Esercitazioni varie in data 16 / 3 / 2007 Errori: Nessun errore rilevato 3

Architettura Architettura 1 Architettura degli elaboratori (3 / 10 / 2006) Livelli di astrazione Fisica dello stato solido (spiega il funzionamento dei semiconduttori) Elettronica digitale (permette di eseguire operazioni logiche) 0 0 (AND) 1 Architettura hardware (Alu, registri, ) (si tiene conto anche della fisica che si utilizza [i ritardi di propagazione del segnale,..] Esempio: se ho 1000 file l hardware necessario per eseguire l Or di questi fili sarà differente rispetto a quello per eseguire l Or di due fili Instruction Set Architecture (ISA [noi considereremo il MIPS]) (Quella usata normalmente oggi è l Intel Alchitecture a 32 bit) Programmazione Assembler utilizza il set di istruzioni predefinito del circuito Normalmente il programmi vengono scritti in codice ad alto livello (Java, C++, ), il che presuppone che la macchina sia in grado di eseguire questo codice; in realtà non esiste una macchina che può fare le operazioni scritte in codice ad alto livello in modo nativo. Per far si che un pc esegua le istruzioni che noi abbiamo programmato occorre un compilatore che trasformi il linguaggio ad alto livello in un linguaggio a basso livello (linguaggio macchina).c.exe Compilatore Tramite diversi compilatori lo stesso codice può essere adattato per ISA differenti Intel Architecture a 32 bit (Intel e AMD).C MIPS PowerPC Architettura di Von Neumann Un calcolatore è costituito da tre blocchi fondamentali: CPU MEMORIA Dispositivi I/O BUS Il Bus è un insieme di fili che trasporta le 4

Quaderno virtuale di teoria informazioni tra i vari blocchi Questa struttura è detta: Architettura di Von Neumann. Ho una memoria sola dove memorizzo sia dati che istruzioni quindi sarà il Sistema Operativo a dire cosa posso o non posso fare con i dati o con le istruzioni e come le devo elaborare. La CPU Registri: locazioni di memoria con un numero predefinito di bit rispetto all architettura Unità di controllo: prende una istruzione, capisce cosa c è dentro e dice alla ALU cosa fare (ha bisogno di 2 registri speciali) Instruction Register ALU, unità aritmetico logica. Si disegna così perché ci sono 2 operandi e un risultato Program Counter: memorizza l indirizzo di memoria dell istruzione da controllare e passa alla successiva quando quella precedente è stata eseguita Questa è una visione semplificata di un calcolatore moderno (può avere più ALU, ha unità specifiche per numeri non interi, può eseguire più istruzioni contemporaneamente) La memoria È un insieme di parole indicizzate di dove risiedono i dati CPU Una parte della memoria viene usata per ricopiare alcune informazioni che più probabilmente la CPU controlla e richiede. Questa parte di memoria si chiama CACHE. 5

Architettura I componenti della CPU (registri, ) sono visibili in programmazione Assembler, mentre la Cache non lo è. Alcuni programmi disabilitano la Cache perché se no il loro funzionamento sarebbe rallentato Il BUS si divide in: Address Bus, Data Bus e Control Bus. 6 Rappresentare gli interi Facciamo finta di avere 3 bit. Rappresentazione degli interi senza segno: 0 0 0 0 0 0 1 1 0 1 0 2 0 1 1 3 1 0 0 4 1 0 1 5 1 1 0 6 1 1 1 7 Rappresentazione con modulo e segno Per convenzione i valori con segno positivo hanno bit più significativo 0 mentre quelli negativi hanno bit più significativo 1. 0 0 0 0 0 0 1 1 0 1 0 2 0 1 1 3 1 0 0 0 1 0 1-1 1 1 0-2 1 1 1-3 La rappresentazione in modulo e segno dei problemi: Ha due serie di bit per indicare lo zero (±0) Logica complicata per vedere se un numero è maggiore di un altro Alcune operazioni matematiche non riescono Esempio: 1 2 = 1 0 0 1 1 1 0 1 1 1 Ottengo come risultato 3. Cosa che non è possibile Allora venne inventata la notazione in Complemento a 2: un numero a positivo si rappresenta come a, mentre il negativo a = 2 n a 0 1 1 3 0 1 0 2 0 0 1 1 0 0 0 0 1 1 1-1 1 1 0-2 1 0 1-3 1 0 0-4

Quaderno virtuale di teoria Ho un unica rappresentazione per lo zero I moduli mi dicono qual è il valore più grande tra i numeri dello stesso segno La somma funziona 2 + 1 = 0 1 0 0 0 1 0 1 1 = 3 Quindi la somma funziona a b = a +(-b) altro non è che la somma di a e del complemento a 2 di b. Quanti numeri diversi posso rappresentare con n bit: 2 (n 1) 1 (posso rappresentare +3 e non +4) Mentre il numero più negativo è dato da: 2 (n 1) = 4 Se faccio 3 + 2 = 3 0 1 1 0 1 0 1 0 1 Ottengo un OVERFLOW perché il 5 non lo posso rappresentare La macchina non sa se il risultato è giusto ma deve essere in grado di segnalare l errore. A b a+b Risultato + + Se > 2 (n 1) 1 Ottengo un risultato con 1 nel bit significativo, quindi il risultato avrà segno negativo Se > 2 (n 1) + Ottengo un risultato con 0 nel bit più significativo, quindi il risultato avrà segno positivo + / / Non può esserci condizione di Overflow Condizioni di Overflow: I due operandi hanno lo stesso segno; il risultato ha segno opposto Il Carry In (riporto sul) bit di segno è diverso dal carry out In uscita dal calcolo ho un carry out che vale 1 Il carry in (dell ultimo calcolo) è uguale al carry out (1 = 1) quindi non ho situazione di overflow. Carry In (1) 1 1 1 Arrivo qui è ho un riporto (che sarebbe il carry out del calcolo precedente). Esempio: 1+1+1=1 riporto 1 (questo è il carry out, che sarà il carry in del calcolo successivo) 7

Architettura In uscita dal calcolo ho un carry out che vale 1 Carry In (0) 1 1 0 Il carry out è diverso dal carry in (1 0) quindi mi trovo in una situazione di overflow. Come faccio a rappresentare il complemento a 2 del numero a = 2 n a Prendo un numero, partendo dal bit meno significativo; fino a che ci sono zeri li lascio, quando incontro il primo 1 lo lascio e dal successivo bit faccio il complemento, cioè se c è 0 scriverò 1 e viceversa. 0 1 1 3 1 0 1-3 0 1 0 2 1 1 0-2 0 0 1 1 1 1 1-1 0 0 0 0 0 0 0 0 1 1 1-1 0 0 1 1 1 1 0-2 0 1 0 2 1 0 1-3 0 1 1 3 1 0 0-4 1 0 0-4 Sul -4 non può funzionare perché il +4 non è nel range di valori rappresentabili Come metodo va bene per gli esseri umani ma non per i calcolatori. Un numero in complemento a 2 si può anche calcolare come: a = a +1 Dove a significa che cambio tutti i bit di a e poi aggiungo 1 a a 0 0 1 1 1 0 + 0 0 1 = 1 1 1 1 Questo metodo è più veloce per il calcolatore. Per quanto riguarda la sottrazione posso utilizzare il seguente metodo: a b = a + ( b)= a + b +1 Ci sono anche altre notazioni, tra cui la notazione polarizzata 1 1 1 4 1 1 0 3 1 0 1 2 1 0 0 1 0 1 1 0 0 1 0-1 0 0 1-2 0 0 0-3 Nell esempio la polarizzazione o excess è 3 (perché inizio con -3) 8

Quaderno virtuale di teoria L ordinamento dei numeri è naturale e sono facilitato nella confronti. Definisco io l inizio della notazione Serve nella notazione in virgola mobile Rappresentazione numeri in virgola mobile L obiettivo della rappresentazione in virgola mobile (Floating Point) è quello di approssimare la rappresentazione dei numeri reali. I pc utilizzano la notazione scientifica: 1,2793 10-6 0,0000012793 Le cifre significative si chiamano Mantissa. Rappresentazione di riferimento per i numeri reali: ± 1,xxxxxx 2 yyyyyy segno mantissa esponente Nella prima posizione della mantissa ho inserito 1 (questo 1 ci sarà sempre e sarà il sistema a ricordarsi di inserirlo) per far si che ho più bit significativi dopo la virgola; la maggior precisione è data dall esponente. Devo tener presente che ho un numero di bit limitati. N di bit 1 3 4 S EXP MANTISSA Segno: rappresentato rappresentata in notazione senza segno 0 (+) in notazione 1 ( ) polarizzata Esempio 1: Dato 0,625 trasformarlo in binario (mettiamo che l esponente abbia notazione con polarizzazione 3) 0,625 2 1,25 2 (nel calcolo successivo non tengo conto dell 1 prima della virgola) 0,50 2 1,0 Il numero in binario è dato dalle cifre prima della virgola Quindi 0,625 in binario è 0,101 (posso rappresentare solo numeri che siano somme di potenze di 2) Rappresento nella notazione standard: 0,101 normalizzato è 1,01 2-1 0 0 1 0 0 1 0 0 S EXP MANTISSA Esempio 2: Dato 0,15 trasformarlo in binario 0,15 2 0,30 2 0,60 2 1,2 2 (considero 0,2) 0,4 2 0,8 2 9

Architettura 1,6 2 1,2 Il numero è periodico in base 2 Il codice binario è: 0,001 0011 che normalizzato è: 1, 0011 2-3 (La parte periodica sarà quella scritta come mantissa) 0 0 0 0 0 0 1 1 S EXP MANTISSA L esponente è 000 perché la notazione ha polarizzazione 3. C è comunque approssimazione perché in realtà la rappresentazione corrisponde a: 0,1484375 Anche nel Floating Point esiste l overflow Ci sono anche delle rappresentazioni standard: la IEEE754 A singola precisione (32 bit) N di bit 1 8 23 S EXP MANTISSA L esponente ha polarizzazione 127 Doppia precisione (64 bit) N di bit 1 11 52 S EXP MANTISSA L esponente ha polarizzazione 1023 Le unità logiche del pc non sanno cosa ci sia scritto nei registri, cioè se sono parole o numeri Oltre ai numeri dobbiamo anche rappresentare i caratteri e per questo si usa la codifica ASCII (a 8 bit). La tabella ascii ha i caratteri in ordine crescente; il numero che rappresenta la A è più piccolo di quello della B A < B < C < D Circuiti logici Portano dei segnali a 2 stati (0 e 1) Ingressi (I) I 0 U 0 I n-1 U m-1 Uscite (U) Il circuito può avere 2 n combinazioni di ingressi. Si distinguono in 2 categorie: Combinatori a un certo istante le uscite dipendono esclusivamente dagli ingressi; U = f (I) Sequenziali hanno una memoria riguardo allo stato (S) precedente; U = f (I, S) I n S 0 S k-1 S m U 10 Si dice che ha k bit di memoria CIRCUITI COMBINATORI La tabella di verità di un circuito ci da tutti i valori di uscita per ogni possibile ingresso. Esempio: Abbiamo 3 bit, quindi abbiamo 2 n righe per le possibili combinazioni di ingressi (2 3 = 8).

Quaderno virtuale di teoria U 1 vale 0 se c è almeno uno zero fra gli ingressi e vale 1 se tutti e tre gli ingressi sono a 1. U 0 vale 0 se tutti gli ingressi sono a zero, mentre vale 1 per tutti gli altri casi. I 2 I 1 I 0 U 1 U 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 Nei circuiti combinatori ci sono combinazioni di funzioni logiche elementari che vengono realizzate da porte logiche; le porte logiche sono circuiti che eseguono funzioni logiche elementari AND logico Viene indicato con: F = A B A A B F F 0 0 0 B 0 1 0 1 0 0 1 1 1 vale zero se c è almeno uno zero OR logico Si indica con: F = A + B A B F A B F 0 0 0 0 1 1 1 0 1 1 1 1 vale 1 se c è almeno un 1 NOT Si indica con: F = A (cioè negazione di A) A F 0 1 1 0 Combinando opportunamente queste tre funzioni logiche posso realizzare qualsiasi espressione logica. Esistono anche altre porte particolari: NAND (nega un AND logico), viene indicato con: F = Il pallino dopo la porta And ha funzione di negazione A B A F F A B F 0 0 1 0 1 1 1 0 1 1 1 0 A B 11

Architettura Da sola, la porta NAND, costituisce un insieme completo perché posso realizzare qualsiasi funzione in logica booleana utilizzando una serie di NAND. Esempio: Per simulare un AND metto in sequenza due porte NAND Per simulare un OR nego gli ingressi della porta NAND Per simulare il NOT è sufficiente sdoppiare il segnale in arrivo in modo che entri nei due ingressi della porta NAND. Costruttivamente una porta NAND è una porta AND tolto un transistor. I circuiti integrati utilizzano un insieme di porte NAND EXOR (OR esclusivo), si indica con: F = A B A A B F 0 0 0 F 0 1 1 B 1 0 1 1 1 0 L EXOR 1. serve per un test di uguaglianza (se gli ingressi sono uguali l EXOR vale 0) 2. A meno del riporto l EXOR è la somma di 2 bit (quindi è un componente del circuito della somma) 3. Fa il complemento comandato Il complementatore comandato è un circuito che dato un ingresso, un uscita e un segnale di controllo esegue: se C (segnale di controllo) = 1 allora l uscita è la negazione dell ingresso, mentre se C = 0 l uscita è uguale all ingresso MULTIPLEXER Seleziona e mette nell uscita il valore dell ingresso indicato dal segnale di controllo. Se il numero di segnali di controllo è n, il numero massimo di ingressi sarà 2 n. Se ho 2 ingressi ho bisogno di 1 segnale di controllo Se ho 4 ingressi ho bisogno di 2 segnali di controllo Se ho 8 ingressi ho bisogno di 3 segnali di controllo Se ho 9 ingressi ho bisogno di 4 segnali di controllo (perché con 4 segnali di controllo posso rappresentare 2 4 = 16 combinazioni possibili) I 0 I! I 2 I 3 F F = I C1 C0 Se C 1 C 0 = 00 F = I 0 Se C 1 C 0 = 01 F = I 1 Se C 1 C 0 = 10 F = I 2 Se C 1 C 0 = 11 F = I 3 C 0 C 1 DECODER Prende un numero binario in ingresso e attiva la linea di uscita corrispondente (al numero binario in ingresso) 12

Quaderno virtuale di teoria I 0 I 1 F 0 F 1 F 2 F 3 Se I 1 I 0 = 00 F 0 = 1, F 1,2,3 = 0 Se C 1 C 0 = 01 F 0 = 0, F 1 = 0, F 2,3 = 0 Circuito per la somma di 2 numeri Il circuito necessario per eseguire la somma a 1 bit si chiama Full Adder. Se devo sommare 2 numeri a 4 bit avrò bisogno di 4 Full Adder (1 per ogni bit) riporti (0) (1) (1) A = 0 0 1 1 (3) B = 0 0 1 1 (3) S = 0 1 1 0 (6) A B C IN (Carry In) Full Adder C OUT (Carry Out) S Esempio: somma a 4 bit (nella tabella indico la posizione dei vari bit) A = a 3 a 2 a 1 a 0 B = b 3 b 2 b 1 b 0 S = s 3 s 2 s 1 s 0 a 3 b 3 a 2 b 2 a 1 b 1 a 0 b 0 (non ho carry in iniziale) 0 Carry out s 3 s 2 s 1 s 0 Lo schema usato ha un difetto di prestazioni, è un metodo lento e il carry deve avere un segnale stabile. Ci sono dei circuiti, i Carry Look Ahead, che sono pensati per velocizzare la somma Il sommatore è costituito da due funzioni: ( A B) CIN = A B CIN S = COUT = A B + A CIN + B CIN Il C out viene fuori quando almeno 2 bit sono a 1 13

Architettura Tavola di verità di C OUT A B C IN C OUT 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 qui si verificano tutte e 3 le condizioni SOMMA E SOTTRAZIONE (in un unico circuito) a 3 b 3 a 2 b 2 a 1 b 1 a 0 b 0 C in C out s 3 s 2 È un complementatore comandato cioè una porta EXOR. In uscita ottengo l ingresso negato a seconda del segnale sottrai Si ricorda che la sottrazione a b = a + ( b)= a + b +1 s 1 s 0 Il C in assume il valore 1 se il segnale sottrai è a 1, ciò vuol dire che devo eseguire la sottrazione Sottrai (segnale che indica se devo are la somma o la sottrazione) Circuiti sequenziali Hanno una memoria. Hanno un segnale di temporizzazione per la logica sequenziale. Il segnale di temporizzazione è dato dal clock. T 1 frequenza T = Se la frequenza è 1 GHz, il periodo è di 1 ns (nano secondo) In alcuni casi può essere necessario filtrare il segnale di clock in maniera che si fermi. Il FLIP FLOP D (la D sta per ritardo) contiene 1 bit di memoria D Q segnale di clock 14

Quaderno virtuale di teoria Il Flip Flop campiona il segnale di indresso D a instanti predefiniti, che sono dati dal segnale di clock, e ne memorizza lo stato fornendo, anche, un uscita Q. Il Flip Flop che stiamo studiando, in particolare, è il Flip Flop D Negative Edge Triggered. Clock D Q Circuiti sequenziali importanti: Registro (a n bit) elemento di memoria base Macchina a stati finiti Il 3-state Il 3-State non è una funzione logica in senso proprio. A F C A C F qualunque 1 A sia A 0 - Dove il trattino indica uno stato di alta impedenza che non fa passare il segnale elettrico Il 3-state varia stato a seconda del segnale di controllo C e non dipende dall ingresso A. Serve per il Bus. Il Bus non può ricevere più stati di segnale contemporaneamente altrimenti il circuito si brucerebbe. Il 3-state si trova tra la periferica (memoria, cpu, ) e il bus in modo da far passare un solo segnale elettrico alla volta. Ritornando ai registri La realizzazione di un registro (unità di memoria) a 4 bit utilizza 4 flip-flop. A ogni colpo di clock (CK) il flip-flop memorizza un nuovo valore ma dimentica il valore precedente. Write (WR) è un segnale che dice quando scrivere, però ho anche bisogno di un segnale di abilitazione (enable EN) perché non tutti i registri devono memorizzare quel determinato valore nello stesso tempo. Avrò anche un segnale di read (RD lettura) che mi dice quale registro è attivo per la lettura. Il disegno sulla pagina successiva rappresenta in modo completo quello che ho appena detto. 15

Architettura D 3 d 2 d 1 d 0 CK WR EN q 3 q 2 q 1 q 0 RD MACCHINE A STATI FINITI (FSM) È un circuito che serve per realizzare la logica di controllo. Lo schema qui sotto rappresenta la Macchina di Moore. I n Funzione di stato k Bit di stato k Funzione di futuro (insieme di uscite m flip-flop) k U k Dipende anche dallo stato presente che arriva dai bit di stato Non è l unico modello di macchina a stati finiti; c è anche la Macchina di Mealy che ha un collegamento in più che dagli ingressi I va direttamente alla funzione di uscita e di conseguenza l uscita dipende anche dall ingresso corrente e non solo dai bit di stato. Una macchina a stati finiti può essere anche costituita solamente da un flip-flop e come logica di stato futuro avere una porta NAND; questa macchina a stati finiti ha 1 bit di stato. In questo caso se l ingresso I vale 0 ha un uscita bloccata a 1, mentre se I vale 1 mi genera un segnale periodico che vale la metà rispetto a al clock, se il clock è di 1 GHz il segnale in uscita sarà di 500 MHz, quindi dimezza la velocità del clock. I PALLOGRAMMI mi aiutano a descrivere una macchina a stati finiti a seconda dello stato che assume. Se ho n bit ho 2 n stati possibili. 0 I = 1 I = 0 1 I = 1 0 I = 1 1 16

Quaderno virtuale di teoria Se sono nello stato 0 e I vale 1 al colpo di clock si dovrà passare allo stato 1 e lo stesso vale se sono nello stato 0 e I = 1. Mentre se sono nello stato 1 torno allo stato 0 solo se al colpo di clock I = 1. La macchina di Moore, ad esempio, ha 4 stati. Architettura MIPS e Assembler CPU Memoria Periferiche BUS k i fili Registro istruzione (non è possibile accedervi in fase di programmazione) Register file N di registri 0 Bit dentro al registro 31 0 31 La MIPS progetta la CPU e vende la licenza di costruzione. La CPU MIPS di riferimento del corso è la R2000/3000 a 32 bit che è di tipo RISC cioè con un set di istruzioni ridotte. I 32 bit della CPU indicano la parola del calcolatore Istruzione ADD L istruzione ADD esegue la somma del contenuto di due registri e ne memorizza il risultato in un 3 registro Per convenzione i registri si indicano con $ seguito dal numero del registro tenendo presente che si inizia a contare da 0. Sintassi dell istruzione: add $13, $14, $15 1 operando Registro dove viene memorizzato il risultato 2 operando Formato dell istruzione in linguaggio macchina 17

Architettura L istruzione, in linguaggio macchina, viene rappresentata su 32 bit. I 6 bit più significativi (da 26 a 31) rappresentano il codice operativo (operative code) dell istruzione da eseguire (nel nostro caso sono 000000) Per specificare gli operandi servono 5 bit perché 2 5 =32. Il formato dell istruzione è di tipo R 15 bit 31 30 29 28 27 26 0 0 0 0 0 0 2 operando 1 operando risultato SHAMT FUNCT In realtà il codice operativo della add è uguale anche a quello di altre operazioni 3 gruppi di bit per indicare gli operandi e dove salvare il risultato Shift Amount 5 bit Function Sono i 6 bit meno significativi Quando l operative code ha 6 zeri entrano in gioco i 6 bit meno significativi, cioè la function, che è l estensione del codice operativo. Per l add, la function è 0x20 (in esadecimale), in binario è: 00100000; sono 8 bit ma ne abbiamo solo 6 a disposizione quindi eliminiamo i primi 2, quindi ottengo: 100000. L istruzione sub (sottrazione) ha codice operativo 0x22 cioè 100010 in binario. La memoria 2 2 32 8 bit riga = parola di memoria, cella, locazione di memoria. Ci sono 2 32 locazioni di memoria possibili, il che vorrebbe dire che noi teoricamente possiamo avere 4GB di memoria RAM disponibile. Noi pensiamo che la nostra macchina virtuale abbia sempre 4GB di memoria Dentro al circuito di memoria c è un decodificatore che riceve 32 bit che specificano una delle 2 32 possibili locazioni di memoria ed ha anche 32 bit di uscita. Le informazioni arrivano dal BUS. Ricordo che il bus è diviso in 3 sezioni: il Bus dati, il Bus indirizzi (per il MIPS ha 32 bit) e il bus di controllo. Si utilizzano più parole di memoria per un dato che occupa più di 8 bit; posso spostare 4 parole di memoria in contemporanea purché siano adiacenti fra loro cioè con indirizzi vicini. Dalla CPU escono i 32 bit del bus indirizzi e arrivano al decodificatore. Dal decodificatore si attiva un solo filo riferito a una sola parola di memoria. Il contenuto di 8 bit della parola di memoria viene trasferito sul bus dati che li porta alla CPU. Questa è una lettura in memoria. 18

Quaderno virtuale di teoria Memoria Bus indirizzi Bus dati Bus controllo Il tratto rosso indica che la CPU fornisce un indirizzo di memoria, mentre il tratto blu indica che dalla memoria arrivano alla CPU i dati. Ogni trasferimento parte con un dato che è l indirizzo della memoria che proviene dalla CPU. Attraverso il bus indirizzi arriva al decodificatore, presente nella memoria, che riconosce l informazione e attiva un solo filo di uscita che va nella memoria vera e propria. Bistabile circuito con 2 stati stabili, sono sempre gli stessi (flip-flop). La memoria non è fatta con bistabili perché costerebbe troppo. Interruttore comandato Dal decoder C D Q Interruttore comandato D Q Read / write Nella scrittura in memoria solo una cella di memoria è coinvolta e devo fare in modo che i dati sul bus interno alla memoria arrivino all ingresso del flip-flop per scrivere i dati. Non posso chiudere contemporaneamente tutti gli interruttori; ci vuole un controllo C che tramite un segnale logico dice che sono in lettura o in scrittura per far si che venga aperto/chiuso l interruttore corretto. Questo segnale parte dalla CPU e arriva alla memoria tramite il bus di controllo. Ritornando al discorso della possibilità di spostare 4 parole di memoria in contemporanea. È possibile eseguire questa operazione solo quando è verificata una determinata condizione: I 2 bit meno significativi dell indirizzo devono essere 0. Quando questa condizione si verifica posso spostare le 4 parole di memoria successive a questo indirizzo. Questo gruppetto si dice che è allineato alla parola del calcolatore (o allineato a 4 byte). 19

Architettura Posso suddividere tutta la memoria in vari gruppetti purché la parola di memoria iniziale del gruppetto abbia l indirizzo che termina con due 0. Lo schema sottostante mostra come devono essere allineate le parole di memoria per poterle spostare tutte e 4 in contemporanea. 4 11 3 10 2 01 1 00 Assembler parte 2 Istruzione LW (load word) carica un valore dalla memoria con indirizzo specifico e lo scrive in un registro del register file. Con questa istruzione movimento 32 bit dalla memoria cioè 4 parole di memoria Sintassi dell istruzione lw $19, indirizzo Registro del register file Indirizzo della posizione di memoria L istruzione sw (store word) permette di memorizzare in memoria il contenuto di un registro del register file ed ha sintassi: sw $19, indirizzo Registro del register file Indirizzo della posizione di memoria Entrambi le istruzioni lw e sw hanno formato I cioè Immediate e l indirizzo è la somma di due entità: numero + contenuto registro La sintassi corretta e il formato sono: lw $19, numero($15) Registro base Registro di destinazione (nel register file) Spiazzamento, immediato o offset 20

Quaderno virtuale di teoria 10 bit 31 30 29 28 27 26 15 0 1 0 0 0 1 1 Registro base Destinazione Immediato (ho 16 bit per memorizzarlo) Codice operativo della load word (in esadecimale è 0x23) 1 gruppi da 5 bit per indicare i registri Lo piazzamento mi fornisce una finestra di accesso a una serie di spazi di memoria quindi mi devo solo ricordare del registro base. Esempio: lw $19, 1024($15) $15 2 16 2 Lo spiazzamento viene convertito in un numero binario in complemento a 2 su 16 bit quindi io ho un range di valori che è pari alla metà dello spiazzamento in su rispetto al registro base e in giù rispetto al registro base. Se ho offset 0 recupero il contenuto del registro base. L offset per gli spostamenti va incrementato ogni volta di 4 per andare alla parola di memoria successiva, ad esempio se ho offset 8 rispetto al registro base che ho indicato vuol dire che io recupero il contenuto che sta 2 registri sopra al registro base che ho indicato. Ricordo che l offset può essere negativo perché nella conversione in binario si utilizza la notazione in complemento a 2; con offset negativo recupero il contenuto di un registro sotto al registro base (devo comunque ricordare che ho una finestra di accesso che è 2 16 possibili combinazioni) Istruzioni lb e sb (load byte e store byte) Movimento dalla (o nella) memoria 1 byte cioè una sola parola di memoria. Le istruzioni load byte e store byte hanno un formato I come la load word e la store word lb $19, indirizzo sb $19, indirizzo Ciclo fondamentale Ma come fa il registro istruzioni a prendere il valore dell istruzione e non uno a caso? Esiste un registro che contiene l indirizzo dell istruzione o puntatore all istruzione (Instruction Pointer). L Instruction pointer nella realtà viene chiamato Program Counter. Quando ho un dato che funge da indirizzo si chiama puntatore Il pc è in grado di eseguire solamente il ciclo fondamentale che è composto da 4 passaggi: 21

Architettura 1. REPERIMENTO DELL ISTRUZIONE (fetch) Tramite il bus indirizzi viene comunicato alla memoria in quale registro leggere e tramite il bus dati arriva l istruzione. Questa operazione è fatta dall hardware 2. DECODIFICA (dell istruzione) Guardo il codice operativo e vedo cosa devo fare 3. ESECUZIONE (specifica di ciascuna istruzione) (4.) INCREMENTO DEL PROGRAM COUNTER (PC = PC + 4 tipico del MIPS perché passo alla parola di memoria successiva) Questo incremento può essere fatto dove si vuole purché sia prima del reperimento di una nuova istruzione. Normalmente questo incremento viene effettuato tra la fase 1 e la fase 2. Si chiama Ciclo Fondamentale perché il pc fa sempre queste cose da quando lo si accende. La macchina, in automatico, è in grado di eseguire una serie di istruzioni che partono da un punto preciso della memoria e continuano in sequenza. Struttura dei registri del MIPS 32 Il MIPS ha 32 registri suddivisi in maniera specifica. Al momento ci occupiamo dei registri da 8 a 15 e dei registri da 16 a 23 I registri da 8 a 15 sono registri temporanei e vengono indicati con la sigla $t seguita da un numero progressivo che va da 0 a 7 Numero registro Nome registro 8 9 10 11 12 13 14 15 $t0 $t1 $t2 $t3 $t4 $t5 $t6 $t7 I registri da 16 a 23 vengono denominati saved temporary e si indicano con $s seguito da un numero progressivo da 0 a 7 Numero registro Nome registro 16 17 18 19 20 21 22 23 $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 Gli altri registri disponibili vengono utilizzati in fase di scrittura del codice assembly per permettere delle azioni da parte dell utente come ad esempio l input e l output di dati. Esempio completo di una istruzione di somma (sintassi, formato e conversione in hex) Scrivere l istruzione che fa la somma di 3 e 2. $t0 := 3 $t1 := 2 $t2 := risultato 22

Quaderno virtuale di teoria La sintassi dell istruzione è: add $t2, $t0, $t1 Il formato dell istruzione è: (si ricorda che la add ha formato R) 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 Operative code $t0 (registro 8) $t1 (registro 9) $t2 (registro 10) Shift Amount Function code (in questo caso è 32 (10) ) Per ottenere la rappresentazione esadecimale raggruppo ogni 4 bit e eseguo la rispettiva conversione in decimale di ogni gruppetto: 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 9 5 0 2 0 Il esadecimale è: 0109520 (16) oppure è anche possibile scrivere 0x0109520 Assembler parte 3 Se devo sommare il valore di un registro con una costante che non è memorizzata in nessun registro uso l istruzione addi (add immediate) La sintassi è la seguente: addi $t0, $t1, 100 Il formato dell istruzione è I perché si utilizza l immediato su 16 bit per passare la costante 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 Operative code (in questo caso è 8 in decimale) $t0 1 registro $t1 2 registro Costante (in binario su 16 bit) Devo trasformare 100 in binario: 100 = 64 + 32 + 4 = 2 6 + 2 5 + 2 2 Nelle posizioni indicate dall esponente delle potenze di 2 si trova il bit = 1. Flusso di istruzioni Devo inserire, io programmatore, le istruzioni in memoria in modo continuo cosicché la CPU possa eseguirne una dietro l altra per ottenere il cosiddetto flusso di istruzioni. Ma oggi come oggi non è possibile avere una sequenza di istruzioni perché, ad esempio, se devo eseguire una divisione devo eseguire azioni diverse (che non sono in sequenza) a seconda che il divisore sia 0 o no. Questa è chiamata alterazione del flusso. 23