🛠 Configurer les GPIO et piloter un périphérique sur Sapphire RV64

Efinix Sapphire RV64 : SoC RISC-V 64 bits configurable pour FPGA · intermediaire · Apprenez à configurer les broches GPIO du SoC Sapphire RV64 via Efinity pour interagir avec des composants externes comme des LED ou des capteurs.

Objectifs

Ce tutoriel vise à comprendre l'architecture des entrées-sorties du SoC Efinix Sapphire RV64. Nous allons configurer les blocs GPIO disponibles dans la logique programmable pour contrôler une sortie numérique (LED) ou lire une entrée (bouton/capteur). L'accent est mis sur la configuration matérielle via Efinity et l'accès aux registres mémoire depuis le logiciel embarqué.

Matériel nécessaire

Étapes

  1. Configuration du SoC dans Efinity : Ouvrez votre projet Efinity. Dans la configuration du SoC Sapphire, activez le bloc GPIO. Vous pouvez allouer jusqu'à 32 GPIO. Assurez-vous que les broches physiques sélectionnées ne sont pas en conflit avec d'autres interfaces (UART, SPI).
  2. Génération du bitstream : Compilez le projet pour générer le fichier de configuration FPGA. Téléversez-le sur la carte.
  3. Identification des adresses mémoire : Consultez le rapport de génération pour trouver l'adresse de base du bloc GPIO. Par défaut, les registres de contrôle et de données sont mappés dans l'espace mémoire.
  4. Écriture du code C : Utilisez des pointeurs pour accéder aux registres. Par exemple, pour allumer une LED sur le GPIO 0 :
#define GPIO_BASE 0x01000000
#define GPIO_DIR 0x00
#define GPIO_OUT 0x04

void main() {
    // Configurer GPIO 0 en sortie (bit 0 à 1)
    *(volatile unsigned int*)(GPIO_BASE + GPIO_DIR) |= (1 << 0);
    // Mettre le GPIO 0 à l'état haut
    *(volatile unsigned int*)(GPIO_BASE + GPIO_OUT) |= (1 << 0);
    while(1);
}
  1. Compilation et transfert : Compilez le code avec la chaîne d'outils RISC-V adaptée au cœur VexiiRiscv. Chargez le binaire via JTAG ou UART.

Vérification

Observez la LED s'allumer après l'exécution du programme. Si vous utilisez un bouton, configurez le GPIO en entrée et lisez le registre d'entrée pour détecter les changements d'état. Utilisez le débogueur RISC-V pour vérifier les valeurs des registres en temps réel.

Pour aller plus loin

Explorez les interruptions externes (EPI) pour réagir aux changements d'état des GPIO sans polling. Intégrez un capteur I2C pour diversifier les entrées-sorties.

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels