Td tp vhdl partie 2 exercices diagrammes d'états VHDL Téléch
Télécharger PDFIntroduction au VHDL et aux Systèmes Séquentiels
Le VHDL (VHSIC Hardware Description Language) est un langage de description matérielle essentiel pour la conception de systèmes numériques. Ce document explore divers exercices pratiques, allant des diagrammes d'états aux opérations arithmétiques et logiques, afin de consolider la compréhension des concepts fondamentaux du VHDL.
Exercice N°1 : Diagrammes d'Évolutions
Les montages séquentiels simples sont généralement représentés par un diagramme d'évolution, aussi appelé diagramme d'états. Il s'agit d'un ensemble d'états (souvent figurés par des cercles) reliés entre eux par des flèches, qui symbolisent les transitions entre ces états.
Principes des Diagrammes d'États
- Un état isolé, sans transition, est à éviter car il représente une configuration non fonctionnelle ou bloquée.
- Les diagrammes d'états peuvent présenter un ou plusieurs cycles.
- L'ordre des états n'est pas nécessairement séquentiel ou lié au comptage naturel.
- Le nombre d'états N est lié au nombre n de bascules D par la relation : N = 2n.
Exemple de Diagramme d'États
Considérons l'exemple d'un diagramme d'évolution simple. Le tableau suivant décrit les transitions d'état présent vers état futur pour deux bascules (q1, q0) vers (Q1, Q0) :
| État Présent (q1 q0) | État Futur (Q1 Q0) |
|---|---|
| 0 0 | 0 1 |
| 0 1 | 1 0 |
| 1 0 | 1 1 |
| 1 1 | 0 0 |
À partir de ce tableau, il est possible de déduire des tableaux de Karnaugh pour obtenir les équations logiques simplifiées des états futurs. Les signaux q0 et q1, représentant les sorties des bascules et également utilisées comme entrées pour le calcul des états futurs, sont souvent déclarées comme signaux (SIGNAL) dans l'architecture VHDL pour modéliser des équations de récurrence.
Question
Écrire le programme VHDL correspondant aux équations de récurrence dérivées de ce type de diagramme d'états, ainsi que pour d'autres configurations de diagrammes d'états séquentiels.
Exercice N°2 : Calcul de la Factorielle en VHDL
L'objectif est d'écrire un programme VHDL qui décrit le fonctionnement d'un circuit capable de calculer la factorielle d'un nombre entier. Le nombre d'entrée est compris entre 0 et 255. Il est important de considérer les limites de la représentation binaire du résultat, car la factorielle croît très rapidement.
Approche VHDL
Pour implémenter ce calcul, on peut utiliser une approche itérative avec une boucle (for loop ou while loop selon le style) et des registres pour stocker les valeurs intermédiaires. La gestion des dépassements de capacité (overflow) est une considération importante pour les grands nombres.
Exercice N°3 : Analyse d'une Fonction VHDL
Considérons la fonction VHDL suivante :
function Nomfunc (e : in bit_vector) return bit_vector is
variable s : bit_vector(e'left downto 0);
variable c : bit;
begin
c := e(0);
s(0) := not c;
for i in 1 to e'left loop
s(i) := c xor e(i);
c := c and e(i);
end loop;
return s;
end Nomfunc;Questions d'Analyse
- Insertion du code : Dans quelles parties d'un programme VHDL peut-on insérer une telle fonction ?
Une fonction VHDL peut être déclarée dans la partie déclarative d'une entité (
ENTITY), d'une architecture (ARCHITECTURE), d'un paquetage (PACKAGE), ou d'un processus (PROCESS). - Schéma généré : Représenter le schéma généré par cette fonction si on l'applique à un vecteur de trois éléments binaires (par exemple
e(2 downto 0)).Cette fonction implémente un circuit qui calcule l'incrémentation d'un nombre binaire. Pour
e = (e2 e1 e0), le schéma serait une cascade de portes logiques XOR et AND, où la variablecpropage la retenue. Par exemple, sie = "011"(valeur 3), alorss = "100"(valeur 4). - Opération réalisée : Quelle est l'opération réalisée par cette fonction ?
Cette fonction VHDL implémente un incrémenteur binaire, c'est-à-dire qu'elle ajoute 1 à la valeur du vecteur d'entrée
epour produire le vecteur de sorties. - Utilisation pour un compteur : Utiliser cette fonction pour réaliser un compteur binaire synchrone 16 bits (sur front montant d'horloge).
Un compteur synchrone utilise des bascules D et une logique combinatoire pour calculer la prochaine valeur. Ici, la fonction
Nomfuncpeut être utilisée pour calculer la valeur suivante de 16 bits à chaque front montant d'horloge, à partir de la valeur actuelle du compteur. - Modification du compteur (RAZ synchrone et autorisation de comptage) : Modifier le compteur précédent pour lui adjoindre une commande de remise à zéro (RAZ) synchrone et une commande d'autorisation de comptage (C).
La RAZ synchrone et l'autorisation de comptage seraient implémentées dans le processus séquentiel du compteur. La RAZ mettrait le compteur à zéro sur le front d'horloge si active, et l'autorisation (C) permettrait l'incrémentation uniquement si elle est active, sinon le compteur maintiendrait sa valeur.
- Modification du compteur (RAZ asynchrone) : Même question pour une commande RAZ asynchrone de l'horloge.
Une RAZ asynchrone est généralement appliquée en dehors de la sensibilité de l'horloge principale. Elle peut réinitialiser le compteur immédiatement dès que le signal de RAZ est actif, indépendamment de l'horloge, souvent via une clause
IF (RESET_ASYNC = '1') THEN ...au début du processus séquentiel, avant la détection du front d'horloge.
Exercice N°4 : Boucles et Variables de Boucle
Soit A un bus de données de taille 4 bits (A3, A2, A1, A0). Le but est de réaliser un codage de données S (S3, S2, S1, S0) selon le cahier des charges suivant :
- Pour i = 0 : S0 = A0
- Pour i > 0 : Si = Ai . Ai-1 + /Ai . /Ai-1 (où '.' représente l'opérateur AND, '+' l'opérateur OR, et '/' l'opérateur NOT)
Explication
La règle pour i > 0 peut être réécrite comme Si = (Ai AND Ai-1) OR (NOT Ai AND NOT Ai-1). Ceci est équivalent à NOT (Ai XOR Ai-1), également connu sous le nom d'opérateur XNOR. Il s'agit de détecter si les bits adjacents sont identiques. La mise en œuvre en VHDL impliquerait une boucle sur les bits du bus A, avec une attention particulière pour le cas i = 0.
Exercice N°5 : Notion de Variable en VHDL
Soit A un bus de données de taille 4 bits (A3, A2, A1, A0). Il faut réaliser un codage des données tel que le nombre S en sortie indique, en binaire, le nombre de signaux d'entrée à '1'.
Exemples
- Si A = "1001", alors S = "010" (deux '1')
- Si A = "1100", alors S = "010" (deux '1')
- Si A = "1111", alors S = "100" (quatre '1')
Le résultat S étant un nombre binaire, sa taille doit être suffisante pour représenter le nombre maximum de '1' (ici, 4 '1', donc 3 bits pour S : "100").
Question
Donner une description VHDL de ce registre et réaliser les simulations nécessaires pour vérifier le programme.
Approche VHDL
Pour compter les bits à '1', une boucle peut être utilisée pour parcourir chaque bit du bus d'entrée A. Une variable interne (de type INTEGER ou NATURAL, ou un STD_LOGIC_VECTOR pour la sortie) serait incrémentée chaque fois qu'un bit à '1' est détecté. Enfin, la valeur de cette variable serait convertie en binaire pour la sortie S.
Foire Aux Questions (FAQ)
Qu'est-ce qu'un diagramme d'états en VHDL ?
Un diagramme d'états est une représentation graphique du comportement d'un système séquentiel. Il se compose d'états et de transitions entre ces états, déclenchées par des conditions spécifiques ou des événements d'horloge. En VHDL, il sert de base pour la description de machines à états finis (FSM).
Quelle est la différence entre une remise à zéro synchrone et asynchrone en VHDL ?
Une remise à zéro synchrone (RAZ synchrone) prend effet uniquement sur un front d'horloge actif, après que le signal de RAZ soit devenu actif. Une remise à zéro asynchrone (RAZ asynchrone), en revanche, réinitialise le circuit immédiatement dès que le signal de RAZ est actif, indépendamment de l'état de l'horloge.
Pourquoi utiliser des fonctions en VHDL ?
Les fonctions en VHDL permettent d'encapsuler une logique combinatoire réutilisable. Elles améliorent la modularité, la lisibilité et la maintenance du code en décomposant des opérations complexes en unités plus petites et plus gérables. Elles sont souvent utilisées pour des calculs qui ne nécessitent pas de mémoire d'état.