Skip to content

Commit b76b71b

Browse files
committed
Create predefined types in std.standard.
1 parent 9062d28 commit b76b71b

File tree

1 file changed

+95
-2
lines changed

1 file changed

+95
-2
lines changed

pyVHDLModel/STD.py

Lines changed: 95 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,12 @@
3535
from pyTooling.Decorators import export
3636

3737
from pyVHDLModel import Library
38+
from pyVHDLModel.Base import Range, Direction
39+
from pyVHDLModel.Expression import EnumerationLiteral, IntegerLiteral, PhysicalIntegerLiteral
3840
from pyVHDLModel.Name import SimpleName, SelectedName, AllName
39-
from pyVHDLModel.Symbol import LibraryReferenceSymbol, PackageMemberReferenceSymbol, AllPackageMembersReferenceSymbol, PackageSymbol
41+
from pyVHDLModel.Symbol import LibraryReferenceSymbol, PackageMemberReferenceSymbol, AllPackageMembersReferenceSymbol, PackageSymbol, SimpleSubtypeSymbol
4042
from pyVHDLModel.DesignUnit import LibraryClause, UseClause, Package, PackageBody
43+
from pyVHDLModel.Type import EnumeratedType, IntegerType, Subtype, PhysicalType, ArrayType
4144

4245

4346
@export
@@ -105,7 +108,97 @@ def __init__(self):
105108

