Освоение std_logic в VHDL: состояния, разрешение и анализ волновой формы
В VHDL тип std_logic — краеугольный камень для представления одного бита на физическом проводе. В отличие от простого типа integer, использованного в более ранних уроках, std_logic предлагает более богатый набор значений, моделирующих поведение реальных цифровых сигналов более точно.
Хотя цифровой вывод обычно несет либо логическую единицу ('1'), либо логический ноль ('0'), физический сигнал может также появляться в состоянии высокого импеданса, слабом или неопределенном состоянии. Тип std_logic захватывает все эти возможности, делая его самым часто используемым типом в VHDL-дизайне.
Эта статья является частью серии базовых уроков VHDL.
Ниже приведен полный список значений, которые может принимать сигнал std_logic:
| '1' | Логика 1 |
| '0' | Логика 0 |
| 'Z' | Высокий импеданс |
| 'W' | Слабый сигнал; неопределенный 0 или 1 |
| 'L' | Слабый 0 (подтяжка вниз) |
| 'H' | Слабый 1 (подтяжка вверх) |
| '-' | Неважно (don't care) |
| 'U' | Неинициализированный |
| 'X' | Неизвестный (множественные драйверы) |
В большинстве уроков мы сфокусируемся на основных значениях '1' и '0', и иногда 'U' и 'X' для выявления ошибок дизайна. Остальные состояния — продвинутые функции, полезные для моделирования протоколов вроде I2C или создания тристайтовых шин.
Когда несколько процессов управляют одним и тем же сигналом std_logic, язык использует функцию разрешения (resolution function) для определения результирующего значения. Этот механизм предотвращает ошибки компиляции или времени выполнения в симуляциях и определяется таблицей разрешения, показанной ниже.
| U | X | 0 | 1 | Z | W | L | H | - | |
|---|---|---|---|---|---|---|---|---|---|
| U | X | X | 1 | 1 | 1 | 1 | 1 | X | 1 |
| U | X | 0 | X | 0 | 0 | 0 | 0 | X | 0 |
| U | U | U | U | U | U | U | U | U | U |
| U | X | X | X | X | X | X | X | X | X |
| U | X | 0 | 1 | Z | W | L | H | X | Z |
| U | X | 0 | 1 | W | W | W | W | X | W |
| U | X | 0 | 1 | L | W | L | W | X | L |
| U | X | 0 | 1 | H | W | W | H | X | H |
| U | X | X | X | X | X | X | X | X | - |
Упражнение
Это видео-урок демонстрирует, как объявлять сигналы std_logic и визуализировать их в волновой форме симуляции.
Итоговый VHDL-код, полученный в этом упражнении, показан ниже:
library ieee; use ieee.std_logic_1164.all; entity T10_StdLogicTb is end entity; architecture sim of T10_StdLogicTb is signal Signal1 : std_logic := '0'; signal Signal2 : std_logic; signal Signal3 : std_logic; begin process is begin wait for 10 ns; Signal1 <= not Signal1; end process; -- Driver A process is begin Signal2 <= 'Z'; Signal3 <= '0'; wait; end process; -- Driver B process(Signal1) is begin if Signal1 = '0' then Signal2 <= 'Z'; Signal3 <= 'Z'; else Signal2 <= '1'; Signal3 <= '1'; end if; end process; end architecture;
Окно волновой формы в ModelSim после нажатия run и увеличения временной шкалы:

Волновая форма с курсором, помещенным на другую часть повторяющегося цикла сигнала:

Анализ
Это упражнение иллюстрирует функцию разрешения VHDL в действии. Инспектируя волновую форму вместо доверия только к текстовому выводу, мы получаем более четкое представление о том, как множественные драйверы взаимодействуют на сигнале std_logic.
Signal1 переключается единственным процессом, поэтому его значение чередуется чисто между '0' и '1'. Сигналы, управляемые и драйвером A, и драйвером B, разрешаются согласно таблице, показанной ранее.
| Сигнал | Драйвер A | Драйвер B | Результат |
|---|---|---|---|
| Signal2 | 'Z' | 'Z' | 'Z' |
| Signal2 | 'Z' | '1' | '1' |
| Signal3 | '0' | 'Z' | '0' |
| Signal3 | '0' | '1' | 'X' |

Выводы
std_logic— самый широко используемый VHDL-тип для однобитных сигналов.- Думайте о сигнале
std_logicкак о физическом проводе, несущем цифровое значение. - Когда несколько процессов управляют одним и тем же сигналом
std_logic, функция разрешения определяет итоговое значение.
Переходите к следующему уроку »
VHDL
- Топ узких мест рабочего процесса 3D-печати и проверенные исправления
- Частые проблемы системы охлаждения автомобиля и их диагностика
- Разблокировка IoT-данных: как Business Rules Management драйвит enterprise value
- Реализация динамического связного списка в VHDL с защищенными типами и указателями доступа
- Использование внутрипроцессных процедур для более чистого проектирования FSM на VHDL
- Использование нечистых функций в VHDL: повышение читаемости и поддерживаемости FSM
- Освоение функций VHDL: практическое руководство по эффективному дизайну
- Безопасная работа с двигательным подъемником: лучшие практики для цеха и склада
- Основные причины крановых аварий и способы их предотвращения
- Ключевые промышленные применения сплава A286: высокая прочность и коррозионная стойкость