Примеры преобразования VHDL
Использование файлов пакетов Numeric_Std и Std_Logic_Arith
Ниже приведены наиболее распространенные преобразования, используемые в VHDL. Страница разбита на две части. В первой половине страницы показаны преобразования с использованием файла пакета Numeric_Std. Во второй половине страницы показаны преобразования с использованием файла пакета Std_Logic_Arith. Рекомендуется использовать пакет Numeric_Std, так как вам не следует использовать Std_Logic_Arith. Поскольку многие люди по-прежнему настаивают на его использовании, ниже показаны оба примера.
Обратите внимание, что во многих приведенных ниже примерах используется параметр 'length. VHDL-атрибут. Этот атрибут делает ваш код более переносимым и универсальным, поэтому его следует использовать.
Пример преобразования с использованием числового стандарта
- Целое число в знаковое
- Целое число в Std_Logic_Vector
- Целое число в число без знака
- Std_Logic_Vector в целое число
- Std_Logic_Vector для подписи
- Std_Logic_Vector в беззнаковый
- Подписано как целое
- Подписано на Std_Logic_Vector
- От подписанного к неподписанному
- От беззнакового до целого
- От неподписанных к подписанным
- Не подписано в Std_Logic_Vector
Пример преобразования с использованием Std_Logic_Arith
- Целое число в знаковое
- Целое число в Std_Logic_Vector
- Целое число в число без знака
- Std_Logic_Vector в целое число
- Std_Logic_Vector для подписи
- Std_Logic_Vector в беззнаковый
- Подписано как целое
- Подписано на Std_Logic_Vector
- От подписанного к неподписанному
- От беззнакового до целого
- От неподписанных к подписанным
- Не подписано в Std_Logic_Vector
Преобразование из целого числа в знаковое с использованием 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);
VHDL
- Учебное пособие — Введение в VHDL
- Оператор процедуры — пример VHDL
- Записи — пример VHDL
- Подписанный и неподписанный в VHDL
- Переменные — пример VHDL
- Формальная проверка в VHDL с использованием PSL
- Как создать список строк в VHDL
- Как остановить симуляцию в тестовом стенде VHDL
- Как создать ШИМ-контроллер на VHDL
- Как генерировать случайные числа в VHDL