Vue d’ensemble
Ce travail a été réalisé dans le cadre de d’un projet personnel sur cible Zynq alors utilisé sur un equipement dans le cadre professionnel. L’objectif était de maîtriser le développement sur architecture Zynq-7000, combinant FPGA (Programmable Logic) et processeur ARM (Processing System) afin de comprendre le fonctionnement interne du SoC.
Ce projet vise à développer un système d’enregistrement et d’analyse de trames RS422 multi-canaux avec horodatage précis. L’objectif principal est la datation différentielle entre plusieurs bus RS422 pour détecter les délais de propagation et analyser la synchronisation inter-équipements.

Objectifs techniques
- Implémenter un récepteur RS422 multi-canaux configurable en VHDL
- Gérer les modes RS422 synchrone et asynchrone en réception
- Dater précisément les données reçues (1µs) pour datation différentielle entre bus
- Enregistrer les trames pour analyse et rejeu ultérieur (objectif futur)
- Interfacer la logique FPGA (PL) avec le processeur ARM (PS) via AXI-Lite
- Développer une application bare-metal en C
- Développer un applicatif Python pour la gestion centralisée des données
Architecture Système
L’architecture repose sur un Xilinx Zynq-7000, SoC hybride combinant processeur ARM et FPGA. La communication entre les deux parties s’effectue via bus AXI-Lite, permettant l’exécution de code C sur ARM tout en déployant la logique temps réel RS422 sur FPGA.
Un serveur Python hébergé sur une Radxa Rock 3C pilote l’ensemble via LwIP (Lightweight IP) sur le SoC Zynq, permettant un contrôle distant et une gestion centralisée des données.
┌─────────────────────────────────────────────────┐
│ ZYNQ-7000 SoC │
│ │
│ ┌───────────────┐ ┌─────────────────┐ │
│ │ PS (ARM) │ │ PL (FPGA) │ │
│ │ │ AXI │ │ │
│ │ - Bare-metal │◄───────►│ - RS422 RX │ │
│ │ - App C │ Lite │ - Clock Gen │ │
│ │ - LwIP client │ 32-bit │ - FIFO Buffers │ │
│ └──────┬────────┘ └────────┬────────┘ │
│ │ │ │
└─────────┼───────────────────────────┼───────────┘
│ │
[Ethernet/LwIP] [RS422 Transceivers]
│ [3x ISL83078]
│
┌─────▼─────────┐
│ Rock 3C │
│ │
│ - Python │
│ - Serveur TCP │
│ - Control UI │
└───────────────┘
Développement VHDL (Partie PL)
Architecture du système
Le design FPGA est organisé en plusieurs modules :
1. Bloc Série RS422
- Réception RS422 synchrone et asynchrone
- Débit réglable de 1 kbps à 16 Mbps
- Modes d’acquisition : Gap detection, Transparent, Sync word
- Buffer FIFO avec taille variable
2. Timer Interne
- Compteur 1µs pour horodatage précis des trames
- Compteur 8ns pour résolution temporelle fine
- Générateur 1PPS pour synchronisation (Réserve pour utilisation ultérieure)
3. Handler Série
- Interface entre le bloc série RS422 et le timer interne
- Capture et association des timestamps aux trames reçues
- Gestion du multiplexage sync/async
4. Interface AXI
- Gestion de la configuration via AXI-Lite
- Gestion des données via AXI-Stream
- Enregistrement des trames horodatées dans les buffers AXI
- Interface avec le processeur ARM pour récupération en C
Horodatage et Datation Différentielle
Le timer interne génère deux compteurs indépendants :
- Compteur 1µs : Utilisé pour l’horodatage des trames reçues
- Compteur 8ns : Haute résolution pour mesures fines de délais
À chaque réception de trame, le système capture simultanément ces deux timestamps, permettant :
- La datation absolue de chaque trame sur chaque bus
- Le calcul de différences temporelles entre bus (datation différentielle)
- L’analyse de la synchronisation et des délais de propagation des données dans les équipements
Développement C (Partie PS)
Interface AXI DMA
L’application C utilise AXI DMA pour transférer les trames depuis le FPGA vers la mémoire DDR. Le système fonctionne en mode bare-metal avec gestion d’interruptions.
À chaque réception de trame, une interruption déclenche :
- La lecture des données horodatées depuis le buffer DMA
- La récupération des timestamps (1µs + 8ns)
Cela permet l’export periodique vers le serveur Python via TCP/IP (LwIP)
Circuit Électronique
Shield Custom Arduino Uno
La carte PYNQ-Z1 dispose d’un connecteur compatible Arduino Uno, permettant l’interfaçage de shields standards. Un shield prototype a été fait, intégrant les transceivers RS422 et une resistance de terminaison amovible.
Trois ISL83078 (transceivers RS422 full-duplex) sont intégrés sur le shield custom. L’implémentation VHDL est scalable à 4 transceivers.
Outils et Environnement
Développement FPGA
- Vivado Design Suite 2019.x : Synthèse et implémentation VHDL
- Vivado HLS : Génération IP AXI
- Testbench VHDL : Simulation fonctionnelle
- ILA (Integrated Logic Analyzer) : Debug temps réel
Développement Software
- Vitis/SDK 2019.x : Environnement de développement bare-metal
- GCC ARM : Compilation croisée pour Zynq
- LwIP : Stack TCP/IP bare-metal
- Python : Serveur de contrôle sur Rock 3C et divers scripts de contrôle et de tests
Tests et Validation
Tests effectués
✅ Validation fonctionnelle :
- Réception synchrone et asynchrone opérationnelle
- Horodatage 1µs et 8ns fonctionnel
- Transfert DMA vers mémoire DDR vérifié
- Communication LwIP avec serveur Python
Améliorations possibles
Ce projet pose les bases d’un système d’analyse RS422 et peut être étendu avec :
- Implémentation de l’émission (Tx) pour rejeu ou forge de trames ou d’un ensemble de bus via l’interface Python
- Migration vers Petalinux (Linux embarqué avec BusyBox) pour une gestion plus flexible et des outils réseau avancés
- Interface web de monitoring pour visualisation en temps réel des bus RS422
- Synchronisation PTP pour horodatage absolu inter-systèmes
- Extension à plsu de 4 canaux RS422
- Analyse et détection d’anomalies (corruptions, pertes de synchronisation) avec alertes
Compétences développées
Retour d’expérience
Ce projet m’a permis de comprendre l’architecture Zynq-7000 et l’intégration FPGA/CPU. Le principal défi a été la gestion et le debug de l’interface PL/PS via AXI.
Points clés acquis :
- Compréhension du bus AXI (Lite et Stream)
- Développement bare-metal avec gestion d’interruptions et DMA
- Design VHDL modulaire avec testbench pour validation
- Interfaçage hardware RS422 (différentiel, transceivers)
Info
🎓 Ce projet a permis d’appliquer des connaissances académiques (VHDL, architecture SoC, protocoles série) dans un contexte réel d’analyse de bus RS422, avant déploiement sur équipement professionnel.