Circuits Logiques Programmables

Ce TP permet d'apprendre la conception, la simulation et la vérification de circuits logiques programmables en VHDL à l'aide des logiciels Modelsim et ISE. Il couvre la réalisation de circuits combinatoires (demi-additionneur, additionneur complet) et séquentiels (bascule D, registre à décalage, compteur), ainsi que la simulation fonctionnelle et la vérification syntaxique.

D'après le document Circuits Logiques Programmables

Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Document source

Circuits Logiques Programmables

Digital Electronics and VHDL Programming · Institut Supérieur des Études Technologiques · PDF · 19 pages

Afficher l'aperçu du document

Consulter le document original →

Ce TP permet d'apprendre la conception, la simulation et la vérification de circuits logiques programmables en VHDL à l'aide des logiciels Modelsim et ISE. Il couvre la réalisation de circuits combinatoires (demi-additionneur, additionneur complet) et séquentiels (bascule D, registre à décalage, compteur), ainsi que la simulation fonctionnelle et la vérification syntaxique. Pour suivre ce TP, il faut disposer des logiciels Modelsim et ISE, ainsi que de connaissances de base en logique numérique et VHDL.

Objectifs

  • Maîtriser la simulation fonctionnelle avec Modelsim.
  • Concevoir des circuits logiques combinatoires : demi-additionneur, additionneur complet.
  • Concevoir des circuits séquentiels : bascule D, registre à décalage, compteur.
  • Utiliser l’environnement ISE 9.1 pour créer et simuler des projets VHDL.
  • Vérifier la syntaxe et le comportement des modules VHDL.

Prérequis et installation

  • Logiciels : Modelsim pour la simulation, ISE 9.1 de Xilinx pour la conception et la synthèse.
  • Connaissances de base en logique numérique (portes logiques, additionneur, bascule).
  • Notions élémentaires de VHDL (entité, architecture, process, signaux).
  • Accès à un ordinateur avec les logiciels installés et un répertoire de travail (exemple : c:/TP_VHDL).

Demi-additionneur : conception et simulation

Le demi-additionneur additionne deux bits A et B pour produire une somme S (SUM) et une retenue C (CARRY).

Table de vérité

ABS (SUM)C (CARRY)
0000
0110
1010
1101

Conception logique

Les sorties sont définies par :

S = A XOR B

C = A AND B

Description VHDL

Écrire le code VHDL correspondant dans l’éditeur Modelsim et enregistrer sous « demi_additionneur.vhd » dans le répertoire « c:/TP_VHDL ».

Simulation fonctionnelle avec Modelsim

  1. Lancer Modelsim et ouvrir le fichier « demi_additionneur.vhd ».
  2. Changer le répertoire de travail via « File > Change Directory » vers « c:/TP_VHDL ».
  3. Compiler le code avec « Compile > Compile » et sélectionner le demi-additionneur.
  4. Vérifier l'absence d'erreurs dans la fenêtre « Transcript ».
  5. Lancer la simulation via « Simulate > Start Simulation » et choisir le demi-additionneur.
  6. Afficher les signaux : « View > Object » puis « View > Wave ».
  7. Sélectionner les signaux A, B, S, C dans la fenêtre « Object » et les glisser dans « Wave ».
  8. Détacher la fenêtre « Wave » pour une meilleure visibilité.
  9. Simuler pas à pas en forçant les entrées A et B à toutes les combinaisons possibles (clic droit sur le signal pour changer sa valeur).
  10. Comparer les sorties S et C avec la table de vérité pour valider le fonctionnement.

Additionneur complet : conception et simulation

L’additionneur complet possède trois entrées : A, B et Cin (retenue d’entrée), et deux sorties : S (somme) et Cout (retenue de sortie).

Conception à partir de demi-additionneurs

Un additionneur complet peut être construit en utilisant deux demi-additionneurs et une porte OR :

  • Le premier demi-additionneur additionne A et B.
  • Le second demi-additionneur additionne la somme précédente avec Cin.
  • La retenue finale Cout est obtenue par un OU logique des deux retenues intermédiaires.

