Activité : intégration d'un récepteur série pour sonar

Le module PmodMaxSonar est un capteur à ultrasons capable de mesurer des distances entre 15 et 648 cm. Il propose plusieurs interfaces de communication, dont une interface série compatible avec l’entité UART que vous avez déjà utilisée.

Pour faire communiquer le module PmodMaxSonar avec le processeur, nous allons ajouter une deuxième instance d’UART à l’architecture Computer.

Vous pouvez vous référer à la section Interface série asynchrone pour relire les explications concernant l’entité UART.

Compléter le projet Vivado

Si ce n’est pas déjà fait, ouvrez votre projet Computer dans Vivado :

cd $HOME/CoCiNum
./scripts/vivado vivado/Computer/Computer.xpr

Comme les fichiers de l’interface série sont déjà présents dans votre projet, vous n’avez pas besoin de les ajouter.

Choisissez sur quel connecteur d’extension Pmod de la carte Basys3 vous allez brancher votre sonar. Sur la sérigraphie de la carte, ils portent les noms JA (en haut à gauche), JB (en haut à droite), JC (en bas à droite), et JXADC (en bas à gauche).

Dans le panneau, Flow Navigator, exécutez l’action Add Sources, choisissez Add or create constraints et pressez le bouton Next.

Ajoutez au projet Vivado le fichier de contraintes correspondant à votre choix :

Sous-dossier Fichier Rôle
Basys3 Basys3_PmodA.xdc Fichier de contraintes pour Vivado, brochage du connecteur JA.
Basys3 Basys3_PmodB.xdc Fichier de contraintes pour Vivado, brochage du connecteur JB.
Basys3 Basys3_PmodC.xdc Fichier de contraintes pour Vivado, brochage du connecteur JC.
Basys3 Basys3_PmodXADC.xdc Fichier de contraintes pour Vivado, brochage du connecteur JD.

Modification du système

Paquetage Computer_pkg

Dans le fichier Computer_pkg.vhd, ajoutez des constantes pour définir les caractéristiques des nouveaux périphériques du système :

Constante Type Valeur Rôle
SONAR_UART_ADDRESS Octet 84hex Les bits 31 à 24 de l’adresse pour accéder à l’UART reliée au sonar.
SONAR_UART_BIT_RATE_HZ Entier 9600 La vitesse de communication de l’interface série, en bits/seconde.
INTC_EVENTS_SONAR_UART Entier 3 Pour le contrôleur d’interruptions, le numéro de l’événement indiquant la réception d’un octet.

Les adresses et numéros d’événements contenus dans la colonne Valeur sont des exemples. Vous pouvez les modifier à condition que chaque périphérique de votre architecture ait une adresse et un numéro d’événement différents des autres périphériques.

Entité Computer

Dans le fichier Computer.vhd, complétez l’entité Computer en déclarant le port du connecteur d’extension que vous avez choisi. Le tableau ci-dessous donne la liste des ports disponibles et leur rôle. Ils sont tous de type std_logic.

Rôle JA JB JC JXADC Mode
Inutilisée pmod_a1 pmod_b1 pmod_c1 pmod_xadc1 in
Inutilisée pmod_a2 pmod_b2 pmod_c2 pmod_xadc2 in
Données série pmod_a3 pmod_b3 pmod_c3 pmod_xadc3 in
Inutilisée pmod_a4 pmod_b4 pmod_c4 pmod_xadc4 in

Déclarez bien les quatre ports, même ceux qui ne sont pas utilisés.

Architecture Structural

Dans le fichier Computer.vhd, complétez l’architecture pour intégrer une seconde instance de l’entité UART en utilisant les constantes que vous avez ajoutées au paquetage Computer_pkg.

Par précaution, le port d’entrée correspondant à la ligne RX devra être resynchronisé. Ajoutez une entrée et une sortie à l’instance sync_inst de la manière suivante :

sync_inst : entity work.InputSynchronizer
    generic map(
        WIDTH => 19
    )
    port map(
        ...
        data_i(18) => ...,         -- Votre port d'entrée RX en provenance du sonar
        data_o(18) => sync_sonar_rx -- Pensez à déclarer ce signal
    );

Pensez à déclarer le signal sync_sonar_rx et à le relier à l’entrée rx_i de votre second UART.

Inspirez-vous des instances déjà présentes dans l’architecture.

Représentez sous la forme d’un schéma la nouvelle structure du système.

Générer le bitstream et configurer le FPGA

Dans Vivado, générez le fichier binaire à charger dans le FPGA : Flow NavigatorProgram and DebugGenerate Bitstream.

Si ce n’est pas déjà fait, reliez le connecteur micro-USB de la carte à un port USB de votre PC et mettez la carte sous tension.

Connectez Vivado à votre carte Basys3 : Flow NavigatorProgram and DebugOpen Hardware ManagerOpen TargetAuto-connect.

Configurez le FPGA : Flow NavigatorProgram and DebugOpen Hardware ManagerProgram Device.

Si vous n’avez pas d’autre périphérique à ajouter, vous pouvez passer à la section Développement logiciel embarqué.