Coverage for pyVHDLModel/STD.py: 100%
88 statements
« prev ^ index » next coverage.py v7.11.3, created at 2025-11-14 22:17 +0000
« prev ^ index » next coverage.py v7.11.3, created at 2025-11-14 22:17 +0000
1# ==================================================================================================================== #
2# __ ___ _ ____ _ __ __ _ _ #
3# _ __ _ \ \ / / | | | _ \| | | \/ | ___ __| | ___| | #
4# | '_ \| | | \ \ / /| |_| | | | | | | |\/| |/ _ \ / _` |/ _ \ | #
5# | |_) | |_| |\ V / | _ | |_| | |___| | | | (_) | (_| | __/ | #
6# | .__/ \__, | \_/ |_| |_|____/|_____|_| |_|\___/ \__,_|\___|_| #
7# |_| |___/ #
8# ==================================================================================================================== #
9# Authors: #
10# Patrick Lehmann #
11# #
12# License: #
13# ==================================================================================================================== #
14# Copyright 2017-2025 Patrick Lehmann - Boetzingen, Germany #
15# Copyright 2016-2017 Patrick Lehmann - Dresden, Germany #
16# #
17# Licensed under the Apache License, Version 2.0 (the "License"); #
18# you may not use this file except in compliance with the License. #
19# You may obtain a copy of the License at #
20# #
21# http://www.apache.org/licenses/LICENSE-2.0 #
22# #
23# Unless required by applicable law or agreed to in writing, software #
24# distributed under the License is distributed on an "AS IS" BASIS, #
25# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
26# See the License for the specific language governing permissions and #
27# limitations under the License. #
28# #
29# SPDX-License-Identifier: Apache-2.0 #
30# ==================================================================================================================== #
31#
32"""This module contains library and package declarations for VHDL library ``STD``."""
34from pyTooling.Decorators import export
36from pyVHDLModel.Base import Range, Direction
37from pyVHDLModel.Name import SimpleName
38from pyVHDLModel.Symbol import SimpleSubtypeSymbol
39from pyVHDLModel.Expression import EnumerationLiteral, IntegerLiteral, FloatingPointLiteral, PhysicalIntegerLiteral
40from pyVHDLModel.Type import EnumeratedType, IntegerType, RealType, PhysicalType, ArrayType, AccessType, Subtype
41from pyVHDLModel.Predefined import PredefinedLibrary, PredefinedPackage, PredefinedPackageBody
44@export
45class Std(PredefinedLibrary):
46 """
47 Predefined VHDL library ``std``.
49 The following predefined packages are in this library:
51 * :class:`~pyVHDLModel.STD.Standard`
52 * :class:`~pyVHDLModel.STD.Env`
53 * :class:`~pyVHDLModel.STD.TextIO`
55 .. seealso::
57 Other predefined libraries:
58 * Library :class:`~pyVHDLModel.IEEE.Ieee`
59 """
61 def __init__(self) -> None:
62 super().__init__(PACKAGES)
65@export
66class Standard(PredefinedPackage):
67 """
68 Predefined package ``std.standard``.
70 Predefined types:
72 * ``boolean``, ``boolean_vector``
73 * ``bit``, ``bit_vector``
74 * ``character``, ``string``
75 * ``integer``, ``integer_vector``
76 * ``natural``, ``positive``
77 * ``real``, ``real_vector``
78 * ``time``, ``time_vector``
79 * ``open_file_kind``, ``open_file_status``
81 .. seealso::
83 Matching :class:`Package Body <pyVHDLModel.STD.Standard_Body>` declaration.
84 """
86 def __init__(self) -> None:
87 super().__init__()
89 boolean = EnumeratedType("boolean", (EnumerationLiteral("false"), EnumerationLiteral("true")), None)
90 self._types[boolean._normalizedIdentifier] = boolean
91 self._declaredItems.append(boolean)
93 bit = EnumeratedType("bit", (EnumerationLiteral("'0'"), EnumerationLiteral("'1'")), None)
94 self._types[bit._normalizedIdentifier] = bit
95 self._declaredItems.append(bit)
97 chars = \
98 "nul", "soh", "stx", "etx", "eot", "enq", "ack", "bel", "bs", "ht", "lf", "vt", "ff", "cr", "so", "si", "dle", "dc1", "dc2", "dc3",\
99 "dc4", "nak", "syn", "etb", "can", "em", "sub", "esc", "fsp", "gsp", "rsp", "usp", "' '", "'!'", "'\"'", "'#'", "'$'", "'%'", "'&'", "'''",\
100 "'('", "')'", "'*'", "'+'", "','", "'-'", "'.'", "'/'", "'0'", "'1'", "'2'", "'3'", "'4'", "'5'", "'6'", "'7'", "'8'", "'9'", "':'", "';'",\
101 "'<'", "'='", "'>'", "'?'", "'@'", "'A'", "'B'", "'C'", "'D'", "'E'", "'F'", "'G'", "'H'", "'I'", "'J'", "'K'", "'L'", "'M'", "'N'", "'O'",\
102 "'P'", "'Q'", "'R'", "'S'", "'T'", "'U'", "'V'", "'W'", "'X'", "'Y'", "'Z'", "'['", "'\'", "']'", "'^'", "'_'", "'`'", "'a'", "'b'", "'c'",\
103 "'d'", "'e'", "'f'", "'g'", "'h'", "'i'", "'j'", "'k'", "'l'", "'m'", "'n'", "'o'", "'p'", "'q'", "'r'", "'s'", "'t'", "'u'", "'v'", "'w'",\
104 "'x'", "'y'", "'z'", "'{'", "'|'", "'}'", "'~'", "del", "c128", "c129", "c130", "c131", "c132", "c133", "c134", "c135", "c136", "c137", "c138", "c139",\
105 "c140", "c141", "c142", "c143", "c144", "c145", "c146", "c147", "c148", "c149", "c150", "c151", "c152", "c153", "c154", "c155", "c156", "c157", "c158", "c159",\
106 "' '", "'¡'", "'¢'", "'£'", "'¤'", "'¥'", "'¦'", "'§'", "'¨'", "'©'", "'ª'", "'«'", "'¬'", "''", "'®'", "'¯'", "'°'", "'±'", "'²'", "'³'",\
107 "'´'", "'µ'", "'¶'", "'·'", "'¸'", "'¹'", "'º'", "'»'", "'¼'", "'½'", "'¾'", "'¿'", "'À'", "'Á'", "'Â'", "'Ã'", "'Ä'", "'Å'", "'Æ'", "'Ç'",\
108 "'È'", "'É'", "'Ê'", "'Ë'", "'Ì'", "'Í'", "'Î'", "'Ï'", "'Ð'", "'Ñ'", "'Ò'", "'Ó'", "'Ô'", "'Õ'", "'Ö'", "'×'", "'Ø'", "'Ù'", "'Ú'", "'Û'",\
109 "'Ü'", "'Ý'", "'Þ'", "'ß'", "'à'", "'á'", "'â'", "'ã'", "'ä'", "'å'", "'æ'", "'ç'", "'è'", "'é'", "'ê'", "'ë'", "'ì'", "'í'", "'î'", "'ï'",\
110 "'ð'", "'ñ'", "'ò'", "'ó'", "'ô'", "'õ'", "'ö'", "'÷'", "'ø'", "'ù'", "'ú'", "'û'", "'ü'", "'ý'", "'þ'", "'ÿ'"
111 character = EnumeratedType("character", [EnumerationLiteral(char) for char in chars], None)
112 self._types[character._normalizedIdentifier] = character
113 self._declaredItems.append(character)
115 levels = "note", "warning", "error", "failure"
116 severityLevel = EnumeratedType("severityLevel", [EnumerationLiteral(level) for level in levels], None)
117 self._types[severityLevel._normalizedIdentifier] = severityLevel
118 self._declaredItems.append(severityLevel)
120 integer = IntegerType("integer", Range(IntegerLiteral(-2**31), IntegerLiteral(2**31 - 1), Direction.To), None)
121 self._types[integer._normalizedIdentifier] = integer
122 self._declaredItems.append(integer)
124 # real
125 real = RealType("real", Range(FloatingPointLiteral(-5.0), FloatingPointLiteral(5.0), Direction.To), None)
126 self._types[real._normalizedIdentifier] = real
127 self._declaredItems.append(real)
129 time = PhysicalType("time", Range(IntegerLiteral(-2**63), IntegerLiteral(2**63 - 1), Direction.To), primaryUnit="fs", units=(
130 ("ps", PhysicalIntegerLiteral(1000, "fs")),
131 ("ns", PhysicalIntegerLiteral(1000, "ps")),
132 ("us", PhysicalIntegerLiteral(1000, "ns")),
133 ("ms", PhysicalIntegerLiteral(1000, "us")),
134 ("sec", PhysicalIntegerLiteral(1000, "ms")),
135 ("min", PhysicalIntegerLiteral(60, "sec")),
136 ("hr", PhysicalIntegerLiteral(60, "min")),
137 ), parent=None)
138 self._types[time._normalizedIdentifier] = time
139 self._declaredItems.append(time)
141 # delay_length
143 # now
145 natural = Subtype("natural", SimpleSubtypeSymbol(SimpleName("integer")), None)
146 natural._baseType = integer
147 natural._range = Range(IntegerLiteral(0), IntegerLiteral(2**31 - 1), Direction.To)
148 self._subtypes[natural._normalizedIdentifier] = natural
149 self._declaredItems.append(natural)
151 positive = Subtype("positive", SimpleSubtypeSymbol(SimpleName("integer")), None)
152 positive._baseType = integer
153 positive._range = Range(IntegerLiteral(1), IntegerLiteral(2**31 - 1), Direction.To)
154 self._subtypes[positive._normalizedIdentifier] = positive
155 self._declaredItems.append(positive)
157 string = ArrayType("string", (SimpleSubtypeSymbol(SimpleName("positive")),), SimpleSubtypeSymbol(SimpleName("character")), None)
158 self._types[string._normalizedIdentifier] = string
159 self._declaredItems.append(string)
161 line = AccessType("line", SimpleSubtypeSymbol(SimpleName("character")), None)
162 self._types[line._normalizedIdentifier] = line
163 self._declaredItems.append(line)
165 booleanVector = ArrayType("boolean_vector", (SimpleSubtypeSymbol(SimpleName("natural")),), SimpleSubtypeSymbol(SimpleName("boolean")), None)
166 self._types[booleanVector._normalizedIdentifier] = booleanVector
167 self._declaredItems.append(booleanVector)
169 bitVector = ArrayType("bit_vector", (SimpleSubtypeSymbol(SimpleName("natural")),), SimpleSubtypeSymbol(SimpleName("bit")), None)
170 self._types[bitVector._normalizedIdentifier] = bitVector
171 self._declaredItems.append(bitVector)
173 integerVector = ArrayType("integer_vector", (SimpleSubtypeSymbol(SimpleName("natural")),), SimpleSubtypeSymbol(SimpleName("integer")), None)
174 self._types[integerVector._normalizedIdentifier] = integerVector
175 self._declaredItems.append(integerVector)
177 # real_vector
179 timeVector = ArrayType("time_vector", (SimpleSubtypeSymbol(SimpleName("natural")),), SimpleSubtypeSymbol(SimpleName("time")), None)
180 self._types[timeVector._normalizedIdentifier] = timeVector
181 self._declaredItems.append(timeVector)
183 fileOpenKinds = "read_mode", "write_mode", "append_mode"
184 openFileKind = EnumeratedType("open_file_kind", [EnumerationLiteral(kind) for kind in fileOpenKinds], None)
185 self._types[openFileKind._normalizedIdentifier] = openFileKind
186 self._declaredItems.append(openFileKind)
188 fileOpenStati = "open_ok", "status_error", "name_error", "mode_error"
189 fileOpenStatus = EnumeratedType("open_file_status", [EnumerationLiteral(status) for status in fileOpenStati], None)
190 self._types[fileOpenStatus._normalizedIdentifier] = fileOpenStatus
191 self._declaredItems.append(fileOpenStatus)
193 # attribute foreign
196@export
197class Standard_Body(PredefinedPackageBody):
198 """
199 Predefined package body of package ``std.standard``.
201 .. seealso::
203 Matching :class:`Package <pyVHDLModel.STD.Standard>` declaration.
204 """
207@export
208class TextIO(PredefinedPackage):
209 """
210 Predefined package ``std.textio``.
212 .. seealso::
214 Matching :class:`Package Body <pyVHDLModel.STD.TextIO_Body>` declaration.
215 """
218@export
219class TextIO_Body(PredefinedPackageBody):
220 """
221 Predefined package body of package ``std.textio``.
223 .. seealso::
225 Matching :class:`Package <pyVHDLModel.STD.TextIO>` declaration.
226 """
229@export
230class Env(PredefinedPackage):
231 """
232 Predefined package ``std.env``.
234 .. seealso::
236 Matching :class:`Package Body <pyVHDLModel.STD.Env_Body>` declaration.
237 """
239 def __init__(self) -> None:
240 super().__init__()
242 self._AddPackageClause(("work.textio.all",))
245@export
246class Env_Body(PredefinedPackageBody):
247 """
248 Predefined package body of package ``std.env``.
250 .. seealso::
252 Matching :class:`Package <pyVHDLModel.STD.Env>` declaration.
253 """
256PACKAGES = (
257 (Standard, Standard_Body),
258 (TextIO, TextIO_Body),
259 (Env, Env_Body),
260)