Efinix Sapphire RV64 : SoC RISC-V 64 bits configurable pour FPGA

Efinixsoft-core IPFPGApublished

⚡ L’essentiel en 60 secondes

L'Efinix Sapphire RV64 représente une avancée significative dans le domaine des systèmes sur puce logiciels, offrant une flexibilité remarquable pour les concepteurs de matériel électronique. Il s'agit d'un cœur de processeur RISC-V 64 bits, dont la particularité réside dans sa nature « soft-core ». Contrairement aux microcontrôleurs traditionnels où le processeur est gravé physiquement dans le silicium de manière fixe, le Sapphire RV64 est une description logique synthétisée directement dans un FPGA, c'est-à-dire un circuit intégré programmable. Cette approche permet aux ingénieurs de configurer le processeur selon leurs besoins spécifiques, en ajustant les ressources matérielles pour optimiser les performances ou la consommation d'énergie. Basé sur le cœur VexiiRiscv, cette solution s'adresse aux FPGA de la marque Efinix, notamment les gammes Titanium, Topaz et Trion, à condition que le modèle utilisé soit de la série T20 ou supérieure. Cette compatibilité assure une base matérielle robuste capable de supporter les exigences de calcul et de mémoire que requiert un tel système.

La puissance de calcul de l'Efinix Sapphire RV64 est modulable, permettant d'intégrer de un à quatre cœurs de traitement au sein d'une même puce. Cette capacité multi-cœur est essentielle pour les applications modernes qui nécessitent un parallélisme des tâches, comme le traitement de signaux en temps réel ou les systèmes embarqués complexes. Chaque cœur fonctionne avec un pipeline à sept étages, une architecture qui divise l'exécution des instructions en plusieurs étapes pour améliorer le débit des données. La fréquence de fonctionnement peut atteindre 400 MHz, offrant ainsi une vitesse de traitement compétitive pour des applications exigeantes tout en restant dans des gammes de consommation maîtrisées. Le jeu d'instructions supporté est riche et complet, incluant les extensions RV64IMACFD_Zba_Zbc_Zbs. Pour le néophyte, cela signifie que le processeur gère non seulement les opérations arithmétiques et logiques de base, mais aussi les multiplications, les divisions, les instructions atomiques pour la programmation multi-threadée, ainsi que le calcul en virgule flottante en simple et double précision. Cette dernière capacité est cruciale pour les applications scientifiques, graphiques ou de contrôle industriel nécessitant une grande précision numérique.

La gestion de la mémoire est un aspect critique de tout système informatique, et l'Efinix Sapphire RV64 propose une hiérarchie mémoire flexible et performante. Sur la puce même, une mémoire vive (RAM) est disponible, configurable de 4 Ko à 512 Ko. Cette mémoire interne, souvent appelée SRAM, offre un accès extrêmement rapide aux données, idéale pour stocker le code d'exécution courant ou les variables critiques. Pour les besoins plus importants, le système prend en charge la mémoire externe via trois technologies distinctes : la DDR3, la LPDDR4x et l'HyperRAM. La DDR3, bien que plus ancienne, reste une solution économique et fiable pour des volumes de données modérés, avec une bande passante de 800 Mbps. La LPDDR4x, quant à elle, est une mémoire basse consommation très répandue dans les appareils mobiles, offrant une bande passante nettement supérieure de 3,200 Mbps, ce qui la rend adaptée aux applications multimédias ou nécessitant un transfert rapide de données. Enfin, l'HyperRAM, avec ses 500 Mbps, propose une solution simple et peu coûteuse en nombre de broches pour l'extension de mémoire. La capacité totale de mémoire externe peut aller jusqu'à 8 Go, un volume considérable pour un système embarqué, permettant d'exécuter des systèmes d'exploitation complets ou de traiter de grands jeux de données.

Pour optimiser l'accès à ces mémoires, l'architecture intègre des mécanismes de cache sophistiqués. Les caches de niveau 1 (L1) sont configurables, permettant d'équilibrer la latence et la taille selon les besoins. De plus, un cache de niveau 2 (L2) partagé, optionnel et allant de 64 Ko à 512 Ko, peut être activé. Ce cache L2 agit comme un tampon rapide entre les cœurs de calcul et la mémoire principale, réduisant les temps d'attente lors de l'accès aux données fréquemment utilisées. L'optionnalité de la MMU (Unité de Gestion de Mémoire) avec le support du standard SV39 est un point majeur. La MMU permet la virtualisation de la mémoire, une fonctionnalité indispensable pour faire tourner un système d'exploitation comme Linux, qui nécessite une isolation des processus et une gestion fine de la mémoire. Sans cette unité, le système serait limité à des applications temps réel simples ou à des environnements sans système d'exploitation.

Les interfaces d'entrée/sortie sont conçues pour connecter le processeur au monde extérieur. Le système offre jusqu'à 32 broches GPIO (General Purpose Input/Output), permettant de contrôler des périphériques simples comme des LED, des boutons ou des capteurs. Pour la communication avec d'autres composants électroniques, il dispose de cinq maîtres I2C, de trois maîtres SPI et de trois ports UART. L'I2C est idéal pour connecter des capteurs ou des écrans avec peu de fils, le SPI offre des vitesses de transfert élevées pour des mémoires externes ou des écrans, tandis que l'UART est la norme pour la communication série, souvent utilisée pour le débogage ou la connexion à d'autres modules. Ces interfaces sont reliées au cœur du système via les bus standards AXI4 et APB3, garantissant une intégration fluide avec d'autres blocs logiques présents dans le FPGA.

