Comprendre pourquoi utiliser un SoC Zynq, comment se répartissent les rôles entre le processeur (PS) et le FPGA (PL), et comment ils communiquent via AXI.
Un Zynq associe un système processeur, le PS, à une logique programmable, la PL, sur la même puce. Le logiciel s'exécute sur le processeur ; le RTL devient un circuit dans la PL.
Zynq-7000 combine un ARM Cortex-A9 double cœur avec une architecture FPGA de série 7. Zynq UltraScale+ MPSoC dispose notamment de Cortex-A53 et de Cortex-R5, tout en conservant ce partage PS–PL.
Choisir où exécuter chaque fonction
Le PS convient aux systèmes d'exploitation, aux fichiers, aux protocoles réseau et aux algorithmes riches en décisions. La PL convient aux interfaces personnalisées, au traitement parallèle des flux et aux contraintes temporelles déterministes.
Leur intégration peut réduire les échanges externes, la latence, la consommation, l'encombrement et le nombre de composants par rapport à un CPU et un FPGA séparés. Le gain dépend de l'application. La DDR partagée permet au logiciel de préparer des buffers que la logique traite sans lien externe lent.
Ce partage est utile en vision industrielle, radio logicielle, robotique, acquisition rapide ou commande de moteurs. Un besoin exclusivement logiciel peut justifier un microcontrôleur plus simple ; un pipeline entièrement matériel peut se contenter d'un FPGA.
Ressources du PS et de la PL
Sur Zynq-7000, le PS câblé en dur comprend notamment :
Élément
Rôle
CPU
Deux cœurs ARM Cortex-A9 exécutant le logiciel
Caches et mémoire interne
Caches L1/L2 et mémoire On-Chip Memory
Contrôleur DDR
Accès à la mémoire DDR externe sans consommer de logique FPGA
Périphériques
Ethernet, USB, UART, SPI, I2C, GPIO, timers, DMA…
Environnement logiciel
Application bare-metal, RTOS ou Linux
Il peut démarrer avant la configuration de la PL. Ses périphériques rejoignent les broches MIO directement, ou passent par EMIO et la PL pour le routage ou une adaptation logique.
La PL fournit LUT, bascules, BRAM, DSP et horloges. Elle accueille le VHDL ou Verilog synthétisé, les IP du constructeur et les IP personnelles. Plusieurs opérations y avancent en parallèle avec une latence déterminée par le circuit. Elle permet la reconfiguration complète et, sur les architectures et flots compatibles, partielle.
Le découpage matériel/logiciel part des contraintes :
Algorithme séquentiel avec beaucoup de branchements
PS
Traitement parallèle d'un flux continu
PL
Protocole personnalisé ou timing à la nanoseconde
PL
Accélération d'une fonction coûteuse
PS pour le pilotage, PL pour le calcul
Dans une caméra industrielle, le PS peut gérer Linux, Ethernet et la configuration. La PL reçoit les pixels, les filtre en pipeline et écrit les images en DDR. Les deux modèles d'exécution travaillent dans une seule application.
Organiser les échanges PS–PL
AXI appartient à la famille AMBA d'ARM. Un maître initie une transaction, un esclave y répond. Les noms de ports sont donnés du point de vue du bloc : S_AXI_HP sur le PS reçoit ainsi les accès d'un maître dans la PL.
Les noms varient selon la génération, mais les rôles restent comparables :
Interface
Initiateur typique
Usage
AXI GP / AXI HPM
PS → PL
Lecture et écriture des registres de contrôle d'une IP
AXI GP esclave
PL → PS
Accès de la PL à l'espace d'adressage du PS pour des besoins modérés
AXI HP / HPC
PL → PS et DDR
Transferts à haut débit, souvent avec un DMA
AXI ACP / ACE / HPC cohérent
PL → caches du PS
Partage de données cohérent avec les caches du processeur
EMIO
PS ↔ PL
Routage de signaux GPIO, UART, SPI ou I2C ; ce n'est pas un bus AXI
Cette vue représente Zynq UltraScale+ MPSoC : l'APU, le RPU et les ports HPC sont propres à cette génération.
Sépare le contrôle et les données. AXI-Lite permet au CPU d'écrire des paramètres, lancer une IP et lire son état. Un DMA et un port hautes performances transportent les blocs entre PL et DDR sans copie de chaque mot par le CPU. L'IP contrôlée occupe une plage dans l'espace d'adresses du processeur :
// Exemple bare-metal : registres AXI-Lite d'une IP dans la PLXil_Out32(IP_BASEADDR + CONTROL_OFFSET, START_MASK);while ((Xil_In32(IP_BASEADDR + STATUS_OFFSET) & DONE_MASK) == 0) { // Le CPU peut aussi attendre une interruption plutôt que scruter le registre.}
Prévois une interruption vers le contrôleur du PS pour la fin ou les erreurs, ainsi que des horloges et resets cohérents. Entre domaines d'horloge distincts, utilise une synchronisation CDC adaptée ou une FIFO asynchrone. Pour les buffers partagés avec un DMA, traite la cohérence ou la maintenance des caches.
Pour choisir une structure de traversée adaptée à un signal ou à un transfert de données, consulte le guide AMD UG949 sur les CDC.
Suivre le démarrage
Après le reset, la BootROM du PS charge le premier programme depuis le support choisi, par exemple QSPI ou SD. Ce programme initialise notamment horloges et DDR, peut configurer la PL, puis lance l'application, U-Boot ou Linux selon la chaîne choisie.
La configuration du FPGA fait donc partie d'un démarrage plus large. Elle peut avoir lieu au boot ou être réalisée plus tard par le PS.
Critère
FPGA seul
Microcontrôleur
SoC Zynq
Logiciel et OS
Limités sans processeur ajouté
Bare-metal ou RTOS, parfois Linux
Bare-metal, RTOS ou Linux
Parallélisme déterministe
Excellent
Limité
Excellent dans la PL
Périphériques haut niveau
IP à intégrer
Généralement intégrés
Intégrés dans le PS
Complexité de conception
Matérielle
Plutôt faible
Matérielle et logicielle
Usage type
Pipeline ou interface purement matérielle
Contrôle principalement logiciel
Contrôle logiciel + accélération matérielle
Des exercices guidés de création de projets SoC sont prévus pour les membres Club ; des tutoriels de création de projet sont également prévus pour tous.