← InicioTTSKY26d · SKY130
Proyecto de tapeout · Digital

RISC-V RV32I

Un procesador RISC-V de 32 bits que ejecuta una instrucción por ciclo de reloj.

Layout completo del procesador RISC-V RV32I
100 µm
Layout completo · KLayout
682.6 × 225.8 µm · 4×2 tiles
SKY130 · 130 nmDigital · 9 323 celdas lógicas10 MHz
El equipo

Quiénes lo llevaron
hasta el silicio

VR
Diseñadora
Vanessa
Rocha Pérez
JV
Supervisor
José Luis Valtierra
Sánchez de la Vega

Su diseño fue enviado a fabricación (tapeout) con Tiny Tapeout, en el proceso de 130 nm SKY130 de SkyWater.

UABC · Facultad de Ingeniería Mexicali
¿Cómo funciona?

Un procesador que
se carga por partes

01 · LOAD · 00
Desde la computadora llega el bloque 0 por UART: 32 bytes, es decir, 8 instrucciones.
02 · RUN · 01
El procesador ejecuta una instrucción por ciclo de reloj, sin pipeline, y envía sus resultados por UART.
03 · BLOCKLOAD · 10
Al escribir en la dirección 0x4C, el programa pide el siguiente bloque; una memoria SPI externa lo envía.
04 · De vuelta a RUN
El PC regresa a 0, pero los registros conservan sus valores: el programa sigue donde se quedó.
Animación ilustrativa · programa de prueba: 0x0D 0x07 0x08 0x10 0xAA
Anatomía del chip

Dónde quedó cada parte
del procesador

Layout del RISC-V
100 µm
El chip completo
682.6 × 225.8 µm, 9 323 celdas lógicas y 473 mm de interconexión ruteada. Al bajar, cada flip-flop se colorea según el registro al que pertenece.
Banco de registros
32 registros de 32 bits: 1 024 flip-flops, más de la mitad de todos los del chip.
Memoria de instrucciones
8 palabras de 32 bits (256 flip-flops): un bloque del programa a la vez.
Memoria de datos
4 palabras de 32 bits (128 flip-flops) para las variables del programa.
UART, SPI y cargadores
Reciben el bloque 0 por UART, leen los siguientes por SPI y envían los resultados. 238 flip-flops.
PC, CSR y modo
El contador de programa, los registros de excepciones y el registro de modo. En gris, la lógica combinacional (ALU, decodificador, multiplexores), que el mapa no asigna a ningún bloque.
La idea clave

8 instrucciones bastan
para programas largos

Acercamiento a las celdas de la memoria de instrucciones
Acercamiento 30 × 20 µm · zona de la memoria de instrucciones (sky130_fd_sc_hd__dfxtp_2)

La primera versión guardaba todo el programa dentro del chip y ocupaba 12 tiles. Ahora sólo guarda un bloque de 8 instrucciones y pide los demás a una memoria externa: el diseño bajó a 8 tiles.

0
tiles (antes 12)
0
menos tiles
0
instrucciones verificadas una por una
Verificación

Probado antes de
llegar al silicio

  1. Modelo en Python, ciclo a ciclo. 30 instrucciones de RV32I verificadas una por una, y 0 choques entre el CPU y los cargadores en 136 353 ciclos.
  2. Simulación RTL con cocotb. Carga el bloque 0 por UART, sirve los demás por SPI y compara la salida.
  3. Netlist final de compuertas. La misma prueba pasa sobre el circuito ya colocado y ruteado.
  4. FPGA Basys3. 10 de 10 programas de prueba entregan la salida esperada.
Terminal RealTerm mostrando el texto RISC-V 32I Single Cycle BY Vanessa
Captura real · FPGA Basys3 respondiendo por UART en RealTerm

Resultados reportados por la autora en el repositorio; no se reprodujeron para esta publicación.

Ficha técnica

RISC-V RV32I en datos