Enfin, le débogage est facilité par la prise en charge des standards RISC-V, avec jusqu'à quatre points d'arrêt matériels. Ces points d'arrêt permettent aux développeurs de suspendre l'exécution du programme à des endroits précis pour inspecter l'état du processeur, une étape indispensable pour identifier et corriger les erreurs. La conception de ce système nécessite l'utilisation du logiciel Efinity, dans sa version 2026.1 ou plus récente, qui fournit les outils nécessaires pour synthétiser, placer et router le cœur logiciel sur le FPGA. En somme, l'Efinix Sapphire RV64 offre une plateforme puissante et adaptable, combinant la flexibilité du logiciel avec la performance du matériel dédié, pour des applications allant du contrôle industriel à l'informatique embarquée avancée.

Forum (1 sujet) →

AttrSpecsvérifié
architecture64-bit RISC-V? non vérifié
core_count1 to 4 cores? non vérifié
max_frequency400 MHz? non vérifié
pipeline7-stage? non vérifié
l2_cache64 KB to 512 KB (optional)? non vérifié
on_chip_ram4 KB to 512 KB? non vérifié
external_memory_supportDDR3, LPDDR4x, HyperRAM? non vérifié
max_external_memory8 GB? non vérifié
gpioUp to 32? non vérifié
interfaces5x I2C, 3x SPI, 3x UART? non vérifié
isa_extensionsRV64IMACFD_Zba_Zbc_Zbs? non vérifié
mmuOptional SV39? non vérifié
compatibilityEfinix Titanium, Topaz, Trion FPGAs? non vérifié

L'Efinix Sapphire RV64 est un SoC soft-core basé sur le cœur VexiiRiscv, conçu pour les FPGA Efinix des gammes Titanium, Topaz et Trion. Il offre une architecture RISC-V 64 bits configurable jusqu'à 4 cœurs à 400 MHz, intégrant des extensions vectorielles et une MMU optionnelle pour le support Linux.

+ Points forts

["- Architecture RISC-V 64 bits extensible (RV64IMACFD_Zba_Zbc_Zbs) avec support optionnel de la MMU SV39 pour Linux.","- Flexibilité mémoire élevée avec RAM sur puce de 4 à 512 Ko et support externe jusqu'à 8 Go via DDR3, LPDDR4x ou HyperRAM.","- Configuration modulaire permettant de 1 à 4 cœurs, avec cache L2 partagé optionnel et interfaces périphériques variées (I2C, SPI, UART)."]

− Points faibles

["- Nécessite la version Efinity 2026.1 ou plus récente pour la conception.","- Limité aux FPGA Efinix de la série T20 et supérieure.","- La performance dépend fortement de la configuration choisie (nombre de cœurs, caches, extensions activées)."]

  • Retour d'expérience expert expert — expert-microdb
    • J'ai intégré la Sapphire RV64 sur un Titanium T20. L'implémentation avec 2 cœurs à 350 MHz est fluide. La clé est la MMU SV39 : indispensable pour Linux. Attention, la DDR3 limite souvent la bande passante réelle par rapport au LPDDR4x. Efinity 2026.1 gère bien le pipeline 7 étages, mais le timing … — expert-microdb
    • Bon retour. J'utilise cette carte pour un contrôleur industriel. Les 512 Ko de RAM interne suffisent largement pour mon firmware RTOS, ce qui évite la complexité de la DDR. Par contre, ne sous-estimez pas la config des masters I2C/SPI. Si vous activez les extensions FD, le placement routage explose… — membre-forum

Retours et projets de la communauté

Contenu indisponible pour le moment.

Contenu indisponible pour le moment.

["- Non renseigné"]

Bibliothèque de code — exemples écrits pour cette carte

  • gpio_blink_riscv.ino C (RISC-V)

    Exemple minimaliste pour contrôler un GPIO via des accès mémoire directs, idéal pour tester la chaîne de compilation RISC-V.

  • uart_echo_riscv.ino C (RISC-V)

    Permet de vérifier la communication série avec le SoC, essentielle pour le débogage sans JTAG.

  • spi_sensor_read.ino C (RISC-V)

    Démontre l'interaction avec des périphériques externes via SPI, courant pour les capteurs industriels.

  • i2c_master_write.ino C (RISC-V)

    Illustre la gestion du bus I2C pour le stockage non-volatile, utile pour la configuration système.

  • timer_interrupt_handler.ino C (RISC-V)

    Montre l'utilisation des interruptions matérielles pour améliorer l'efficacité énergétique et la réactivité.

  • i2c-bmp280-temperature-6.ino C

    Démontre l'initialisation du bus I2C et la lecture de données brutes depuis un capteur BMP280 connecté au SoC Sapphire.

  • spi-flash-storage-7.ino C

    Exemple de communication SPI pour persister des données sur une puce Flash externe connectée au bus SPI0.

  • pwm-buzzer-tone-8.ino C

    Utilise le module PWM du Sapphire pour piloter un buzzer passif et produire des notes de musique.

  • uart-console-log-9.ino C

    Configure l'UART0 pour la sortie de débogage série, permettant l'utilisation des fonctions printf standard.

  • gpio-irq-interrupt-10.ino C

    Configure une interruption GPIO pour détecter l'appui sur un bouton, libérant le processeur du polling constant.