Un grupo de ingenieros ha logrado ejecutar el juego DOOM (versión shareware doom1.wad, de 14 MB) en una CPU RISC-V diseñada desde cero a nivel de puertas lógicas y desplegada sobre una FPGA. El hito se hizo viral y supone un salto desde los programas sencillos que el equipo había ejecutado antes, como Pong o conjuntos de Mandelbrot. Para alcanzar el objetivo tuvieron que resolver dos grandes obstáculos: la memoria y la velocidad. La arquitectura previa solo utilizaba la BRAM interna de la FPGA (menos de 1 MB), claramente insuficiente para el juego, por lo que fue necesario integrar memoria DDR3 externa y añadir cachés. La DDR3 es más lenta y presenta latencia variable (entre 30 y 100 ciclos por operación, frente a los 30-60 ciclos para devolver dos palabras), por lo que se incorporó una memoria caché que almacena regiones activas del programa en BRAM para acelerar el acceso.
La nueva CPU mantiene un pipeline RISC-V de cinco etapas (Fetch, Decode, Read, Execute y Writeback), pero incorpora varias mejoras: la etapa de Fetch gestiona internamente las redirecciones y los stalls provocados por la latencia variable de la DDR3; la etapa de lectura se ha pipelined y utiliza un mapa de uso de registros (RUM) de 32 bits para detectar riesgos RAW con mayor robustez; y la etapa de Execute coordina saltos, operaciones de ALU y accesos a memoria. Para servir simultáneamente las peticiones de instrucciones y datos del pipeline, se implementaron dos cachés independientes: una caché de instrucciones (ICache) y una caché de datos (DCache), ambas mapeadas directamente con 2.048 líneas de cuatro palabras. Cada línea incluye datos, etiqueta de dirección para evitar aliasing y dos bits de estado (valid y dirty) que controlan los writebacks a DDR3. En paralelo, otro miembro del equipo trabaja en la ejecución fuera de orden para dotar a la CPU de mayor paralelismo. El artículo forma parte de una serie documental donde el equipo comparte los problemas técnicos, las soluciones y los compromisos de diseño adoptados en cada iteración.
