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

Registros:ejemplo de VHDL

La construcción Record en VHDL se puede usar para simplificar su código. Los registros son similares a las estructuras en C . Los registros se utilizan con mayor frecuencia para definir un nuevo tipo de VHDL. Este nuevo tipo contiene cualquier grupo de señales que el usuario desee. La mayoría de las veces, esto se usa para simplificar las interfaces. Esto es muy útil con interfaces que tienen una gran lista de señales que siempre es la misma. Por ejemplo, las interfaces a una memoria fuera del chip pueden ser grandes y tener las mismas señales una y otra vez a lo largo de su diseño. Los registros se pueden usar para reducir el tamaño del código y tener menos señales en su entidad para mantener. El diseñador simplemente necesita definir el tipo de registro en un solo archivo de paquete y luego usar el archivo de paquete para cualquier entidad que haga uso de ese tipo de registro.

El siguiente ejemplo crea dos tipos de registros en un archivo de paquete (example_record_pkg.vhd). Estos tipos se utilizan en example_record.vhd para simplificar una interfaz FIFO. Se crea una señal de tipo t_FROM_FIFO para todas las entradas de FIFO y se crea una señal separada de tipo t_TO_FIFO para todas las salidas a FIFO .

Resumen:

  1. Los registros se utilizan para simplificar entidades y mapas de puertos en VHDL.
  2. Los registros pueden contener elementos de diferentes tipos. (std_logic, entero, etc.)
  3. Los registros son similares a las estructuras en C.
  4. Los registros utilizados en varios archivos deben mantenerse en un solo archivo de paquete.
  5. Las señales definidas como registros se pueden inicializar.
  6. Es posible crear una matriz de registros.


library ieee;
use ieee.std_logic_1164.all;

package example_record_pkg is

  -- Outputs from the FIFO.
  type t_FROM_FIFO is record
    wr_full  : std_logic;                -- FIFO Full Flag
    rd_empty : std_logic;                -- FIFO Empty Flag
    rd_dv    : std_logic;
    rd_data  : std_logic_vector(7 downto 0);
  end record t_FROM_FIFO;  

  -- Inputs to the FIFO.
  type t_TO_FIFO is record
    wr_en    : std_logic;
    wr_data  : std_logic_vector(7 downto 0);
    rd_en    : std_logic;
  end record t_TO_FIFO;

  constant c_FROM_FIFO_INIT : t_FROM_FIFO := (wr_full => '0',
                                              rd_empty => '1',
                                              rd_dv => '0',
                                              rd_data => (others => '0'));

  constant c_TO_FIFO_INIT : t_TO_FIFO := (wr_en => '0',
                                          wr_data => (others => '0'),
                                          rd_en => '0');
  
  
end package example_record_pkg;



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

use work.example_record_pkg.all; -- USING PACKAGE HERE!

entity example_record is
  port (
    i_clk  : in  std_logic;
    i_fifo : in  t_FROM_FIFO;
    o_fifo : out t_TO_FIFO := c_TO_FIFO_INIT  -- intialize output record
    );
end example_record;

architecture behave of example_record is

  signal r_WR_DATA : unsigned(7 downto 0) := (others => '0');
  
begin

  -- Handles writes to the FIFO
  p_FIFO_WR : process (i_clk) is
  begin 
    if rising_edge(i_clk) then
      if i_fifo.wr_full = '0' then
        o_fifo.wr_en   <= '1';
        o_fifo.wr_data <= std_logic_vector(r_WR_DATA + 1);
      end if;
    end if;
  end process p_FIFO_WR;
  
  -- Handles reads from the FIFO
  p_FIFO_RD : process (i_clk) is
  begin 
    if rising_edge(i_clk) then
      if i_fifo.rd_empty = '0' then
        o_fifo.rd_en <= '1';
      end if;
    end if;
  end process p_FIFO_RD;
  
end behave;


Páginas de Nandland más populares

VHDL

  1. Tutorial - Introducción a VHDL
  2. Ejemplos de conversiones VHDL
  3. Declaración de procedimiento:ejemplo de VHDL
  4. Firmado vs. Sin firmar en VHDL
  5. Variables - Ejemplo de VHDL
  6. Opciones de análisis
  7. Registro LP
  8. Verificación formal en VHDL usando PSL
  9. Cómo crear una lista de cadenas en VHDL
  10. Generar ejemplo de inhibidor de extractos
  11. Cómo detener la simulación en un banco de pruebas VHDL