Architecture Zynq
Comprendre la séparation entre le Processing System et la logique programmable dans les familles Zynq-7000 et Zynq UltraScale+ MPSoC.
Un processeur et un FPGA dans le même composant
Un Zynq est un système sur puce, ou SoC pour System on Chip. Il réunit un système processeur et une matrice FPGA dans un seul composant. AMD nomme ces deux parties Processing System, ou PS, et Programmable Logic, ou PL.
Le PS contient des processeurs ARM, des contrôleurs mémoire et des périphériques. Il exécute du logiciel en C ou C++. La PL réalise les circuits décrits en VHDL ou en Verilog. Une LUT implémente une petite fonction logique, une bascule mémorise un bit et un bloc DSP accélère les calculs arithmétiques comme les multiplications.
Cette séparation définit le travail de l'ingénieur. Le logiciel traite les décisions, les protocoles complexes et le système d'exploitation. La logique programmable traite les flux parallèles, les interfaces personnalisées et les fonctions qui demandent une latence stable.

La famille Zynq-7000
Le Zynq-7000 associe un ou deux coeurs ARM Cortex-A9 à une logique FPGA de série 7. Le PS comprend les ressources suivantes.
| Ressource | Fonction |
|---|---|
| APU | Exécute l'application et peut utiliser un système d'exploitation |
| Caches L1 et L2 | Réduisent le temps moyen d'accès aux instructions et aux données |
| OCM | Fournit une mémoire interne rapide de 256 Kio |
| Contrôleur DDR | Donne accès à la mémoire dynamique externe |
| GIC | Priorise et distribue les interruptions |
| DMA du PS | Déplace des données sans faire exécuter chaque copie par le processeur |
| MIO et EMIO | Relient les périphériques du PS aux broches ou à la PL |
Les périphériques intégrés comprennent notamment UART, SPI, I2C, CAN, USB, Ethernet, GPIO et SDIO. Leur présence évite de reconstruire ces fonctions dans la PL lorsqu'une interface standard suffit.
La PL apporte les ressources matérielles. Elle peut contenir une chaîne de traitement, un contrôleur personnalisé, un accélérateur ou une IP AXI. Les deux parties communiquent principalement avec des interfaces AXI.
La famille Zynq UltraScale+ MPSoC
Le Zynq UltraScale+ MPSoC conserve la séparation entre PS et PL, mais le PS est plus riche. Il peut comprendre les blocs suivants.
| Bloc | Fonction principale |
|---|---|
| APU Cortex-A53 | Calcul applicatif 64 bits et exécution de Linux |
| RPU Cortex-R5 | Traitement temps réel déterministe |
| PMU | Gestion de la plateforme et de l'alimentation |
| CSU | Configuration, démarrage sécurisé et fonctions cryptographiques |
| GPU Mali | Traitement graphique |
| Contrôleur DDR | Accès à la DDR3, DDR4 ou LPDDR selon le composant |
Les deux Cortex-R5 du RPU peuvent fonctionner séparément. Ils peuvent aussi fonctionner en mode lockstep. Dans ce mode, les deux coeurs exécutent le même code et leurs résultats sont comparés. Cette organisation est utile pour les applications qui demandent une meilleure couverture des fautes.
Les composants MPSoC possèdent plusieurs domaines d'alimentation. Le domaine basse consommation contient notamment le RPU. Le domaine pleine puissance contient notamment l'APU. La PL possède son propre domaine. Cette organisation permet d'arrêter des fonctions inutiles sans couper tout le composant.
Choisir entre PS et PL
Le choix ne dépend pas seulement de la vitesse moyenne. Il dépend aussi de la latence, du parallélisme, du débit et de la facilité de maintenance.
| Besoin | Emplacement conseillé |
|---|---|
| Interface utilisateur, fichiers, réseau | PS |
| Linux, pile TCP/IP, stockage | PS |
| Boucle de contrôle temps réel | RPU ou PL selon la latence demandée |
| Traitement de plusieurs échantillons en parallèle | PL |
| Protocole avec timing précis | PL |
| Configuration et supervision d'une IP | PS |
Une caméra industrielle fournit un bon exemple. Linux peut gérer Ethernet, les fichiers et la configuration. La PL peut recevoir les pixels et appliquer un filtre en pipeline. Un DMA peut ensuite écrire les images en DDR. Le processeur pilote le traitement avec quelques registres et reçoit une interruption lorsque l'image est prête.
MIO et EMIO
Les broches MIO appartiennent directement au PS. Vivado permet d'y affecter les périphériques intégrés. Un UART raccordé en MIO ne traverse pas la logique programmable.
Les signaux EMIO traversent la PL. Ils permettent de placer un périphérique du PS sur des broches de la PL ou d'ajouter une adaptation matérielle. EMIO ne remplace pas AXI. Il transporte les signaux fonctionnels d'un périphérique, par exemple les lignes d'un UART ou d'un GPIO.
Le choix est simple. MIO convient lorsque le brochage de la carte correspond au périphérique. EMIO convient lorsqu'un routage par la PL ou une logique intermédiaire est nécessaire.
Le démarrage commence dans le PS
Après un reset, la BootROM du PS s'exécute en premier. Elle lit le mode de démarrage puis charge un premier programme depuis la QSPI, la carte SD, la NAND ou une autre interface compatible avec le composant.
La PL n'a pas besoin d'être configurée pour que le PS commence son démarrage. Le premier chargeur peut configurer la PL, initialiser la DDR et lancer l'application suivante. Cette propriété distingue un Zynq d'un FPGA qui dépend d'un processeur logiciel placé dans la matrice programmable.
Méthode de conception
Une conception Zynq suit généralement cette logique.
- Définir les fonctions logicielles et matérielles.
- Configurer le PS et la PL dans Vivado.
- Définir les adresses, les horloges, les resets et les interruptions.
- exporter la plateforme matérielle.
- Créer une plateforme logicielle et une application dans Vitis.
- Tester le logiciel et le matériel ensemble.
Le point important est la cohérence du système complet. Un bloc matériel correct peut produire un système incorrect si son adresse, son horloge, son reset ou sa politique de cache ne correspond pas au logiciel.
Références officielles
Le Zynq-7000 Technical Reference Manual UG585 décrit l'architecture du PS Zynq-7000. Le Zynq UltraScale+ Device Technical Reference Manual UG1085 détaille les domaines, processeurs et interfaces de la génération MPSoC.
À retenir
Le PS exécute le logiciel. La PL réalise des circuits parallèles. Le Zynq-7000 utilise des Cortex-A9. Le Zynq UltraScale+ MPSoC ajoute notamment des Cortex-A53 et des Cortex-R5. MIO relie directement les périphériques du PS aux broches. EMIO les fait passer par la PL. AXI transporte les transactions entre les blocs du système.
Tester mes connaissances - Quiz du chapitre