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