🛠 Déployer un nœud IoT avec Sapphire RV64 : Réseau et Stockage

Efinix Sapphire RV64 : SoC RISC-V 64 bits configurable pour FPGA · intermediaire · Configurez un système embarqué complet sur FPGA Efinix en exploitant les interfaces AXI4 et les extensions RISC-V pour la gestion de données.

Objectifs

Ce tutoriel vise à configurer le SoC Sapphire RV64 pour un cas d'usage typique d'IoT industriel : l'acquisition de données via des interfaces périphériques (SPI/I2C) et leur transmission réseau. Nous allons illustrer comment exploiter l'architecture configurable pour allouer les ressources mémoire et les interfaces nécessaires, en mettant l'accent sur l'intégration des bus AXI4/APB3 et la gestion de la mémoire externe.

Matériel nécessaire

Étapes

  1. Configuration du cœur VexiiRiscv : Dans Efinity, instanciez le bloc IP Sapphire RV64. Sélectionnez le cœur VexiiRiscv. Activez les extensions RV64IMACFD pour le support flottant (calculs de capteurs) et Zba_Zbc_Zbs pour l'optimisation des opérations bit à bit. Si votre application nécessite un OS complet, activez la MMU SV39.
  1. Allocation mémoire : Configurez la RAM sur puce à 64 Ko pour le stack et les variables critiques. Pour le stockage des logs ou des buffers réseau, connectez la mémoire externe. Par exemple, si vous utilisez HyperRAM (500 Mbps), configurez le contrôleur d'interface correspondant dans le bloc IP. Assurez-vous que le cache L1 est activé pour réduire la latence d'accès.
  1. Interconnexion Bus : Reliez le cœur aux périphériques via le bus AXI4 pour les hautes vitesses (mémoire externe) et APB3 pour les périphériques lents (UART, GPIO). Mappez les adresses mémoire pour les périphériques I2C (jusqu'à 5 maîtres disponibles) et SPI (3 maîtres).
  1. Génération du bitstream : Synthétisez la conception. Vérifiez que le timing est respecté, notamment si vous visez la fréquence maximale de 400 MHz. Téléversez le bitstream sur le FPGA.
  1. Développement logiciel : Écrivez le firmware en C. Utilisez les pilotes fournis pour initialiser les interfaces SPI pour lire un capteur. Mettez les données en buffer dans la mémoire externe. Implémentez une pile TCP/IP légère (comme lwIP) utilisant l'interface réseau (si disponible via GPIO/SPI Ethernet ou module externe) pour transmettre les données.

Vérification

Utilisez le débogueur RISC-V standard via OpenOCD. Placez des points d'arrêt matériels (jusqu'à 4 disponibles) dans la routine d'acquisition de données. Vérifiez via un analyseur logique que les signaux SPI/I2C sont corrects. Confirmez que les données sont bien écrites dans la mémoire externe en lisant les adresses correspondantes via le débogueur.

Pour aller plus loin

Explorez l'utilisation du cache L2 partagé (64 à 512 Ko) pour accélérer les accès mémoire en mode multi-cœur (jusqu'à 4 cœurs). Vous pouvez également tester les performances avec les extensions flottantes doubles précision pour du traitement de signal embarqué.

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels