Anteprima
Vedrai una selezione di 10 pagine su 216
Appunti Architettura dei calcolatori Pag. 1 Appunti Architettura dei calcolatori Pag. 2
Anteprima di 10 pagg. su 216.
Scarica il documento per vederlo tutto.
Appunti Architettura dei calcolatori Pag. 6
Anteprima di 10 pagg. su 216.
Scarica il documento per vederlo tutto.
Appunti Architettura dei calcolatori Pag. 11
Anteprima di 10 pagg. su 216.
Scarica il documento per vederlo tutto.
Appunti Architettura dei calcolatori Pag. 16
Anteprima di 10 pagg. su 216.
Scarica il documento per vederlo tutto.
Appunti Architettura dei calcolatori Pag. 21
Anteprima di 10 pagg. su 216.
Scarica il documento per vederlo tutto.
Appunti Architettura dei calcolatori Pag. 26
Anteprima di 10 pagg. su 216.
Scarica il documento per vederlo tutto.
Appunti Architettura dei calcolatori Pag. 31
Anteprima di 10 pagg. su 216.
Scarica il documento per vederlo tutto.
Appunti Architettura dei calcolatori Pag. 36
Anteprima di 10 pagg. su 216.
Scarica il documento per vederlo tutto.
Appunti Architettura dei calcolatori Pag. 41
1 su 216
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

V

R3 <- R3+8

R7<- M[R3] V F

R4<R7 R4<- R7

R4 87

Codice non ottimizzato:

1. DADDI R5,0(R0)

2. LD R4,0(R3)

3. DMUL R6,R1,R2

4. SLT R8,R5,R6

5. BEQZ R8,6

6. DADDI R3, 8(R3)

7. LD R7,0(R3)

8. SLT R8,R4,R7

9. BEQZ R8,1

10. DADDI R4,0(R7)

11. DADD R5,1(R5)

12. J -8

Un' algoritmo diverso (non ottimizzato):

1. LD R4,(R3)0

2. DMUL R5,R1,R2

3. DSLL R5,(R5)3

4. DADDI R6,(R0)8

5. DADD R10,R6,R3

6. LD R7,(R10)0

7. SLT R8,R4,R7

8. BEQZ R8, 1

9. DADD R4,R0,R7

10. DADDI R6,(R6)8

11. SLT R8,R6,R5

12. BEQZ R8,-8

Su quest’ultimo codice si possono eseguire diverse modifiche o effettuare nuove varianti. Una variante

potrebbe essere quella di percorrere il vettore dal basso verso l’alto evitando quindi alcune istruzioni e

riducendo il numero di colpi di clock necessari all’esecuzione. Quest’ultimo codice impiega 4+n*m*8 colpi

di clock. 88

Esercizio 2.

Scrivere un codice Assembler che legga un vettore double, di dimensione n, a partire da un indirizzo, e

inserisca in un altro vettore, a partire da un altro indirizzo, gli elementi del primo moltiplicati per 2.

Soluzione: R1 = V[0], R2 = n,

R3 = W[0]

R5 <- R2

R5 <- R5*8

R5 <- R5 -8

R6 <- R5+R1

R4 <- M[R6]

R4 <- R4*2

R6 <- R5 +R3

M[R6] <- R4

F R5 == 0

V

END 89

Codice non ottimizzato:

1. DSLL R5, (R2)3

2. DADDI R5,(R5)-8

3. DADD R6,R5,R1

4. LD R4,(R6)0

5. DSLL R4,(R4)1

6. DADD R6,R5,R3

7. SD R4,(R6)0

8. BNEZ R5, -7

Questo codice impiega 2+n*7 colpi di clock.

Il codice ottimizzato:

1. DSLL R5, (R2)3

2. DADDI R5,(R5)-8

3. DADD R6,R5,R1

4. LD R4,(R6)0

5. DADD R6,R5,R3

6. DSLL R4,(R4)1

7. BNEZ R5, -7

8. SD R4,(R6)0

Questo codice invece impiega 2+5*n+1 colpi di clock 90

Esercizio 3.

Scrivere un codice Assembler in cui dati due vettori, di dimensione n, a partire da due indirizzi di memoria,

scrivi un ulteriore vettore i cui elementi sono dati dalla somma degli elementi dei primi due vettori: X =

V+W.

Soluzione: R1 = V[0], R2 = n, R3 =

X[0], R4 = W[0]

R5<- R2

R5<- R5*8

R5 <- R5-8

R6 <- R5+R4

R8<- M[R6]

R6 <- R5+R1

R7<- M[R6]

R8<- R8+R7

R6 <- R5+R3

M[R6] <- R8

F R5 ==0

V

