¿Cuál es el significado de esta línea? "Vista en caché mapeada en memoria del flash QSPI externo. El caché se especifica como 32 KB con asociatividad de 4 vías".

Vista en caché mapeada en memoria del flash QSPI externo. La memoria caché se especifica como 32 KB con asociatividad de 4 vías.

¿Significa que mi Flash QSPI externo es solo de 32 Kb o que ha sido mapeado en memoria a 32 Kb?

¿La vista en caché significa que la lectura repetida obtendrá los datos almacenados en caché dentro del procesador y no accederá realmente a la memoria?

Respuestas (2)

La confusión probablemente proviene de la formulación: "vista en caché asignada en memoria". El hecho de que esté asignada en memoria no tiene nada que ver con el hecho de que esté almacenada en caché. El tamaño de la asignación de memoria es independiente del tamaño de la memoria caché.

Entonces, te lo desglosaré:

mapeado en memoria

Significa que puede acceder al contenido de la memoria externa directamente leyendo/escribiendo el espacio de direcciones de la memoria principal (en alguna dirección especificada). También suele implicar que, si la memoria externa contiene código ejecutable, puede ejecutar este código simplemente ramificando: no necesita copiar el código en la memoria interna antes de ramificar. Esto lo logra la MCU que, internamente, traduce cualquier acceso a esta parte de la memoria en los comandos QSPI requeridos para leer el flash externo sobre la marcha. En este punto, no implica que haya un caché.

en caché

Significa que los datos leídos de esta parte de la memoria se colocarán en un área de memoria intermedia de menor tamaño (no accesible directamente), que la MCU buscará primero cuando se tenga que acceder de nuevo a la memoria externa. De esta forma, cuando se accede dos veces a los mismos datos, no es necesario volver a acceder a la memoria externa. Se recuperarán los datos del caché, que es mucho más rápido.

De hecho, esto es muy útil para QSPI mapeados en memoria. La interfaz QSPI es mucho más lenta que la CPU: cualquier operación de lectura/escritura debe traducirse en comandos enviados en serie en unas pocas líneas de señal, lo que agrega mucha sobrecarga. Para reducir esta sobrecarga, normalmente intentará leer varios bytes para cada acceso QSPI y almacenarlos en un caché para que, si la próxima lectura se dirige al byte vecino (lo que es probable), lo tenga listo.

32kB

Aquí, este es el tamaño del caché, no el tamaño del mapa de memoria. El tamaño del mapa de memoria normalmente será lo suficientemente grande para el tamaño total de la memoria externa (consulte las especificaciones detalladas).

asociatividad de 4 vías

Esta es la forma en que el caché está organizado internamente. El caché es mucho más pequeño que la memoria externa. La forma ingenua de implementar un caché sería almacenar todos los bytes a los que se accedió recientemente junto con sus direcciones correspondientes y, cuando se realicen accesos posteriores, verificar en todo el caché si un byte existente tiene su dirección correspondiente a la dirección a la que se accedió. Esto es extremadamente ineficiente. Para cada byte, tendría que almacenar la dirección, que multiplica por cinco el tamaño requerido para el caché (asumiendo direcciones de 32 bits: para cada byte, necesita el valor del byte de datos más cuatro bytes para la dirección correspondiente), y, para cada acceso, debe comparar la dirección con 32768 valores posibles para verificar si ya está en el caché o no.

Entonces, así es como se hace:

  • Primero, el caché está organizado en líneas de N bytes (por ejemplo, 16 o 32 bytes; tenga en cuenta que el tamaño de línea del caché no se especifica en su caso). Almacena las direcciones para todas las líneas de caché, no para cada byte, lo que ahorra mucho espacio.
  • Entonces, no todas las direcciones posibles se pueden almacenar en ningún lugar de la memoria caché. Al acceder al caché, toma una parte de la dirección, y esto le dará el índice de un "conjunto de caché". Cada conjunto de caché puede contener 4 líneas de caché (en su caso). Al verificar si los datos están en el caché, esto significa que solo tiene estas direcciones de 4 líneas de caché para verificar porque sabe que, si está allí, necesariamente estará en este conjunto. Esto reducirá en gran medida la complejidad de la estructura de la memoria caché, a expensas de una menor flexibilidad en el almacenamiento de los datos (lo que significa una tasa de aciertos de memoria caché posiblemente más baja, dependiendo de los patrones de acceso a la memoria).

Esto es lo que es la asociatividad de caché: el número de líneas de caché por conjunto. Esto da una indicación de la probabilidad de que pueda recuperar datos en el caché si se han leído antes. Cuanto mayor sea la asociatividad, mejor, pero hace que la caché sea más compleja y costosa de fabricar. Y en algún momento, los beneficios ni siquiera valen la pena. 4 no está mal (por eso se enorgullecen de anunciarlo).

genial! Esta debería ser la respuesta aceptada.
¡Bien hecho compañero! Mucho más de lo que hubiera escrito.+1
Sé que los comentarios no deben usarse para esto, pero ¡Gracias! Esta es mucha más información de la que pedí y fue demasiado útil.
Una muy buena respuesta. Con una excepción: el QSPI mapeado en memoria normalmente no se puede escribir directamente a través del mapa de memoria.

La frase es bastante clara:

La memoria caché se especifica como 32 KB con asociatividad de 4 vías.

Entonces,

¿Significa que mi Flash QSPI externo es solo de 32 Kb o que ha sido mapeado en memoria a 32 Kb?

Ni. El caché es de 32 kB (¡no Kb, que es Kelvinbit! ¡Cuidado con las mayúsculas!).

¿La vista en caché significa que la lectura repetida obtendrá los datos almacenados en caché dentro del procesador y no accederá realmente a la memoria?

Bueno, vea wikipedia sobre cachés. Sí, una lectura repetida dentro de las regiones almacenadas en caché obtendrá la información del caché. Eso es lo que hace un caché.

No, ese caché no es necesariamente parte del procesador, sino del periférico del controlador flash.

Buena respuesta. Pero mientras estamos quisquillosos con la notación, el caché tampoco es de 32 kB (32000 bytes), es de 32 KiB (32 * 1024 bytes).
@wjl KB y KiB tienen el mismo significado. Sin embargo, KB ha estado en uso durante mucho más tiempo. El prefijo k significa 1000. Los prefijos K y Ki significan 1024.