std_logic имеет функцию разрешения
Мало того, что std_logicесть более полезные состояния , кроме 1и 0, он также имеет функцию разрешения определена.
Функция разрешения - это концепция языка VHDL. Это функция, которая связана с типом, и она определяет, что происходит, когда несколько значений этого типа применяются к одному сигналу. Синтаксис:
SUBTYPE std_logic IS resolved std_ulogic;
где std_ulogicнеразрешенная (и, следовательно, гораздо менее полезная) версия std_logic.
В частности, это подразумевает такие приятные вещи, как 0и 1приводит к X:
library ieee;
use ieee.std_logic_1164.all;
entity std_logic_tb is
end std_logic_tb;
architecture behav of std_logic_tb is
signal s0 : std_logic;
begin
s0 <= '0';
s0 <= '1';
process
begin
wait for 1 ns;
assert s0 = 'X';
wait;
end process;
end behav;
Это имеет интуитивный смысл, так как мы понимаем, Xчто это состояние, когда несколько несовместимых значений применяются к одному проводу.
std_logic также знает, как разрешить каждую другую возможную пару входных сигналов в соответствии с таблицей, присутствующей в LRM.
bit с другой стороны, не имеет функции разрешения, и если бы мы использовали ее в приведенном выше примере, это привело бы к ошибке симуляции на GHDL 0.34.
Возможные значения std_logicявляются хорошим выбором, потому что они стандартизированы IEEE 1164 и имеют дело со многими распространенными случаями использования.