END 91

Un codice ottimizzato potrebbe essere:

1. DSLL R5,(R2)3

2. DADDI R5,(R5)-8

3. DADD R6,R5,R4

4. LD R8,(R6)0

5. DADD R6,R5,R1

6. LD R7,(R6)0

7. DADD R6,R5,R3

8. DADD R8,R7,R8

9. BNEZ R5,-8

10. SD R8,(R6)0

Un ulteriore codice:

1. DADDI R4, (R0)0

2. DSLL R9,R5,3

3. ciclo: DADD R7,R2,R4

4. DADD R8,R3,R4

5. LD R12,(R7)0

6. LD R13,(R8)0

7. DADD R6,R1,R4

8. DADD R12,R12,R13

9. DADDI R4,R4,8

10. BNE R4,R9,ciclo

11. SD R12,(R6)0 92

Esercizio 4.

Analizzare le fasi dell’istruzione COPY, così definita:

COPY R ,R ,Imm M[R +Imm] ->M[R ]

s1 s2 s1 s2

IF IF/ID.IR < M[PC];

IF/ID.NPC, PC <- if((EX/MEM.opcode == branch) & EX/MEM.cond)

EX/MEM.ALUoutput;

Else PC+4;

ID ID/EX.A <- Regs[IF/ID.IR[rs]];

ID/EX.B <- Regs[IF/ID.IR[rt]];

ID/EX.NPC <- IF/ID.NPC;

ID/EX.IR<- IF/ID.IR;

ID/EX.Imm <- sing-extend[IF/ID.IR[immediate field]];

EX EX/MEM.IR<- ID/EX.IR;

EX/MEM.ALUoutput <- ID/EX.A + ID/EX.Imm;

EX/MEM.B <- ID/EX.B;

MEM1 MEM/WB.IR <- EX/MEM.IR;

MEM/WB.LMD <- M[EX/MEM.ALUoutput];

MEM/WB.B <- EX/MEM.B

MEM2 M[MEM/WB.B] <- MEM/WB.LMD; 93

94

CAPITOLO 10

IL COSTO DI UN CIRCUITO INTEGRATO

Ora facciamo un breve cenno ad alcuni fattori che determinano il costo del circuito integrato. Alcuni di

questi fattori usufruiscono di un abbattimento quando poi nella produzione si va a produrre un quantitativo

piuttosto che un altro, viceversa altri fattori non subiscono questo abbattimento.

1. La progettazione

Il primo fattore da considerare è quello legato alla progettazione, questo fortunatamente viene abbattuto

quando si produce un quantitativo di pezzi maggiore rispetto a uno minore. Se si spende una certa somma

per progettare un circuito elettronico, questa è dovuta allo stipendio per il numero di ingegneri che devono

lavorare al progetto per un certo numero di settimane o di mesi , e una parte all’ammortamento delle

macchine su cui questi ingegneri lavorano. L'ammortamento è il piano di restituzione graduale di un debito

mediante il pagamento periodico di rate. Quello che viene da questa somma di costi, che è essenzialmente

lo stipendio che si paga ai cervelli che lavorano su un sistema, va aggiunto il costo della struttura (ufficio,

capannone). Una volta che il progetto è terminato, questi costi non aumentano se decido di produrre un

chip o produrne dieci, per cui se il progetto costa 100.000 € è chiaro che vendendo 1.000 chip, da ciascuno

di questi bisogna ricavare almeno 100 € per rifarsi almeno delle spese di progetto. Vendendo un solo chip,

questo dovrà costare 100.000 €, altrimenti c’è un problema nel business plan. Il progetto, prima di arrivare

alla produzione subisce delle verifiche. Si fanno delle simulazioni e dei test. Per esempio un modo di testare

un circuito integrato, a livello funzionale, è quello di generare dei files di stimolo (degli ingressi) e vedere

sul simulatore in virtù di quegli ingressi come si comporterebbe quel circuito integrato. Se il circuito

integrato deve eseguire operazioni che sono relativamente piuttosto semplici, il test è anche veloce.

Per rete combinatoria intendiamo un circuito con degli ingressi e delle uscite che sono funzioni degli

ingressi. Applicando degli ingressi, questo oggetto deve produrre delle uscite che sono funzioni di questi

ingressi. Però esistono circuiti un po’ più complicati che prendono il nome di macchine a stati, in cui per

determinare l’uscita non basta conoscere l’ingresso, perché per dire quell’ingresso quale uscita produce

bisogna conoscere non solo l’ingresso ma anche lo STATO precedente del circuito. Un banale esempio di

macchina a stati è il contatore, il quale riceve un impulso e conta l’impulso. Quando nell’ingresso è

