std_logic tem uma função de resolução
Não só std_logictêm estados mais úteis além 1e0 , ele também tem uma função de resolução definido.
Uma função de resolução é um conceito de linguagem VHDL. É uma função que está associada a um tipo e determina o que acontece quando vários valores desse tipo são aplicados a um único sinal. A sintaxe é:
SUBTYPE std_logic IS resolved std_ulogic;
onde std_ulogicestá a versão não resolvida (e, portanto, muito menos útil) de std_logic.
Em particular, isso implica coisas boas como 0e 1leva a 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;
Isso faz sentido intuitivo, pois entendemos Xser o estado em que vários valores incompatíveis são aplicados a um único fio.
std_logic também sabe como resolver todos os outros possíveis pares de sinais de entrada de acordo com uma tabela presente no LRM.
bit por outro lado, não possui uma função de resolução e, se a tivéssemos usado no exemplo acima, levaria a um erro de simulação no GHDL 0.34.
Os possíveis valores de std_logicsão uma boa opção, pois são padronizados pelo IEEE 1164 e lidam com muitos casos de uso comuns.