std_logic a une fonction de résolution
Non seulement il std_logica des états plus utiles 1et 0il 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_ulogicest la version non résolue (et donc beaucoup moins utile) de std_logic.
En particulier, cela implique de belles choses comme 0et 1conduit à 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 Xqu'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_logicsont un bon choix car elles sont normalisées par IEEE 1164 et traitent de nombreux cas d'utilisation courants.