ProcesoSkyWater SKY130 · 130 nm · sky130_fd_sc_hd
ProgramaTiny Tapeout · shuttle TTSKY26d
Área682.6 × 225.8 µm · 4×2 tiles (≈ 0.154 mm²)
Reloj10 MHz · una instrucción por ciclo, sin pipeline
Memoria8 instrucciones + 4 datos de 32 bits · bloques de 32 bytes por SPI
PuertosUART 115 200 baud (ui_in[3], uo_out[4]) · SPI en uio[0:3]
Celdas9 323 lógicas (1 753 flip-flops) + 2 158 de pozo · utilización 76.3 %
TimingHolgura de setup +44.6 ns · de hold +0.02 ns (peor caso en 9 esquinas, periodo de 100 ns)
Potencia1.40 mW, estimada por análisis estático (esquina típica, 25 °C, 1.8 V)
Verificación físicaDRC (Magic): 0 errores · LVS: 0 diferencias · prueba a nivel de compuertas en CI

Validación en silicio pendiente. Para ahorrar área, el diseño cerró con 56 redes con violaciones de antena, y con 6 373 violaciones de slew y 459 de capacitancia en la esquina más lenta (ss, 100 °C, 1.60 V); el timing de setup y hold sí cierra en las 9 esquinas. Su efecto se conocerá al medir el chip.

Ver repositorio Verlo en 3D
También en Instagram

Las 6 diapositivas

Mismo contenido en formato carrusel. Toca una para abrirla completa.

Diapositiva 1 Diapositiva 2 Diapositiva 3 Diapositiva 4 Diapositiva 5 Diapositiva 6
Notas técnicas y fuentes

De dónde salen
estos datos

Toca cada nota para abrirla. Datos consultados el 21 de octubre de 2026.

Versión fabricada

Todo corresponde a lo que se envió al shuttle TTSKY26d: el commit f61df17 del repositorio de la autora. El repositorio tiene cambios posteriores que no están en el chip.

Área, celdas, utilización, longitud de ruteo, timing, potencia, DRC y LVS salen del archivo stats/metrics.csv que generó LibreLane para ese shuttle. Las imágenes se renderizaron con KLayout a partir del .oas del mismo shuttle.

Conjunto de instrucciones

RV32I define 40 instrucciones: 37 de cómputo, memoria y control, más FENCE, ECALL y EBREAK. En el RTL fabricado, el decodificador cubre las 37, además de ECALL, MRET y la escritura de registros CSR. FENCE se ejecuta como una instrucción nula, lo que la especificación permite en un núcleo sencillo, y EBREAK no genera excepción.

Las 30 instrucciones verificadas una por una son las que reporta el repositorio; esta publicación no repitió esas pruebas.

Cómo se hizo el mapa funcional

Cada flip-flop se clasificó por el nombre de la señal en su salida Q dentro de la netlist final: u_rf.regs es el banco de registros, mi_imem.mem la memoria de instrucciones, mi_dmem.mem la de datos, y los módulos mi_boot, mi_block_loader, mi_spi_burst, mi_rx y mi_tx forman el grupo de UART, SPI y cargadores. Lo demás (PC, CSR y modo) va en blanco.

Las posiciones vienen del layout: cada instancia conserva su nombre. La lógica combinacional se dibuja en gris porque después de la síntesis no pertenece de forma única a un bloque. Las zonas resaltadas abarcan del percentil 4 al 96 de las posiciones de cada grupo.

Cifras que conviene leer con cuidado

Celdas: las 11 481 celdas estándar que reporta el flujo incluyen 2 158 celdas de pozo (tap), que no tienen función lógica; de ahí las 9 323 celdas lógicas.

Potencia: 1.40 mW es una estimación del análisis estático con la actividad por defecto del flujo, no una medición.

Timing: el margen de hold es de apenas 0.02 ns en la esquina rápida (ff, −40 °C, 1.95 V). Cierra, pero sin mucha holgura.

Área: el 33 % menos se refiere a tiles reservados (12 → 8), no al área de las celdas.

Figuras ilustrativas

La animación de los modos es un esquema, no una simulación; los bytes que aparecen son la salida esperada del programa de prueba según el repositorio. El acercamiento muestra la región de 8 a 38 µm × 58 a 78 µm del layout, dentro de la zona de la memoria de instrucciones.

Fuentes
  1. V. Rocha Pérez, RISC-V-rv32i, commit f61df17, GitHub.
  2. Tiny Tapeout, shuttle TTSKY26d, projects/tt_um_vanessa_riscv (GDS, netlist y métricas).
  3. RISC-V International, The RISC-V Instruction Set Manual, Volume I: Unprivileged ISA.
  4. LibreLane (flujo RTL a GDS) y SkyWater SKY130 PDK.