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

Пример процедуры VHDL: инкремент std_logic_vector

Что такое процедура VHDL?

Процедуры принадлежат к семейству подпрограмм в VHDL. Они инкапсулируют повторно используемую логику, уменьшая дублирование кода и улучшая поддерживаемость. Определив процедуру один раз, вы можете вызывать её из нескольких процессов или архитектур, обеспечивая согласованное поведение.

Пример: инкремент std_logic_vector

Следующий пример демонстрирует процедуру, которая принимает 8-битный std_logic_vector, добавляет единицу и возвращает результат. Процедура также включает 1-нс ожидание для иллюстрации управления временем в тестбенче.

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

entity example_procedure_simple is
end example_procedure_simple;

architecture behave of ex_procedure_simple is

 signal r_TEST : std_logic_vector(7 downto 0) := X"42";

 -- Purpose: Increments a std_logic_vector by 1
 procedure p_INCREMENT_SLV (
 signal r_IN : in std_logic_vector(7 downto 0);
 signal r_OUT : out std_logic_vector(7 downto 0)
 ) is
 begin
 r_OUT <= std_logic_vector(unsigned(r_IN) + 1);
 wait for 1 ns; -- Wait is OK here.
 end p_INCREMENT_SLV;


begin

 process is
 begin
 wait for 10 ns;
 p_INCREMENT_SLV(r_TEST, r_TEST);
 wait for 10 ns;
 p_INCREMENT_SLV(r_TEST, r_TEST);
 wait for 10 ns;
 p_INCREMENT_SLV(r_TEST, r_TEST);
 wait;
 end process; 

end behave;

Зачем включать оператор Wait?

Операторы wait допустимы внутри процедуры, если вызывающий процесс не имеет списка чувствительности. Эта особенность особенно полезна в тестбенчах, где может потребоваться ввести детерминированные задержки без загромождения основного процесса.

Ключевые выводы

VHDL

  1. Введение в VHDL: создание вашего первого И-шлюза
  2. Полное руководство по преобразованию типов в VHDL с Numeric_Std и Std_Logic_Arith
  3. Использование записей (Records) в VHDL для чистых, повторно используемых интерфейсов FIFO
  4. Освоение знаковых и беззнаковых типов в VHDL: практические инсайты
  5. Освоение оператора switch в C#: синтаксис, примеры и лучшие практики
  6. Оператор break в C#: как и когда использовать
  7. Оператор continue в C#: как эффективно пропускать итерации циклов
  8. Создание списков строк в VHDL: лучшие практики и пример
  9. Оператор switch-case в C++: синтаксис, применение и практические примеры
  10. Цифровое написание процедур: простое, эффективное и надежное