Какая разница между использованием:
ENTITY MyDemo is
PORT(X: IN STD_LOGIC; F: OUT STD_LOGIC );
END MyDemo;
а также
ENTITY MyDemo is
PORT(X: IN BIT; F: OUT BIT );
END MyDemo;
Каковы ограничения использования BIT по сравнению с STD_LOGIC и наоборот? Они полностью взаимозаменяемы? Я понимаю, что если я определю STD_LOGIC, я не смогу использовать его с BIT_Vector для доступа к элементам в массиве. Но я не могу видеть разницу.
Ответы:
Bit
является предопределенным типом и может иметь только значение0
или1
.Bit
Тип представляет собой идеализированное значение.std_logic
является частьюstd_logic_1164
пакета и обеспечивает более реалистичное моделирование сигналов в цифровой системе. Он способен иметь девять разных значений. Как правило , в пределах вашего кода вы будете использовать только0
,1
иZ
(High-Z). НоU
(Uninitialized) иX
(Unknown) также очень полезны при моделировании системы в тестовом стенде.std_logic_1164
Пакет также предоставляет функцию преобразования для преобразованияstd_logic
вBit
.источник
Большинство людей используют
std_logic
. Это допускаетu
(неопределенный),x
(неизвестный) иz
(высокий импеданс), который бит не делает. Несмотря на то, что вы никогда не сможете использовать чип и не нуждаетесьz
,u
он полезен для поиска пропущенных перезагрузок.x
полезно для поиска нескольких драйверов.источник
X
для поиска нескольких драйверов.std_logic
действительно является типом отраслевого стандарта для VHDL, но он также является одной из наиболее часто используемых функций VHDL.std_logic
является разрешенным сигналом, что означает, что функция используется для разрешения значения сигнала в случае нескольких драйверов. Но в подавляющем большинстве случаев несколько драйверов является ошибкой. Использование такого неразрешенного типа, какstd_ulogic
этот, будет помечено компилятором как ошибка.std_ulogic
. Но имейте в виду, что многие ядра будут написаны,std_logic
так что вы, вероятно, увидите некоторые из них.std_logic
действительно самый распространенный тип вокруг; Я просто утверждаю, что его использование не соответствует первоначальному замыслу: моделированию сигналов с несколькими состояниями. Для внутренних конструкций мы обычно рассматриваем только1
или0
и один водитель. См. Electronics.stackexchange.com/questions/17524/… для подробного обсуждения этой темы.std_logic
имеет функцию разрешенияМало того, что
std_logic
есть более полезные состояния , кроме1
и0
, он также имеет функцию разрешения определена.Функция разрешения - это концепция языка VHDL. Это функция, которая связана с типом, и она определяет, что происходит, когда несколько значений этого типа применяются к одному сигналу. Синтаксис:
где
std_ulogic
неразрешенная (и, следовательно, гораздо менее полезная) версияstd_logic
.В частности, это подразумевает такие приятные вещи, как
0
и1
приводит кX
:Это имеет интуитивный смысл, так как мы понимаем,
X
что это состояние, когда несколько несовместимых значений применяются к одному проводу.std_logic
также знает, как разрешить каждую другую возможную пару входных сигналов в соответствии с таблицей, присутствующей в LRM.bit
с другой стороны, не имеет функции разрешения, и если бы мы использовали ее в приведенном выше примере, это привело бы к ошибке симуляции на GHDL 0.34.Возможные значения
std_logic
являются хорошим выбором, потому что они стандартизированы IEEE 1164 и имеют дело со многими распространенными случаями использования.источник
std_logic больше, чем бит , и в основном должен использоваться большую часть времени.
Существует также логический тип, который, как и бит , имеет два значения. Это тип сравнения результатов, ожидаемый после IF [bool] или WHEN [bool] , часто используемый для констант выбора:
constant ENABLE_DEBUG_INTERFACE : boolean := true;
Единственное место, где бит может быть предпочтительнее std_logic, это большие массивы, воспоминания. При оптимизации симуляторов бит занимает меньше места в памяти симулятора, чем std_logic . И может иметь значение, если ваш проект создает один ГБ ОЗУ.
Это может также быть быстрее для очень больших проектов, например, что-то автоматически генерируемое из списка соединений уровня пост-синтеза.
Конечно, этот аспект производительности не является частью языка и зависит от реализации симулятора VHDL.
источник