Coverage for pyVHDLModel/STD.py: 100%
88 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-11 23:50 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-11 23:50 +0000
1# ==================================================================================================================== #
2# __ ___ _ ____ _ __ __ _ _ #
3# _ __ _ \ \ / / | | | _ \| | | \/ | ___ __| | ___| | #
4# | '_ \| | | \ \ / /| |_| | | | | | | |\/| |/ _ \ / _` |/ _ \ | #
5# | |_) | |_| |\ V / | _ | |_| | |___| | | | (_) | (_| | __/ | #
6# | .__/ \__, | \_/ |_| |_|____/|_____|_| |_|\___/ \__,_|\___|_| #
7# |_| |___/ #
8# ==================================================================================================================== #
9# Authors: #
10# Patrick Lehmann #
11# #
12# License: #
13# ==================================================================================================================== #
14# Copyright 2017-2026 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 SimpleRange, 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 """
63 Initializes the ``std`` library.
64 """
65 super().__init__(PACKAGES)
68@export
69class Standard(PredefinedPackage):
70 """
71 Predefined package ``std.standard``.
73 Predefined types:
75 * ``boolean``, ``boolean_vector``
76 * ``bit``, ``bit_vector``
77 * ``character``, ``string``
78 * ``integer``, ``integer_vector``
79 * ``natural``, ``positive``
80 * ``real``, ``real_vector``
81 * ``time``, ``time_vector``
82 * ``open_file_kind``, ``open_file_status``
84 .. seealso::
86 Matching :class:`Package Body <pyVHDLModel.STD.Standard_Body>` declaration.
87 """
89 def __init__(self) -> None:
90 """
91 Initializes the ``standard`` package.
92 """
93 super().__init__()
95 boolean = EnumeratedType("boolean", (EnumerationLiteral("false"), EnumerationLiteral("true")), None)
96 self._types[boolean._normalizedIdentifier] = boolean
97 self._declaredItems.append(boolean)
99 bit = EnumeratedType("bit", (EnumerationLiteral("'0'"), EnumerationLiteral("'1'")), None)
100 self._types[bit._normalizedIdentifier] = bit
101 self._declaredItems.append(bit)
103 chars = \
104 "nul", "soh", "stx", "etx", "eot", "enq", "ack", "bel", "bs", "ht", "lf", "vt", "ff", "cr", "so", "si", "dle", "dc1", "dc2", "dc3",\
105 "dc4", "nak", "syn", "etb", "can", "em", "sub", "esc", "fsp", "gsp", "rsp", "usp", "' '", "'!'", "'\"'", "'#'", "'$'", "'%'", "'&'", "'''",\
106 "'('", "')'", "'*'", "'+'", "','", "'-'", "'.'", "'/'", "'0'", "'1'", "'2'", "'3'", "'4'", "'5'", "'6'", "'7'", "'8'", "'9'", "':'", "';'",\
107 "'<'", "'='", "'>'", "'?'", "'@'", "'A'", "'B'", "'C'", "'D'", "'E'", "'F'", "'G'", "'H'", "'I'", "'J'", "'K'", "'L'", "'M'", "'N'", "'O'",\
108 "'P'", "'Q'", "'R'", "'S'", "'T'", "'U'", "'V'", "'W'", "'X'", "'Y'", "'Z'", "'['", "'\'", "']'", "'^'", "'_'", "'`'", "'a'", "'b'", "'c'",\
109 "'d'", "'e'", "'f'", "'g'", "'h'", "'i'", "'j'", "'k'", "'l'", "'m'", "'n'", "'o'", "'p'", "'q'", "'r'", "'s'", "'t'", "'u'", "'v'", "'w'",\
110 "'x'", "'y'", "'z'", "'{'", "'|'", "'}'", "'~'", "del", "c128", "c129", "c130", "c131", "c132", "c133", "c134", "c135", "c136", "c137", "c138", "c139",\
111 "c140", "c141", "c142", "c143", "c144", "c145", "c146", "c147", "c148", "c149", "c150", "c151", "c152", "c153", "c154", "c155", "c156", "c157", "c158", "c159",\
112 "' '", "'¡'", "'¢'", "'£'", "'¤'", "'¥'", "'¦'", "'§'", "'¨'", "'©'", "'ª'", "'«'", "'¬'", "''", "'®'", "'¯'", "'°'", "'±'", "'²'", "'³'",\
113 "'´'", "'µ'", "'¶'", "'·'", "'¸'", "'¹'", "'º'", "'»'", "'¼'", "'½'", "'¾'", "'¿'", "'À'", "'Á'", "'Â'", "'Ã'", "'Ä'", "'Å'", "'Æ'", "'Ç'",\
114 "'È'", "'É'", "'Ê'", "'Ë'", "'Ì'", "'Í'", "'Î'", "'Ï'", "'Ð'", "'Ñ'", "'Ò'", "'Ó'", "'Ô'", "'Õ'", "'Ö'", "'×'", "'Ø'", "'Ù'", "'Ú'", "'Û'",\
115 "'Ü'", "'Ý'", "'Þ'", "'ß'", "'à'", "'á'", "'â'", "'ã'", "'ä'", "'å'", "'æ'", "'ç'", "'è'", "'é'", "'ê'", "'ë'", "'ì'", "'í'", "'î'", "'ï'",\
116 "'ð'", "'ñ'", "'ò'", "'ó'", "'ô'", "'õ'", "'ö'", "'÷'", "'ø'", "'ù'", "'ú'", "'û'", "'ü'", "'ý'", "'þ'", "'ÿ'"
117 character = EnumeratedType("character", [EnumerationLiteral(char) for char in chars], None)
118 self._types[character._normalizedIdentifier] = character
119 self._declaredItems.append(character)
121 levels = "note", "warning", "error", "failure"
122 severityLevel = EnumeratedType("severityLevel", [EnumerationLiteral(level) for level in levels], None)
123 self._types[severityLevel._normalizedIdentifier] = severityLevel
124 self._declaredItems.append(severityLevel)
126 integer = IntegerType("integer", SimpleRange(IntegerLiteral(-2**31), IntegerLiteral(2**31 - 1), Direction.To), None)
127 self._types[integer._normalizedIdentifier] = integer
128 self._declaredItems.append(integer)
130 # real
131 real = RealType("real", SimpleRange(FloatingPointLiteral(-5.0), FloatingPointLiteral(5.0), Direction.To), None)
132 self._types[real._normalizedIdentifier] = real
133 self._declaredItems.append(real)
135 time = PhysicalType("time", SimpleRange(IntegerLiteral(-2**63), IntegerLiteral(2**63 - 1), Direction.To), primaryUnit="fs", units=(
136 ("ps", PhysicalIntegerLiteral(1000, "fs")),
137 ("ns", PhysicalIntegerLiteral(1000, "ps")),
138 ("us", PhysicalIntegerLiteral(1000, "ns")),
139 ("ms", PhysicalIntegerLiteral(1000, "us")),
140 ("sec", PhysicalIntegerLiteral(1000, "ms")),
141 ("min", PhysicalIntegerLiteral(60, "sec")),
142 ("hr", PhysicalIntegerLiteral(60, "min")),
143 ), parent=None)
144 self._types[time._normalizedIdentifier] = time
145 self._declaredItems.append(time)
147 # delay_length
149 # now
151 natural = Subtype("natural", SimpleSubtypeSymbol(SimpleName("integer")), None)
152 natural._baseType = integer
153 natural._range = SimpleRange(IntegerLiteral(0), IntegerLiteral(2**31 - 1), Direction.To)
154 self._subtypes[natural._normalizedIdentifier] = natural
155 self._declaredItems.append(natural)
157 positive = Subtype("positive", SimpleSubtypeSymbol(SimpleName("integer")), None)
158 positive._baseType = integer
159 positive._range = SimpleRange(IntegerLiteral(1), IntegerLiteral(2**31 - 1), Direction.To)
160 self._subtypes[positive._normalizedIdentifier] = positive
161 self._declaredItems.append(positive)
163 string = ArrayType("string", (SimpleSubtypeSymbol(SimpleName("positive")),), SimpleSubtypeSymbol(SimpleName("character")), None)
164 self._types[string._normalizedIdentifier] = string
165 self._declaredItems.append(string)
167 line = AccessType("line", SimpleSubtypeSymbol(SimpleName("character")), None)
168 self._types[line._normalizedIdentifier] = line
169 self._declaredItems.append(line)
171 booleanVector = ArrayType("boolean_vector", (SimpleSubtypeSymbol(SimpleName("natural")),), SimpleSubtypeSymbol(SimpleName("boolean")), None)
172 self._types[booleanVector._normalizedIdentifier] = booleanVector
173 self._declaredItems.append(booleanVector)
175 bitVector = ArrayType("bit_vector", (SimpleSubtypeSymbol(SimpleName("natural")),), SimpleSubtypeSymbol(SimpleName("bit")), None)
176 self._types[bitVector._normalizedIdentifier] = bitVector
177 self._declaredItems.append(bitVector)
179 integerVector = ArrayType("integer_vector", (SimpleSubtypeSymbol(SimpleName("natural")),), SimpleSubtypeSymbol(SimpleName("integer")), None)
180 self._types[integerVector._normalizedIdentifier] = integerVector
181 self._declaredItems.append(integerVector)
183 # real_vector
185 timeVector = ArrayType("time_vector", (SimpleSubtypeSymbol(SimpleName("natural")),), SimpleSubtypeSymbol(SimpleName("time")), None)
186 self._types[timeVector._normalizedIdentifier] = timeVector
187 self._declaredItems.append(timeVector)
189 fileOpenKinds = "read_mode", "write_mode", "append_mode"
190 openFileKind = EnumeratedType("open_file_kind", [EnumerationLiteral(kind) for kind in fileOpenKinds], None)
191 self._types[openFileKind._normalizedIdentifier] = openFileKind
192 self._declaredItems.append(openFileKind)
194 fileOpenStati = "open_ok", "status_error", "name_error", "mode_error"
195 fileOpenStatus = EnumeratedType("open_file_status", [EnumerationLiteral(status) for status in fileOpenStati], None)
196 self._types[fileOpenStatus._normalizedIdentifier] = fileOpenStatus
197 self._declaredItems.append(fileOpenStatus)
199 # attribute foreign
202@export
203class Standard_Body(PredefinedPackageBody):
204 """
205 Predefined package body of package ``std.standard``.
207 .. seealso::
209 Matching :class:`Package <pyVHDLModel.STD.Standard>` declaration.
210 """
213@export
214class TextIO(PredefinedPackage):
215 """
216 Predefined package ``std.textio``.
218 .. seealso::
220 Matching :class:`Package Body <pyVHDLModel.STD.TextIO_Body>` declaration.
221 """
224@export
225class TextIO_Body(PredefinedPackageBody):
226 """
227 Predefined package body of package ``std.textio``.
229 .. seealso::
231 Matching :class:`Package <pyVHDLModel.STD.TextIO>` declaration.
232 """
235@export
236class Env(PredefinedPackage):
237 """
238 Predefined package ``std.env``.
240 .. seealso::
242 Matching :class:`Package Body <pyVHDLModel.STD.Env_Body>` declaration.
243 """
245 def __init__(self) -> None:
246 """
247 Initializes the ``env`` package.
248 """
249 super().__init__()
251 self._AddPackageClause(("work.textio.all",))
254@export
255class Env_Body(PredefinedPackageBody):
256 """
257 Predefined package body of package ``std.env``.
259 .. seealso::
261 Matching :class:`Package <pyVHDLModel.STD.Env>` declaration.
262 """
265PACKAGES = (
266 (Standard, Standard_Body),
267 (TextIO, TextIO_Body),
268 (Env, Env_Body),
269)