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

Enregistrements - Exemple VHDL

La construction Record en VHDL peut être utilisée pour simplifier votre code. Les enregistrements sont similaires aux structures en C . Les enregistrements sont le plus souvent utilisés pour définir un nouveau type VHDL. Ce nouveau type contient tout groupe de signaux souhaité par l'utilisateur. Le plus souvent, cela est utilisé pour simplifier les interfaces. C'est très pratique avec les interfaces qui ont une grande liste de signaux qui est toujours la même. Par exemple, les interfaces vers une mémoire hors puce peuvent être volumineuses et avoir les mêmes signaux à plusieurs reprises tout au long de votre conception. Les enregistrements peuvent être utilisés pour réduire la taille du code et avoir moins de signaux à maintenir dans votre entité. Le concepteur doit simplement définir le type d'enregistrement dans un seul fichier de package, puis utiliser le fichier de package pour toute entité qui utilise ce type d'enregistrement.

L'exemple ci-dessous crée deux types d'enregistrement dans un fichier de package (example_record_pkg.vhd). Ces types sont utilisés dans example_record.vhd pour simplifier une interface FIFO. Un signal de type t_FROM_FIFO est créé pour toutes les entrées du FIFO et un signal séparé de type t_TO_FIFO est créé pour toutes les sorties vers le FIFO .

Résumé :

  1. Les enregistrements sont utilisés pour simplifier les entités et les mappages de ports en VHDL.
  2. Les enregistrements peuvent contenir des éléments de différents types. (std_logic, entier, etc.)
  3. Les enregistrements sont similaires aux structures en C.
  4. Les enregistrements utilisés dans plusieurs fichiers doivent être conservés dans un seul fichier de package.
  5. Les signaux définis comme enregistrements peuvent être initialisés.
  6. Il est possible de créer un tableau d'enregistrements.


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;


Pages Nandland les plus populaires

VHDL

  1. Tutoriel - Introduction au VHDL
  2. Exemples de conversions VHDL
  3. Instruction de procédure - Exemple VHDL
  4. Signé ou non signé en VHDL
  5. Variables - Exemple VHDL
  6. Options d'analyse
  7. Enregistrement LP
  8. Vérification formelle en VHDL avec PSL
  9. Comment créer une liste de chaînes en VHDL