forked from rls129/Lizard
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.py
More file actions
107 lines (96 loc) · 7.2 KB
/
utils.py
File metadata and controls
107 lines (96 loc) · 7.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
from lark import Tree, Token
def treerecursive(ast: Tree[Token]|Token, indent = 0):
if isinstance(ast, Tree):
print("___"*indent, "Tree", ast.data.type, ast.data.value)
for c in ast.children:
treerecursive(c, indent+1)
elif isinstance(ast, Token):
print("___"*indent, "Token", ast.type, ast.value)
else:
print("This cannot happen")
default_values = {
"std_logic": 'u',
"std_ulogic": 'u',
"integer": 0,
"boolean": "false",
# TODO more default values
}
cast_map = {
"std_ulogic": "BIT_LITERAL",
"std_logic" : "BIT_LITERAL" ,
"BIT_LITERAL" : "BIT_LITERAL",
"BVALUE": "BVALUE",
"OVALUE": "OVALUE",
"XVALUE": "XVALUE",
"integer": "integer",
"STRING" : "STRING",
"CHARACTER_LITERAL": "CHARACTER_LITERAL",
"bool" : "bool",
"INT" : "INT",
None: None
}
resolution_table = {
('u', 'u'): 'u', ('x', 'u') :'u', ('0', 'u'): 'u', ('1', 'u'): 'u', ('z', 'u'): 'u', ('w', 'u'): 'u',('l', 'u'): 'u', ('h', 'u'):'u', ('-', 'u'): 'u',
('u', 'x'): 'u', ('x', 'x') :'x', ('0', 'x'): 'x', ('1', 'x'): 'x', ('z', 'x'): 'x', ('w', 'x'): 'x',('l', 'x'): 'x', ('h', 'x'):'x', ('-', 'x'): 'x',
('u', '0'): 'u', ('x', '0') :'x', ('0', '0'): '0', ('1', '0'): 'x', ('z', '0'): '0', ('w', '0'): '0',('l', '0'): '0', ('h', '0'):'0', ('-', '0'): 'x',
('u', '1'): 'u', ('x', '1') :'x', ('0', '1'): 'x', ('1', '1'): '1', ('z', '1'): '1', ('w', '1'): '1',('l', '1'): '1', ('h', '1'):'1', ('-', '1'): 'x',
('u', 'z'): 'u', ('x', 'z') :'x', ('0', 'z'): '0', ('1', 'z'): '1', ('z', 'z'): 'z', ('w', 'z'): 'w',('l', 'z'): 'l', ('h', 'z'):'h', ('-', 'z'): 'x',
('u', 'w'): 'u', ('x', 'w') :'x', ('0', 'w'): '0', ('1', 'w'): '1', ('z', 'w'): 'w', ('w', 'w'): 'w',('l', 'w'): 'w', ('h', 'w'):'w', ('-', 'w'): 'x',
('u', 'l'): 'u', ('x', 'l') :'x', ('0', 'l'): '0', ('1', 'l'): '1', ('z', 'l'): 'l', ('w', 'l'): 'w',('l', 'l'): 'l', ('h', 'l'):'w', ('-', 'l'): 'x',
('u', 'h'): 'u', ('x', 'h') :'x', ('0', 'h'): '0', ('1', 'h'): '1', ('z', 'h'): 'h', ('w', 'h'): 'w',('l', 'h'): 'w', ('h', 'h'):'h', ('-', 'h'): 'x',
('u', '-'): 'u', ('x', '-') :'x', ('0', '-'): 'x', ('1', '-'): 'x', ('z', '-'): 'x', ('w', '-'): 'x',('l', '-'): 'x', ('h', '-'):'x', ('-', '-'): 'x',
}
or_table = {
('u', 'u'): 'u', ('x', 'u') :'u', ('0', 'u'): 'u', ('1', 'u'): '1', ('z', 'u'): 'u', ('w', 'u'): 'u',('l', 'u'): 'u', ('h', 'u'):'1', ('-', 'u'): 'u',
('u', 'x'): 'u', ('x', 'x') :'x', ('0', 'x'): 'x', ('1', 'x'): '1', ('z', 'x'): 'x', ('w', 'x'): 'x',('l', 'x'): 'x', ('h', 'x'):'1', ('-', 'x'): 'x',
('u', '0'): 'u', ('x', '0') :'x', ('0', '0'): '0', ('1', '0'): '1', ('z', '0'): 'x', ('w', '0'): 'x',('l', '0'): '0', ('h', '0'):'1', ('-', '0'): 'x',
('u', '1'): '1', ('x', '1') :'1', ('0', '1'): '1', ('1', '1'): '1', ('z', '1'): '1', ('w', '1'): '1',('l', '1'): '1', ('h', '1'):'1', ('-', '1'): '1',
('u', 'z'): 'u', ('x', 'z') :'x', ('0', 'z'): 'x', ('1', 'z'): '1', ('z', 'z'): 'x', ('w', 'z'): 'x',('l', 'z'): 'x', ('h', 'z'):'1', ('-', 'z'): 'x',
('u', 'w'): 'u', ('x', 'w') :'x', ('0', 'w'): 'x', ('1', 'w'): '1', ('z', 'w'): 'x', ('w', 'w'): 'x',('l', 'w'): 'x', ('h', 'w'):'1', ('-', 'w'): 'x',
('u', 'l'): 'u', ('x', 'l') :'x', ('0', 'l'): '0', ('1', 'l'): '1', ('z', 'l'): 'x', ('w', 'l'): 'x',('l', 'l'): '0', ('h', 'l'):'1', ('-', 'l'): 'x',
('u', 'h'): '1', ('x', 'h') :'1', ('0', 'h'): '1', ('1', 'h'): '1', ('z', 'h'): '1', ('w', 'h'): '1',('l', 'h'): '1', ('h', 'h'):'1', ('-', 'h'): '1',
('u', '-'): 'u', ('x', '-') :'x', ('0', '-'): 'x', ('1', '-'): '1', ('z', '-'): 'x', ('w', '-'): 'x',('l', '-'): 'x', ('h', '-'):'1', ('-', '-'): 'x',
}
and_table = {
('u', 'u'): 'u', ('x', 'u') :'u', ('0', 'u'): '0', ('1', 'u'): 'u', ('z', 'u'): 'u', ('w', 'u'): 'u',('l', 'u'): '0', ('h', 'u'):'u', ('-', 'u'): 'u',
('u', 'x'): 'u', ('x', 'x') :'x', ('0', 'x'): '0', ('1', 'x'): 'x', ('z', 'x'): 'x', ('w', 'x'): 'x',('l', 'x'): '0', ('h', 'x'):'x', ('-', 'x'): 'x',
('u', '0'): '0', ('x', '0') :'0', ('0', '0'): '0', ('1', '0'): '0', ('z', '0'): '0', ('w', '0'): '0',('l', '0'): '0', ('h', '0'):'0', ('-', '0'): '0',
('u', '1'): 'u', ('x', '1') :'x', ('0', '1'): '0', ('1', '1'): '1', ('z', '1'): 'x', ('w', '1'): 'x',('l', '1'): '0', ('h', '1'):'1', ('-', '1'): 'x',
('u', 'z'): 'u', ('x', 'z') :'x', ('0', 'z'): '0', ('1', 'z'): 'x', ('z', 'z'): 'x', ('w', 'z'): 'x',('l', 'z'): '0', ('h', 'z'):'x', ('-', 'z'): 'x',
('u', 'w'): 'u', ('x', 'w') :'x', ('0', 'w'): '0', ('1', 'w'): 'x', ('z', 'w'): 'x', ('w', 'w'): 'x',('l', 'w'): '0', ('h', 'w'):'x', ('-', 'w'): 'x',
('u', 'l'): '0', ('x', 'l') :'0', ('0', 'l'): '0', ('1', 'l'): '0', ('z', 'l'): '0', ('w', 'l'): '0',('l', 'l'): '0', ('h', 'l'):'0', ('-', 'l'): '0',
('u', 'h'): 'u', ('x', 'h') :'x', ('0', 'h'): '0', ('1', 'h'): '1', ('z', 'h'): 'x', ('w', 'h'): 'x',('l', 'h'): '0', ('h', 'h'):'1', ('-', 'h'): 'x',
('u', '-'): 'u', ('x', '-') :'x', ('0', '-'): '0', ('1', '-'): 'x', ('z', '-'): 'x', ('w', '-'): 'x',('l', '-'): '0', ('h', '-'):'x', ('-', '-'): 'x',
}
xor_table = {
('u', 'u'): 'u', ('x', 'u') :'u', ('0', 'u'): 'u', ('1', 'u'): 'u', ('z', 'u'): 'u', ('w', 'u'): 'u',('l', 'u'): 'u', ('h', 'u'):'u', ('-', 'u'): 'u',
('u', 'x'): 'u', ('x', 'x') :'x', ('0', 'x'): 'x', ('1', 'x'): 'x', ('z', 'x'): 'x', ('w', 'x'): 'x',('l', 'x'): 'x', ('h', 'x'):'x', ('-', 'x'): 'x',
('u', '0'): 'u', ('x', '0') :'x', ('0', '0'): '0', ('1', '0'): '1', ('z', '0'): 'x', ('w', '0'): 'x',('l', '0'): '0', ('h', '0'):'1', ('-', '0'): 'x',
('u', '1'): 'u', ('x', '1') :'x', ('0', '1'): '1', ('1', '1'): '0', ('z', '1'): 'x', ('w', '1'): 'x',('l', '1'): '1', ('h', '1'):'0', ('-', '1'): 'x',
('u', 'z'): 'u', ('x', 'z') :'x', ('0', 'z'): 'x', ('1', 'z'): 'x', ('z', 'z'): 'x', ('w', 'z'): 'x',('l', 'z'): 'x', ('h', 'z'):'x', ('-', 'z'): 'x',
('u', 'w'): 'u', ('x', 'w') :'x', ('0', 'w'): 'x', ('1', 'w'): 'x', ('z', 'w'): 'x', ('w', 'w'): 'x',('l', 'w'): 'x', ('h', 'w'):'x', ('-', 'w'): 'x',
('u', 'l'): 'u', ('x', 'l') :'x', ('0', 'l'): '0', ('1', 'l'): '1', ('z', 'l'): 'x', ('w', 'l'): 'x',('l', 'l'): '0', ('h', 'l'):'1', ('-', 'l'): 'x',
('u', 'h'): 'u', ('x', 'h') :'x', ('0', 'h'): '1', ('1', 'h'): '0', ('z', 'h'): 'x', ('w', 'h'): 'x',('l', 'h'): '1', ('h', 'h'):'0', ('-', 'h'): 'x',
('u', '-'): 'u', ('x', '-') :'x', ('0', '-'): 'x', ('1', '-'): 'x', ('z', '-'): 'x', ('w', '-'): 'x',('l', '-'): 'x', ('h', '-'):'x', ('-', '-'): 'x',
}
not_table = {'u': 'u', 'x': 'x', '0': '1', '1': '0', 'z': 'x', 'w': 'x', 'l':'1', 'h': '0', '-': 'x' }
def evaluate(operation, value1, value2, type_expn):
if type_expn == "std_logic":
if operation == "and":
return and_table[(value1, value2)]
if operation == "or":
return or_table[(value1, value2)]
if operation == "xor":
return xor_table[(value1, value2)]
if operation == "nor":
return not_table[or_table[(value1, value2)]]
if operation == "nand":
return not_table[and_table[(value1, value2)]]
if operation == "xnor":
return not_table[xor_table[(value1, value2)]]
if type_expn == "std_ulogic":
pass
if type_expn == "BIT_LITERAL":
pass
if type_expn == "INTEGER":
pass