Skip to content

Commit 9a86523

Browse files
committed
refactoring bindlibrary
1 parent 48b98da commit 9a86523

File tree

2 files changed

+39
-41
lines changed

2 files changed

+39
-41
lines changed

pyverilog_toolbox/testcode/test_ra.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import sys
1212
import os
13+
import unittest
1314

1415
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) )
1516

@@ -20,7 +21,6 @@
2021
from pyverilog_toolbox.verify_tool.codeclone_finder import CodeCloneFinder
2122
from pyverilog_toolbox.verify_tool.unreferenced_finder import UnreferencedFinder
2223
from pyverilog_toolbox.verify_tool.metrics_calculator import MetricsCalculator
23-
import unittest
2424

2525
class TestSequenceFunctions(unittest.TestCase):
2626
def setUp(self):

pyverilog_toolbox/verify_tool/bindlibrary.py

Lines changed: 38 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ def make_scope_dict(terms):
2727
""" [FUNCTIONS] for getScopeChaindict
2828
make {string: ScopeChain, ...} from binddict
2929
"""
30-
return_dict = {}
30+
scope_dict = {}
3131
for scope in terms.keys():
32-
return_dict[str(scope)] = scope
33-
return return_dict
32+
scope_dict[str(scope)] = scope
33+
return scope_dict
3434

3535
self._binddict = binddict
3636
self._terms = terms
@@ -44,12 +44,12 @@ def dfx_memoize(f):
4444
Using self.cache.
4545
"""
4646
def helper(self, target_tree, tree_list, bit, dftype):
47-
if dftype == pyverilog.dataflow.dataflow.DFTerminal:
47+
if dftype == DFTerminal:
4848
if (target_tree,bit) not in self.cache:
4949
self.cache[(target_tree,bit)] = f(self, target_tree, set([]), bit, dftype)
50-
return tree_list.union(self.cache[(target_tree,bit)])
50+
return tree_list.union(self.cache[(target_tree, bit)])
5151
else:
52-
return f(self, target_tree, tree_list,bit,dftype)
52+
return f(self, target_tree, tree_list, bit, dftype)
5353
return helper
5454

5555
@dfx_memoize
@@ -61,7 +61,7 @@ def extract_all_dfxxx(self, target_tree, tree_list, bit, dftype):
6161
bit: signal bit pointer
6262
dftype: DFOperator or DFIntConst or ,...
6363
"""
64-
if dftype == pyverilog.dataflow.dataflow.DFTerminal and isinstance(target_tree, pyverilog.dataflow.dataflow.DFTerminal):
64+
if dftype == DFTerminal and isinstance(target_tree, DFTerminal):
6565
target_scope = self.get_scope(target_tree)
6666
if target_scope in self._binddict.keys():
6767
target_bind, target_term_lsb = self.get_next_bind(target_scope, bit)
@@ -74,7 +74,7 @@ def extract_all_dfxxx(self, target_tree, tree_list, bit, dftype):
7474
tree_list.add((target_tree, bit))
7575

