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

Освоение типов signed и unsigned в VHDL: практическое руководство

В VHDL signed и unsigned — это специализированные битовые векторы, позволяющие выполнять арифметику на шинах данных. В отличие от std_logic_vector, который идеален для маршрутизации сигналов, но не для вычислений, эти типы интерпретируются компилятором как числовые значения.

Попытка сложить std_logic_vector вызовет ошибку компиляции: No feasible entries for infix operator "+", потому что инструмент не может определить, как обработать сырой битовый паттерн как число.

Часть серии базовых уроков VHDL.

Для включения арифметики объявите вектор как signed или unsigned:

signal <name> : signed(<N-1> downto 0) := <initial_value>; signal <name> : unsigned(<N-1> downto 0) := <initial_value>;

Диапазон может использовать to или downto, но downto 0 наиболее распространен. Начальное значение опционально; если опущено, все биты по умолчанию 'U'.

Почему предпочесть signed/unsigned традиционному integer? Цифровые дизайнеры часто нуждаются в точном контроле над шириной бита. Эти векторные типы переносятся при переполнении, тогда как integer вызовет ошибку времени выполнения, если значение превысит его пределы. Более того, векторы могут содержать метазначения, такие как 'U' и 'X', которые помогают выявлять ошибки дизайна рано.

Видео-демонстрация

В сопровождающем видео мы исследуем, как сигналы signed и unsigned ведут себя похоже и где они расходятся.

Пример кода

library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T12_SignedUnsignedTb is end entity; architecture sim of T12_SignedUnsignedTb is signal UnsCnt : unsigned(7 downto 0) := (others => '0'); signal SigCnt : signed(7 downto 0) := (others => '0'); signal Uns4 : unsigned(3 downto 0) := "1000"; signal Sig4 : signed(3 downto 0) := "1000"; signal Uns8 : unsigned(7 downto 0) := (others => '0'); signal Sig8 : signed(7 downto 0) := (others => '0'); begin process is begin wait for 10 ns; -- Wrapping counter UnsCnt <= UnsCnt + 1; SigCnt <= SigCnt + 1; -- Adding signals Uns8 <= Uns8 + Uns4; Sig8 <= Sig8 + Sig4; end process; end architecture; 

Анализ волновой формы

Волновая форма ModelSim, увеличенная на ключевых событиях, отображает все значения в шестнадцатеричном формате для ясности:

Освоение типов signed и unsigned в VHDL: практическое руководство

В примере счетчика оба UnsCnt и SigCnt начинаются с 0, инкрементируются до FF (десятичное 255), затем переносятся обратно к 0 — демонстрируя идентичное поведение переноса.

4-битные сигналы Uns4 и Sig4 оба держат двоичное значение 1000, которое является десятичным 8 для беззнакового и –8 для знакового (дополнительный код).

При добавлении этих 4-битных чисел к 8-битным аккумуляторам вступает в игру расширение знака. Беззнаковые числа дополняются нулями, в то время как знаковые — битом знака. Результат в том, что Uns8 увеличивается на 8, тогда как Sig8 уменьшается на 8.

Визуализация процесса расширения знака проясняет разницу:

Освоение типов signed и unsigned в VHDL: практическое руководство

Освоение типов signed и unsigned в VHDL: практическое руководство

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

Переходите к следующему уроку для более глубоких знаний.

VHDL

  1. Освоение знаковых и беззнаковых типов в VHDL: практические инсайты
  2. Использование внутрипроцессных процедур для более чистого проектирования FSM на VHDL
  3. Использование нечистых функций в VHDL: повышение читаемости и поддерживаемости FSM
  4. Освоение функций VHDL: практическое руководство по эффективному дизайну
  5. Использование процедур в VHDL: упростите свой дизайн с повторно используемым кодом
  6. Использование констант и generic map в VHDL для гибкого дизайна модулей
  7. Освоение инстанцирования port map в VHDL: практическое руководство
  8. Бесплатный симулятор и редактор VHDL: руководство для студентов
  9. Микроконтроллеры PIC18: особенности, производительность и руководство по использованию
  10. Понимание референс-десигнаторов: как маркировать соединения сборки ПП