Che materia stai cercando?

Architetture dei calcolatori

Appunti di Architetture dei calcolatori basati su appunti personali del publisher presi alle lezioni del prof. Ciciani, dell’università degli Studi La Sapienza - Uniroma1, facoltà di Ingegneria dell'informazione, Corso di laurea in ingegneria informatica e automatica. Scarica il file in formato PDF!. Scarica il file in formato PDF!

Esame di Architettura dei calcolatori docente Prof. B. Ciciani

Anteprima

ESTRATTO DOCUMENTO

Reti combinatorie circuito elettronico digitale

Una rete combinatoria (o logica) è un capace di realizzare

una o più funzioni di commutazione. somma canonica,

Ogni funzione può essere espressa come ovvero è possibile

realizzarla con 2 livelli di porte logiche AND - OR.

Mappe di karnaugh

Tabelle che permettono rappresentazione e semplificazione delle funzioni di

commutazione, ogni casella rappresenta l’uscita corrispondente nella tabella.

La funzione sarà data da vari OR tra gli AND delle variabili aventi 1 come uscita.

Con più di 4 variabili in ingresso bisogna creare una nuova tabella per ognuna di esse.

OSS nel caso in cui la combinazione tra alcune variabile non rientra tra quelle utili nelle

specifiche di progetto queste vengono segnate come “-” e possono essere usate per la

riduzione come se fossero 1.

ATTENZIONE utilizzano codice Gray, ovvero 11 e 00 sono invertiti.

ex. 3

Moduli di base è possibile dotare entrambi di un ingresso

Enable, la codifica avviene solo se E=1

Codificatore Γ

codifica binaria,

Realizza funzione di ovvero associa ad ogni elemento di un insieme

n

2 ≥ m

composto da m simboli, una sequenza distinta di n bit => ( )

OSS nella realtà è molto costoso e difficilmente

viene implementato in questo modo ex.

Decodificatore

Funzione inversa del codificatore, passa da codifica binaria a insieme di simboli ex.

ROM di indirizzamento) dati).

