Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
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