The nine-value logic system used by virtually every synthesisable VHDL design.
- Use clause
-
library IEEE;
use IEEE.STD_LOGIC_1164.all; - Source
-
ieee/std_logic_1164.vhdlin the IEEE 1076 OSR, tag1076-2019
Apache License 2.0, © 2019 IEEE P1076 WG Authors - Length
- 309 lines
- VHDL revisions
- Originally IEEE Std 1164-1993; merged into 1076-2008 and updated through 1076-2019
- Body
- View package body ›
Overview
STD_LOGIC_1164 defines the nine-value logic type
STD_ULOGIC (and its resolved subtype STD_LOGIC),
the unconstrained vector types STD_ULOGIC_VECTOR and
STD_LOGIC_VECTOR, the resolution function, overloaded logical and
shift operators, conversions to and from BIT, edge detection, and
string conversion procedures for textual I/O.
Almost every other IEEE package, and almost every real-world design, depends on
this one. The arithmetic packages (NUMERIC_STD,
NUMERIC_STD_UNSIGNED) build on top of STD_LOGIC_VECTOR;
synthesisable RTL uses STD_LOGIC for almost every signal.
What's defined here
- Types
-
STD_ULOGIC(the nine-value enum:'U','X','0','1','Z','W','L','H','-'),STD_ULOGIC_VECTOR,STD_LOGIC(resolved subtype),STD_LOGIC_VECTOR(resolved subtype), and the constrained subtypesX01,X01Z,UX01,UX01Z. - Operator groups
- Logical (scalar) · Logical (vector) · Shift & rotate · Conversion · Strength strippers · Edge detection · String I/O
- Key named functions
-
resolved,To_bit,To_bitvector,To_StdULogic,To_StdLogicVector,To_StdULogicVector,TO_01,To_X01,To_X01Z,To_UX01,rising_edge,falling_edge,Is_X,TO_OSTRING,TO_HSTRING,READ,WRITE,OREAD,HREAD
VHDL source listing
docFile header
lines 1–53
-- -----------------------------------------------------------------
--
-- Copyright 2019 IEEE P1076 WG Authors
--
-- See the LICENSE file distributed with this work for copyright and
-- licensing information and the AUTHORS file.
--
-- This file to you under the Apache License, Version 2.0 (the "License").
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-- implied. See the License for the specific language governing
-- permissions and limitations under the License.
--
-- Title : Standard multivalue logic package
-- : (STD_LOGIC_1164 package declaration)
-- :
-- Library : This package shall be compiled into a library
-- : symbolically named IEEE.
-- :
-- Developers: IEEE model standards group (PAR 1164),
-- : Accellera VHDL-TC, and IEEE P1076 Working Group
-- :
-- Purpose : This packages defines a standard for designers
-- : to use in describing the interconnection data types
-- : used in vhdl modeling.
-- :
-- Limitation: The logic system defined in this package may
-- : be insufficient for modeling switched transistors,
-- : since such a requirement is out of the scope of this
-- : effort. Furthermore, mathematics, primitives,
-- : timing standards, etc. are considered orthogonal
-- : issues as it relates to this package and are therefore
-- : beyond the scope of this effort.
-- :
-- Note : This package may be modified to include additional data
-- : required by tools, but it must in no way change the
-- : external interfaces or simulation behavior of the
-- : description. It is permissible to add comments and/or
-- : attributes to the package declarations, but not to change
-- : or delete any original lines of the package declaration.
-- : The package body may be changed only in accordance with
-- : the terms of Clause 16 of this standard.
-- :
-- --------------------------------------------------------------------
-- $Revision: 1228 $
-- $Date: 2008-04-30 10:04:53 +0930 (Wed, 30 Apr 2008) $
-- --------------------------------------------------------------------
use STD.TEXTIO.all;
package std_logic_1164 isLogic state system (unresolved)
-------------------------------------------------------------------
-- logic state system (unresolved)
------------------------------------------------------------------- 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
);Unconstrained array of STD_ULOGIC
-------------------------------------------------------------------
-- unconstrained array of std_ulogic for use with the resolution function
-- and for use in declaring signal arrays of unresolved elements
------------------------------------------------------------------- type STD_ULOGIC_VECTOR is array (NATURAL range <>) of STD_ULOGIC;Resolution function
-------------------------------------------------------------------
-- resolution function
------------------------------------------------------------------- function resolved (s : STD_ULOGIC_VECTOR) return STD_ULOGIC;Logic state system (resolved)
-------------------------------------------------------------------
-- logic state system (resolved)
------------------------------------------------------------------- subtype STD_LOGIC is resolved STD_ULOGIC;Unconstrained array of resolved STD_LOGIC
-------------------------------------------------------------------
-- unconstrained array of resolved std_ulogic for use in declaring
-- signal arrays of resolved elements
------------------------------------------------------------------- subtype STD_LOGIC_VECTOR is (resolved) STD_ULOGIC_VECTOR;Common subtypes
-------------------------------------------------------------------
-- common subtypes
------------------------------------------------------------------- subtype X01 is resolved STD_ULOGIC range 'X' to '1'; -- ('X','0','1')
subtype X01Z is resolved STD_ULOGIC range 'X' to 'Z'; -- ('X','0','1','Z')
subtype UX01 is resolved STD_ULOGIC range 'U' to '1'; -- ('U','X','0','1')
subtype UX01Z is resolved STD_ULOGIC range 'U' to 'Z'; -- ('U','X','0','1','Z')Overloaded logical operators
-------------------------------------------------------------------
-- overloaded logical operators
-------------------------------------------------------------------
fn"and"
lines 106–106
"and" function "and" (l : STD_ULOGIC; r : STD_ULOGIC) return UX01;fn"nand"
lines 107–107
"nand" function "nand" (l : STD_ULOGIC; r : STD_ULOGIC) return UX01;fn"or"
lines 108–108
"or" function "or" (l : STD_ULOGIC; r : STD_ULOGIC) return UX01;fn"nor"
lines 109–109
"nor" function "nor" (l : STD_ULOGIC; r : STD_ULOGIC) return UX01;fn"xor"
lines 110–110
"xor" function "xor" (l : STD_ULOGIC; r : STD_ULOGIC) return UX01;fn"xnor"
lines 111–111
"xnor" function "xnor" (l : STD_ULOGIC; r : STD_ULOGIC) return UX01;fn"not"
lines 112–113
"not" function "not" (l : STD_ULOGIC) return UX01;
Vectorized overloaded logical operators
-------------------------------------------------------------------
-- vectorized overloaded logical operators
-------------------------------------------------------------------fn"and"
lines 117–117
"and" function "and" (l, r : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;fn"nand"
lines 118–118
"nand" function "nand" (l, r : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;fn"or"
lines 119–119
"or" function "or" (l, r : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;fn"nor"
lines 120–120
"nor" function "nor" (l, r : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;fn"xor"
lines 121–121
"xor" function "xor" (l, r : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;fn"xnor"
lines 122–122
"xnor" function "xnor" (l, r : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;fn"not"
lines 123–124
"not" function "not" (l : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;
fn"and"
lines 125–127
"and" function "and" (l : STD_ULOGIC_VECTOR; r : STD_ULOGIC) return STD_ULOGIC_VECTOR;
function "and" (l : STD_ULOGIC; r : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;
fn"nand"
lines 128–130
"nand" function "nand" (l : STD_ULOGIC_VECTOR; r : STD_ULOGIC) return STD_ULOGIC_VECTOR;
function "nand" (l : STD_ULOGIC; r : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;
fn"or"
lines 131–133
"or" function "or" (l : STD_ULOGIC_VECTOR; r : STD_ULOGIC) return STD_ULOGIC_VECTOR;
function "or" (l : STD_ULOGIC; r : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;
fn"nor"
lines 134–136
"nor" function "nor" (l : STD_ULOGIC_VECTOR; r : STD_ULOGIC) return STD_ULOGIC_VECTOR;
function "nor" (l : STD_ULOGIC; r : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;
fn"xor"
lines 137–139
"xor" function "xor" (l : STD_ULOGIC_VECTOR; r : STD_ULOGIC) return STD_ULOGIC_VECTOR;
function "xor" (l : STD_ULOGIC; r : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;
fn"xnor"
lines 140–142
"xnor" function "xnor" (l : STD_ULOGIC_VECTOR; r : STD_ULOGIC) return STD_ULOGIC_VECTOR;
function "xnor" (l : STD_ULOGIC; r : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;
fn"and"
lines 143–143
"and" function "and" (l : STD_ULOGIC_VECTOR) return STD_ULOGIC;fn"nand"
lines 144–144
"nand" function "nand" (l : STD_ULOGIC_VECTOR) return STD_ULOGIC;fn"or"
lines 145–145
"or" function "or" (l : STD_ULOGIC_VECTOR) return STD_ULOGIC;fn"nor"
lines 146–146
"nor" function "nor" (l : STD_ULOGIC_VECTOR) return STD_ULOGIC;fn"xor"
lines 147–147
"xor" function "xor" (l : STD_ULOGIC_VECTOR) return STD_ULOGIC;fn"xnor"
lines 148–149
"xnor" function "xnor" (l : STD_ULOGIC_VECTOR) return STD_ULOGIC;
Shift operators
-------------------------------------------------------------------
-- shift operators
-------------------------------------------------------------------
fn"sll"
lines 154–154
"sll" function "sll" (l : STD_ULOGIC_VECTOR; r : INTEGER) return STD_ULOGIC_VECTOR;fn"srl"
lines 155–155
"srl" function "srl" (l : STD_ULOGIC_VECTOR; r : INTEGER) return STD_ULOGIC_VECTOR;fn"rol"
lines 156–156
"rol" function "rol" (l : STD_ULOGIC_VECTOR; r : INTEGER) return STD_ULOGIC_VECTOR;fn"ror"
lines 157–158
"ror" function "ror" (l : STD_ULOGIC_VECTOR; r : INTEGER) return STD_ULOGIC_VECTOR;
Conversion functions
-------------------------------------------------------------------
-- conversion functions
-------------------------------------------------------------------fnTo_bit
lines 162–162
To_bit function To_bit (s : STD_ULOGIC; xmap : BIT := '0') return BIT;fnTo_bitvector
lines 163–164
To_bitvector function To_bitvector (s : STD_ULOGIC_VECTOR; xmap : BIT := '0') return BIT_VECTOR;
fnTo_StdULogic
lines 165–165
To_StdULogic function To_StdULogic (b : BIT) return STD_ULOGIC;fnTo_StdLogicVector
lines 166–167
To_StdLogicVector function To_StdLogicVector (b : BIT_VECTOR) return STD_LOGIC_VECTOR;
function To_StdLogicVector (s : STD_ULOGIC_VECTOR) return STD_LOGIC_VECTOR;fnTo_StdULogicVector
lines 168–170
To_StdULogicVector function To_StdULogicVector (b : BIT_VECTOR) return STD_ULOGIC_VECTOR;
function To_StdULogicVector (s : STD_LOGIC_VECTOR) return STD_ULOGIC_VECTOR;
alTo_Bit_Vector, To_BV
lines 171–175
To_Bit_Vector, To_BV alias To_Bit_Vector is
To_bitvector[STD_ULOGIC_VECTOR, BIT return BIT_VECTOR];
alias To_BV is
To_bitvector[STD_ULOGIC_VECTOR, BIT return BIT_VECTOR];
alTo_Std_Logic_Vector, To_SLV
lines 176–180
To_Std_Logic_Vector, To_SLV alias To_Std_Logic_Vector is
To_StdLogicVector[BIT_VECTOR return STD_LOGIC_VECTOR];
alias To_SLV is
To_StdLogicVector[BIT_VECTOR return STD_LOGIC_VECTOR];
alTo_Std_Logic_Vector, To_SLV
lines 181–185
To_Std_Logic_Vector, To_SLV alias To_Std_Logic_Vector is
To_StdLogicVector[STD_ULOGIC_VECTOR return STD_LOGIC_VECTOR];
alias To_SLV is
To_StdLogicVector[STD_ULOGIC_VECTOR return STD_LOGIC_VECTOR];
alTo_Std_ULogic_Vector, To_SULV
lines 186–190
To_Std_ULogic_Vector, To_SULV alias To_Std_ULogic_Vector is
To_StdULogicVector[BIT_VECTOR return STD_ULOGIC_VECTOR];
alias To_SULV is
To_StdULogicVector[BIT_VECTOR return STD_ULOGIC_VECTOR];
alTo_Std_ULogic_Vector, To_SULV
lines 191–195
To_Std_ULogic_Vector, To_SULV alias To_Std_ULogic_Vector is
To_StdULogicVector[STD_LOGIC_VECTOR return STD_ULOGIC_VECTOR];
alias To_SULV is
To_StdULogicVector[STD_LOGIC_VECTOR return STD_ULOGIC_VECTOR];
Strength strippers and type convertors
-------------------------------------------------------------------
-- strength strippers and type convertors
-------------------------------------------------------------------
fnTO_01
lines 200–208
TO_01 function TO_01 (s : STD_ULOGIC_VECTOR; xmap : STD_ULOGIC := '0')
return STD_ULOGIC_VECTOR;
function TO_01 (s : STD_ULOGIC; xmap : STD_ULOGIC := '0')
return STD_ULOGIC;
function TO_01 (s : BIT_VECTOR; xmap : STD_ULOGIC := '0')
return STD_ULOGIC_VECTOR;
function TO_01 (s : BIT; xmap : STD_ULOGIC := '0')
return STD_ULOGIC;
fnTo_X01
lines 209–213
To_X01 function To_X01 (s : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;
function To_X01 (s : STD_ULOGIC) return X01;
function To_X01 (b : BIT_VECTOR) return STD_ULOGIC_VECTOR;
function To_X01 (b : BIT) return X01;
fnTo_X01Z
lines 214–218
To_X01Z function To_X01Z (s : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;
function To_X01Z (s : STD_ULOGIC) return X01Z;
function To_X01Z (b : BIT_VECTOR) return STD_ULOGIC_VECTOR;
function To_X01Z (b : BIT) return X01Z;
fnTo_UX01
lines 219–223
To_UX01 function To_UX01 (s : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;
function To_UX01 (s : STD_ULOGIC) return UX01;
function To_UX01 (b : BIT_VECTOR) return STD_ULOGIC_VECTOR;
function To_UX01 (b : BIT) return UX01;
fn"??"
lines 224–225
"??" function "??" (l : STD_ULOGIC) return BOOLEAN;
Edge detection
-------------------------------------------------------------------
-- edge detection
-------------------------------------------------------------------fnrising_edge
lines 229–229
rising_edge function rising_edge (signal s : STD_ULOGIC) return BOOLEAN;fnfalling_edge
lines 230–231
falling_edge function falling_edge (signal s : STD_ULOGIC) return BOOLEAN;
Object contains an unknown
-------------------------------------------------------------------
-- object contains an unknown
-------------------------------------------------------------------fnIs_X
lines 235–237
Is_X function Is_X (s : STD_ULOGIC_VECTOR) return BOOLEAN;
function Is_X (s : STD_ULOGIC) return BOOLEAN;
Matching relational operators
-------------------------------------------------------------------
-- matching relational operators
-------------------------------------------------------------------fn"?="
lines 241–245
"?=" -- the following operations are predefined
-- function "?=" (l, r : STD_ULOGIC) return STD_ULOGIC;
-- function "?=" (l, r : STD_ULOGIC_VECTOR) return STD_ULOGIC;
fn"?/="
lines 246–248
"?/=" -- function "?/=" (l, r : STD_ULOGIC) return STD_ULOGIC;
-- function "?/=" (l, r : STD_ULOGIC_VECTOR) return STD_ULOGIC;
fn"?<"
lines 249–249
"?<" -- function "?<" (l, r : STD_ULOGIC) return STD_ULOGIC;fn"?<="
lines 250–250
"?<=" -- function "?<=" (l, r : STD_ULOGIC) return STD_ULOGIC;fn"?>"
lines 251–251
"?>" -- function "?>" (l, r : STD_ULOGIC) return STD_ULOGIC;fn"?>="
lines 252–253
"?>=" -- function "?>=" (l, r : STD_ULOGIC) return STD_ULOGIC;
String conversion and write operations
-------------------------------------------------------------------
-- string conversion and write operations
-------------------------------------------------------------------fnTO_STRING
lines 257–263
TO_STRING -- the following operations are predefined
-- function TO_STRING (value : STD_ULOGIC) return STRING;
-- function TO_STRING (value : STD_ULOGIC_VECTOR) return STRING;
-- explicitly defined operations
alTO_BSTRING, TO_BINARY_STRING
lines 264–265
TO_BSTRING, TO_BINARY_STRING alias TO_BSTRING is TO_STRING [STD_ULOGIC_VECTOR return STRING];
alias TO_BINARY_STRING is TO_STRING [STD_ULOGIC_VECTOR return STRING];fnalTO_OSTRING, TO_OCTAL_STRING
lines 266–267
TO_OSTRING, TO_OCTAL_STRING function TO_OSTRING (VALUE : STD_ULOGIC_VECTOR) return STRING;
alias TO_OCTAL_STRING is TO_OSTRING [STD_ULOGIC_VECTOR return STRING];fnalTO_HSTRING, TO_HEX_STRING
lines 268–270
TO_HSTRING, TO_HEX_STRING function TO_HSTRING (VALUE : STD_ULOGIC_VECTOR) return STRING;
alias TO_HEX_STRING is TO_HSTRING [STD_ULOGIC_VECTOR return STRING];
prREAD
lines 271–276
READ procedure READ (L : inout LINE; VALUE : out STD_ULOGIC; GOOD : out BOOLEAN);
procedure READ (L : inout LINE; VALUE : out STD_ULOGIC);
procedure READ (L : inout LINE; VALUE : out STD_ULOGIC_VECTOR; GOOD : out BOOLEAN);
procedure READ (L : inout LINE; VALUE : out STD_ULOGIC_VECTOR);
prWRITE
lines 277–282
WRITE procedure WRITE (L : inout LINE; VALUE : in STD_ULOGIC;
JUSTIFIED : in SIDE := right; FIELD : in WIDTH := 0);
procedure WRITE (L : inout LINE; VALUE : in STD_ULOGIC_VECTOR;
JUSTIFIED : in SIDE := right; FIELD : in WIDTH := 0);
alBREAD
lines 283–284
BREAD alias BREAD is READ [LINE, STD_ULOGIC_VECTOR, BOOLEAN];
alias BREAD is READ [LINE, STD_ULOGIC_VECTOR];alBINARY_READ
lines 285–287
BINARY_READ alias BINARY_READ is READ [LINE, STD_ULOGIC_VECTOR, BOOLEAN];
alias BINARY_READ is READ [LINE, STD_ULOGIC_VECTOR];
prOREAD
lines 288–289
OREAD procedure OREAD (L : inout LINE; VALUE : out STD_ULOGIC_VECTOR; GOOD : out BOOLEAN);
procedure OREAD (L : inout LINE; VALUE : out STD_ULOGIC_VECTOR);alOCTAL_READ
lines 290–292
OCTAL_READ alias OCTAL_READ is OREAD [LINE, STD_ULOGIC_VECTOR, BOOLEAN];
alias OCTAL_READ is OREAD [LINE, STD_ULOGIC_VECTOR];
prHREAD
lines 293–294
HREAD procedure HREAD (L : inout LINE; VALUE : out STD_ULOGIC_VECTOR; GOOD : out BOOLEAN);
procedure HREAD (L : inout LINE; VALUE : out STD_ULOGIC_VECTOR);alHEX_READ
lines 295–297
HEX_READ alias HEX_READ is HREAD [LINE, STD_ULOGIC_VECTOR, BOOLEAN];
alias HEX_READ is HREAD [LINE, STD_ULOGIC_VECTOR];
alBWRITE, BINARY_WRITE
lines 298–300
BWRITE, BINARY_WRITE alias BWRITE is WRITE [LINE, STD_ULOGIC_VECTOR, SIDE, WIDTH];
alias BINARY_WRITE is WRITE [LINE, STD_ULOGIC_VECTOR, SIDE, WIDTH];
pralOWRITE, OCTAL_WRITE
lines 301–304
OWRITE, OCTAL_WRITE procedure OWRITE (L : inout LINE; VALUE : in STD_ULOGIC_VECTOR;
JUSTIFIED : in SIDE := right; FIELD : in WIDTH := 0);
alias OCTAL_WRITE is OWRITE [LINE, STD_ULOGIC_VECTOR, SIDE, WIDTH];
pralHWRITE, HEX_WRITE
lines 305–308
HWRITE, HEX_WRITE procedure HWRITE (L : inout LINE; VALUE : in STD_ULOGIC_VECTOR;
JUSTIFIED : in SIDE := right; FIELD : in WIDTH := 0);
alias HEX_WRITE is HWRITE [LINE, STD_ULOGIC_VECTOR, SIDE, WIDTH];
end package std_logic_1164;
