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 l'instanciation par port map en VHDL : Guide pratique

En VHDL, un module est une unité autonome qui communique avec le monde extérieur à travers son entité. La clause port map d'une instanciation connecte les ports formels de l'entité aux signaux dans le design environnant.

Modules, Entités et Testbench

Quand nous développons pour un FPGA ou ASIC, la logique de design vit dans des modules qui ont des ports d'entrée et de sortie clairement définis. Un module qui n'a pas de ports est un testbench - une enveloppe de simulation qui fournit des stimuli au device under test (DUT) mais n'apparaît jamais sur une puce physique.

Dans les articles précédents, nous avons écrit tout le VHDL dans un seul fichier, ce qui est pratique pour des expériences rapides mais pas adapté pour des designs de production. Séparer le DUT de son testbench améliore la lisibilité, la réutilisabilité, et rend la hiérarchie de simulation claire.

Conventions de nommage courantes

De nombreuses équipes suivent un schéma simple : le fichier de design est MyModule.vhd, tandis que son testbench est MyModuleTb.vhd. L'architecture du DUT est souvent appelée rtl (register-transfer level), et l'architecture du testbench est nommée sim. Cette convention dit instantanément si un fichier est destiné à la synthèse ou à la simulation.

Maîtriser l instanciation par port map en VHDL : Guide pratique

Syntaxe VHDL pour l'instanciation par port map

Définissez l'interface d'un module avec le mot-clé entity :

entity <entity_name> is
  port(
    <entity_signal_name> : in|out|inout <signal_type>;
    ...
  );
end entity;

Instanciez le module dans un autre fichier VHDL avec un port map explicite :

<label> : entity <library_name>.<entity_name>(<architecture_name>)
  port map(
    <entity_signal_name> => <local_signal_name>,
    ...
  );

Le <label> apparaît dans la hiérarchie du simulateur, <library_name> défaut à work, et chaque port formel doit être lié à un signal local.

Exemple pratique : MUX 4-vers-1

Ci-dessous se trouve une paire testbench et DUT complète qui implémente un multiplexeur 4-vers-1 en utilisant des signaux unsigned 8 bits.

Code du testbench

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

entity T15_PortMapTb is
end entity;

architecture sim of T15_PortMapTb is
  signal Sig1 : unsigned(7 downto 0) := x"AA";
  signal Sig2 : unsigned(7 downto 0) := x"BB";
  signal Sig3 : unsigned(7 downto 0) := x"CC";
  signal Sig4 : unsigned(7 downto 0) := x"DD";
  signal Sel : unsigned(1 downto 0) := (others => '0');
  signal Output : unsigned(7 downto 0);
begin
  -- Instancier le MUX avec l'architecture rtl
  i_Mux1 : entity work.T15_Mux(rtl)
    port map(
      Sel => Sel,
      Sig1 => Sig1,
      Sig2 => Sig2,
      Sig3 => Sig3,
      Sig4 => Sig4,
      Output => Output
    );
    
  -- Processus de stimulus
  process is
  begin
    wait for 10 ns;
    Sel <= Sel + 1;
    wait for 10 ns;
    Sel <= Sel + 1;
    wait for 10 ns;
    Sel <= Sel + 1;
    wait for 10 ns;
    Sel <= Sel + 1;
    wait for 10 ns;
    Sel <= "UU";
    wait;
  end process;
end architecture;

Code du module

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

entity T15_Mux is
  port(
    -- Entrées
    Sig1 : in unsigned(7 downto 0);
    Sig2 : in unsigned(7 downto 0);
    Sig3 : in unsigned(7 downto 0);
    Sig4 : in unsigned(7 downto 0);
    Sel : in unsigned(1 downto 0);
    -- Sortie
    Output : out unsigned(7 downto 0)
  );
end entity;

architecture rtl of T15_Mux is
begin
  process(Sel, Sig1, Sig2, Sig3, Sig4) is
  begin
    case Sel is
      when "00" => Output <= Sig1;
      when "01" => Output <= Sig2;
      when "10" => Output <= Sig3;
      when "11" => Output <= Sig4;
      when others => Output <= (others => 'X');
    end case;
  end process;
end architecture;

Analyse de la forme d'onde

L'exécution du testbench dans ModelSim produit une forme d'onde qui correspond au comportement attendu du MUX. L'instantané de forme d'onde ci-dessous confirme que le DUT commute correctement entre les quatre signaux d'entrée alors que le signal Sel change.

Maîtriser l instanciation par port map en VHDL : Guide pratique

Points clés à retenir

Continuez au tutoriel suivant pour des insights plus profonds sur les patterns de design VHDL.

VHDL

  1. Comment le molybdène façonne l'industrie moderne : usages, avantages et dynamiques d'approvisionnement
  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. Générer des nombres aléatoires en VHDL : De l'uniforme à OSVVM
  7. Exploiter les procédures in-process pour un design FSM VHDL plus propre
  8. Maîtriser les fonctions VHDL : Guide pratique pour un design efficace
  9. Maîtriser les techniques de la rectifieuse d'outils : guide pratique