Circuito combinatorio con n ingressi (linee e m uscite (linee

Mandata una sequenza in input (equivalente ad un indirizzo) è possibile leggere le

informazioni contenute nella linea corrispondente.

ex. 4

Multiplexer (MUX) n segnali di selezione

Circuito combinatorio con 2 linee in ingresso (I , I , ..) e (S , S , ..)

n 0 1 0 1

che convergono in 1 unica uscita (U).

Permette di selezionare quale ingresso va in uscita tramite i segnali di selezione.

ATTENZIONE il numero

di segnali di selezione

dipende dal numero di

segnali in input.

2 => n

n

ex.

Demultiplexer (DEMUX)

Circuito combinatorio con n+1 linee di ingresso, di cui 1 dato in input (Y) ed n segnali di

selezione (S , S , ..) che selezionano una una delle 2 uscite (O , O , ..).

n

0 1 0 1

Funzione inversa al MUX, ricevuto un dato in ingresso seleziona su quale linea mandarlo.

Tipicamente utilizzato come decodificatore.

ex. 5

Half adder (semisommatore)

Realizza somme senza considerare il riporto precedente.

S = (not A)B + A(notB) = A ⊕ B

C = AB

Full adder Carry

Realizza somme considerando anche il in input.

S = A ⊕ B ⊕ C

C = AB + CB + CA

out

Ripple carry adder

Un adder singolo può sommare solo su 2 bit ed eventuale carry, è possibile lavorare su

più cifre mettendo più adder in parallelo.

Il risultato ha n+1 bit, dove n indica in numero degli adder contenuti. ATTENZIONE questo

sistema soffre di ritardi

nella propagazione del

riporto

sottrazione

OSS la si effettua con gli stessi circuiti combinatori tramite il

complemento a 2, posizionando buffer ed inverter three state in ingresso. 6

ALU (unità logico-aritmetica)

Permette di implementare nello stesso blocco più tipi di operazioni aritmetiche e logiche,

il numero di operazioni dipende dal tipo di componenti inclusi in fase di progettazione.

La scelta dell’operazione viene effettuata tramite un multiplexer.

ATTENZIONE permette solo operazioni su interi, operazioni in virgola mobile con FPU

Una ALU permette operazioni su un solo bit, quindi per numeri con più cifre si usano più

ALU in parallelo.

Anche in questo caso la sottrazione si effettua tramite complemento a 2 invertendo uno

degli operandi, moltiplicazioni e divisioni si implementano con addizioni e sottrazioni

successive. Zero si usa per le

operazioni di confronto

Overflow detection confronta il carry in con il carry out del

MSB, se sono diversi è overflow 7

Macchine sequenziali

Dal circuito combinatorio alla macchina sequenziale

Le macchine sequenziali sono composte da reti combinatorie alle quali vieni aggiunte una

memoria per gli stati precedenti. (generalmente un flip/flop)

ex.

Rete combinatoria => valore in uscita dato dai valori in ingresso in quel momento

Rete sequenziale => valore in uscita dipende da valori in ingresso in quel momento e

valori precedentemente memorizzati.

si possono essere:

- sincrone (non realizzabili)

- asincrone

sincrone impulsive

- (reti LLC)

2

- asincrone impulsive

Definizione (I, S, O, δ, ω)

Una macchina sequenziale è una quintupla MS =

I

- alfabeto in ingresso

I = {i , . . . , i }

1 m

S

- insieme degli stati

S = {s , . . . , s }

1 n

O

- alfabeto in uscita

O = {o , . . . , o }

1 q

δ

- funzione di stato successivo

δ : SxI → S

ω

- funzione di uscita

ω : SxI → O (Mealy)

ω : S → O (Moore)

impulsive => scandite da clock

2 8

Rappresentazioni

- diagramma degli stati => grafo orientato etichettato G(V,A,L)

- vertiti V => insieme dei nodi (stati)

- archi A => insieme delle transazioni di stato

- etichette L => insieme delle etichette

OSS Mealy segna lo stato su ogni arco, Moore

dentro lo stato

- Tabelle degli stati/uscite => matrici contenti stati e uscite

- Mealy => |S| righe x |I| colonne

l’elemento in posizione h,k contiene prossimo

stato ed uscita

- Moore => |S| righe x (|I| + 1) colonne

l’elemento in posizione il prossimo stato, l’uscita

è contenuta in h,(|I| + 1)

- Algorithm state machine => diagramma degli stati 9

ex.1 Interruttore flip/flop S-R

ex2. Riconoscitore sequenza “ciao” (tabella omessa per semplicità)

Alfabeto in ingresso => I = {a, b, …, z}

Uscite => O = {si, no} OSS Nel caso in cui la stringa

debba essere riconosciuta alla

prima immissione di ogni

lettera, invece di avere più

archi che tornano indietro,

l’immissione di una lettera

diversa porta in uno stato

separato dal quale non è

possibile uscire

OSS per realizzare una

macchina sequenziale e

determinare le funzioni di

eccitazione dei F/F è

necessario il passaggio alla

codifica in binario, effettuabile

associando ad ogni simbolo

una sequenza di bit. 10

Flip/flop (bistabile)

Il F/F è una macchina (di base asincrona) utilizzata per la memorizzazione dei dati, detto

Q̄ ≠ Q

bistabile poiché ha 2 stati stabili, ovvero sempre Configurazione 11 non

consentita poiché

creerebbe situazione di

instabilità nel circuito

I F/F sincronizzati

Ottenuti aggiungendo un segnale di sincronizzazione (clock) ai bistabili asincroni,

l’abilitazione alla commutazione del F/F può essere fatta in vari modi:

- Level-triggered o Latch (abilitazione sul livello) => uscita cambia quando il segnale è a

livello, ovvero Clock fermo ad 1 oppure 0 (usato per reti LLC)

- Positive edge triggered (abilitazione sul fronte di salita) => uscita varia solo su fronte

di salita, ovvero durante passaggio del clock da 0 a 1

- Negative edge triggered (abilitazione sul fronte di discesa) => uscita varia solo su

fronte di discesa, ovvero durante passaggio del clock da 1 a 0

- Master slave => ingresso si considera solo su fronte di salita, uscita cambia su fronte

di discesa

OSS l’abilitazione sul fronte permette stabilizzazione degli ingressi che altrimenti

potrebbero essere ancora in stato di transizione quando Clock è a livello

OSS dual channel delle memorie ram permette di trasferire dati sia su fronte di risalita che

su fronte di discesa 11

ex. Latch

EXTRA il F/F Delay latch permette di avere

un unico ingresso per i dati D mettendo un

inverter a monte dell’ingresso R

I registri

Elementi di memoria realizzati da un insieme di F/F collegati in parallelo, collegati in serie

possono essere usati per creare shift register.

Una combinazione di entrambi è

utilizzata per convertire i segnali da

seriale a parellelo e viceversa.

Seriale-parallelo => dati vengono

• ricevuti un bit alla volta e poi shiftati

fino al completamento, infine salvati in

parallelo su altro registro.

Parallelo-seriale => dati inseriti in shift

• register ed inviati u bit alla volta

shiftando ad ogni invio 12

SCA = PU (processing unit)

Sistemi digitali complessi SCO = CU (control unit)

Quando si parla di sistemi

complessi bisogna far attenzione

a separare le unità di controllo

(SCO) dalle unità di elaborazione

(SCA).

SCA

Comprende tutti gli elementi utili

per l’elaborazione dei dati:

- Registri

- Operatori

- Strutture di interconnessione

- Moduli vari (MUX, DEMUX, …)

SCO

Struttura di controllo che permette di effettuare la microprogrammazione dei componenti.

Basate su macchine di Moore e Mealy ed inizialmente implementate tramite ROM.

Permette implementazione della semantica del microcodice di ogni istruzione, i circuiti di

selezione servono per ottimizzare il costo del microcodice. Moore

Mealy

Protocollo di handshaking

Permette di simulare una connessione

sincrona tra due dispositivi

indipendenti che lavorano in maniera

asincrona uno rispetto all’altro.

Questo è possibile grazie ad un F/F

F/F di handshaking,

comune, detto

che funge da semaforo.

ex. Al termine di ogni operazione il

dispositivo UTx invia i dati a a URx ed

un segnale, detto Ack.

URx ricevuto il segnale legge il dato ed

una volta finite le sue operazioni invia ex.

un nuovo ack a UTx che riprenderà le

sue funzioni ed invierà un nuovo dato 13

Processore Z64

Processore didattico a 64 bit basato su architettura x86 (usata da processori Intel / Amd)

Le 4 connessioni per

registro del primo decoder

permettono di selezionare

8/16/32/64 bit.

Il secondo decoder invece

seleziona il registro tramite

il codice di 4 bit in IR.

La selezione viene quindi

effettuata tramite un AND

tra questi 2 segnali e quello

di write / read

I Registri

- TEMP1 / TEMP2 => registri nascosti che permettono di mantenere le variabili stabili

durante il processamento nella ALU o shifter (sempre in funzione)

OSS si dicono nascosti poiché non visibili al programmatore

- IR => Istruction register, contiene dati istruzione in esecuzione

- RIP (PC) => program counter, contiene indirizzo prossima istruzione, modificabile da

istruzioni di salto

- MAR => memory address register, indirizzo cella di memoria con cui interagire

- MDR => memory data register, contenuto della cella o dati da mandare alla cella

- FLAGS => contiene informazioni su esito ultima operazione (status) o flags per variare il

modo di esecuzione, i suoi componenti vengono usati per condizioni di salto

- RAX … R15 => registri di uso generale per il salvataggio dei dati 14

Il registro FLAGS

Il BUS

Struttura di collegamento tra i vari componenti, ogni elaboratore ha 2 tipi di bus, uno

interno al processore ed uno esterno per connessione con memoria e periferiche.

Lo Z64 è dotato di un unico BUS interno, quindi un

solo registro alla volta può scrivere su di esso, i dati

vengono mantenuti sul bus finche un altro registro li

sovrascrive.

Permette di effettuare 2 tipi di operazioni:

- Trasmissione dati => contenuto del registro posto

buffer three state

sul bus, segnale tramite un

- ricezione dati => bit presenti sul BUS vengono

write enable

salvati nel registro, segnale

OSS teoricamente sarebbe possibile scrivere

su più registri contemporaneamente ma non

esiste istruzione assembly Anche il BUS esterno è unico ma diviso in 3

componenti:

- Control bus => specifica lettura / scrittura

- Address bus => specifica indirizzo

- Data bus => contiene dati 15

Interazione con la memoria

La memoria può essere vista come un lungo

nastro diviso in celle (8 bit per cella), ognuna

delle quali identificata da un numero intero

progressivo detto indirizzo.

Contiene sia dati che istruzioni.

Per interagire con essa si utilizzano i due

registri tampone MAR e MDR che permettono

al processore di non bloccarsi in attesa dei dati

in memoria pur avendo un solo bus interno.

Ad ogni interazione il processore posiziona

indirizzo in MAR e manda segnale lettura o

scrittura tramite memory control bus, in caso di

scrittura carica dati su MDR, altrimenti lo

utilizza per recuperare le informazioni una volta

completate le operazioni della memoria.

OSS la linea di ritorno dal MAR serve per il calcolo degli indirizzi (vedere microistruzioni)

La memoria

Siccome la capacità delle

memorie dei calcolatori moderni

è molto elevata, queste vengono

divise in moduli contenenti a loro

volta blocchi di memoria.

Il modo in cui vengono divisi i

moduli cambia a seconda

dell’elaboratore.

I dati vengono caricati o

immagazzinati tramite una

matrice di righe e colonne.

Per capire in quale modulo sono

salvati i dati richiesti si fa

riferimento ad un determinato

numero di bit dell’indirizzo che

dipende dalla quantità di moduli. Allineamento

A causa della

divisione in moduli

un dato più lungo

della riga del modulo

deve essere diviso

su più moduli.

La memoria si dice

allineata quando tutti

i componenti di un

dato si trovano sulla

stessa riga in ogni

modulo. 16

Il processamento delle istruzioni

Un ciclo istruzione si può dividere in 3 fasi:

- FETCH => l’istruzione contenuta in

memoria viene copiata nel registro IR.

OSS indirizzo istruzione in RIP

viene incrementato automaticamente

dopo ogni fetch ancor prima di

eseguire il decode

- DECODE => identificazione del tipo di

istruzione da eseguire (microcodice)

- EXECUTE => control unit implementa la

semantica dell’istruzione

Alla fine di ogni ciclo istruzione il processore

controlla lo stato del interrupt flag e la

presenza di richieste di interrupt, se le

condizioni non sono verificate ricomincia, altrimenti gestisce l’interrupt.

Questo ciclo viene ripetuto all’infinito finche la macchina non viene spenta o riceve

HLT

l’istruzione che manda il processore in IDLE, ovvero rimane in attesa di interrupt

senza eseguire alcuna operazione.

Formato istruzioni

Le istruzioni eseguibili dal processore si possono dividere in classi:

0. Controllo dell’hardware

1. Spostamento dati

2. Aritmetiche e logiche

3. Rotazione e shift

4. Operazioni su bit di flags

5. Controllo flusso di esecuzione del programma

6. Controllo condizionale del flusso di programma

7. Ingresso / uscita dati

Ognuna di esse per essere processata viene caricata nel IR secondo questo formato:

OSS quindi operazioni possono avere formato fino a 128 bit a seconda del tipo di

istruzione, l’unico campo sempre presente è opcode

OSS da notare come ogni registro ha un codice di 4 bit per essere identificato dal

decoder che si occupa della selezione degli operandi 17

Opcode

- Class => codice di 4 bit, famiglia istruzione

- Type => identifica istruzione nella classe

Mode

- SS => dimensione della sorgente

- DS => dimensione della destinazione

- DI => indica presenza di displacement o immediato

- Mem => indica se e quale tra sorgente e

destinazione sono presenti in memoria

SIB (scala, indice, base)

Presente solo nel caso di indirizzamento in memoria

- Bp => se 1 indirizzamento usa base

- Ip => se 1 indirizzamento usa indice

- Scale => valore della scala

(00 = 1) (01=1) (10=2) (11=4)

- Index register => codifica binaria registro indice

R/M

- src register => codifica registro sorgente

- Dest register => codifica registro destinazione

OSS possono essere anche basi di indirizzamento

Displacement / immediate

Contengono valori $immediate rispettivamente a 32 e 64 bit

ATTENZIONE indirizzamento usa l’immediate a 64 bit, quindi si possono caricare dati fino

ad un massimo di 32 bit

ex.

Endianess

Ordine in cui vengono salvati i byte di un dato

- little-endian => da byte meno significativo a più significativo, usato da processori x86

poiché utile per il cast

- Big-endian => da byte più significativo a meno significativo, usato per il protocollo

“network-byte order” di internet

OSS ogni volta che un processore x86 invia dati sulla rete deve cambiare l’ordine dei byte

ATTENZIONE la codifica avviene a gruppi di 2 byte 18

Le microoperazioni

Lo Z64 è un processore multiciclo, ovvero ad ogni ciclo istruzione corrispondono più cicli

macchina (operazioni elementari eseguite in un solo ciclo di clock).

Costo del microcodice

Ipotizzando di non eseguire ottimizzazioni:

- N => stato necessario per il fetch

0 N ∀ ∈ [1,M ] − M

- k => stati necessari per tutti i sottoprogrammi i

i i

M

k = log N

2 i

i=0

- m => numero segnali in input

- r => numero variabili in output

La ROM corrispondente sarà

- Mealy => 2 parole di k2 +2 bit

k n

- Moore => 2 parole di k+2 bit

m+k

Per evitare un costo troppo alto del microcodice è possibili utilizzare circuiti di selezione

che permettono di mascherare segnali superflui. (vedere pag. 13)

Ad esempio in questo modo invece di associare ogni tipo di variabile di condizione ad

ogni istruzione posso limitare ognuna di esse ad avere solo quelle realmente necessarie.

Inoltre, avendo che ogni istruzione corrisponde ad una linea della ROM, questa viene

divisa in blocchi di classi dove la base corrisponde alla prima istruzione della classe, e le

altre istruzioni vengono indicate come spiazzamento da essa.

Questo però comporta spazi vuoti poiché non tutte le classi hanno lo stesso numero di

istruzioni e non tutte le istruzioni sono della stessa lunghezza.

OSS nei processori moderni le ROM non vengono comunque utilizzate poiché anche con

il massimo delle ottimizzazioni occuperebbero 1/4 del processore

Microcodice FETCH

1. MAR RIP

← ←

2. MDR MAR; RIP RIP + 8

3. IR MDR

1. B = 1; W = 1

RIP MAR

2. INC = 1; B = 1

RIP AR

B = 1; MDR = 1

AR

B = 1; MDR = 1; B = 1; W = 1

AR DBIN MDR

3. W = 1; B = 1

IR MDROUT 19

I dispositivi di I/O

Le istruzioni di classe 7 permettono di interfacciare il processore con periferiche di I/O.

Questo può avvenire utilizzando un BUS separato (con I/ODR e I/OAR corrispondenti)

oppure utilizzando lo stesso BUS usato per le memorie al quale viene aggiunto un

segnale I/O che indica se l’indirizzo appartiene alla memoria oppure ad una periferica.

ATTENZIONE Tutti i segnali esterni al processore lavorano in logica negata (invertiti)

Tipologie di BUS

BUS processore-memoria

I. => alta velocità ma lunghezza ridotta, sincrono

BUS di I/O

II. => più lenti ma di lunghezza maggiore e permettono diversi tipi di

connessioni, asincroni

BUS backplane

III. => struttura intermedia tra bus processore-memoria e bus I/O

BUS SINCRONO:

protocollo scandito da cicli di

clock, più veloce ma necessita

sincronizzazione di tutti i

dispositivi collegati

BUS ASINCRONO:

Usa protocollo di handshaking,

più lungo ma velocità dipende

dal dispositivo

bus parelleli

OSS è inoltre possibile dividere i bus in che hanno una linea per ogni bit e

bus seriali che inviano tutti i dati sulla stessa linea

Istruzioni di input / output

inX %dx, %?a?

Input => outX %?a?, %dx

Output =>

Per utilizzare queste istruzioni bisogna prima salvare l’indirizzo del componente della

%dx.

periferica con la quale si vuole interagire in %?a?,

In caso di output bisogna salvare il dato nel registro accumulatore in caso di input

il dato verrà scritto in questo registro.

Invece per trasferire un numero maggiore di dati con istruzione unica si possono usare:

insX %dx

Input => outsX %dx

Output => %RCX,

Il numero di dati da trasferire è contenuto in la prima locazione di memoria in cui

%RDI,

salvare o dalla quale caricare i dati in ovviamente sono istruzioni bloccanti.

OSS l’utilizzo di un registro a 16 bit permette indirizzamento fino 65536 dispositivi

ATTENZIONE Le istruzioni della classe 7 sono implementate a firmware e non sono

disponibili in user space, inoltre x86 permette trasmissione di dati fino a massimo 32 bit

20

Tipologie di interazione tra CPU e periferiche

In tutti gli schemi si fa riferimento a registri I/ODR e I/OAR ma il protocollo è equivalente

usando un solo BUS e quindi i registri MAR e MDR

Busy waiting (firmware, 1 dispositivo)

Basato su protocollo di handshaking, rende trasferimento semi-sincrono bloccando la

CPU per tutto il tempo necessario per lo scambio dei dati.

1. Processore richiede dato tramite I/O RD

2. F/F status invia segnale WAIT

3. SCA dispositivo produce dato e lo posiziona nel suo REG

4. SCO dispositivo disabilita WAIT e CPU legge dato

1. CPU invia segnale I/O WR e carica dato in REG

2. F/F status invia segnale di WAIT

3. SCA dispositivo legge il dato

4. SCO dispositivo disabilita segnale WAIT 21


PAGINE

44

PESO

12.33 MB

AUTORE

duke0000

PUBBLICATO

6 mesi fa


DETTAGLI
Corso di laurea: Corso di laurea in ingegneria informatica e automatica
SSD:
A.A.: 2018-2019

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher duke0000 di informazioni apprese con la frequenza delle lezioni di Architettura dei calcolatori e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università La Sapienza - Uniroma1 o del prof Ciciani Bruno.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Architettura dei calcolatori

Assembly x86 AMD64
Appunto
Telecomunicazioni (Appunti+Esercizi esame+Formulario)
Appunto
Elettronica - Tutta la teoria per esercizi e domande
Appunto
Elettrotecnica - Come fare gli esercizi e tutte le domande teoriche
Appunto