Академический Документы
Профессиональный Документы
Культура Документы
En el SPARCv8/4 se van a implementar los 32 registros mediante un banco de registros con tres puertos de lectura.
ALSU
fun 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 37 38 39 FUN ADD AND OR XOR SUB ANDN ORN XNOR ADDX Descripcin alu<=a+b alu<=a AND b alu<=a OR b alu<=a XOR b alu<=a - b alu<=a AND (NOT b) alu<=a OR (NOT b) alu<=a XNOR b alu<=a + b + c
ALSU32 4
1
a a a ALU32 alu 0 1 alsu
b b
4 fun(3..0) 1
UMUL alu<=a(15..0) * b(15..0) SMUL alu<=a(15..0) * b(15..0) SUBX alu<=a - b - c UDIV alu<=a / b(15..0) SDIV alu<=a / b(15..0) SLL SRL SRA alu<=a<<b alu<=a>>b alu<=a/(2^b)
ALSU32
alsu
b fun(5) 6
fun
Funciones de la ALSU Diagrama de bloques de la ALSU indica que difiere en el nmero de bits del SPARC V8
calc_status a
32
Reg4
32
+,b
s
1 s(31)
32 1
sel
n z v c
1 a(31)
1 b(31)
v n c (cOz) (nXv) (zO(nXv)) z 1 v n icc c cOz nXv zO(nXv) z 0 O=OR X=XOR =NOT
15 14 13 12
10 9 8 7 6 5 4 3 2 1 0
16
status
Segundo bloque a construir Las lneas curvas indican que se toman algunos bits,las lneas rectas indican que se toman todos los bis.
condic
SPARCv8/4_risc1et
N
0 1
w-addr
r-addr3
5
32
IR(30) ds
r-addr2
r-addr1
a ALSU32 alsu
fun(4)
reg_file3
r_data3 32
IR(31) DPe
PC
D
32
PC 8 Bus_PC 32 Bus_IR 32
ROM_Prog
addr8 dout
Bus_PC(9..2) 32
rd
FUN ADD AND OR XOR SUB ANDN ORN XNOR ADDX
f un
rs1
rs2cte13
Descripcin alsu<=a+b alsu<=a AND b alsu<=a OR b alsu<=a XOR b alsu<=a - b alsu<=a AND (NOT b) alsu<=a OR (NOT b) alsu<=a XNOR b alsu<=a + b + c
FUN rd,rs1,rs2cte13 (#En el SPARC rd va a la derecha) r[rd]<- FUN(r[rs1],r[rs2]cte13) PC<-PC+4, (Si es cc) icc<-icc_x
UMUL alsu<=a(15..0) * b(15..0) --(#En el SPARC UMUL es de 32x32 bits) SMUL alsu<=a(15..0) * b(15..0) --(#En el SPARC SMUL es de 32x32 bits) SUBX alsu<=a - b - c UDIV SDIV alsu<=a / b(15..0) --(#En el SPARC UDIV es de 64/32 bits) alsu<=a / b(15..0) --(#En el SPARC SDIV es de 64/32 bits)
alsu<=a<<b (rellena con ceros) alsu<=a>>b (rellena con ceros) alsu<=a/(2^b) (repite el bit mas significativo)
DPe 1
00000 1
Primer programa
Dir. Assembler Comentario 0x4000 MOV %g1,6 ! Carga 6 en %g1 0x4004 MOV %g2,9 ! Carga 9 en %g2 0x4008 ADD %g3, %g2, %g1 ! Suma en %g3 0x400C SRA %g4, %g3, 1 ! Desplaza en %g4 Qu operacin aritmtica hacen las dos ltimas instrucciones?
Comentario
SPARC V8
Assembler
R[rd]
mem
PC
icc
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
108 106 106 106 110 106 106 106 108 113 113 110 115 115 108 106 106 106 110 106 106 106 108 113 113 110 115 115 107 107 107
Suma Y O O excluyente Resta Y con rs2cte13 negada O con rs2cte13 negada O excluyente negada Suma con acarreo Mult. sin signo Mult. con signo Resta con acarreo Div. sin signo Div. con signo Suma Y O O excluyente Resta Y con rs2cte13 negada O con rs2cte13 negada O excluyente negada Suma con acarreo Mult. sin signo Mult. con signo Resta con acarreo Div. sin signo Div. con signo Desp. a la izq. (llena con ceros) Desp. a la der. (llena con ceros) Desp. a la der. (llena con signo)
ADD rd,rs1,rs2cte13 AND rd,rs1,rs2cte13 OR rd,rs1,rs2cte13 XOR rd,rs1,rs2cte13 SUB rd,rs1,rs2cte13 ANDN rd,rs1,rs2cte13 ORN rd,rs1,rs2cte13 XNOR rd,rs1,rs2cte13 ADDX rd,rs1,rs2cte13 UMUL rd,rs1,rs2cte13 SMUL rd,rs1,rs2cte13 SUBX rd,rs1,rs2cte13 UDIV rd,rs1,rs2cte13 SDIV rd,rs1,rs2cte13 ADDcc rd,rs1,rs2cte13 ANDcc rd,rs1,rs2cte13 ORcc rd,rs1,rs2cte13 XORcc rd,rs1,rs2cte13 SUBcc rd,rs1,rs2cte13 ANDNcc rd,rs1,rs2cte13 ORNcc rd,rs1,rs2cte13 XNORccrd, rs1,rs2cte13 ADDXcc rd,rs1,rs2cte13 UMULcc rd,rs1,rs2cte13 SMULcc rd,rs1,rs2cte13 SUBXcc rd,rs1,rs2cte13 UDIVcc rd,rs1,rs2cte13 SDIVcc rd,rs1,rs2cte13 SLL rd,rs1,rs2cte13 SRL rd,rs1,rs2cte13 SRA rd,rs1,rs2cte13
PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4 PC<-PC+4
r[rd]<- r[rs1] + r[rs2]cte13 r[rd]<- r[rs1] AND r[rs2]cte13 r[rd]<- r[rs1] OR r[rs2]cte13 r[rd]<- r[rs1] XOR r[rs2]cte13 r[rd]<- r[rs1] - r[rs2]cte13 r[rd]<- r[rs1] AND NOT(r[rs2]cte13) r[rd]<- r[rs1] OR NOT(r[rs2])cte13 r[rd]<- r[rs1] XNOR r[rs2]cte13 r[rd]<- r[rs1] + r[rs2]cte13 + c r[rd]<- r[rs1] * r[rs2]cte13 r[rd]<- r[rs1] * r[rs2]cte13 r[rd]<- r[rs1] - r[rs2]cte13 - c r[rd]<- r[rs1] / r[rs2]cte13 r[rd]<- r[rs1] / r[rs2]cte13 r[rd]<- r[rs1] + r[rs2]cte13 r[rd]<- r[rs1] AND r[rs2]cte13 r[rd]<- r[rs1] OR r[rs2]cte13 r[rd]<- r[rs1] XOR r[rs2]cte13 r[rd]<- r[rs1] - r[rs2]cte13 r[rd]<- r[rs1] AND NOT(r[rs2]cte13) r[rd]<- r[rs1] OR NOT(r[rs2])cte13 r[rd]<- r[rs1] XNOR r[rs2]cte13 r[rd]<- r[rs1] + r[rs2]cte13 + c r[rd]<- r[rs1] * r[rs2]cte13 r[rd]<- r[rs1] * r[rs2]cte13 r[rd]<- r[rs1] - r[rs2]cte13 - c r[rd]<- r[rs1] / r[rs2]cte13 r[rd]<- r[rs1] / r[rs2]cte13 r[rd]<- r[rs1] << r[rs2]cte13 r[rd]<- r[rs1] >> r[rs2]cte13 r[rd]<- r[rs1] / (2**r[rs2]cte13) icc<-icc_x icc<-icc_x icc<-icc_x icc<-icc_x icc<-icc_x icc<-icc_x icc<-icc_x icc<-icc_x icc<-icc_x icc<-icc_x icc<-icc_x icc<-icc_x icc<-icc_x icc<-icc_x
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1
0 0 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 1
0 0 1 1 0 0 1 1 0 1 1 0 1 1 0 0 1 1 0 0 1 1 0 1 1 0 1 1
0 1 0 1 0 1 0 1 0 0 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 0 1
rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1 rs1
i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i
rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13 rs2cte13
10 10 10
No hace operaciones Mueve Compara mayo o menor Compara con cero Invertir los bits Complemento a 2 Incrementa en uno Decrementa en 1 Borra un registro
NOP MOV rd,rs2cte13 CMP rs1,rs2cte13 TST rs2 NOT rd,rs1 NEG rd,rs2 INC rd,rs1 DEC rd,rs1 CLR rd
ADD R0,R0,R0 ADD rd,R0,rs2cte13 SUBcc R0,rs1,rs2cte13 ORcc R0,R0,rs2 XNOR rd,rs1,R0 SUBB rd,R0,rs2 ADD rd,rs1,1 SUBB rd,rs1,1 OR rd,R0,R0
Comentarios
SPARC V8
Assembler
R[rd]
mem
PC
icc
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
90 90 95 95 119 119 119 119 119 119 119 119 119 119 119 119 119 119 119 119 125 85 126 126
Carga en reg. dato de MEM Carga en reg. dato de MEM Almacena el reg. en la MEM Almacena el reg. en la MEM No brinca Brinca si son iguales Brinca si es menor o igual (S) Brinca si es menor (S) Brinca si es menor o igual (U) Brinca si c es uno (menor (U)) Brinca si es negativo Brinca si v es uno Brinca siempre Brinca si no son iguales Brinca si es mayor (S) Brinca si es mayor o igual (S) Brinca si es mayor (U) Brinca si c es cero (may,Igu (U)) Brinca si es positivo Brinca si v es cero Llamado a rutina Retorno de rutina Salto con reg. Salto con cte.
LD rd,[rs1+rs2] LD rd,[rs1+cte13] ST [rs1+rs2],rd ST [rs1+cte13],rd BN cte22 BE cte22 BLE cte22 BL cte22 BLEU cte22 BCS cte22 BNEG cte22 BVS cte22 BA cte22 BNE cte22 BG cte22 BGE cte22 BGU cte22 BCC cte22 BPOS cte22 BVC cte22 CALL cte30 RETL JMPL rd,rs1+rs2 JMPL rd,rs1+cte13
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
rd rd rd rd 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1
0 0 0 0
0 0 0 0
000 001010 cte13 1 000 001010 cte13 1 cte22 cte22 cte22 cte22 cte22 cte22 cte22 cte22 cte22 cte22 cte22 cte22 cte22 cte22 cte22 cte22
rs2 rs2
PC<-4*cte22 + PC WHEN '0'='1' ELSE PC+4 PC<-4*cte22 + PC WHEN z='1' ELSE PC+4 PC<-4*cte22 + PC WHEN zOR(nXORv)='1' ELSE PC+4 PC<-4*cte22 + PC WHEN nXORv='1' ELSE PC+4 PC<-4*cte22 + PC WHEN cORz='1' ELSE PC+4 PC<-4*cte22 + PC WHEN c='1' ELSE PC+4 PC<-4*cte22 + PC WHEN n='1' ELSE PC+4 PC<-4*cte22 + PC WHEN v='1' ELSE PC+4 PC<-4*cte22 + PC WHEN '1'='1' ELSE PC+4 PC<-4*cte22 + PC WHEN NOTz='1' ELSE PC+4 PC<-4*cte22 + PC WHEN NOT(zOR(nXORv))='1' ELSE PC+4 PC<-4*cte22 + PC WHEN NOT(nXORv)='1' ELSE PC+4 PC<-4*cte22 + PC WHEN NOT(cORz)='1' ELSE PC+4 PC<-4*cte22 + PC WHEN NOTc='1' ELSE PC+4 PC<-4*cte22 + PC WHEN NOTn='1' ELSE PC+4 PC<-4*cte22 + PC WHEN NOTv='1' ELSE PC+4 PC<-PC+4*cte30 %o7<-PC PC<-%o7+8 PC<-r[rs1]+r[rs2] r[rd]<-PC PC<-r[rs1]+cte13 r[rd]<-PC
1 cte30 000 00 01110 0001111100 0000000100 0 0 rd 1110 00 rs1 0 0 0 0 0 0 0 0 0 rs2 0 rd 1110 00 rs1 1 cte13
Brinca si est n Brinca si no est n Brinca si est z Brinca si no est z Brinca si est c Brinca si no est c Brinca si est v Brinca si no est v
BnS cte22 BnC cte22 BzS cte22 BzC cte22 BcS cte22 BcC cte22 BvS cte22 BvC cte22
BNEG cte22 BPOS cte22 BE cte22 BNE cte22 BCS cte22 BCC cte22 BVS cte22 BVC cte22
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
ir
DPe ds rs1,r-addr1 r-data1,a rs2cte13,r-addr2 r-data2 i b funci fun alsu, Bus_A Bus_Din rd,r-addr3 r-data3, Bus_Dout w-addr w-data we condi status cte22 nPC
SPARCv8/4_risc1et
N
r-addr3
r-addr2
r-addr1
0 1
w-addr
a ALSU32 alsu
fun(4)
1 0 32
Bus_A 32
reg_file3
RAM_Dat
addr8 din
we ce dout
b
6
5
5
32
IR(30) ds
32
4 &00
4
24 0 1 24
PC
D
Arquitectura Harvard
ROM 256 x 32 like listing 11.5
32
ROM_Prog
addr8 dout
Bus_PC(9..2) 32
SPARCv8/4_risc1et
N
r-addr3
r-addr2
r-addr1
0 1
w-addr
a ALSU32 alsu
fun(4)
1 0 32
Bus_A 32
reg_file3
r_data3 32 Bus_Dout 32 1 we if IR= ST then we<=1 else we<=0 Bus_we 1 RAM 256x32 like listing 11.3
b
6
5
5
32
IR(30) ds
RAM
addr8_dat dout_dat
32
4 &00
4
24 0 1 24
PC
D
32
PC 8 Bus_PC 32
IR(28..25) condi
Bus_PC(9..2) Bus_IR 32
status
32
1 1 1 1
rd rd
00 0 0 0 0 00 0 0 0 0
rs2
1 1 1 1
rd rd
00 0 1 0 0 00 0 1 0 0
Escritura de memoria
rs1 rs1
ST [rs1+rs2cte13], rd m[r[rs1]+r[rs2cte13]]<- r[rd] PC<-PC+4
0 0 0 001010 cte13 1
rs2
Mximo
A-B
max:
No
A<B
Si
No_cumple:
C=A
C=B
Si_cumple: fin:
fin
Brincos
0 0 0 condi
Cdigo de la condicin Ecuacin de la condicin Nombre lgico de la condicin {N,Z,V,C}x{Set, Clear}
Bcondi cte22
01 0
Interpretacin aritmtica con A-B
cte22
En el SPARC V8 antes de saltar se ejecuta la instruccin siguiente, por eso llevan NOP. En el SPARC V8/4 no.
condi 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
status(icc,condi) 0 Z Z or (N xor V) N xor V (CorZ) C N V 1 not Z not (Z or (N xor V)) not (N xor V) not (C or Z) not C not N not V
CONDI(L) BN BZS
CONDI BN BE BLE BL BLEU BCS BNEG BVS BA BNE BG BGE BGU BCC BPOS BVC
Descrip. (Ingls) Branch Never Branch on Equal Branch on Less or Equal Branch on Less Branch on Less or Equal Unsigned Branch on Carry Set (Less than, Unsigned) Branch on Negative Branch on Overow Set Branch Always Branch on Not Equal Branch on Greater Branch on Greater or Equal Branch on Greater Unsigned Branch on Carry Clear (Greater than or Equal, U.) Branch on Positive Branch on Overow Clear
Estructura IF
A-B
No_cumple: No
condicin
No_cumple
SUBcc A,B,%g0 Bcondi Si_cumple ... ... BA fin ... ... ...
fin