Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> VHDL

Записи — пример VHDL

Конструкцию Record в VHDL можно использовать для упрощения кода. Записи похожи на структуры в C . Записи чаще всего используются для определения нового типа VHDL. Этот новый тип содержит любую группу сигналов, которую пожелает пользователь. Чаще всего это используется для упрощения интерфейсов. Это очень удобно для интерфейсов с большим списком всегда одинаковых сигналов. Например, интерфейсы к внешней памяти могут быть большими и иметь одни и те же сигналы снова и снова на протяжении всего проекта. Записи можно использовать для уменьшения размера кода и уменьшения количества сигналов в вашей сущности, которые нужно поддерживать. Разработчику просто нужно определить тип записи в одном файле пакета, а затем использовать файл пакета для любого объекта, использующего этот тип записи.

В приведенном ниже примере создается два типа записей в файле пакета (example_record_pkg.vhd). Эти типы используются в example_record.vhd для упрощения интерфейса FIFO. Один сигнал типа t_FROM_FIFO создается для всех входов из FIFO. и создается отдельный сигнал типа t_TO_FIFO для всех выходов в FIFO .

Резюме:

  1. Записи используются для упрощения сущностей и карт портов в VHDL.
  2. Записи могут содержать элементы разных типов. (std_logic, целое число и т. д.)
  3. Записи похожи на структуры в C.
  4. Записи, используемые в нескольких файлах, должны храниться в одном файле пакета.
  5. Сигналы, определенные как записи, можно инициализировать.
  6. Можно создать массив записей.


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;


Самые популярные страницы Nandland

VHDL

  1. Учебное пособие — Введение в VHDL
  2. Примеры преобразования VHDL
  3. Оператор процедуры — пример VHDL
  4. Подписанный и неподписанный в VHDL
  5. Переменные — пример VHDL
  6. Параметры анализа
  7. LP-запись
  8. Формальная проверка в VHDL с использованием PSL
  9. Как создать список строк в VHDL
  10. Пример создания дебаунсера операторов