30
30
# ==================================================================================================================== #
31
31
#
32
32
"""This module contains library and package declarations for VHDL library ``IEEE``."""
33
- from pyTooling .Decorators import export
34
33
34
+ from typing import Optional as Nullable
35
+
36
+ from pyTooling .Decorators import export , readonly
37
+
38
+ from pyVHDLModel import IEEEFlavor
39
+ from pyVHDLModel .Exception import VHDLModelException
35
40
from pyVHDLModel .Expression import EnumerationLiteral
36
41
from pyVHDLModel .Name import SimpleName
37
42
from pyVHDLModel .Predefined import PredefinedLibrary , PredefinedPackage , PredefinedPackageBody
@@ -55,7 +60,6 @@ class Ieee(PredefinedLibrary):
55
60
56
61
* :class:`~pyVHDLModel.IEEE.Std_Logic_1164`
57
62
* :class:`~pyVHDLModel.IEEE.Std_Logic_TextIO`
58
- * :class:`~pyVHDLModel.IEEE.Std_Logic_Misc`
59
63
60
64
* Numeric
61
65
@@ -72,18 +76,57 @@ class Ieee(PredefinedLibrary):
72
76
* :class:`~pyVHDLModel.IEEE.Float_Generic_Pkg`
73
77
* :class:`~pyVHDLModel.IEEE.Float_Pkg`
74
78
79
+ * Mentor Graphics packages
80
+
81
+ * :class:`~pyVHDLModel.IEEE.Std_logic_arith`
82
+
83
+ * Synopsys packages
84
+
85
+ * :class:`~pyVHDLModel.IEEE.Std_logic_arith`
86
+ * :class:`~pyVHDLModel.IEEE.Std_logic_misc`
87
+ * :class:`~pyVHDLModel.IEEE.Std_logic_signed`
88
+ * :class:`~pyVHDLModel.IEEE.Std_logic_textio`
89
+ * :class:`~pyVHDLModel.IEEE.Std_logic_unsigned`
90
+
75
91
.. seealso::
76
92
77
93
Other predefined libraries:
78
94
* Library :class:`~pyVHDLModel.STD.Std`
79
95
"""
80
96
81
- def __init__ (self ) -> None :
97
+ _flavor : IEEEFlavor
98
+
99
+ def __init__ (self , flavor : Nullable [IEEEFlavor ] = None ) -> None :
82
100
super ().__init__ (PACKAGES )
83
101
102
+ self ._flavor = IEEEFlavor .IEEE
103
+ if flavor is None or flavor is IEEEFlavor .IEEE :
104
+ pass
105
+ elif flavor is IEEEFlavor .MentorGraphics :
106
+ self .LoadMentorGraphicsPackages ()
107
+ elif flavor is IEEEFlavor .Synopsys :
108
+ self .LoadSynopsysPackages ()
109
+ else :
110
+ raise VHDLModelException (f"Unknown IEEE library flavor '{ flavor } '." )
111
+ self ._flavor = flavor
112
+
113
+ @readonly
114
+ def Flavor (self ) -> IEEEFlavor :
115
+ return self ._flavor
116
+
117
+ def LoadMentorGraphicsPackages (self ) -> None :
118
+ if self ._flavor is not IEEEFlavor .IEEE :
119
+ raise VHDLModelException (f"IEEE library flavor is '{ self ._flavor } ' and can't be changed to '{ IEEEFlavor .MentorGraphics } '." )
120
+
121
+ self ._flavor = IEEEFlavor .MentorGraphics
122
+ self .AddPackages (MENTOR_GRAPHICS_PACKAGES )
123
+
84
124
def LoadSynopsysPackages (self ) -> None :
85
- self .AddPackages (PACKAGES_SYNOPSYS )
125
+ if self ._flavor is not IEEEFlavor .IEEE :
126
+ raise VHDLModelException (f"IEEE library flavor is '{ self ._flavor } ' and can't be changed to '{ IEEEFlavor .MentorGraphics } '." )
86
127
128
+ self ._flavor = IEEEFlavor .Synopsys
129
+ self .AddPackages (SYNOPSYS_PACKAGES )
87
130
88
131
89
132
@export
@@ -125,7 +168,7 @@ def __init__(self) -> None:
125
168
126
169
127
170
@export
128
- class Std_logic_1164 (PredefinedPackage ):
171
+ class Std_Logic_1164 (PredefinedPackage ):
129
172
"""
130
173
Predefined package ``ieee.std_logic_1164``.
131
174
@@ -170,14 +213,14 @@ def __init__(self) -> None:
170
213
171
214
172
215
@export
173
- class Std_logic_1164_Body (PredefinedPackageBody ):
216
+ class Std_Logic_1164_Body (PredefinedPackageBody ):
174
217
"""
175
218
Predefined package body of package ``ieee.std_logic_1164``.
176
219
"""
177
220
178
221
179
222
@export
180
- class std_logic_textio (PredefinedPackage ):
223
+ class Std_Logic_TextIO (PredefinedPackage ):
181
224
"""
182
225
Predefined package ``ieee.std_logic_textio``.
183
226
"""
@@ -190,26 +233,6 @@ def __init__(self) -> None:
190
233
self ._AddPackageClause (("IEEE.std_logic_1164.all" , ))
191
234
192
235
193
- @export
194
- class Std_logic_misc (PredefinedPackage ):
195
- """
196
- Predefined package ``ieee.std_logic_misc``.
197
- """
198
-
199
- def __init__ (self ) -> None :
200
- super ().__init__ ()
201
-
202
- self ._AddLibraryClause (("IEEE" , ))
203
- self ._AddPackageClause (("IEEE.std_logic_1164.all" , ))
204
-
205
-
206
- @export
207
- class Std_logic_misc_Body (PredefinedPackageBody ):
208
- """
209
- Predefined package body of package ``ieee.std_logic_misc``.
210
- """
211
-
212
-
213
236
@export
214
237
class Numeric_Bit (PredefinedPackage ):
215
238
"""
@@ -404,8 +427,8 @@ def __init__(self) -> None:
404
427
PACKAGES = (
405
428
(Math_Real , Math_Real_Body ),
406
429
(Math_Complex , Math_Complex_Body ),
407
- (Std_logic_1164 , Std_logic_1164_Body ),
408
- (std_logic_textio , None ),
430
+ (Std_Logic_1164 , Std_Logic_1164_Body ),
431
+ (Std_Logic_TextIO , None ),
409
432
(Numeric_Bit , Numeric_Bit_Body ),
410
433
(Numeric_Bit_Unsigned , Numeric_Bit_Unsigned_Body ),
411
434
(Numeric_Std , Numeric_Std_Body ),
@@ -417,6 +440,114 @@ def __init__(self) -> None:
417
440
(Float_Pkg , None ),
418
441
)
419
442
420
- PACKAGES_SYNOPSYS = (
421
- (Std_logic_misc , Std_logic_misc_Body ),
443
+
444
+ @export
445
+ class Std_Logic_Arith (PredefinedPackage ):
446
+ """
447
+ Predefined Mentor Graphics package ``ieee.std_logic_arith``.
448
+ """
449
+
450
+ def __init__ (self ) -> None :
451
+ super ().__init__ ()
452
+
453
+ self ._AddLibraryClause (("IEEE" , ))
454
+
455
+ # used inside of package
456
+ # self._AddPackageClause(("IEEE.std_logic_1164.all", ))
457
+
458
+
459
+ @export
460
+ class Std_Logic_Arith_Body (PredefinedPackageBody ):
461
+ """
462
+ Predefined package body of Mentor Graphics package ``ieee.std_logic_arith``.
463
+ """
464
+
465
+
466
+ MENTOR_GRAPHICS_PACKAGES = (
467
+ (Std_Logic_Arith , Std_Logic_Arith_Body ),
468
+ )
469
+
470
+
471
+ @export
472
+ class Std_Logic_Arith (PredefinedPackage ):
473
+ """
474
+ Predefined Synopsys package ``ieee.std_logic_arith``.
475
+ """
476
+
477
+ def __init__ (self ) -> None :
478
+ super ().__init__ ()
479
+
480
+ self ._AddLibraryClause (("IEEE" , ))
481
+ self ._AddPackageClause (("IEEE.std_logic_1164.all" , ))
482
+
483
+
484
+ @export
485
+ class Std_Logic_Misc (PredefinedPackage ):
486
+ """
487
+ Predefined Synopsys package ``ieee.std_logic_misc``.
488
+ """
489
+
490
+ def __init__ (self ) -> None :
491
+ super ().__init__ ()
492
+
493
+ self ._AddLibraryClause (("IEEE" , ))
494
+ self ._AddPackageClause (("IEEE.std_logic_1164.all" , ))
495
+
496
+
497
+ @export
498
+ class Std_Logic_Misc_Body (PredefinedPackageBody ):
499
+ """
500
+ Predefined package body of Synopsys package ``ieee.std_logic_misc``.
501
+ """
502
+
503
+
504
+ @export
505
+ class Std_Logic_Signed (PredefinedPackage ):
506
+ """
507
+ Predefined Synopsys package ``ieee.std_logic_signed``.
508
+ """
509
+
510
+ def __init__ (self ) -> None :
511
+ super ().__init__ ()
512
+
513
+ self ._AddLibraryClause (("IEEE" , ))
514
+ self ._AddPackageClause (("IEEE.std_logic_1164.all" , ))
515
+ self ._AddPackageClause (("IEEE.std_logic_arith.all" , ))
516
+
517
+
518
+ @export
519
+ class Std_Logic_TextIO (PredefinedPackage ):
520
+ """
521
+ Predefined Synopsys package ``ieee.std_logic_textio``.
522
+ """
523
+
524
+ def __init__ (self ) -> None :
525
+ super ().__init__ ()
526
+
527
+ self ._AddPackageClause (("STD.textio.all" , ))
528
+
529
+ self ._AddLibraryClause (("IEEE" , ))
530
+ self ._AddPackageClause (("IEEE.std_logic_1164.all" , ))
531
+
532
+
533
+ @export
534
+ class Std_Logic_Unsigned (PredefinedPackage ):
535
+ """
536
+ Predefined Synopsys package ``ieee.std_logic_unsigned``.
537
+ """
538
+
539
+ def __init__ (self ) -> None :
540
+ super ().__init__ ()
541
+
542
+ self ._AddLibraryClause (("IEEE" , ))
543
+ self ._AddPackageClause (("IEEE.std_logic_1164.all" , ))
544
+ self ._AddPackageClause (("IEEE.std_logic_arith.all" , ))
545
+
546
+
547
+ SYNOPSYS_PACKAGES = (
548
+ (Std_Logic_Arith , None ),
549
+ (Std_Logic_Misc , Std_Logic_Misc_Body ),
550
+ (Std_Logic_Signed , None ),
551
+ (Std_Logic_TextIO , None ),
552
+ (Std_Logic_Unsigned , None ),
422
553
)
0 commit comments