Td n°1 vhdl génie electrique 2a eii langage de description V
Télécharger PDFUniversité Sidi Mohamed Ben Abdellah
École Supérieure de Technologie - Fès
Filière : Génie Électrique
TD N°1 : Langage de Description VHDL - Partie N°1
Exercice N°1 : Modélisation des portes logiques fondamentales
Écrire un programme VHDL modélisant les portes logiques suivantes : ET, OU, Inverseur, Non ET, Non OU, XOR, et Non XOR.
Exercice N°2 : Description d'un demi-additionneur avec différentes architectures
Donnez deux programmes VHDL décrivant le fonctionnement d'un demi-additionneur. Chaque programme doit utiliser une architecture différente : l'une dite comportementale et l'autre structurelle.
Exercice N°3 : Analyse de circuit logique
Donnez un programme VHDL modélisant le circuit donné.
Proposez une deuxième architecture pour ce circuit.
Exercice N°4 : Modélisation d'un multiplexeur
Donnez un programme VHDL modélisant le fonctionnement du multiplexeur illustré.
Exercice N°5 : Circuit avec signal interne
Donnez un programme VHDL modélisant le circuit en question.
Proposez une deuxième architecture pour ce circuit.
Note : Le signal 'x' n'est ni une entrée ni une sortie, mais il a une réalité physique. Il est utilisé pour alléger l'écriture de la sortie S2.
Exercice N°6 : Décodeur 3 vers 8 à sorties actives à l'état bas
Considérons le décodeur 3 vers 8 à sorties actives à l'état bas (0) et à entrées de validation. Le fonctionnement de ce décodeur est résumé dans la table de vérité ci-dessous.
Donnez un programme VHDL décrivant ce circuit.
| G1 | G2 | B2 | B1 | B0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | X | X | X | X | H | H | H | H | H | H | H | H |
| 1 | 0 | X | X | X | H | H | H | H | H | H | H | H |
| 1 | 1 | X | X | X | H | H | H | H | H | H | H | H |
| 1 | 1 | 0 | 0 | 0 | H | H | H | H | H | H | H | L |
| 1 | 1 | 0 | 0 | 1 | H | H | H | H | H | H | L | H |
| 1 | 1 | 0 | 1 | 0 | H | H | H | H | H | L | H | H |
| 1 | 1 | 0 | 1 | 1 | H | H | H | H | L | H | H | H |
| 1 | 1 | 1 | 0 | 0 | H | H | H | L | H | H | H | H |
| 1 | 1 | 1 | 0 | 1 | H | H | L | H | H | H | H | H |
| 1 | 1 | 1 | 1 | 0 | H | L | H | H | H | H | H | H |
| 1 | 1 | 1 | 1 | 1 | L | H | H | H | H | H | H | H |
Exercice N°7 : Multiplexeur avec différentes instructions VHDL
Donnez trois programmes VHDL modélisant le fonctionnement du multiplexeur présenté, en utilisant les instructions suivantes :
with...selectif...elsecase...is
Exercice N°8 : Multiplexeur 4:1 avec entrée de validation
Donnez un programme VHDL modélisant le fonctionnement d'un multiplexeur 4:1 avec une entrée de validation (val).
Exercice N°9 : Comparateur numérique 4 bits
Donnez un programme VHDL modélisant le fonctionnement d'un comparateur numérique qui gère deux informations A et B, chacune codée sur 4 bits, et délivrant en sortie trois signaux : E (égalité), S (supériorité) et I (infériorité).
Exercice N°10 : Analyse de chronogrammes et code VHDL
Donnez les chronogrammes des différents signaux mis en jeu dans les programmes VHDL suivants :
Programme VHDL combil :
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY combil IS
PORT (
a: IN STD_LOGIC_VECTOR(3 DOWNTO 0); -- bus 4 fils
b: IN STD_LOGIC_VECTOR(3 DOWNTO 0); -- bus 4 fils
S: OUT STD_LOGIC_VECTOR(11 DOWNTO 0); -- bus 12 fils
T: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) -- bus 8 fils
);
END combil;
ARCHITECTURE archi OF combil IS
ALIAS op1: STD_LOGIC_VECTOR (3 DOWNTO 0) IS S(3 DOWNTO 0);
ALIAS op2: STD_LOGIC_VECTOR (3 DOWNTO 0) IS S(7 DOWNTO 4);
BEGIN
op1 <= a AND b;
op2 <= a OR "1010";
T <= a & b; -- concaténation
S(8) <= '1' WHEN a > b ELSE '0';
S(9) <= '1' WHEN a = "0000" ELSE '0';
S(10) <= '1' WHEN a = "0011" ELSE '0';
S(11) <= '1' WHEN a <= "1001" ELSE '0';
END archi;
Programme VHDL combi2 :
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY combi2 IS
PORT(
a: IN INTEGER RANGE 0 TO 15; -- bus 4 fils
b: IN INTEGER RANGE 0 TO 15; -- bus 4 fils
c: IN INTEGER RANGE -8 TO 7; -- bus 4 fils
U: OUT INTEGER RANGE 0 TO 11; -- bus 4 fils
Y: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); -- bus 3 fils
T: OUT INTEGER RANGE 0 TO 31 -- bus 5 fils
);
END combi2;
ARCHITECTURE archi OF combi2 IS
BEGIN
U <= a - 4;
T <= a + b;
Y(2) <= '1' WHEN a <= 12 ELSE '0'; -- 12 est un nombre exprimé en base 10
Y(1) <= '1' WHEN a > b ELSE '0';
Y(0) <= '1' WHEN TRUE ELSE '0'; -- Correction de 'WHEN 1' à 'WHEN TRUE' pour validité VHDL
END archi;
TD/TP : Langage de Description VHDL - Partie N°2
Exercice N°1 : Diagrammes d'évolutions
Les montages séquentiels simples sont en général représentés par un diagramme d'évolution. Il s'agit d'un ensemble d'états (cercles) reliés entre eux par des flèches (transitions).
Remarque : le dernier diagramme d'évolution avec un état isolé est à éviter.
Les diagrammes d'évolutions peuvent être aussi variés que ceux présentés ci-dessus. Ils peuvent avoir un ou plusieurs cycles. La suite des états n'est pas forcément dans l'ordre naturel (du comptage). Le nombre d'états N est relié au nombre n de bascules D : N = 2n.
Par exemple, pour le premier diagramme d'évolution donné, on trouve :
Tableau État présent/État futur
| État présent | État futur | ||
|---|---|---|---|
| q1 | q0 | Q1 | Q0 |
| 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 0 |
On peut en déduire des tableaux de Karnaugh et donc des équations simplifiées. Ici, on obtient :
Q1 = q1 AND q0
Q0 = q0
Notez que q0 et q1 sont déclarées en mode INOUT, ce qui est obligatoire pour les équations de récurrence.
Question : Écrire le programme VHDL correspondant à chacune des équations de récurrence dérivées des différents diagrammes.
Exercice N°2 : Calcul de la factorielle d'un nombre entier
Écrire un programme VHDL qui décrit le fonctionnement d'un circuit calculant la factorielle d'un nombre entier entre 0 et 255.
Exercice N°3 : Analyse et application d'une fonction VHDL
On considère le programme VHDL ci-dessous qui décrit une fonction :
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;
Dans quelles parties d'un programme VHDL peut-on insérer un tel code ?
Représenter le schéma généré par cette fonction si on l'applique à un vecteur de trois éléments binaires.
Quelle est l'opération réalisée par cette fonction ?
Utiliser cette fonction pour réaliser un compteur binaire synchrone 16 bits (activé sur front montant d'horloge).
Modifier le compteur précédent pour lui adjoindre une commande de réinitialisation (RAZ) synchrone et une commande d'autorisation de comptage (C).
Même question pour une commande RAZ asynchrone, indépendante de l'horloge.
Exercice N°4 : Codage de données avec boucles et variables
Soit A un bus de données de taille 4 bits. Nous voulons faire un codage de données selon le cahier des charges suivant :
Pour i=0 : S0 = A0
Pour i>0 : Si = Ai AND Ai-1 OR (NOT Ai) AND (NOT Ai-1)
Note : i est la variable d'itération de la boucle.
Exercice N°5 : Comptage du nombre de bits à '1'
Soit A un bus de données de taille 4 bits. Nous voulons faire un autre codage de données tel que le nombre S en sortie indique, en binaire, le nombre de signaux d'entrée à '1'.
Par exemple :
Si A = "1001", alors S = "010"
Si A = "1100", alors S = "010"
Si A = "1111", alors S = "100"
Donnez une description VHDL de ce registre. Réalisez des simulations pour vérifier le programme.
Exercice N°6 : Registre à décalage à droite
Considérons le registre à décalage à droite représenté par le schéma donné.
Donnez une description VHDL de ce registre. Réalisez des simulations pour vérifier le programme.
Foire aux Questions (FAQ) sur VHDL
Qu'est-ce que VHDL et à quoi sert-il ?
VHDL (VHSIC Hardware Description Language) est un langage de description matérielle utilisé pour modéliser des systèmes électroniques numériques. Il permet de décrire le comportement d'un circuit, sa structure et ses interconnexions, avant sa fabrication physique. Il est couramment employé pour la conception et la vérification de circuits intégrés spécifiques à une application (ASIC) et de composants logiques programmables (FPGA).
Quelles sont les différentes architectures VHDL pour décrire un circuit ?
En VHDL, un circuit peut être décrit de plusieurs manières principales :
- Architecture comportementale : Elle décrit le fonctionnement du circuit en termes d'algorithme, sans spécifier explicitement la structure physique. On utilise des instructions comme
if-else,caseou des processus. - Architecture structurelle : Elle décrit le circuit comme une interconnexion de composants plus petits (portes logiques, blocs fonctionnels prédéfinis). C'est une approche "bottom-up".
- Architecture de flux de données : Elle décrit les relations entre les entrées et les sorties par des équations logiques ou des assignations concurrentes de signaux.
Quelle est la différence fondamentale entre un signal et une variable en VHDL ?
Les signaux sont des éléments de communication entre les composants d'un circuit ou entre les entités VHDL. Ils représentent des fils ou des liaisons physiques et sont mis à jour après un délai de propagation (même minime). Leurs valeurs sont visibles et stables à un instant donné dans l'architecture. Les variables, quant à elles, sont utilisées au sein de processus, de fonctions ou de procédures pour stocker des valeurs temporaires. Elles sont mises à jour instantanément (délai de simulation nul) et ne modélisent pas directement de connexion physique. Elles sont locales à leur bloc de déclaration et ne sont pas visibles de l'extérieur.