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

Примеры преобразования VHDL

Использование файлов пакетов Numeric_Std и Std_Logic_Arith

Ниже приведены наиболее распространенные преобразования, используемые в VHDL. Страница разбита на две части. В первой половине страницы показаны преобразования с использованием файла пакета Numeric_Std. Во второй половине страницы показаны преобразования с использованием файла пакета Std_Logic_Arith. Рекомендуется использовать пакет Numeric_Std, так как вам не следует использовать Std_Logic_Arith. Поскольку многие люди по-прежнему настаивают на его использовании, ниже показаны оба примера.

Обратите внимание, что во многих приведенных ниже примерах используется параметр 'length. VHDL-атрибут. Этот атрибут делает ваш код более переносимым и универсальным, поэтому его следует использовать.

Пример преобразования с использованием числового стандарта

Пример преобразования с использованием Std_Logic_Arith

Преобразование из целого числа в знаковое с использованием Numeric_Std

В приведенном ниже примере используется преобразование to_signed, для которого требуются два входных параметра. Первое — сигнал, который вы хотите преобразовать, второе — длина результирующего вектора.

signal input_3  : integer;
signal output_3 : signed(3 downto 0);
  
output_3 <= to_signed(input_3, output_3'length);

Преобразование из Integer в Std_Logic_Vector с помощью Numeric_Std

Сначала вам нужно подумать о диапазоне значений, хранящихся в вашем целом числе. Может ли ваше целое число быть положительным и отрицательный? Если это так, вам нужно будет использовать to_signed() преобразование. Если ваше целое число только положительное, вам нужно будет использовать to_unsigned() конверсия.

Обе эти функции преобразования требуют двух входных параметров. Первое — сигнал, который вы хотите преобразовать, второе — длина результирующего вектора.

signal input_1   : integer;
signal output_1a : std_logic_vector(3 downto 0);
signal output_1b : std_logic_vector(3 downto 0);
  
-- This line demonstrates how to convert positive integers
output_1a <= std_logic_vector(to_unsigned(input_1, output_1a'length));

-- This line demonstrates how to convert positive or negative integers
output_1b <= std_logic_vector(to_signed(input_1, output_1b'length));

Преобразование из целого числа в число без знака с помощью Numeric_Std

В приведенном ниже примере используется преобразование to_unsigned, для которого требуются два входных параметра. Первое — сигнал, который вы хотите преобразовать, второе — длина результирующего вектора.

signal input_2  : integer;
signal output_2 : unsigned(3 downto 0);
  
output_2 <= to_unsigned(input_2, output_2'length);

Преобразование из Std_Logic_Vector в Integer с помощью Numeric_Std

Сначала вам нужно подумать о данных, которые представлены вашим std_logic_vector. Это подписанные данные или это неподписанные данные? Подписанные данные означают, что ваш std_logic_vector может быть положительным или отрицательное число. Неподписанные данные означают, что ваш std_logic_vector только положительное число. В приведенном ниже примере используется unsigned() typecast, но если ваши данные могут быть отрицательными, вам нужно использовать signed() типография. Как только вы присвоите входному std_logic_vector значение без знака или знака, вы можете преобразовать его в целое число, как показано ниже:

signal input_4   : std_logic_vector(3 downto 0);
signal output_4a : integer;
signal output_4b : integer;
  
-- This line demonstrates the unsigned case
output_4a <= to_integer(unsigned(input_4));

-- This line demonstrates the signed case
output_4b <= to_integer(signed(input_4));

Преобразование из Std_Logic_Vector в Signed с использованием Numeric_Std

Это простое преобразование, все, что вам нужно сделать, это преобразовать std_logic_vector со знаком, как показано ниже:

signal input_6  : std_logic_vector(3 downto 0);
signal output_6 : signed(3 downto 0);

output_6 <= signed(input_6);

Преобразование из Std_Logic_Vector в Unsigned с помощью Numeric_Std

Это простое преобразование, все, что вам нужно сделать, это привести std_logic_vector к беззнаковому, как показано ниже:

signal input_5  : std_logic_vector(3 downto 0);
signal output_5 : unsigned(3 downto 0);
  
output_5 <= unsigned(input_5);

Преобразование из Signed в Integer с помощью Numeric_Std

Это простое преобразование, все, что вам нужно сделать, это использовать вызов функции to_integer из numeric_std, как показано ниже:

  
signal input_10  : signed(3 downto 0);
signal output_10 : integer;

output_10 <= to_integer(input_10);

Преобразование из Signed в Std_Logic_Vector с использованием Numeric_Std

Это простое преобразование, все, что вам нужно сделать, это использовать преобразование std_logic_vector, как показано ниже:

signal input_11  : signed(3 downto 0);
signal output_11 : std_logic_vector(3 downto 0);

output_11 <= std_logic_vector(input_11);

Преобразование из подписанного в беззнаковое с помощью Numeric_Std

Это простое преобразование, все, что вам нужно сделать, это использовать беззнаковое приведение, как показано ниже:

signal input_12  : signed(3 downto 0);
signal output_12 : unsigned(3 downto 0);
  
output_12 <= unsigned(input_12);

Преобразование из беззнакового в целое с помощью Numeric_Std

Это простое преобразование, все, что вам нужно сделать, это использовать вызов функции to_integer из numeric_std, как показано ниже:

signal input_7  : unsigned(3 downto 0);
signal output_7 : integer;

output_7 <= to_integer(input_7);

Преобразование из неподписанного в подписанное с помощью Numeric_Std

Это простое преобразование, все, что вам нужно сделать, это использовать подписанное приведение, как показано ниже:

signal input_9  : unsigned(3 downto 0);
signal output_9 : signed(3 downto 0);

output_9 <= signed(input_9);

Преобразование из Unsigned в Std_Logic_Vector с использованием Numeric_Std

Это простое преобразование, все, что вам нужно сделать, это использовать преобразование std_logic_vector, как показано ниже:

  
signal input_8  : unsigned(3 downto 0);
signal output_8 : std_logic_vector(3 downto 0);

output_8 <= std_logic_vector(input_8);

Преобразование из целого числа в знаковое с помощью Std_Logic_Arith

В приведенном ниже примере используется преобразование conv_signed, для которого требуются два входных параметра. Первое — сигнал, который вы хотите преобразовать, второе — длина результирующего вектора.

signal input_3  : integer;
signal output_3 : signed(3 downto 0);
  
output_3 <= conv_signed(input_3, output_3'length);

Преобразование из Integer в Std_Logic_Vector с использованием Std_Logic_Arith

В приведенном ниже примере используется преобразование conv_std_logic_vector, для которого требуются два входных параметра. Первое — сигнал, который вы хотите преобразовать, второе — длина результирующего вектора.

Здесь следует отметить, что если вы введете отрицательное число в это преобразование, то ваш выходной std_logic_vector будет представлен в нотации с дополнением до 2.

signal input_1  : integer;
signal output_1 : std_logic_vector(3 downto 0);

output_1 <= conv_std_logic_vector(input_1, output_1'length);

Преобразование из целого числа в беззнаковое с помощью Std_Logic_Arith

В приведенном ниже примере используется преобразование conv_unsigned, для которого требуются два входных параметра. Первое — сигнал, который вы хотите преобразовать, второе — длина результирующего вектора.

signal input_2  : integer;
signal output_2 : unsigned(3 downto 0);
  
output_2 <= conv_unsigned(input_2, output_2'length);

Преобразование из Std_Logic_Vector в целое число с использованием Std_Logic_Arith

Сначала вам нужно подумать о данных, которые представлены вашим std_logic_vector. Это подписанные данные или это неподписанные данные? Подписанные данные означают, что ваш std_logic_vector может быть положительным или отрицательное число. Неподписанные данные означают, что ваш std_logic_vector только положительное число. В приведенном ниже примере используется unsigned() typecast, но если ваши данные могут быть отрицательными, вам нужно использовать signed() типография. Как только ваш входной std_logic_vector будет беззнаковым или подписанным, вы можете преобразовать его в целое число, как показано ниже:

signal input_4   : std_logic_vector(3 downto 0);
signal output_4a : integer;
signal output_4b : integer;
  
-- This line demonstrates the unsigned case
output_4a <= conv_integer(unsigned(input_4));

-- This line demonstrates the signed case
output_4b <= conv_integer(signed(input_4));

Преобразование из Std_Logic_Vector в Signed с использованием Std_Logic_Arith

Это простое преобразование, все, что вам нужно сделать, это преобразовать std_logic_vector со знаком, как показано ниже:

signal input_6  : std_logic_vector(3 downto 0);
signal output_6 : signed(3 downto 0);

output_6 <= signed(input_6);

Преобразование из Std_Logic_Vector в Unsigned с помощью Std_Logic_Arith

Это простое преобразование, все, что вам нужно сделать, это привести std_logic_vector к беззнаковому, как показано ниже:

signal input_5  : std_logic_vector(3 downto 0);
signal output_5 : unsigned(3 downto 0);
  
output_5 <= unsigned(input_5);

Преобразование из Signed в Integer с помощью Std_Logic_Arith

Это простое преобразование, все, что вам нужно сделать, это использовать вызов функции conv_integer из std_logic_arith, как показано ниже:

  
signal input_10  : signed(3 downto 0);
signal output_10 : integer;

output_10 <= conv_integer(input_10);

Преобразовать Signed в Std_Logic_Vector с помощью Std_Logic_Arith

Это простое преобразование, все, что вам нужно сделать, это использовать преобразование std_logic_vector, как показано ниже:

signal input_11  : signed(3 downto 0);
signal output_11 : std_logic_vector(3 downto 0);

output_11 <= std_logic_vector(input_11);

Преобразование из подписанного в беззнаковое с помощью Std_Logic_Arith

Это простое преобразование, все, что вам нужно сделать, это использовать беззнаковое приведение, как показано ниже:

signal input_12  : signed(3 downto 0);
signal output_12 : unsigned(3 downto 0);
  
output_12 <= unsigned(input_12);

Преобразование из числа без знака в целое с помощью Std_Logic_Arith

Это простое преобразование, все, что вам нужно сделать, это использовать вызов функции conv_integer из std_logic_arith, как показано ниже:

signal input_7  : unsigned(3 downto 0);
signal output_7 : integer;

output_7 <= conv_integer(input_7);

Преобразование из неподписанного в подписанное с помощью Std_Logic_Arith

Это простое преобразование, все, что вам нужно сделать, это использовать подписанное приведение, как показано ниже:

signal input_9  : unsigned(3 downto 0);
signal output_9 : signed(3 downto 0);

output_9 <= signed(input_9);

Преобразование из Unsigned в Std_Logic_Vector с использованием Std_Logic_Arith

Это простое преобразование, все, что вам нужно сделать, это использовать преобразование типа std_logic_vector, как показано ниже:

  
signal input_8  : unsigned(3 downto 0);
signal output_8 : std_logic_vector(3 downto 0);

output_8 <= std_logic_vector(input_8);


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

VHDL

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