std_logic
a une fonction de résolution
Non seulement il std_logic
a des états plus utiles 1
et 0
il a également une fonction de résolution définie.
Une fonction de résolution est un concept de langage VHDL. Il s'agit d'une fonction associée à un type et qui détermine ce qui se produit lorsque plusieurs valeurs de ce type sont appliquées à un seul signal. La syntaxe est:
SUBTYPE std_logic IS resolved std_ulogic;
où std_ulogic
est la version non résolue (et donc beaucoup moins utile) de std_logic
.
En particulier, cela implique de belles choses comme 0
et 1
conduit à 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;
Cela a un sens intuitif, car nous comprenons X
qu'il s'agit de l'état dans lequel plusieurs valeurs incompatibles sont appliquées à un seul fil.
std_logic
sait également comment résoudre toutes les autres paires de signaux d'entrée possibles selon un tableau présent sur le LRM.
bit
d'autre part, n'a pas de fonction de résolution, et si nous l'avions utilisée dans l'exemple ci-dessus, cela conduirait à une erreur de simulation sur GHDL 0,34.
Les valeurs possibles de std_logic
sont un bon choix car elles sont normalisées par IEEE 1164 et traitent de nombreux cas d'utilisation courants.