Utilisation de composants en VHDL

Pour utiliser un composant existant, déclarer le composant :

component ENTITYNAME
port (
  INPUTS : DATATYPE;
  OUTPUTS : DATATYPE
);
end component;

Et instancier avec :

Label: ENTITYNAME port map (INPUTS & OUTPUTS);

Description VHDL et simulation

Écrire le code VHDL de l’additionneur complet en utilisant les demi-additionneurs, puis simuler avec Modelsim selon la même démarche que pour le demi-additionneur.

Additionneur complet 4 bits

Simuler le code VHDL d’un additionneur complet sur 4 bits. Analyser l’architecture interne pour comprendre le fonctionnement en cascade des additionneurs simples.

Bascule D : modélisation et simulation

La bascule D copie l’état de l’entrée d au front montant de l’horloge CLK.

Code VHDL du process bascule D

PROCESS (clk)
BEGIN
  IF (clk'EVENT) AND (clk = '1') THEN
    q <= d;
  END IF;
END PROCESS;

Travail demandé

Compléter ce code pour obtenir une description complète d’une bascule D sensible au front montant.

Registre à décalage 4 bits

Un registre à décalage est constitué de plusieurs bascules D en série, où la donnée est décalée vers la bascule suivante à chaque front d’horloge.

Travail demandé

À partir de la bascule D, écrire le code VHDL d’un registre à décalage 4 bits.

TP 2 : Création et simulation d’un compteur avec ISE 9.1

Création d’un nouveau projet

  1. Lancer ISE 9.1.
  2. Créer un nouveau projet via « File > New Project ».
  3. Nommer le projet « TP_2_VHDL » et choisir l’emplacement souhaité.
  4. Vérifier que VHDL est sélectionné comme Top-Level Source Type.
  5. Choisir la famille FPGA Spartan2 dans les propriétés du composant cible.
  6. Finaliser la création du projet.

Création du fichier VHDL haut niveau

  1. Créer une nouvelle source via « Project > New Source ».
  2. Choisir « VHDL Module » et nommer le fichier « compteur ».
  3. Déclarer les ports suivants :
    • CLOCK : entrée (signal d’horloge)
    • DIRECTION : entrée (sens du comptage)
    • COUNT_OUT : sortie (3 bits, valeur comptée)
  4. Finaliser la création du fichier.

Utilisation des modèles VHDL fournis avec ISE

  1. Placer le curseur au-dessus de « begin » dans l’architecture du compteur.
  2. Ouvrir le menu « Edit > Language Templates ».
  3. Parcourir : VHDL → Synthesis Constructs → Coding Examples → Counters → Binary → Up/Down Counters → Simple Counter.
  4. Insérer le modèle dans le fichier via « Edit > Use in File ».
  5. Fermer la fenêtre « Language Templates ».

Finalisation du code VHDL du compteur

Ajouter la déclaration du signal interne :

signal count_int : std_logic_vector(3 downto 0) := "0000";

Remplacer dans le code :

  • <clock> par CLOCK
  • <count_direction> par DIRECTION
  • <count> par count_int

Le code final doit ressembler à :

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity counter is
  Port (
    CLOCK : in STD_LOGIC;
    DIRECTION : in STD_LOGIC;
    COUNT_OUT : out STD_LOGIC_VECTOR (3 downto 0)
  );
end counter;

architecture Behavioral of counter is
  signal count_int : std_logic_vector(3 downto 0) := "0000";
begin
  process (CLOCK)
  begin
    if CLOCK='1' and CLOCK'event then
      if DIRECTION='1' then
        count_int <= count_int + 1;
      else
        count_int <= count_int - 1;
      end if;
    end if;
  end process;
  COUNT_OUT <= count_int;
end Behavioral;

Vérification de la syntaxe

  1. Dans le panneau sources, sélectionner « Synthesis/Implementation ».
  2. Cliquer sur « + » à côté de « Synthesis-XST process » pour dérouler les processus.
  3. Double-cliquer sur « Check Syntax » pour lancer la vérification.
  4. Corriger les erreurs éventuelles affichées dans la console ou la fenêtre « Errors ».
  5. Fermer le fichier VHDL après correction.

Simulation fonctionnelle du compteur

  1. Sélectionner le fichier « counter.vhd » dans la fenêtre Sources.
  2. Créer un fichier testbench via « Project > New Source ».
  3. Choisir « Test Bench WaveForm », nommer « counter_tbw » et associer au fichier « counter ».
  4. Configurer les paramètres temporels :
    • Fréquence d’horloge : 25 MHz (Clock High Time = 20 ns, Clock Low Time = 20 ns)
    • Input Setup Time : 10 ns
    • Output Valid Delay : 10 ns
    • Offset : 0 ns
    • Global Signals : GSR (FPGA)
  • Cliquer sur Finish pour ouvrir la fenêtre de tracé des formes d’ondes.
  • Imposer les stimuli sur DIRECTION en cliquant sur la cellule bleue vers 300 ns pour comptage croissant.
  • Imposer un changement vers 900 ns pour comptage décroissant.
  • Enregistrer le fichier Waveform.
  • Vérifier que « Behavioral Simulation » et « counter_tbw » sont sélectionnés dans Sources.
  • Lancer la simulation via « Process > Simulate Behavioral Model ».
  • Utiliser Modelsim pour observer les formes d’ondes et valider le fonctionnement.
  • TP 3 : Modules numériques standards

    Multiplexeur

    Le multiplexeur est utilisé pour illustrer les assignations conditionnelles when et sélectives with.

    Table de vérité

    S1S0MUX
    00A
    01B
    10C
    11D

    Valider le fonctionnement du multiplexeur avec Modelsim en utilisant les assignations conditionnelles when et sélectives with.

    Sortie à trois états

    Le circuit comprend deux registres et un buffer à trois états. La sortie Q est en haute impédance lorsque le buffer est actif. Valider ce comportement en simulant dans Modelsim en activant l’entrée SEL.

    Diviseur d’horloge

    Intégrer la description VHDL d’un diviseur d’horloge dans un projet ISE, puis simuler son fonctionnement en créant un fichier testbench pour Modelsim.

    Détecteur de front

    Intégrer la description VHDL d’un détecteur de front dans un projet ISE, simuler avec un testbench Modelsim, puis présenter une deuxième méthode de description du circuit.

    Diviseur générique

    Analyser la description VHDL d’un diviseur générique. Simuler avec Modelsim, interpréter le code et déterminer le schéma bloc correspondant.

    Résultats attendus

    • Simulation fonctionnelle correcte des demi-additionneur et additionneur complet avec sorties conformes aux tables de vérité.
    • Compteur fonctionnant à 25 MHz, capable de compter dans les deux sens selon l’entrée DIRECTION.
    • Registre à décalage et bascule D répondant correctement aux fronts d’horloge.
    • Multiplexeur et buffer à trois états simulés avec comportements conformes.
    • Diviseur d’horloge et détecteur de front fonctionnels selon les simulations.

    Pièges courants

    • Ne pas changer le répertoire de travail dans Modelsim avant la compilation, ce qui empêche de trouver les fichiers.
    • Oublier de forcer toutes les combinaisons d’entrées lors de la simulation du demi-additionneur ou additionneur.
    • Confondre la sensibilité du process dans la bascule D (doit être uniquement sur CLK).
    • Ne pas déclarer ou initialiser correctement les signaux internes (ex. count_int dans le compteur).
    • Erreur dans la syntaxe VHDL, notamment dans l’utilisation des composants ou des ports.
    • Ne pas respecter les contraintes temporelles lors de la simulation (setup time, output delay).
    • Oublier d’associer le testbench au fichier source dans ISE.

    Partager

    Commentaires

    Aucun commentaire pour le moment. Posez la première question.

    Les commentaires sont relus avant publication. Votre e-mail n'est jamais affiché.

    ← Toutes les révisions