Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> VHDL

Records - VHDL-voorbeeld

De Record-constructie in VHDL kan worden gebruikt om uw code te vereenvoudigen. Records zijn vergelijkbaar met structuren in C . Records worden meestal gebruikt om een ​​nieuw VHDL-type te definiëren. Dit nieuwe type bevat elke groep signalen die de gebruiker wenst. Meestal wordt dit gebruikt om interfaces te vereenvoudigen. Dit is erg handig bij interfaces die een grote lijst met signalen hebben die altijd hetzelfde is. Interfaces naar een off-chip geheugen kunnen bijvoorbeeld groot zijn en in uw ontwerp steeds dezelfde signalen hebben. Records kunnen worden gebruikt om de code te verkleinen en hebben minder signalen in uw entiteit om te onderhouden. De ontwerper hoeft alleen het recordtype in een enkel pakketbestand te definiëren en vervolgens het pakketbestand te gebruiken voor elke entiteit die van dat recordtype gebruikmaakt.

In het onderstaande voorbeeld worden twee recordtypen in een pakketbestand gemaakt (voorbeeld_record_pkg.vhd). Deze typen worden gebruikt in example_record.vhd om een ​​FIFO-interface te vereenvoudigen. Er wordt één signaal van het type t_FROM_FIFO gemaakt voor alle invoer van de FIFO en een apart signaal van het type t_TO_FIFO wordt gemaakt voor alle uitgangen naar de FIFO .

Samenvatting:

  1. Records worden gebruikt om entiteiten en poortkaarten in VHDL te vereenvoudigen.
  2. Records kunnen elementen van verschillende typen bevatten. (std_logic, integer, enz.)
  3. Records zijn vergelijkbaar met structuren in C.
  4. Records die in meerdere bestanden worden gebruikt, moeten in één pakketbestand worden bewaard.
  5. Signalen gedefinieerd als records kunnen worden geïnitialiseerd.
  6. Het is mogelijk om een ​​array van records aan te maken.


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;


Meest populaire Nandland-pagina's

VHDL

  1. Zelfstudie - Inleiding tot VHDL
  2. Voorbeelden van VHDL-conversies
  3. Procedureverklaring - VHDL-voorbeeld
  4. Ondertekend versus niet-ondertekend in VHDL
  5. Variabelen - VHDL-voorbeeld
  6. Analyse-opties
  7. LP-record
  8. Formele verificatie in VHDL met PSL
  9. Een lijst met strings maken in VHDL
  10. Voorbeeld van verklaring debouncer genereren
  11. Simulatie stoppen in een VHDL-testbench