std_logic tiene una función de resolución
No sólo std_logictienen estados más útiles, además 1y 0, también tiene una función de resolución definida.
Una función de resolución es un concepto de lenguaje VHDL. Es una función asociada a un tipo, y determina qué sucede cuando se aplican múltiples valores de ese tipo a una sola señal. La sintaxis es:
SUBTYPE std_logic IS resolved std_ulogic;
¿Dónde std_ulogicestá la versión no resuelta (y, por lo tanto, mucho menos útil) de std_logic.
En particular, esto implica cosas buenas como 0y 1conduce 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;
Esto tiene sentido intuitivo, ya que entendemos Xque es el estado donde se aplican múltiples valores incompatibles a un solo cable.
std_logic también sabe cómo resolver cualquier otro par posible de señales de entrada de acuerdo con una tabla presente en el LRM.
bit por otro lado, no tiene una función de resolución, y si la hubiésemos usado en el ejemplo anterior, daría lugar a un error de simulación en GHDL 0.34.
Los posibles valores de std_logicson una buena opción porque están estandarizados por IEEE 1164 y tratan muchos casos de uso comunes.