Aller au contenu

Vivado, Basys 3 et premier projet

Informations essentielles

La Digilent Basys 3 utilise un FPGA AMD/Xilinx Artix-7.

Propriété Valeur
Composant FPGA xc7a35tcpg236-1
Oscillateur système 100 MHz
Broche d'horloge W5
Période 10 ns
Programmation USB-JTAG
Périphériques 16 interrupteurs, 16 LED, 5 boutons, afficheur quatre chiffres

Le fichier de contraintes dépend de la révision de la carte. Utilisez le XDC maître officiel Digilent et confirmez la révision.

Rôle des étapes Vivado

Étape Question traitée
Projet Quelles sources, contraintes, langage et composant vont ensemble ?
Conception élaborée Quelle hiérarchie et quel RTL décrivent les sources ?
Simulation comportementale La logique satisfait-elle la spécification ?
Synthèse Quelles primitives FPGA peuvent l'implémenter ?
Implémentation Où placer les primitives et comment les router ?
Analyse temporelle Chaque chemin contraint respecte-t-il son délai ?
Génération du bitstream Peut-on coder la configuration du FPGA ?
Programmation Peut-on charger cette configuration par JTAG ?

Une simulation réussie ne garantit ni la synthèse ni le timing.

Créer un projet VHDL

  1. Lancer Vivado 2026.1.
  2. Choisir Create Project.
  3. Sélectionner RTL Project.
  4. Ajouter ou créer les sources VHDL.
  5. Choisir VHDL comme langage cible.
  6. Sélectionner xc7a35tcpg236-1.
  7. Ajouter le XDC Basys 3.
  8. Créer une source de simulation VHDL.
  9. Vérifier les sommets de conception et de simulation dans Sources.

La sélection de la carte dans Boards est pratique si ses fichiers sont installés. Sélectionner directement le composant reste parfaitement valide.

Activer VHDL-2008

  1. Sélectionner les fichiers dans Sources.
  2. Ouvrir Source File Properties.
  3. Choisir VHDL 2008 comme File Type.

En ligne de commande :

xvhdl -2008 source.vhd

Premier circuit : interrupteur vers LED

library ieee;
use ieee.std_logic_1164.all;

entity switch_led is
  port (
    switch_i : in  std_logic;
    led_o    : out std_logic
  );
end entity;

architecture rtl of switch_led is
begin
  led_o <= switch_i;
end architecture;

XDC minimal :

set_property PACKAGE_PIN V17 [get_ports switch_i]
set_property IOSTANDARD LVCMOS33 [get_ports switch_i]

set_property PACKAGE_PIN U16 [get_ports led_o]
set_property IOSTANDARD LVCMOS33 [get_ports led_o]

Les noms de ports XDC doivent correspondre exactement aux ports de l'entité supérieure.

Première simulation auto-vérifiante

library ieee;
use ieee.std_logic_1164.all;
use std.env.finish;

entity tb_switch_led is
end entity;

architecture sim of tb_switch_led is
  signal switch_s : std_logic := '0';
  signal led_s    : std_logic;
begin
  dut : entity work.switch_led(rtl)
    port map (switch_i => switch_s, led_o => led_s);

  stimulus : process
  begin
    switch_s <= '0';
    wait for 1 ns;
    assert led_s = '0' severity failure;

    switch_s <= '1';
    wait for 1 ns;
    assert led_s = '1' severity failure;

    report "PASS: switch_led";
    finish;
  end process;
end architecture;

Même ce petit test applique la bonne méthode : le résultat attendu est exécutable et non vérifié à l'œil.

Programmer la carte

  1. Générer le bitstream après synthèse et implémentation.
  2. Relier le port USB-JTAG et allumer la carte.
  3. Ouvrir Hardware Manager.
  4. Choisir Open Target → Auto Connect.
  5. Sélectionner l'Artix-7 détecté.
  6. Choisir Program Device et le fichier .bit.

Une configuration chargée par JTAG est normalement volatile. La mémoire non volatile suit une procédure différente.

Organisation recommandée

project/
├── src/          # Entités et paquetages synthétisables
├── tb/           # Bancs de test et vecteurs
├── constraints/  # Fichiers XDC
├── sim/          # Scripts, sorties générées ignorées
├── docs/         # Exigences, diagrammes, notes
└── vivado/       # Fichiers de projet si nécessaire

Gardez les sources hors des répertoires générés afin de simplifier Git, les sauvegardes et la recréation du projet.

Liste de contrôle

  • Composant correct : xc7a35tcpg236-1.
  • VHDL-2008 activé.
  • Bons sommets pour conception et simulation.
  • Noms XDC identiques aux ports VHDL.
  • Banc de test réussi automatiquement.
  • Aucun avertissement de synthèse inexpliqué.
  • Timing d'implémentation respecté.
  • Bitstream issu des dernières sources.