7676
if hasattr(target_tree, "nextnodes"):
77-
if isinstance(target_tree, pyverilog.dataflow.dataflow.DFConcat):
77+
if isinstance(target_tree, DFConcat):
7878
now_max_bit = 0
7979
now_min_bit = 0
8080
for nextnode in reversed(target_tree.nextnodes):
@@ -85,22 +85,21 @@ def extract_all_dfxxx(self, target_tree, tree_list, bit, dftype):
8585
now_min_bit = now_max_bit + 1
8686
else:
8787
for nextnode in target_tree.nextnodes:
88-
if isinstance(target_tree, pyverilog.dataflow.dataflow.DFBranch) and nextnode == target_tree.condnode:
88+
if isinstance(target_tree, DFBranch) and nextnode == target_tree.condnode:
8989
tree_list = self.extract_all_dfxxx(nextnode,tree_list, 0, dftype)
9090
else:
9191
tree_list = self.extract_all_dfxxx(nextnode,tree_list, bit, dftype)
92-
elif isinstance(target_tree, pyverilog.dataflow.dataflow.DFBranch):
92+
elif isinstance(target_tree, DFBranch):
9393
tree_list = self.extract_all_dfxxx(target_tree.condnode, tree_list, 0, dftype)
9494
tree_list = self.extract_all_dfxxx(target_tree.truenode, tree_list, bit, dftype)
9595
tree_list = self.extract_all_dfxxx(target_tree.falsenode, tree_list, bit, dftype)
96-
elif isinstance(target_tree, pyverilog.dataflow.dataflow.DFTerminal):
96+
elif isinstance(target_tree, DFTerminal):
9797
target_scope = self.get_scope(target_tree)
9898
if target_scope in self._binddict.keys():
9999
target_bind, target_term_lsb = self.get_next_bind(target_scope, bit)
100100
if target_bind.isCombination():
101101
tree_list = self.extract_all_dfxxx(target_bind.tree, tree_list, bit, dftype)
102-
elif isinstance(target_tree, pyverilog.dataflow.dataflow.DFPartselect):
103-
#ref_bit = eval_value(target_tree.lsb) + bit
102+
elif isinstance(target_tree, DFPartselect):
104103
ref_bit = eval_value(target_tree.lsb) + bit - eval_value(self._terms[self.scope_dict[str(target_tree.var)]].lsb)
105104
tree_list = self.extract_all_dfxxx(target_tree.var, tree_list, ref_bit, dftype)
106105
return tree_list
@@ -122,7 +121,7 @@ def search_combloop(self, target_tree, bit, start_tree, start_bit, find_cnt=0, r
122121
raise CombLoopException(str(start_tree) + ' may be combinational loop, or too complex logic (concern over 1000 variable).')
123122

124123
if hasattr(target_tree, "nextnodes"):
125-
if isinstance(target_tree, pyverilog.dataflow.dataflow.DFConcat):
124+
if isinstance(target_tree, DFConcat):
126125
now_max_bit = 0
127126
now_min_bit = 0
128127
for nextnode in reversed(target_tree.nextnodes):
@@ -133,21 +132,21 @@ def search_combloop(self, target_tree, bit, start_tree, start_bit, find_cnt=0, r
133132
now_min_bit = now_max_bit + 1
134133
else:
135134
for nextnode in target_tree.nextnodes:
136-
if isinstance(target_tree, pyverilog.dataflow.dataflow.DFBranch) and nextnode == target_tree.condnode:
135+
if isinstance(target_tree, DFBranch) and nextnode == target_tree.condnode:
137136
self.search_combloop(nextnode, 0, start_tree, start_bit, find_cnt, rec_call_cnt)
138137
else:
139138
self.search_combloop(nextnode, bit, start_tree, start_bit, find_cnt, rec_call_cnt)
140-
elif isinstance(target_tree, pyverilog.dataflow.dataflow.DFBranch):
139+
elif isinstance(target_tree, DFBranch):
141140
self.search_combloop(target_tree.condnode, 0, start_tree, start_bit, find_cnt, rec_call_cnt)
142141
self.search_combloop(target_tree.truenode, bit, start_tree, start_bit, find_cnt, rec_call_cnt)
143142
self.search_combloop(target_tree.falsenode, bit, start_tree, start_bit, find_cnt, rec_call_cnt)
144-
elif isinstance(target_tree, pyverilog.dataflow.dataflow.DFTerminal):
143+
elif isinstance(target_tree, DFTerminal):
145144
target_scope = self.get_scope(target_tree)
146145
if target_scope in self._binddict.keys():
147146
target_bind, target_term_lsb = self.get_next_bind(target_scope, bit)
148147
if target_bind.isCombination():
149148
self.search_combloop(target_bind.tree, bit, start_tree, start_bit, find_cnt, rec_call_cnt)
150-
elif isinstance(target_tree, pyverilog.dataflow.dataflow.DFPartselect):
149+
elif isinstance(target_tree, DFPartselect):
151150
ref_bit = eval_value(target_tree.lsb) + bit - eval_value(self._terms[self.scope_dict[str(target_tree.var)]].lsb)
152151
self.search_combloop(target_tree.var, ref_bit, start_tree, start_bit, find_cnt, rec_call_cnt)
153152
return
@@ -171,7 +170,6 @@ def get_next_bind(self, scope, bit):
171170
if scope in self._binddict.keys():
172171
target_binds = self._binddict[scope]
173172
target_bind_index = self.get_bind_index(target_binds, bit + eval_value(self._terms[scope].lsb), self._terms[scope])
174-
#target_bind_index = self.get_bind_index(target_binds, bit, self._terms[scope])
175173
target_bind = target_binds[target_bind_index]
176174
return target_bind, eval_value(self._terms[scope].lsb)
177175
else:
@@ -197,30 +195,30 @@ def get_bind_index(self, binds=None, bit=None, term=None, scope=None):
197195

198196
def get_bit_width_from_tree(self, tree):
199197
onebit_comb = ('Ulnot','Unot','Eq', 'Ne','Lor','Land','Unand','Uor','Unor','Uxor','Uxnor')
200-
if isinstance(tree, pyverilog.dataflow.dataflow.DFTerminal):
198+
if isinstance(tree, DFTerminal):
201199
term = self._terms[self.get_scope(tree)]
202200
return eval_value(term.msb) + 1
203-
elif isinstance(tree, pyverilog.dataflow.dataflow.DFPartselect):
201+
elif isinstance(tree, DFPartselect):
204202
return eval_value(tree.msb) - eval_value(tree.lsb) + 1
205-
elif isinstance(tree, pyverilog.dataflow.dataflow.DFOperator):
203+
elif isinstance(tree, DFOperator):
206204
if tree.operator in onebit_comb:
207205
return 1
208206
else:
209207
each_sizes = (self.get_bit_width_from_tree(nextnode) for nextnode in tree.nextnodes)
210208
return min(each_sizes)
211-
elif isinstance(tree, pyverilog.dataflow.dataflow.DFIntConst):
209+
elif isinstance(tree, DFIntConst):
212210
return tree.width()
213-
elif isinstance(tree, pyverilog.dataflow.dataflow.DFConcat):
211+
elif isinstance(tree, DFConcat):
214212
return sum([self.get_bit_width_from_tree(nextnode) for nextnode in tree.nextnodes])
215-
elif isinstance(tree, pyverilog.dataflow.dataflow.DFEvalValue):
213+
elif isinstance(tree, DFEvalValue):
216214
return tree.width
217215
else:
218216
raise IRREGAL_CODE_FORM("unexpected concat node")
219217

220218
def walk_reg_each_bit(self):
221219
for tk, tv in sorted(self._terms.items(), key=lambda x:len(x[0])):
222220
if tk in self._binddict.keys():
223-
for bvi in self._binddict[tk]:#process for each always block
221+
for bvi in self._binddict[tk]: #process for each always block
224222
bind_lsb = self.get_bind_lsb(bvi)
225223
bind_msb = self.get_bind_msb(bvi)
226224
for bit in range(bind_lsb, bind_msb + 1):
@@ -330,7 +328,8 @@ def DFConstant_eq_org(self, other):
330328

331329
def DFEvalValue_eq_org(self, other):
332330
if type(self) != type(other): return False
333-
return self.value == other.value and self.width == other.width and self.isfloat == other.isfloat and self.isstring == other.isstring
331+
return (self.value == other.value and self.width == other.width and
332+
self.isfloat == other.isfloat and self.isstring == other.isstring)
334333

335334
def DFUndefined_eq_org(self, other):
336335
if type(self) != type(other): return False
@@ -346,7 +345,8 @@ def DFTerminal_eq_org(self, other):
346345

347346
def DFBranch_eq_org(self, other):
348347
if type(self) != type(other): return False
349-
return self.condnode == other.condnode and self.truenode == other.truenode and self.falsenode == other.falsenode
348+
return (self.condnode == other.condnode and self.truenode == other.truenode and
349+
self.falsenode == other.falsenode)
350350

351351
def DFOperator_eq_org(self, other):
352352
if type(self) != type(other): return False
@@ -365,32 +365,30 @@ def DFConcat_eq_org(self, other):
365365
return self.nextnodes == other.nextnodes
366366

367367
def eval_value(tree):
368-
if isinstance(tree, pyverilog.dataflow.dataflow.DFOperator):
368+
if isinstance(tree, DFOperator):
369369
for nextnode in self.nextnodes:
370-
assert(isinstance(nextnode, pyverilog.dataflow.dataflow.DFEvalValue)
371-
or isinstance(nextnode, pyverilog.dataflow.dataflow.DFIntConst)
372-
or isinstance(nextnode, pyverilog.dataflow.dataflow.DFOperator)
373-
or isinstance(nextnode, pyverilog.dataflow.dataflow.DFTerminal))
370+
assert(isinstance(nextnode, DFEvalValue)
371+
or isinstance(nextnode, DFIntConst)
372+
or isinstance(nextnode, DFOperator)
373+
or isinstance(nextnode, DFTerminal))
374374
if self.operator == 'Plus':
375375
return eval_value(nextnodes[0]) + eval_value(nextnodes[1])
376376
elif self.operator == 'Minus':
377377
return eval_value(nextnodes[0]) - eval_value(nextnodes[1])
378378
elif self.operator == 'Times':
379379
return eval_value(nextnodes[0]) * eval_value(nextnodes[1])
380-
else:#unimplemented
381-
raise Exception
382-
elif isinstance(tree, pyverilog.dataflow.dataflow.DFTerminal):
380+
else:
381+
raise Exception('unimplemented for this type tree' + str(type(tree)))
382+
elif isinstance(tree, DFTerminal):
383383
if self.get_scope(scopedict) in binddict.keys():
384384
return binddict[self.get_scope(scopedict)][0].tree.eval()
385385
else:
386386
raise verror.ImplementationError()
387-
elif isinstance(tree, pyverilog.dataflow.dataflow.DFIntConst):
387+
elif isinstance(tree, DFIntConst):
388388
return tree.eval()
389-
elif isinstance(tree, pyverilog.dataflow.dataflow.DFEvalValue):
389+
elif isinstance(tree, DFEvalValue):
390390
return tree.value
391391
elif tree is None:
392392
return 0
393393
else:
394394
raise Exception('Unexpected error@bindlibrary')
395-
396-

0 commit comments

Comments
 (0)