Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> VHDL

Maîtriser les assignations concurrentes en VHDL : Guide pratique

Une assignation concurrente en VHDL est une affectation de signal qui se trouve directement dans une architecture, en dehors de tout bloc process. Elle est aussi appelée affectation concurrente ou processus concurrent.

Quand vous écrivez une assignation concurrente, vous créez effectivement un processus qui est automatiquement sensible à chaque signal qui apparaît du côté droit de l'affectation. En d'autres termes, une affectation concurrente est du sucre syntaxique pour un processus avec une liste de sensibilité complète.

Ce raccourci est particulièrement pratique quand vous voulez implémenter une logique combinatoire simple qui pilote un signal unique. Au lieu d'écrire un construct process complet avec une liste de sensibilité, vous pouvez affecter directement le signal cible dans le corps de l'architecture.

Ce tutoriel fait partie de la série Tutoriels VHDL de Base.

Quand il est utilisé correctement, l'intention du code reste limpide - pas besoin d'encombrer le design avec un processus pour chaque bit que vous voulez basculer.

Exercice

Dans cette vidéo, nous apprenons comment créer une assignation concurrente :

Le code final que nous avons créé dans ce tutoriel :

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity T13_ConcurrentProcsTb is
end entity;

architecture sim of T13_ConcurrentProcsTb is
  signal Uns : unsigned(5 downto 0) := (others => '0');
  signal Mul1 : unsigned(7 downto 0);
  signal Mul2 : unsigned(7 downto 0);
  signal Mul3 : unsigned(7 downto 0);
begin
  process is
  begin
    Uns <= Uns + 1;
    wait for 10 ns;
  end process;
  
  -- Processus multipliant Uns par 4
  process is
  begin
    Mul1 <= Uns & "00";
    wait on Uns;
  end process;
  
  -- Processus équivalent utilisant une liste de sensibilité
  process(Uns) is
  begin
    Mul2 <= Uns & "00";
  end process;
  
  -- Processus équivalent utilisant une assignation concurrente
  Mul3 <= Uns & "00";
end architecture;

La fenêtre de forme d'onde dans ModelSim après avoir appuyé sur run, et zoomé sur la timeline :

Maîtriser les assignations concurrentes en VHDL : Guide pratique

Nous pouvons voir sur la forme d'onde que Mul1, Mul2 et Mul3 se comportent exactement de la même façon. Cela confirme qu'une assignation concurrente et les deux processus que nous avons écrits sont pleinement équivalents.

Une assignation concurrente opère juste comme un processus : tous les signaux qui apparaissent du côté droit du <= sont implicitement ajoutés à sa liste de sensibilité. Par conséquent, le signal à gauche est mis à jour chaque fois que l'un de ces signaux évalués change.

Dans cet exemple, nous avons multiplié le signal Uns par 4 en utilisant un décalage de bits vers la gauche. Tous nos signaux sont du type unsigned, donc le compilateur les traite comme des valeurs numériques. Ajouter deux bits zéro à droite d'un nombre binaire équivaut à le multiplier par 4.

Maîtriser les assignations concurrentes en VHDL : Guide pratique

À retenir

Passez au tutoriel suivant »

VHDL

  1. Exemple de procédure VHDL : incrémenter un std_logic_vector
  2. Créer des listes de chaînes en VHDL : Bonnes pratiques et exemple
  3. Créer un banc de test piloté par Tcl pour un module verrou code VHDL
  4. Terminer proprement une simulation de banc de test VHDL
  5. Implémenter un contrôleur PWM en VHDL : Conception, simulation et démo FPGA
  6. Conception d'un tampon circulaire VHDL robuste en mémoire bloc
  7. Comment construire un testbench auto-vérifiant en VHDL - Guide pratique
  8. Implémentation d'une liste chainée dynamique en VHDL avec types protégés et pointeurs d'accès
  9. Exploiter les procédures in-process pour un design FSM VHDL plus propre