Examen vhdl est VHDL Télécharger pdf

Examen vhdl est VHDL Télécharger pdf

Télécharger PDF

École Supérieure de Technologie - Examen VHDL

Durée : 1h30
Année Universitaire : 2013
Niveau : 2ème année GE

Exercice N°1 (5 pts) : Concepts fondamentaux VHDL

  1. Donnez les syntaxes des instructions du mode concurrent et du mode séquentiel.

    En VHDL, les instructions peuvent s'exécuter de manière concurrente ou séquentielle. Les instructions concurrentes, comme les affectations de signaux (signal <= expression;) ou les instanciations de composants, s'exécutent simultanément. Les instructions séquentielles, quant à elles, s'exécutent les unes après les autres à l'intérieur d'un processus (process (...) begin ... end process;), d'une fonction ou d'une procédure. Des exemples d'instructions séquentielles incluent les affectations de variables (variable := expression;), les structures conditionnelles (if/elsif/else) et les boucles (for/loop, while/loop).

  2. Donnez l'instruction définissant un front montant ou descendant d'un signal.

    Pour détecter un front montant (passage de '0' à '1') sur un signal clk, on utilise : if (clk'event and clk = '1') then ... end if;. Pour un front descendant (passage de '1' à '0') : if (clk'event and clk = '0') then ... end if;. L'attribut 'event vérifie si un événement (changement d'état) s'est produit sur le signal, et la condition clk = '1' ou clk = '0' spécifie le niveau final.

  3. Donnez l'instruction qui permet d'initialiser un bus en s'affranchissant de sa taille.

    Pour initialiser un bus de données (bit_vector ou std_logic_vector) quelle que soit sa taille, on utilise l'agrégat (others => valeur). Par exemple, pour initialiser un bus à '0' : mon_bus <= (others => '0');. Cette syntaxe est particulièrement utile pour rendre le code générique et réutilisable, car elle ne nécessite pas de connaître la largeur exacte du bus à l'avance.

  4. Quelle est l'opération réalisée par la fonction "Nomfunc" ?

    Considérons la fonction VHDL suivante (le préfixe "4 process ((LK) if (clk' event and" a été retiré car il est invalide et ne fait pas partie de la 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;

    Cette fonction réalise une transformation bit à bit de l'entrée e pour produire la sortie s. Elle utilise une variable interne c qui se comporte comme une "retenue" ou un "état" propagé. Initialement, c prend la valeur du bit de poids faible de e (e(0)). Le bit de poids faible de s (s(0)) est l'inverse de c. Pour les bits suivants (i > 0), s(i) est calculé comme le XOR entre l'état actuel de c et e(i), et c est mis à jour comme le AND entre son état précédent et e(i). Il s'agit d'une logique combinatoire qui effectue une forme de cumul ou de détection sérielle basée sur les bits d'entrée et l'état de la retenue.

Exercice N°2 (5 pts) : Codage de données avec boucles

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 : S(0) <= A(0)
  • Pour i>0 : La formule originale S=A;. A.1+/A1. /Ai-1 est illisible et contient des caractères invalides. Une interprétation plausible dans un contexte de traitement bit à bit pourrait être : S(i) <= A(i) XOR A(i-1) ou S(i) <= A(i) AND NOT A(i-1), etc. Sans plus de précision, il est difficile de déterminer l'opération exacte.

Remarque : 'i' est la variable de boucle.

Exercice N°3 (5 pts) : Comptage 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 bits à '1' parmi les signaux d'entrée.

  • Si A = "1001" (deux bits à '1'), alors S = "0010" (représentation binaire de 2)
  • Si A = "1100" (deux bits à '1'), alors S = "0010"
  • Si A = "1111" (quatre bits à '1'), alors S = "0100" (représentation binaire de 4)

Pour un bus d'entrée de 4 bits, le nombre maximum de '1' est 4, ce qui nécessite 3 bits de sortie pour S (les valeurs possibles de S allant de "000" à "100").

Exercice N°4 (5 pts) : Registre à décalage à chargement parallèle synchrone

Soit le registre à décalage à chargement parallèle synchrone représenté par un schéma (non fourni) avec les signaux suivants : D0, D1, D2, D3 (entrées parallèles), IN_SERIE (entrée série), OUT_SERIE (sortie série), Q (sorties des bascules), PR (Preset), CLR (Clear), LOAD (signal de chargement parallèle).

Remarque : Le circuit est une association de bascules D et de multiplexeurs.

Question : Donnez une description VHDL de ce registre. Proposez des scénarios de simulation pour vérifier le programme.

Une description VHDL de ce type de registre implique l'utilisation d'un processus sensible au signal d'horloge. À chaque front d'horloge actif, selon l'état du signal LOAD, le registre soit charge les données parallèles (D0-D3), soit décale les données en série (IN_SERIE). Les signaux PR et CLR sont des entrées de contrôle qui peuvent être synchrones ou asynchrones selon la conception spécifique du registre, permettant respectivement de prérégler ou d'effacer les sorties des bascules.

Questions Fréquentes (FAQ) sur le VHDL

Qu'est-ce que le VHDL ?

VHDL (VHSIC Hardware Description Language) est un langage de description matérielle utilisé pour modéliser, simuler et synthétiser des circuits numériques. Il permet de décrire le comportement et la structure de systèmes électroniques complexes, des simples portes logiques aux processeurs entiers, avant leur implémentation physique sur des FPGA (Field-Programmable Gate Arrays) ou des ASIC (Application-Specific Integrated Circuits).

Quelle est la différence entre le mode concurrent et le mode séquentiel en VHDL ?

En VHDL, le mode concurrent décrit des opérations qui s'exécutent en parallèle, comme les affectations de signaux directes ou les instanciations de composants. Elles sont actives en permanence et répondent aux changements de leurs entrées. Le mode séquentiel, en revanche, décrit des opérations qui s'exécutent les unes après les autres, typiquement à l'intérieur d'un processus. Ces opérations sont souvent déclenchées par un événement (comme un front d'horloge) et sont utilisées pour modéliser des comportements séquentiels comme les machines d'états ou les bascules.

À quoi sert un registre à décalage à chargement parallèle synchrone ?

Un registre à décalage à chargement parallèle synchrone est un composant numérique capable de stocker des données et de les déplacer bit par bit (décalage) ou de charger l'ensemble des données simultanément (chargement parallèle). Il est synchrone car toutes les opérations sont synchronisées par un signal d'horloge. Ces registres sont essentiels pour des applications comme la conversion série-parallèle ou parallèle-série, les opérations arithmétiques sérielles, la mémorisation temporaire de données, ou encore la génération de séquences.

Partagez vos remarques, questions ou propositions d'amélioration ici...

Enregistrer un commentaire (0)
Plus récente Plus ancienne

Publicité 1

Publicité 2