APU, RPU et mémoires
Comprendre les processeurs applicatifs et temps réel, les caches, les espaces d'adressage et les mémoires d'un Zynq.
Deux types de processeurs
Un Zynq UltraScale+ MPSoC possède une APU et une RPU. Ces unités répondent à des besoins différents.
L'Application Processing Unit utilise des Cortex-A53. Elle vise les applications riches, Linux et les traitements qui profitent des caches, de la mémoire virtuelle et de plusieurs coeurs.
La Real-time Processing Unit utilise deux Cortex-R5. Elle vise une réponse déterministe, donc un temps d'exécution dont les limites sont connues. Les coeurs peuvent fonctionner séparément ou en lockstep, un mode où ils exécutent les mêmes instructions afin de détecter une divergence.
| Propriété | APU | RPU |
|---|---|---|
| Processeur | Cortex-A53 | Cortex-R5 |
| Usage principal | Application et système d'exploitation | Temps réel et sûreté |
| Gestion mémoire | MMU et mémoire virtuelle | MPU sans traduction d'adresse |
| Mémoire locale | Caches | TCM et caches |
| Exécution redondante | Non prévue comme mode principal | Mode lockstep disponible |
L'APU
L'APU constitue l'unité de calcul générale la plus performante du PS. Chaque coeur dispose d'un cache L1. Les coeurs partagent un cache L2 et une infrastructure de cohérence.
La Memory Management Unit, ou MMU, traduit les adresses virtuelles et applique des attributs mémoire. Linux l'utilise pour isoler les processus. Une application bare-metal peut aussi configurer ces attributs afin de distinguer la mémoire normale des registres de périphériques.
Un registre de périphérique ne doit pas être traité comme une zone de RAM mise en cache. Les bibliothèques Xilinx fournissent des fonctions d'entrée et sortie qui préservent mieux la sémantique de l'accès matériel.
#include "xil_io.h"
u32 read_status(UINTPTR base)
{
return Xil_In32