Как использовать наиболее распространенный тип VHDL:std_logic
Наиболее распространенным типом, используемым в VHDL, является std_logic
. . Думайте об этом типе как об одном бите, цифровой информации, передаваемой по одному физическому проводу. std_logic
дает нам более детальный контроль над ресурсами в нашем дизайне, чем integer
тип, который мы использовали в предыдущих уроках.
Обычно мы хотим, чтобы провод в цифровом интерфейсе имел значение '1'
или '0'
. Эти два значения являются единственными значениями, которые может иметь бит, двоичная цифра. Но на самом деле физический цифровой сигнал может находиться в нескольких состояниях, которые std_logic
type хорошо подражает. Поэтому это наиболее часто используемый тип в VHDL.
Эта запись в блоге является частью серии учебных пособий по основам VHDL.
std_logic
type может принимать следующие значения:
'1' | Логика 1 |
'0' | Логический 0 |
Z | Высокое сопротивление |
W | Слабый сигнал, не могу определить 0 или 1 |
L | Слабый 0, раскрытие |
"Н" | Слабое 1, подтягивание |
'-' | Не важно |
"У" | Неинициализированный |
"X" | Неизвестно, несколько водителей |
Может показаться, что это множество различных состояний для типа, который должен моделировать одно двоичное значение. Не волнуйтесь, мы не будем использовать все эти типы в этой серии руководств. Мы будем использовать '1'
и '0'
конечно. И мы также увидим 'U'
и 'X'
, что поможет нам обнаружить ошибки в нашем дизайне. Другие значения — это расширенные функции VHDL, которые можно использовать для таких вещей, как моделирование связи, например, с I
2
. C-устройства или для создания шин с тремя состояниями.
Если несколько процессов пытаются записать в сигнал разные значения, мы говорим, что у него несколько драйверов. . Если std_logic
signal имеет несколько драйверов, это не будет ошибкой компиляции или времени выполнения, по крайней мере, не в симуляторе. Это потому, что std_logic
является разрешенным типом , что означает, что его значение будет определяться функцией разрешения.
Значение std_logic
сигнал с двумя драйверами будет определяться на основе этой таблицы разрешений:
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
. сигналы в форме волны:
Окончательный код, который мы создали в этом руководстве:
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 после того, как мы нажали кнопку «Выполнить» и увеличили временную шкалу:
Форма сигнала с курсором, расположенным на другой части повторяющегося цикла сигнала:
Анализ
Упражнение продемонстрировало, как функция разрешения VHDL работает с кодом std_logic
. тип. При работе с цифровой логикой часто практичнее изучать временную шкалу в виде сигнала. вместо использования распечаток. Поэтому мы использовали сигнал ModelSim для проверки значений сигнала в этом упражнении.
Первый процесс и Signal1
используется только для изменения значения, которое третий процесс использует для Signal2
и Signal3
.
Второй процесс, Драйвер A, попытается управлять 'Z'
. на Signal2
и '0'
на Signal3
постоянно.
Третий процесс, Драйвер B, будет попеременно управлять '1'
и 'Z'
на оба Signal2
и Signal3
.
На снимках экрана мы видим, что Signal1
изменяется между '0'
и '1'
, потому что только один процесс пытается управлять этим сигналом. Мы также можем видеть, что сигналы нескольких драйверов разрешаются в соответствии с таблицей разрешений, опубликованной в комментариях к коду VHDL:
Сигнал | Водитель А | Водитель Б | Результат |
---|---|---|---|
Сигнал2 | "З" | "З" | "З" |
Сигнал2 | "З" | "1" | "1" |
Сигнал3 | '0' | "З" | '0' |
Сигнал3 | '0' | "1" | 'X' | тр>
Вывод
std_logic
наиболее распространенный тип, используемый для хранения однобитового значения в VHDL.- Подумайте о
std_logic
сигнал как физический провод в нашем цифровом дизайне - Если несколько процессов пытаются управлять
std_logic
сигнала, его значение определяется таблицей разрешений
Перейти к следующему руководству »
VHDL
- Наиболее распространенные узкие места в рабочем процессе 3D-печати - и как их исправить
- Наиболее распространенные проблемы с системой охлаждения автомобиля
- Как максимально использовать свои данные
- Как создать связанный список в VHDL
- Как использовать процедуру в процессе в VHDL
- Как использовать нечистую функцию в VHDL
- Как использовать функцию в VHDL
- Как безопасно использовать подъемный механизм на рабочем месте
- Наиболее распространенные причины аварий кранов (и как их избежать)
- Наиболее распространенные приложения a286