std_logic
tiene una función de resolución
No sólo std_logic
tienen estados más útiles, además 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 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_ulogic
está la versión no resuelta (y, por lo tanto, mucho menos útil) de std_logic
.
En particular, esto implica cosas buenas como 0
y 1
conduce 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 X
que 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_logic
son una buena opción porque están estandarizados por IEEE 1164 y tratan muchos casos de uso comunes.