Práctica

Ejercicios de RISC-V y lógica digital

Cada ejercicio plantea un problema concreto. Escribe tu respuesta y pulsa «Comprobar»: la corrección la calcula en tu navegador el mismo código que usan las herramientas, y la solución explica el razonamiento. «Abrir en la herramienta» carga el mismo ejemplo para que puedas explorarlo.

RISC-V

Para hacerlos te basta con papel y la tabla de formatos del itinerario RISC-V.

Decodifica una instrucción con inmediato negativo

Pasa 0xFFF28293 a binario y separa sus campos. Indica el formato, el opcode, los registros, funct3 y el valor decimal del inmediato.

0xFFF28293

Abrir en la herramienta

Decodifica una instrucción tipo R

Identifica los campos de 0x40B50533. Presta atención a funct7: es lo que distingue add de sub.

0x40B50533

Abrir en la herramienta

Identifica el formato a partir del opcode

Mira solo los 7 bits bajos de cada palabra (el último dígito hexadecimal y medio) y di a qué formato pertenece.

Abrir en la herramienta

Sigue los registros

Ejecuta el programa a mano. ¿Qué valen t2 y a0 al terminar?

li   t0, 7
li   t1, 3
sub  t2, t0, t1
slli t2, t2, 2
xor  a0, t2, t0
Abrir en la herramienta

Sigue la ejecución de un bucle

¿Cuánto vale a0 al salir del bucle? ¿Cuántas instrucciones se ejecutan en total (contando cada vuelta)?

li   a0, 1
li   t0, 4
loop:
  add  a0, a0, a0
  addi t0, t0, -1
  bnez t0, loop
Abrir en la herramienta

Cuenta los ciclos de un riesgo carga-uso

En el cauce de 5 etapas del simulador, ¿cuántos ciclos tarda esta secuencia con forwarding y sin forwarding? ¿Cuántas burbujas hay con forwarding?

lw   t0, 0(a0)
add  t1, t0, t0
sub  t2, t1, a1
Abrir en la herramienta

Tu primer programa

Dos instrucciones cargan constantes y la tercera las suma. ¿Qué valor queda en a0?

addi t0, zero, 5
addi t1, zero, 7
add  a0, t0, t1
Abrir en la herramienta

Un salto incondicional cambia el PC

¿Cuánto vale a0 al terminar y cuántas instrucciones se ejecutan?

li   a0, 1
j    skip
li   a0, 2
skip:
  addi a0, a0, 10
Abrir en la herramienta

Desbordamiento en complemento a dos

lui carga 0x80000 en los 20 bits altos de t0. ¿Qué valen t1 y t2 en decimal?

lui  t0, 0x80000
addi t1, t0, -1
slt  t2, t1, t0
Abrir en la herramienta

Llamar a una función con jal y volver con ret

La rutina triple recibe un número en a0 y devuelve el resultado en a0. ¿Qué valen a0 y ra al terminar?

li   a0, 6
jal  ra, triple
j    end
triple:
  add  a1, a0, a0
  add  a0, a1, a0
  ret
end:
  nop
Abrir en la herramienta

Reordenar para eliminar la burbuja

En el orden original (lw, add, addi, sw) hay una burbuja de carga-uso y la secuencia tarda 9 ciclos con forwarding. Aquí addi se ha movido entre lw y add. ¿Cuántos ciclos tarda ahora con forwarding y cuántas burbujas quedan?

lw   t0, 0(a0)
addi t2, a1, 4
add  t1, t0, t0
sw   t1, 0(a2)
Abrir en la herramienta

La penalización de un salto

El simulador resuelve los saltos en EX y los trata como tomados. ¿Cuántos ciclos tarda la secuencia con forwarding y cuántas instrucciones se descartan?

addi t0, t0, -1
bne  t0, zero, loop
addi a0, a0, 1
addi a1, a1, 1
Abrir en la herramienta

Lógica digital

Las respuestas se comparan con la tabla de verdad completa, así que cualquier expresión equivalente y mínima se acepta. Repasa antes el itinerario de lógica digital.

Coloca los minitérminos en el mapa

Marca en el mapa de 4 variables las celdas de F(A,B,C,D) = Σm(3, 6, 11, 12, 14). Las filas son AB y las columnas CD, ambas en código Gray.

AB \ CD00011110
00
01
11
10
Abrir en la herramienta

Encuentra las celdas adyacentes

En un mapa de 4 variables, ¿qué celdas son adyacentes a m8? Marca todas: recuerda que los bordes opuestos también se tocan.

AB \ CD00011110
00
01
11
10
Abrir en la herramienta

Minimiza aprovechando las indiferencias

Escribe una suma de productos mínima para F(A,B,C,D) = Σm(1, 3, 7, 11, 15) + d(0, 2, 5). Usa A, B, C, D y un apóstrofo para negar (por ejemplo A'B).

Sintaxis: productos juntos (AB), suma con +, negación con apóstrofo (A') o con ! delante.

Abrir en la herramienta

Comprueba la solución de otra persona

Un compañero propone F = A'B' + BC' + AB para F(A,B,C) = Σm(0, 1, 2, 5, 6, 7). ¿Es correcta? Si no lo es, marca un minitérmino donde falle.

F = A'B' + BC' + AB

¿Es correcta la expresión?
Abrir en la herramienta