106109
@export
107110
class Standard(PredefinedPackage):
108-
pass
111+
def __init__(self):
112+
super().__init__()
113+
114+
boolean = EnumeratedType("boolean", (EnumerationLiteral("false"), EnumerationLiteral("true")))
115+
self._types[boolean.NormalizedIdentifier] = boolean
116+
117+
bit = EnumeratedType("bit", (EnumerationLiteral("'0'"), EnumerationLiteral("'1'")))
118+
self._types[bit.NormalizedIdentifier] = bit
119+
120+
chars = \
121+
"nul", "soh", "stx", "etx", "eot", "enq", "ack", "bel", "bs", "ht", "lf", "vt", "ff", "cr", "so", "si", "dle", "dc1", "dc2", "dc3",\
122+
"dc4", "nak", "syn", "etb", "can", "em", "sub", "esc", "fsp", "gsp", "rsp", "usp", "' '", "'!'", "'\"'", "'#'", "'$'", "'%'", "'&'", "'''",\
123+
"'('", "')'", "'*'", "'+'", "','", "'-'", "'.'", "'/'", "'0'", "'1'", "'2'", "'3'", "'4'", "'5'", "'6'", "'7'", "'8'", "'9'", "':'", "';'",\
124+
"'<'", "'='", "'>'", "'?'", "'@'", "'A'", "'B'", "'C'", "'D'", "'E'", "'F'", "'G'", "'H'", "'I'", "'J'", "'K'", "'L'", "'M'", "'N'", "'O'",\
125+
"'P'", "'Q'", "'R'", "'S'", "'T'", "'U'", "'V'", "'W'", "'X'", "'Y'", "'Z'", "'['", "'\'", "']'", "'^'", "'_'", "'`'", "'a'", "'b'", "'c'",\
126+
"'d'", "'e'", "'f'", "'g'", "'h'", "'i'", "'j'", "'k'", "'l'", "'m'", "'n'", "'o'", "'p'", "'q'", "'r'", "'s'", "'t'", "'u'", "'v'", "'w'",\
127+
"'x'", "'y'", "'z'", "'{'", "'|'", "'}'", "'~'", "del", "c128", "c129", "c130", "c131", "c132", "c133", "c134", "c135", "c136", "c137", "c138", "c139",\
128+
"c140", "c141", "c142", "c143", "c144", "c145", "c146", "c147", "c148", "c149", "c150", "c151", "c152", "c153", "c154", "c155", "c156", "c157", "c158", "c159",\
129+
"' '", "'¡'", "'¢'", "'£'", "'¤'", "'¥'", "'¦'", "'§'", "'¨'", "'©'", "'ª'", "'«'", "'¬'", "'­'", "'®'", "'¯'", "'°'", "'±'", "'²'", "'³'",\
130+
"'´'", "'µ'", "'¶'", "'·'", "'¸'", "'¹'", "'º'", "'»'", "'¼'", "'½'", "'¾'", "'¿'", "'À'", "'Á'", "'Â'", "'Ã'", "'Ä'", "'Å'", "'Æ'", "'Ç'",\
131+
"'È'", "'É'", "'Ê'", "'Ë'", "'Ì'", "'Í'", "'Î'", "'Ï'", "'Ð'", "'Ñ'", "'Ò'", "'Ó'", "'Ô'", "'Õ'", "'Ö'", "'×'", "'Ø'", "'Ù'", "'Ú'", "'Û'",\
132+
"'Ü'", "'Ý'", "'Þ'", "'ß'", "'à'", "'á'", "'â'", "'ã'", "'ä'", "'å'", "'æ'", "'ç'", "'è'", "'é'", "'ê'", "'ë'", "'ì'", "'í'", "'î'", "'ï'",\
133+
"'ð'", "'ñ'", "'ò'", "'ó'", "'ô'", "'õ'", "'ö'", "'÷'", "'ø'", "'ù'", "'ú'", "'û'", "'ü'", "'ý'", "'þ'", "'ÿ'"
134+
character = EnumeratedType("character", [EnumerationLiteral(char) for char in chars])
135+
self._types[character.NormalizedIdentifier] = character
136+
137+
levels = "note", "warning", "error", "failure"
138+
severityLevel = EnumeratedType("severityLevel", [EnumerationLiteral(level) for level in levels])
139+
self._types[severityLevel.NormalizedIdentifier] = severityLevel
140+
141+
integer = IntegerType("integer", Range(IntegerLiteral(-2**31), IntegerLiteral(2**31-1), Direction.To))
142+
self._types[integer.NormalizedIdentifier] = integer
143+
144+
# real
145+
146+
time = PhysicalType(
147+
"time",
148+
Range(IntegerLiteral(-2**63), IntegerLiteral(2**63-1), Direction.To),
149+
primaryUnit="fs",
150+
units=(
151+
("ps", PhysicalIntegerLiteral(1000, "fs")),
152+
("ns", PhysicalIntegerLiteral(1000, "ps")),
153+
("us", PhysicalIntegerLiteral(1000, "ns")),
154+
("ms", PhysicalIntegerLiteral(1000, "us")),
155+
("sec", PhysicalIntegerLiteral(1000, "ms")),
156+
("min", PhysicalIntegerLiteral(60, "sec")),
157+
("hr", PhysicalIntegerLiteral(60, "min")),
158+
)
159+
)
160+
self._types[time.NormalizedIdentifier] = time
161+
162+
# delay_length
163+
164+
# now
165+
166+
natural = Subtype("natural")
167+
natural._baseType = integer
168+
natural._range = Range(IntegerLiteral(0), IntegerLiteral(2**31-1), Direction.To)
169+
self._subtypes[natural.NormalizedIdentifier] = natural
170+
171+
positive = Subtype("positive")
172+
positive._baseType = integer
173+
positive._range = Range(IntegerLiteral(1), IntegerLiteral(2**31-1), Direction.To)
174+
self._subtypes[positive.NormalizedIdentifier] = positive
175+
176+
string = ArrayType("string", (SimpleSubtypeSymbol(SimpleName("positive")), ), SimpleSubtypeSymbol(SimpleName("character")))
177+
self._types[string.NormalizedIdentifier] = string
178+
179+
booleanVector = ArrayType("boolean_vector", (SimpleSubtypeSymbol(SimpleName("natural")), ), SimpleSubtypeSymbol(SimpleName("boolean")))
180+
self._types[booleanVector.NormalizedIdentifier] = booleanVector
181+
182+
bitVector = ArrayType("bit_vector", (SimpleSubtypeSymbol(SimpleName("natural")), ), SimpleSubtypeSymbol(SimpleName("bit")))
183+
self._types[bitVector.NormalizedIdentifier] = bitVector
184+
185+
integerVector = ArrayType("integer_vector", (SimpleSubtypeSymbol(SimpleName("natural")), ), SimpleSubtypeSymbol(SimpleName("integer")))
186+
self._types[integerVector.NormalizedIdentifier] = integerVector
187+
188+
# real_vector
189+
190+
timeVector = ArrayType("time_vector", (SimpleSubtypeSymbol(SimpleName("natural")), ), SimpleSubtypeSymbol(SimpleName("time")))
191+
self._types[timeVector.NormalizedIdentifier] = timeVector
192+
193+
fileOpenKinds = "read_mode", "write_mode", "append_mode"
194+
openFileKind = EnumeratedType("open_file_kind", [EnumerationLiteral(kind) for kind in fileOpenKinds])
195+
self._types[openFileKind.NormalizedIdentifier] = openFileKind
196+
197+
fileOpenStati = "open_ok", "status_error", "name_error", "mode_error"
198+
fileOpenStatus = EnumeratedType("open_file_status", [EnumerationLiteral(status) for status in fileOpenStati])
199+
self._types[fileOpenStatus.NormalizedIdentifier] = fileOpenStatus
200+
201+
# attribute foreign
109202

110203

111204
@export

0 commit comments

Comments
 (0)