# ==================================================================================================================== #
# __ ___ _ ____ _ __ __ _ _ #
# _ __ _ \ \ / / | | | _ \| | | \/ | ___ __| | ___| | #
# | '_ \| | | \ \ / /| |_| | | | | | | |\/| |/ _ \ / _` |/ _ \ | #
# | |_) | |_| |\ V / | _ | |_| | |___| | | | (_) | (_| | __/ | #
# | .__/ \__, | \_/ |_| |_|____/|_____|_| |_|\___/ \__,_|\___|_| #
# |_| |___/ #
# ==================================================================================================================== #
# Authors: #
# Patrick Lehmann #
# #
# License: #
# ==================================================================================================================== #
# Copyright 2017-2023 Patrick Lehmann - Boetzingen, Germany #
# Copyright 2016-2017 Patrick Lehmann - Dresden, Germany #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); #
# you may not use this file except in compliance with 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. #
# #
# SPDX-License-Identifier: Apache-2.0 #
# ==================================================================================================================== #
#
"""This module contains library and package declarations for VHDL library ``IEEE``."""
from pyTooling.Decorators import export
from pyVHDLModel.Expression import EnumerationLiteral
from pyVHDLModel.Name import SimpleName
from pyVHDLModel.Predefined import PredefinedLibrary, PredefinedPackage, PredefinedPackageBody
from pyVHDLModel.Symbol import SimpleSubtypeSymbol
from pyVHDLModel.Type import EnumeratedType, ArrayType, Subtype
[docs]
@export
class Ieee(PredefinedLibrary):
"""
Predefined VHDL library ``ieee``.
The following predefined packages are in this library:
* Math
* :class:`~pyVHDLModel.IEEE.Math_Real`
* :class:`~pyVHDLModel.IEEE.Math_Complex`
* Std_logic
* :class:`~pyVHDLModel.IEEE.Std_Logic_1164`
* :class:`~pyVHDLModel.IEEE.Std_Logic_TextIO`
* :class:`~pyVHDLModel.IEEE.Std_Logic_Misc`
* Numeric
* :class:`~pyVHDLModel.IEEE.Numeric_Bit`
* :class:`~pyVHDLModel.IEEE.Numeric_Bit_Unsigned`
* :class:`~pyVHDLModel.IEEE.Numeric_Std`
* :class:`~pyVHDLModel.IEEE.Numeric_Std_Unsigned`
* Fixed/floating point
* :class:`~pyVHDLModel.IEEE.Fixed_Float_Types`
* :class:`~pyVHDLModel.IEEE.Fixed_Generic_Pkg`
* :class:`~pyVHDLModel.IEEE.Fixed_Pkg`
* :class:`~pyVHDLModel.IEEE.Float_Generic_Pkg`
* :class:`~pyVHDLModel.IEEE.Float_Pkg`
.. seealso::
Other predefined libraries:
* Library :class:`~pyVHDLModel.STD.Std`
"""
[docs]
def __init__(self):
super().__init__(PACKAGES)
def LoadSynopsysPackages(self):
self.AddPackages(PACKAGES_SYNOPSYS)
[docs]
@export
class Math_Real(PredefinedPackage):
"""
Predefined package ``ieee.math_real``.
"""
[docs]
@export
class Math_Real_Body(PredefinedPackageBody):
"""
Predefined package body of package ``ieee.math_real``.
"""
[docs]
@export
class Math_Complex(PredefinedPackage):
"""
Predefined package ``ieee.math_complex``.
"""
[docs]
def __init__(self):
super().__init__()
self._AddPackageClause(("work.math_real.all",))
[docs]
@export
class Math_Complex_Body(PredefinedPackageBody):
"""
Predefined package body of package ``ieee.math_complex``.
"""
[docs]
def __init__(self):
super().__init__()
self._AddPackageClause(("work.math_real.all",))
[docs]
@export
class Std_logic_1164(PredefinedPackage):
"""
Predefined package ``ieee.std_logic_1164``.
Predefined types:
* ``std_ulogic``, ``std_ulogic_vector``
* ``std_logic``, ``std_logic_vector``
"""
[docs]
def __init__(self):
super().__init__()
self._AddPackageClause(("STD.TEXTIO.all", ))
stdULogic = EnumeratedType("std_ulogic", (
EnumerationLiteral("U"),
EnumerationLiteral("X"),
EnumerationLiteral("0"),
EnumerationLiteral("1"),
EnumerationLiteral("Z"),
EnumerationLiteral("W"),
EnumerationLiteral("L"),
EnumerationLiteral("H"),
EnumerationLiteral("-"),
))
self._types[stdULogic._normalizedIdentifier] = stdULogic
self._declaredItems.append(stdULogic)
stdULogicVector = ArrayType("std_ulogic_vector", (SimpleSubtypeSymbol(SimpleName("natural")),), SimpleSubtypeSymbol(SimpleName("std_ulogic")))
self._types[stdULogicVector._normalizedIdentifier] = stdULogicVector
self._declaredItems.append(stdULogicVector)
stdLogic = Subtype("std_logic", SimpleSubtypeSymbol(SimpleName("std_ulogic")))
stdLogic._baseType = stdULogic
self._subtypes[stdLogic._normalizedIdentifier] = stdLogic
self._declaredItems.append(stdLogic)
stdLogicVector = Subtype("std_logic_vector", SimpleSubtypeSymbol(SimpleName("std_ulogic_vector")))
stdLogicVector._baseType = stdULogicVector
self._subtypes[stdLogicVector._normalizedIdentifier] = stdLogicVector
self._declaredItems.append(stdLogicVector)
[docs]
@export
class Std_logic_1164_Body(PredefinedPackageBody):
"""
Predefined package body of package ``ieee.std_logic_1164``.
"""
[docs]
@export
class std_logic_textio(PredefinedPackage):
"""
Predefined package ``ieee.std_logic_textio``.
"""
[docs]
def __init__(self):
super().__init__()
self._AddPackageClause(("STD.TEXTIO.all", ))
self._AddLibraryClause(("IEEE", ))
self._AddPackageClause(("IEEE.std_logic_1164.all", ))
[docs]
@export
class Std_logic_misc(PredefinedPackage):
"""
Predefined package ``ieee.std_logic_misc``.
"""
[docs]
def __init__(self):
super().__init__()
self._AddLibraryClause(("IEEE", ))
self._AddPackageClause(("IEEE.std_logic_1164.all", ))
[docs]
@export
class Std_logic_misc_Body(PredefinedPackageBody):
"""
Predefined package body of package ``ieee.std_logic_misc``.
"""
[docs]
@export
class Numeric_Bit(PredefinedPackage):
"""
Predefined package ``ieee.numeric_bit``.
"""
[docs]
def __init__(self):
super().__init__()
self._AddPackageClause(("STD.TEXTIO.all", ))
[docs]
@export
class Numeric_Bit_Body(PredefinedPackageBody):
"""
Predefined package body of package ``ieee.numeric_bit``.
"""
[docs]
@export
class Numeric_Bit_Unsigned(PredefinedPackage):
"""
Predefined package ``ieee.numeric_bit_unsigned``.
"""
[docs]
@export
class Numeric_Bit_Unsigned_Body(PredefinedPackageBody):
"""
Predefined package body of package ``ieee.numeric_bit_unsigned``.
"""
[docs]
def __init__(self):
super().__init__()
self._AddLibraryClause(("IEEE", ))
self._AddPackageClause(("IEEE.numeric_bit.all", ))
[docs]
@export
class Numeric_Std(PredefinedPackage):
"""
Predefined package ``ieee.numeric_std``.
Predefined types:
* ``unresolved_unsigned``, ``unsigned``
* ``unresolved_signed``, ``signed``
"""
[docs]
def __init__(self):
super().__init__()
self._AddPackageClause(("STD.TEXTIO.all", ))
self._AddLibraryClause(("IEEE", ))
self._AddPackageClause(("IEEE.std_logic_1164.all", ))
unresolvedUnsigned = ArrayType("unresolved_unsigned", (SimpleSubtypeSymbol(SimpleName("natural")),), SimpleSubtypeSymbol(SimpleName("std_ulogic")))
self._types[unresolvedUnsigned._normalizedIdentifier] = unresolvedUnsigned
self._declaredItems.append(unresolvedUnsigned)
unsigned = Subtype("unsigned", SimpleSubtypeSymbol(SimpleName("unresolved_unsigned")))
unsigned._baseType = unresolvedUnsigned
self._subtypes[unsigned._normalizedIdentifier] = unsigned
self._declaredItems.append(unsigned)
unresolvedSigned = ArrayType("unresolved_signed", (SimpleSubtypeSymbol(SimpleName("natural")),), SimpleSubtypeSymbol(SimpleName("std_ulogic")))
self._types[unresolvedSigned._normalizedIdentifier] = unresolvedSigned
self._declaredItems.append(unresolvedSigned)
signed = Subtype("signed", SimpleSubtypeSymbol(SimpleName("unresolved_signed")))
signed._baseType = unresolvedSigned
self._subtypes[signed._normalizedIdentifier] = signed
self._declaredItems.append(signed)
[docs]
@export
class Numeric_Std_Body(PredefinedPackageBody):
"""
Predefined package body of package ``ieee.numeric_std``.
"""
[docs]
@export
class Numeric_Std_Unsigned(PredefinedPackage):
"""
Predefined package ``ieee.numeric_std_unsigned``.
"""
[docs]
def __init__(self):
super().__init__()
self._AddLibraryClause(("IEEE", ))
self._AddPackageClause(("IEEE.std_logic_1164.all", ))
[docs]
@export
class Numeric_Std_Unsigned_Body(PredefinedPackageBody):
"""
Predefined package body of package ``ieee.numeric_std_unsigned``.
"""
[docs]
def __init__(self):
super().__init__()
self._AddLibraryClause(("IEEE", ))
self._AddPackageClause(("IEEE.numeric_std.all", ))
[docs]
@export
class Fixed_Float_Types(PredefinedPackage):
"""
Predefined package ``ieee.fixed_float_types``.
"""
[docs]
@export
class Fixed_Generic_Pkg(PredefinedPackage):
"""
Predefined package ``ieee.fixed_generic_pkg``.
"""
[docs]
def __init__(self):
super().__init__()
self._AddPackageClause(("STD.TEXTIO.all", ))
self._AddLibraryClause(("IEEE", ))
self._AddPackageClause(("IEEE.STD_LOGIC_1164.all", ))
self._AddPackageClause(("IEEE.NUMERIC_STD.all", ))
self._AddPackageClause(("IEEE.fixed_float_types.all", ))
[docs]
@export
class Fixed_Generic_Pkg_Body(PredefinedPackageBody):
"""
Predefined package body of package ``ieee.fixed_generic_pkg``.
"""
[docs]
def __init__(self):
super().__init__()
self._AddLibraryClause(("IEEE", ))
self._AddPackageClause(("IEEE.MATH_REAL.all", ))
[docs]
@export
class Fixed_Pkg(PredefinedPackage):
"""
Predefined package ``ieee.fixed_pkg``.
"""
[docs]
def __init__(self):
super().__init__()
self._AddLibraryClause(("IEEE", ))
[docs]
@export
class Float_Generic_Pkg(PredefinedPackage):
"""
Predefined package ``ieee.float_generic_pkg``.
"""
[docs]
def __init__(self):
super().__init__()
self._AddPackageClause(("STD.TEXTIO.all", ))
self._AddLibraryClause(("IEEE", ))
self._AddPackageClause(("IEEE.STD_LOGIC_1164.all", ))
self._AddPackageClause(("IEEE.NUMERIC_STD.all", ))
self._AddPackageClause(("IEEE.fixed_float_types.all", ))
[docs]
@export
class Float_Generic_Pkg_Body(PredefinedPackageBody):
"""
Predefined package body of package ``ieee.float_generic_pkg``.
"""
[docs]
@export
class Float_Pkg(PredefinedPackage):
"""
Predefined package ``ieee.float_pkg``.
"""
[docs]
def __init__(self):
super().__init__()
self._AddLibraryClause(("IEEE", ))
PACKAGES = (
(Math_Real, Math_Real_Body),
(Math_Complex, Math_Complex_Body),
(Std_logic_1164, Std_logic_1164_Body),
(std_logic_textio, None),
(Numeric_Bit, Numeric_Bit_Body),
(Numeric_Bit_Unsigned, Numeric_Bit_Unsigned_Body),
(Numeric_Std, Numeric_Std_Body),
(Numeric_Std_Unsigned, Numeric_Std_Unsigned_Body),
(Fixed_Float_Types, None),
(Fixed_Generic_Pkg, Fixed_Generic_Pkg_Body),
(Fixed_Pkg, None),
(Float_Generic_Pkg, Float_Generic_Pkg_Body),
(Float_Pkg, None),
)
PACKAGES_SYNOPSYS = (
(Std_logic_misc, Std_logic_misc_Body),
)