12. Das neunwertige Logiksystem std_logic_1164

Das im Package standard vorgegebene zweiwertige Logiksystem ist für viele Zwecke nicht ausreichend genau. Die Modellierungsmöglichkeiten in VHDL führten dazu, daß eine Vielzahl von mehrwertigen Logiksystemen entstanden, die zu inkompatiblen Modellen führten. Deshalb wurde neben dem eigentlichen VHDL-Standard IEEE-1076 nun auch ein neunwertiges Logiksystem (IEEE-1164) normiert, das zu einheitlichen Modellen führen soll. Die Deklarationen der Signaltypen und der zugehörenden Funktionen finden sich im Package std_ logic_1164 in der Library ieee .

Der Basistyp des Systems, std_ulogic (u steht für "unresolved") besteht aus folgenden neun Signalwerten:

   TYPE std_ulogic IS (    'U',       -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' ); -- Don't care

Neben den starken Signalwerten ('0' , '1' , 'X' ) für aktiv treibende Technologien (z.B. Totem-Pole-Endstufen, CMOS) sind auch schwache Werte ('L' , 'H' , 'W' ) vorgesehen. Sie dienen für Technologien mit schwach treibenden Ausgangsstufen (z.B. NMOS-Logik mit Widerständen als Lastelemente). Mit dem Wert 'Z' können Tristate-Ausgänge beschrieben werden., der Wert 'U' kennzeichnet nichtinitialisierte Signale. Der Wert '-' schließlich dient zur Kennzeichnung von "don't cares", die bei der Logikoptimierung verwendet werden.

Folgende abgeleitete Typen des Basistyps std_ulogic sind ebenfalls im Package deklariert:

  TYPE std_ulogic_vector IS ARRAY     
( natural RANGE <> ) OF std_ulogic;
FUNCTION resolved ( s : std_ulogic_vector ) RETURN std_ulogic;
SUBTYPE std_logic IS resolved std_ulogic;
TYPE std_logic_vector IS ARRAY
( natural RANGE <> ) OF std_logic;
SUBTYPE X01 IS resolved std_ulogic RANGE 'X' TO '1';
SUBTYPE X01Z IS resolved std_ulogic RANGE 'X' TO 'Z';
SUBTYPE UX01 IS resolved std_ulogic RANGE 'U' TO '1';
SUBTYPE UX01Z IS resolved std_ulogic RANGE 'U' TO 'Z';

Die Untertypen X01 , X01Z , UX01 und UX01Z bilden mehrwertige Logiksysteme, die auf die schwach treibenden Signalwerte und das "don't care" verzichten. Für all diese Typen sind die folgenden, überladenen Operatoren definiert:

  • "NOT" ,
  • "AND" ,
  • "NAND" ,
  • "OR" ,
  • "NOR" und
  • "XOR"