std_logic
hat eine Auflösungsfunktion
Außerdem gibt es nicht nur std_logic
nützlichere Zustände 1
und 0
auch eine definierte Auflösungsfunktion.
Eine Auflösungsfunktion ist ein VHDL-Sprachkonzept. Es ist eine Funktion, die einem Typ zugeordnet ist und bestimmt, was passiert, wenn mehrere Werte dieses Typs auf ein einzelnes Signal angewendet werden. Die Syntax lautet:
SUBTYPE std_logic IS resolved std_ulogic;
Wo std_ulogic
ist die ungelöste (und damit viel weniger nützliche) Version von std_logic
.
Dies impliziert insbesondere schöne Dinge wie 0
und 1
führt zu 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;
Dies ist intuitiv sinnvoll, da wir verstehen X
, dass mehrere inkompatible Werte auf einen einzelnen Draht angewendet werden.
std_logic
weiß auch, wie jedes andere mögliche Paar von Eingangssignalen gemäß einer auf dem LRM vorhandenen Tabelle aufgelöst wird.
bit
Auf der anderen Seite gibt es keine Auflösungsfunktion, und wenn wir sie im obigen Beispiel verwendet hätten, würde dies zu einem Simulationsfehler bei GHDL 0.34 führen.
Die möglichen Werte von std_logic
sind eine gute Wahl, da sie durch IEEE 1164 standardisiert sind und viele gängige Anwendungsfälle behandeln.