¿Usamos memoria caché en microcontroladores, si no, por qué no? En caso afirmativo, ¿cuál es su aplicación en sistemas integrados o es suficiente solo con tener RAM?
La memoria caché agrega un nivel de latencia impredecible que puede no ser deseado. Muchos (¿la mayoría?) de los microcontroladores se utilizan en una configuración en tiempo real en la que debe presupuestar para el peor de los casos. No importa si su código es rápido en promedio , si existe la posibilidad de que no cumpla con la fecha límite en el peor de los casos . En el peor de los casos, el código o los datos no están en la memoria caché y, dado que tiene que presupuestarlos de todos modos, la memoria caché solo agrega costos y complejidad adicionales.
Algunos microcontroladores con los que he trabajado tienen una pequeña SRAM integrada que se puede usar como "caché manual". Pones cosas allí que deben tener una latencia baja, ya sea código o datos.
Ahora, el término "microcontrolador" se está volviendo cada vez más inflado. ¿El procesador ARM de 8 núcleos de su teléfono es un microcontrolador? Si es así, entonces sí, por supuesto que debería tener un caché.
Por encima de cierta velocidad, la memoria rápida cuesta más por byte que la memoria lenta (por debajo de esa velocidad, hacer que la memoria sea más lenta no la abaratará). Si un sistema tiene una gran cantidad de memoria, hacer que la mayor parte sea lenta pero luego incluir un caché de memoria rápida y la lógica para ejecutarla será más económico que hacer que toda la memoria sea rápida. Sin embargo, si el sistema no funciona muy rápido, la memoria que puede seguir el ritmo del sistema no costará más que la memoria más lenta, por lo que no hay motivo para que toda la memoria no sea lo suficientemente rápida para seguir el ritmo del sistema. Si el sistema es rápido pero no tiene mucha memoria, los ahorros de costos de hacer que la mayor parte de la memoria sea lenta no serán suficientes para justificar el costo de agregar un caché.
Muchos microcontroladores tienen una interfaz flash que puede obtener varios bytes a la vez en un búfer; Si bien esto podría verse como una especie de caché, en muchos casos no será una memoria direccionable, ya que cada bit del búfer solo podrá tomar datos de una sola fuente [una línea de bits de la matriz flash].
Tener un caché de nivel 1 es una compensación entre velocidad y costo. Para la velocidad, cuanto más grande sea la memoria, más larga será la ruta a los datos. Eso significa que tomará más y más tiempo (en términos de latencia) cuanta más memoria agregue. En algún momento, el rendimiento se degrada debido a esta latencia, que es el punto en el que tiene sentido agregar un caché de nivel 1. El costo también es una consideración, ya que la memoria de alta velocidad es más costosa que otros tipos de memoria. Finalmente, un beneficio adicional es que los cachés pueden hacer que el microcontrolador ignore el tipo de memoria desde la que se lee.
Los microcontroladores suelen tener memorias pequeñas y, por lo tanto, a menudo no tienen caché de nivel 1. ¡En cierto sentido, toda su memoria podría considerarse un caché de nivel 1! Sin embargo, muchos microcontroladores de hoy en día son muy capaces y comienzan a cruzar al territorio de los microprocesadores, con memorias más grandes y, por lo tanto, también cachés de nivel 1 (y nivel 2).
Tener cachés agrega un costo bastante significativo en el lado de la programación, ya que el comportamiento en tiempo real de los errores de caché puede ser difícil de predecir. A veces, esto no importa y/o se puede solucionar, pero en los casos en que sí, hay algunas opciones:
La primera solución es bastante atractiva, ya que los microcontroladores son baratos y capaces. Sin embargo, la comunicación entre los controladores y la unidad principal (CPU) podría convertirse en un problema. Esta es la razón por la que los chips con capacidades integradas en tiempo real pueden ser una mejor solución.
Al igual que con toda la ingeniería, existen ventajas y desventajas para cada solución. ¡Elija la herramienta adecuada para el trabajo!
brahans
usuario_1818839
SoreDakeNoKoto
gbulmer
Chih-Hsuan Yen