std_logic
tem uma função de resolução
Não só std_logic
têm estados mais úteis além 1
e0
, 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_ulogic
está a versão não resolvida (e, portanto, muito menos útil) de std_logic
.
Em particular, isso implica coisas boas como 0
e 1
leva 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 X
ser 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_logic
são uma boa opção, pois são padronizados pelo IEEE 1164 e lidam com muitos casos de uso comuns.