🛠 Contrôler des GPIO sur Sapphire RV64

Efinix Sapphire RV64 : SoC RISC-V 64 bits configurable pour FPGA · debutant · Apprenez à configurer et piloter les broches d'entrée/sortie générales (GPIO) de votre SoC Sapphire RV64 pour interagir avec le monde physique.

Objectifs

Ce tutoriel vous guide dans la configuration et l'utilisation des interfaces GPIO du SoC Sapphire RV64. Vous apprendrez à activer les périphériques d'entrée/sortie, à comprendre leur adressage mémoire via le bus AXI4/APB3, et à manipuler les registres pour allumer une LED ou lire un bouton. C'est la première étape essentielle pour tout projet embarqué nécessitant une interaction physique.

Matériel nécessaire

Étapes

  1. Configuration du périphérique GPIO : Dans Efinity, ouvrez votre projet Sapphire RV64. Accédez à la configuration du SoC et assurez-vous que le bloc GPIO est activé. Sélectionnez le nombre de broches souhaité (jusqu'à 32 GPIO disponibles). Configurez la largeur de bus (généralement 32 bits pour le registre de données).
  1. Génération du bitstream : Générez le bitstream FPGA. Cette étape synthétise le cœur VexiiRiscv et les périphériques, y compris les GPIO, sur le FPGA. Téléversez le bitstream sur votre carte.
  1. Identification des adresses mémoire : Consultez la documentation générée par Efinity pour trouver l'adresse de base des GPIO. Par exemple, supposons que l'adresse de base est 0x10000000. Les registres typiques incluent : Direction (0x00), Données (0x04), et Masque (0x08).
  1. Écriture du code C : Créez un fichier main.c. Définissez les pointeurs vers les registres GPIO.
#include <stdint.h>

#define GPIO_BASE 0x10000000
#define GPIO_DIR  (*(volatile uint32_t *)(GPIO_BASE + 0x00))
#define GPIO_DATA (*(volatile uint32_t *)(GPIO_BASE + 0x04))

void main() {
    // Configurer la broche 0 en sortie (bit 0 à 1)
    GPIO_DIR |= (1 << 0);
    
    while(1) {
        GPIO_DATA ^= (1 << 0); // Toggle la LED
        for(volatile int i=0; i<100000; i++); // Délai simple
    }
}
  1. Compilation et flash : Compilez le code avec le compilateur RISC-V approprié (cible RV64IMACFD). Chargez le binaire dans la mémoire du SoC via JTAG ou UART selon votre configuration.

Vérification

Une fois le programme exécuté, la LED connectée à la broche GPIO 0 doit clignoter à intervalles réguliers. Si vous utilisez un bouton sur une autre broche configurée en entrée, vous pouvez ajouter une lecture de GPIO_DATA pour vérifier l'état logique.

Pour aller plus loin

Explorez l'utilisation des interruptions GPIO pour réagir aux changements d'état sans boucle d'attente, ou configurez plusieurs groupes de GPIO pour contrôler des affichages 7 segments.

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels