Implementación de la extensión de instrucciones comprimidas en GaZmusino

La extensión de instrucciones comprimidas RISC-V C permite reducir el tamaño del código y mejorar la eficiencia de la memoria, sin afectar la funcionalidad del core. En este post explicamos cómo se ha integrado esta extensión en GaZmusino y los beneficios que aporta al rendimiento y la densidad de código.
🔧 Metodología de integración
Modificaciones realizadas en la unidad de decodificación y pipeline para soportar instrucciones de 16 bits junto con las estándar de 32 bits:
- Se tomó como punto de partida el decoder de instrucciones comprimidas del cv32e40p, eliminando las instrucciones no soportadas por GaZmusino.
- Se añadió un buffer de instrucciones en la etapa de decode, que se puede leer y escribir a nivel de byte, facilitando la selección de la instrucción correcta.
- Fetch y decode manejan PCs independientes: el PC de fetch siempre avanza +4, mientras que el PC de decode avanza +2 o +4 dependiendo de si la instrucción decodificada es comprimida o estándar.
- Pruebas funcionales ejecutadas mediante simulación con Verilator para verificar la correcta ejecución de todas las instrucciones comprimidas.
📊 Beneficios obtenidos
- Reducción del tamaño del código: los programas ocupan menos memoria flash, crítico en sistemas embebidos con recursos limitados.
- Mejor uso del cache: al reducir la huella del código, se mejora la eficiencia de la caché de instrucciones.
- Reducción de burbujas: el buffer se rellena constantemente, aunque el core esté bloqueado en etapas posteriores, minimizando los ciclos en los que la pipeline está esperando instrucciones.
En conjunto, estas mejoras permiten que GaZmusino ejecute código comprimido de manera más eficiente, aprovechando mejor la memoria y el pipeline.
📝 Conclusiones
- GaZmusino ahora soporta la extensión C de RISC-V, aumentando su compatibilidad con software y herramientas modernas.
- La integración permite ahorro de memoria y eficiencia en caché, sin sacrificar el rendimiento de las operaciones críticas.
- Próximos pasos: medir el impacto en benchmarks reales (como Embench-IoT) para cuantificar las mejoras en código comprimido frente a código estándar.