SoC Zynq - Intégration PS + PL
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.
Qu'est-ce qu'un SoC Zynq ?
Un SoC (System on Chip) regroupe sur une même puce un ou plusieurs processeurs, des contrôleurs mémoire et des périphériques. Un SoC classique ne contient pas forcément de logique programmable. Un Zynq est un SoC FPGA : il ajoute au système processeur une matrice FPGA, reliée directement sur le silicium.
La famille Zynq-7000 d'AMD/Xilinx associe ainsi un processeur ARM Cortex-A9 double cœur à une architecture FPGA de série 7. Les familles plus récentes, comme Zynq UltraScale+ MPSoC, ajoutent notamment des cœurs ARM Cortex-A53 et Cortex-R5, tout en conservant la séparation entre système processeur et logique programmable.
Pourquoi utiliser un SoC plutôt qu'un FPGA seul ?
Le principal intérêt est de placer chaque fonction là où elle est la plus efficace :
- le processeur exécute le logiciel, un système d'exploitation, les protocoles réseau, les fichiers et les algorithmes riches en décisions ;
- le FPGA traite en parallèle les flux de données, les interfaces personnalisées et les contraintes de temps réel strictes ;
- leur intégration sur une même puce réduit la latence, la consommation, l'encombrement et le nombre de composants par rapport à un CPU et un FPGA séparés ;
- la mémoire DDR peut être partagée : le logiciel prépare des buffers et un accélérateur matériel les traite sans faire transiter les données par un lien externe lent.
Un Zynq est donc pertinent lorsqu'une application combine une pile logicielle complexe et un traitement matériel déterministe : vision industrielle, radio logicielle, robotique, acquisition rapide ou commande de moteurs. Si le besoin est uniquement logiciel, un microcontrôleur peut être plus simple. Si tout le traitement est un pipeline matériel sans logiciel évolué, un FPGA seul peut suffire.

Vue globale d'un Zynq-7000 : le Processing System se trouve dans la partie supérieure et la logique programmable dans la partie inférieure.
Les deux parties du Zynq
Processing System (PS)
Le PS est un sous-système processeur câblé en dur. Sur un Zynq-7000, il 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 |
Le PS peut démarrer et exécuter du logiciel alors que la PL n'est pas encore configurée. Ses périphériques sortent directement par les broches MIO, ou traversent la PL via EMIO lorsqu'un routage ou une adaptation logique est nécessaire.
Programmable Logic (PL)
La PL est la partie FPGA :
- LUT, bascules, BRAM, DSP et ressources d'horloge ;
- logique VHDL ou Verilog synthétisée en circuits réellement parallèles ;
- IP du constructeur ou IP personnalisées ;
- reconfiguration complète, et reconfiguration partielle sur les architectures et flots compatibles.
La PL n'exécute pas des instructions comme un CPU. Elle implémente des circuits dont plusieurs opérations peuvent avoir lieu au même cycle, avec une latence prévisible.
Répartir une application entre PS et PL
Le découpage matériel/logiciel, ou co-design, part généralement des contraintes :
| Besoin | Partie privilégiée |
|---|---|
| Interface utilisateur, réseau, fichiers, configuration | PS |
| 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 |
Par exemple, dans une caméra industrielle, le PS peut gérer Linux, Ethernet et la configuration tandis que la PL reçoit les pixels, les filtre en pipeline puis écrit les images en DDR. Le logiciel et le matériel forment une seule application, mais avec deux modèles d'exécution différents.
Communication PS ↔ PL
Les échanges principaux reposent sur AXI, la famille de bus AMBA d'ARM. Une interface AXI possède un maître qui initie la transaction et un esclave qui répond. Le sens du nom d'un port est toujours donné du point de vue du bloc qui le porte : un port S_AXI_HP du PS reçoit donc les transactions d'un maître situé dans la PL.
Les noms exacts varient entre Zynq-7000 et Zynq UltraScale+, mais les rôles restent proches :
| 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 |

Vue synthétique des interfaces PS–PL d'un Zynq UltraScale+ MPSoC. La présence de l'APU, du RPU et des ports HPC correspond à cette génération ; le principe reste le même sur Zynq-7000.
Chemin de contrôle et chemin de données
Une architecture SoC sépare souvent deux flux :
- le chemin de contrôle utilise AXI-Lite : le CPU écrit des paramètres dans des registres de la PL, lance le traitement puis lit son état ;
- le chemin de données utilise un DMA et un port hautes performances : les blocs de données passent entre la PL et la DDR sans que le CPU copie chaque mot.
Une IP de la PL apparaît alors comme une plage d'adresses dans l'espace mémoire du processeur. Un accès logiciel peut se résumer à :
// Exemple bare-metal : registres AXI-Lite d'une IP dans la PL
Xil_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.
}Pour un système robuste, il faut également prévoir :
- une interruption de la PL vers le contrôleur d'interruptions du PS pour signaler la fin ou une erreur ;
- des horloges et resets cohérents entre les domaines PS et PL ;
- une synchronisation CDC ou une FIFO asynchrone dès que deux blocs utilisent des horloges différentes ;
- la cohérence des caches ou leur maintenance lorsque le CPU et un DMA partagent les mêmes buffers.
Démarrage du système
Au reset, c'est d'abord la BootROM du PS qui s'exécute. Elle charge un premier programme de démarrage depuis le support sélectionné, par exemple une Flash QSPI ou une carte SD. Ce programme initialise notamment les horloges et la DDR, peut configurer la PL, puis lance l'application, un chargeur comme U-Boot ou Linux.
La configuration FPGA n'est donc qu'une partie du démarrage global. Selon l'application, la PL peut être configurée au boot ou reconfigurée plus tard par le PS.
Comparaison rapide
| 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 |
🎓 À venir — Des exercices guidés sur la création de projets SoC seront proposés aux membres Club. Des tutoriels de création de projet seront également publiés pour tous.
Points clés à retenir
- Un Zynq réunit un Processing System câblé en dur et une Programmable Logic reconfigurable.
- Le PS convient au logiciel et aux décisions ; la PL convient au parallélisme et au temps réel déterministe.
- AXI-Lite sert généralement au contrôle, tandis qu'un DMA et les ports HP/HPC transportent les données volumineuses.
- Les interruptions, les horloges, les resets et la cohérence mémoire font partie intégrante de l'interface PS–PL.
- Au démarrage, le PS s'initialise avant de configurer éventuellement la PL.
📝 Tester mes connaissances - Quiz du chapitre