Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-23 14:39
Estoy escribiendo este instructivo, porque me resultó un poco difícil obtener algo de código VHDL de referencia para aprender y comenzar a diseñar un controlador de caché. Así que diseñé un controlador de caché desde cero y lo probé con éxito en FPGA. He presentado aquí un controlador de caché mapeado directo simple, así como también modelé un sistema de memoria de procesador completo para probar el controlador de caché. Espero que este instructivo les resulte útil como referencia para diseñar sus propios controladores de caché.
Paso 1: especificaciones
Estas son las principales especificaciones del Cache Controller que vamos a diseñar:
- Mapeado directo. (vaya a este enlace si busca Controlador de caché mapeado asociativo)
- Caché de bloqueo de un solo banco.
- Política de escritura simultánea en aciertos de escritura.
- Política de asignación de no escritura o escritura alrededor de errores de escritura.
- Sin búfer de escritura u otras optimizaciones.
- Tag Array está incorporado.
Además de eso, también diseñaremos una memoria caché y un sistema de memoria principal.
Las especificaciones predeterminadas (configurables) de la memoria caché:
- Caché de un solo banco de 256 bytes.
- 16 líneas de caché, cada línea de caché (bloque) = 16 bytes.
Las especificaciones de la memoria principal:
- Memoria de lectura / escritura sincrónica.
- Memoria intercalada de varios bancos: cuatro bancos de memoria.
- Cada tamaño de banco = 1 kB cada uno. Por lo tanto, tamaño total = 4 kB.
- Memoria direccionable de palabra (4 bytes) con bus de direcciones de 10 bits.
- Mayor ancho de banda para lectura. Ancho de datos de lectura = 16 bytes en un ciclo de reloj.
- Escribir ancho de datos = 4 bytes.
NOTA: consulte mi instructable más reciente si está buscando un diseño de controlador de caché asociativo de 4 vías
Paso 2: Vista RTL de todo el sistema
La representación RTL completa del módulo superior se muestra en la figura (sin incluir el procesador). Las especificaciones predeterminadas para los autobuses son:
- Todos los buses de datos son buses de 32 bits.
- Bus de direcciones = Bus de 32 bits (pero solo 10 bits son direccionables aquí por la memoria).
- Bloque de datos = 128 bits (Bus de ancho de banda ancho para lectura).
- Todos los componentes funcionan con el mismo reloj.
Paso 3: entorno de prueba
El módulo superior se probó utilizando un banco de pruebas, que simplemente modela un procesador sin canalización (¡porque diseñar un procesador completo no es nada fácil!). El banco de pruebas genera solicitudes de lectura / escritura de datos en la memoria con frecuencia. Esto simula las instrucciones típicas de "Cargar" y "Almacenar", comunes en todos los programas ejecutados por un procesador. Los resultados de la prueba verificaron con éxito la funcionalidad del controlador de caché. A continuación se muestran las estadísticas de prueba observadas:
- Todas las señales de lectura / escritura de error y acierto se generaron correctamente.
- Todas las operaciones de lectura / escritura de datos se realizaron correctamente.
- No se detectaron problemas de incoherencia / inconsistencia de datos.
- El diseño se verificó con éxito en el tiempo para un Maxm. Frecuencia de reloj de funcionamiento = 110 MHz en la placa Xilinx Virtex-4 ML-403 (sistema completo), 195 MHz solo para el controlador de caché.
- Se infirieron RAM de bloque para la memoria principal. Todas las demás matrices se implementaron en LUT.
Paso 4: archivos adjuntos
Los siguientes archivos se adjuntan aquí con este blog:
- Archivos. VHD de Cache Controller, Cache Data Array, Main Memory System.
- Banco de pruebas.
- Documentación sobre el controlador de caché.
Notas:
- Consulte la documentación para obtener una comprensión completa de las especificaciones del controlador de caché que se presentan aquí.
- Cualquier cambio en el código depende de otros módulos. Por lo tanto, los cambios deben realizarse con prudencia. Presta atención a todos los comentarios y encabezados que te he dado.
- Si por alguna razón, las RAM de bloque no se infieren para la memoria principal, REDUZCA el tamaño de la memoria, seguido de cambios en el ancho del bus de direcciones en los archivos, etc. Para que la misma memoria se pueda implementar en LUT o RAM distribuida. Esto ahorrará tiempo y recursos de enrutamiento. O bien, vaya a la documentación FPGA específica y busque el código compatible para Block RAM y edite el código en consecuencia, y use las mismas especificaciones de ancho de bus de dirección. Misma técnica para FPGA Altera.
Recomendado:
Diseño de un controlador de caché asociativo de cuatro vías simple en VHDL: 4 pasos
Diseño de un controlador de caché asociativo de conjunto de cuatro vías simple en VHDL: en mi instructable anterior, vimos cómo diseñar un controlador de caché mapeado directo simple. Esta vez, avanzamos un paso. Diseñaremos un controlador de caché asociativo de cuatro vías simple. Ventaja ? Menos tasa de fallos, pero a costa de perfo
Diseño de un controlador de interrupciones programable en VHDL: 4 pasos
Diseño de un controlador de interrupciones programable en VHDL: Estoy abrumado por el tipo de respuestas que recibo en este blog. Gracias a todos por visitar mi blog y motivarme a compartir mis conocimientos con ustedes. Esta vez, voy a presentar el diseño de otro módulo interesante que vemos en todos los SOC: Interrupt C
Diseño de I2C Master en VHDL: 5 pasos
Diseño de I2C Master en VHDL: En este instructable, se discute el diseño de un I2C master simple en VHDL NOTA: haga clic en cada imagen para ver la imagen completa
Diseño de un controlador VGA simple en VHDL y Verilog: 5 pasos
Diseño de un controlador VGA simple en VHDL y Verilog: En este instructable, vamos a diseñar un controlador VGA simple en RTL. El controlador VGA es el circuito digital diseñado para controlar pantallas VGA. Lee de Frame Buffer (memoria VGA) que representa el marco que se mostrará y genera la necesidad
Diseño de SPI Master en VHDL: 6 pasos
Diseño de SPI Master en VHDL: En este instructable, vamos a diseñar un SPI Bus Master desde cero en VHDL