Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> VHDL

Dominando la instanciación con port map en VHDL: Guía práctica

En VHDL, un módulo es una unidad autocontenida que se comunica con el mundo exterior a través de su entidad. La cláusula port map de una instanciación conecta los puertos formales de la entidad a señales en el diseño circundante.

Módulos, Entidades y Testbenches

Cuando desarrollamos para un FPGA o ASIC, la lógica de diseño vive en módulos que tienen puertos de entrada y salida claramente definidos. Un módulo que no tiene puertos es un testbench —un envoltorio de simulación que alimenta estímulos al device under test (DUT) pero nunca aparece en un chip físico.

En entradas anteriores escribimos todo el VHDL en un solo archivo, lo cual es conveniente para experimentos rápidos pero no adecuado para diseños de producción. Separar el DUT de su testbench mejora la legibilidad, reutilizabilidad y hace clara la jerarquía de simulación.

Convenciones de nomenclatura comunes

Muchos equipos siguen un esquema simple: el archivo de diseño es MyModule.vhd, mientras que su testbench es MyModuleTb.vhd. La arquitectura del DUT a menudo se llama rtl (register-transfer level), y la arquitectura del testbench se nombra sim. Esta convención le dice instantáneamente si un archivo está destinado a síntesis o simulación.

Dominando la instanciación con port map en VHDL: Guía práctica

Sintaxis VHDL para instanciación con port map

Defina la interfaz de un módulo con la palabra clave entity:

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

Instancie el módulo en otro archivo VHDL con un port map explícito:

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

El <label> aparece en la jerarquía del simulador, <library_name> por defecto es work, y cada puerto formal debe vincularse a una señal local.

Ejemplo práctico: MUX 4-a-1

A continuación se muestra un par completo de testbench y DUT que implementa un multiplexor 4-a-1 usando señales unsigned de 8 bits.

Código del 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
  -- Instanciar el MUX con arquitectura rtl
  i_Mux1 : entity work.T15_Mux(rtl)
    port map(
      Sel   => Sel,
      Sig1  => Sig1,
      Sig2  => Sig2,
      Sig3  => Sig3,
      Sig4  => Sig4,
      Output=> Output
    );
  -- Proceso de estímulo
  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;

Código del Módulo

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

entity T15_Mux is
  port(
    -- Entradas
    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);
    -- Salida
    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;

Análisis de forma de onda

Ejecutar el testbench en ModelSim produce una forma de onda que coincide con el comportamiento esperado del MUX. La captura de forma de onda siguiente confirma que el DUT cambia correctamente entre las cuatro señales de entrada a medida que la señal Sel cambia.

Dominando la instanciación con port map en VHDL: Guía práctica

Conclusiones clave

Continúe al siguiente tutorial para obtener insights más profundos sobre patrones de diseño VHDL.

VHDL

  1. Dominando las Técnicas de Afiladora de Herramientas: Guía Práctica
  2. Cómo el molibdeno moldea la industria moderna: usos, beneficios y dinámica de suministro
  3. Creación de listas de cadenas en VHDL: Buenas prácticas y ejemplo
  4. Creación de un testbench dirigido por Tcl para un módulo VHDL de cerradura por código
  5. Finalizar elegantemente una simulación de testbench VHDL
  6. Implementación de un controlador PWM en VHDL: Diseño, simulación y demo en FPGA
  7. Generación de números aleatorios en VHDL: De uniforme a OSVVM
  8. Aprovechando procedimientos en-proceso para diseños FSM más limpios en VHDL
  9. Uso de funciones impuras en VHDL: Mejorando legibilidad y mantenibilidad de FSM
  10. Dominando funciones VHDL: Guía práctica para diseño eficiente
  11. Diseño de máquina de estados finitos en VHDL: Ejemplo práctico de semáforo