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

Полное руководство по преобразованию типов в VHDL с Numeric_Std и Std_Logic_Arith

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

Ниже представлены наиболее часто используемые преобразования типов в VHDL. Статья разделена на два раздела: первый демонстрирует преобразования, основанные на современном пакете numeric_std, второй — эквивалентные преобразования с использованием устаревшего пакета std_logic_arith. Хотя многие проектировщики все еще используют std_logic_arith, лучшая практика отрасли рекомендует numeric_std за его ясность и переносимость.

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

Примеры преобразований с Numeric_Std

Примеры преобразований с Std_Logic_Arith

Преобразование Integer в Signed с Numeric_Std

Функция to_signed требует два аргумента: преобразуемое целое и желаемую ширину вектора. Использование атрибута 'length сохраняет гибкость кода.

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_unsigned; для знаковых — to_signed. Обе функции принимают значение и целевую ширину.

signal input_1 : integer; signal output_1a : std_logic_vector(3 downto 0); signal output_1b : std_logic_vector(3 downto 0); -- Только положительные целые output_1a <= std_logic_vector(to_unsigned(input_1, output_1a'length)); -- Знаковые или беззнаковые целые output_1b <= std_logic_vector(to_signed(input_1, output_1b'length));

Преобразование Integer в Unsigned с Numeric_Std

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

Сначала приведите вектор к unsigned или signed в зависимости от семантики данных, затем примените to_integer.

signal input_4 : std_logic_vector(3 downto 0); signal output_4a : integer; signal output_4b : integer; -- Беззнаковый случай output_4a <= to_integer(unsigned(input_4)); -- Знаковый случай output_4b <= to_integer(signed(input_4));

Преобразование Std_Logic_Vector в Signed с Numeric_Std

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

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

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

Преобразование Signed в Std_Logic_Vector с Numeric_Std

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

Преобразование Signed в Unsigned с Numeric_Std

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

Преобразование Unsigned в Integer с Numeric_Std

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

Преобразование Unsigned в Signed с 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

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

Преобразование Integer в Signed с Std_Logic_Arith

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

signal input_1 : integer; signal output_1 : std_logic_vector(3 downto 0); output_1 <= conv_std_logic_vector(input_1, output_1'length);

Преобразование Integer в Unsigned с Std_Logic_Arith

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

Преобразование Std_Logic_Vector в Integer с Std_Logic_Arith

signal input_4 : std_logic_vector(3 downto 0); signal output_4a : integer; signal output_4b : integer; -- Беззнаковый случай output_4a <= conv_integer(unsigned(input_4)); -- Знаковый случай output_4b <= conv_integer(signed(input_4));

Преобразование Std_Logic_Vector в Signed с Std_Logic_Arith

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

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

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

Преобразование Signed в Std_Logic_Vector с Std_Logic_Arith

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

Преобразование Signed в Unsigned с Std_Logic_Arith

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

Преобразование Unsigned в Integer с Std_Logic_Arith

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

Преобразование Unsigned в Signed с 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

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: инкремент std_logic_vector
  3. Использование записей (Records) в VHDL для чистых, повторно используемых интерфейсов FIFO
  4. Освоение знаковых и беззнаковых типов в VHDL: практические инсайты
  5. Переменные в VHDL: практические примеры и правила для надежного дизайна
  6. Освоение формальной верификации модулей VHDL с помощью PSL
  7. Создание списков строк в VHDL: лучшие практики и пример
  8. Корректное завершение симуляции VHDL-тестбенча
  9. Реализация PWM-контроллера в VHDL: проектирование, симуляция и FPGA-демо
  10. Генерация случайных чисел в VHDL: от Uniform к OSVVM