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