presente l’impulso non si conosce l’uscita. La funzione che regola il valore dell’uscita è una funzione che

ovviamente dipende dall’ingresso ma anche dallo stato del sistema e così come a ogni ingresso cambia

l’uscita , c’è anche un'altra funzione che va a modificare lo stato. Quindi l’uscita all’istante t dipende

dall’ingresso all’istante t e dallo stato in t-1; e lo stato nell’istante t dipenderà dall’ingresso t e dallo stato

all’istante t-1. Quindi c’è una variabile in uscita che è quella osservabile e che interessa; ma per descrivere il

funzionamento di questa macchina c’è anche un'altra variabile chi si chiama STATO, e che anch’essa cambia

di volta in volta ed è lei insieme all’ingresso a determinare il valore di uscita. Quindi oggetti di questo

genere sono molto più complessi da testare.

Le cose possono essere ancora più complicate se parlo di sistemi che hanno la memoria più lunga, l’uscita

dipende sia dallo stato all’istante precedente ma anche da stati di istanti ancora precedenti. Bisogna sapere

cosa c’era prima e sapere anche cosa c’era prima ancora. Quindi le combinazioni possibili aumentano.

95

2. La produzione

Nella produzione ci sono dei costi che dipendono anche dal tipo di cliente. Non tutti quelli che producono

circuiti integrati effettivamente producono loro il circuito integrato. Ci sono nel mondo poche fonderie.

Il circuito integrato si costruisce sul wafer costituito da germanio o silicio, possibilmente privo di impurità,

opportunamente drogato.

In un crogiuolo ad alte temperature si fonde il silicio(o germanio) e si procede con la fase di drogaggio: un

operazione chimica che aggiunge e toglie elettroni agli atomi di silicio e con questa operazione quella

materia si riesce a comportare come un transistor piuttosto che come un condensatore ecc. Quello che

interessa è avere un idea del perché un chip che contiene 1000 transistor costi di più di un chip che ne

contiene 10, dove ovviamente questi numeri sono del tutto casuali perché in un chip ci sono migliaia di

transistor. Questo wafer ha una forma circolare e non quadrata perché quando si prepara un wafer, il

processo di fabbricazione è tale da generare una forma circolare perché questo materiale si espande

radialmente. Allora al termine quando il processo di fabbricazione di questo materiale ha prodotto questa

“fetta”, essa ha una forma circolare. Su questo materiale bisogna inserire i package (contenitore in cui sono

racchiuse alcune tipologie di componenti elettronici: circuiti integrati ecc..), che possono avere una

dimensione variabile e forma rettangolare o quadrata. Si disegna in questa geometria circolare un certo

numero di pezzi i quali sono tali da essere replicati ma ovviamente con alcuni di questi che verranno buttati

perché mancheranno delle parti. Se con una certa area di wafer si riescono a costruire N chip, non è detto

che con un area di wafer doppia si riescano a inserire 2N chip. Questa proporzione si manterrebbe se la

geometria non fosse tonda. Interviene un fattore tragico che spinge a pensare in fase di progetto come

ridurre il numero di transistor e quindi l’area di un singolo chip. I chip sani che si ottengono dopo che sono

stati inseriti sul wafer non è detto che siano pronti per essere venduti, perché questi oggetti possono

essere difettosi. Le impurità presenti sul wafer determinano il fatto che quei chip costruirti su di un area

impura del wafer vadano scartati. Il numero di chip da buttare dipende anche dall’area del singolo chip.

2

Supponiamo che l’impurità abbia una probabilità di esistere, per esempio , minore dello 0,001 % in 1 cm , a

96

2

significare che in 1 cm di questa materia ci sono delle impurità con questa frequenza. Questo significa che

2

se c’è l’ 1% di impurità e ci sono 100 pezzi da 1 cm , significa che un pezzo mediamente verrà gettato. La

resa di produzione è del 99 %. Se viene considerato un chip che non funziona, e viene venduta una

motherboard con questo chip difettato, ritorna indietro tutta la motherboard!

Il test ha un costo che vale per ogni pezzo , non per ogni pezzo che viene vendo, ma anche per quelli che

vengono venduti va fatto. Ci sono dei pacchetti software la cui uscita è il codice per controllare il forno di

drogaggio di questi oggetti. Attraverso il codice VHDL (linguaggio che serve a descrivere il funzionamento di

un circuito

Dettagli
Publisher
A.A. 2021-2022
216 pagine
SSD Ingegneria industriale e dell'informazione ING-INF/01 Elettronica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher gonzopanda01 di informazioni apprese con la frequenza delle lezioni di Architettura degli elaboratori e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Bari o del prof Marino Francesco Maria.