Skip to content

Commit edba020

Browse files
committed
Merge branch 'develop'
2 parents 5ae53c8 + 02b2b7b commit edba020

13 files changed

+103
-94
lines changed

.travis.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ language: python
33
sudo: false
44

55
python:
6-
- 3.6
6+
- 3.7
77

88
addons:
99
apt:
1010
packages:
1111
- iverilog
1212

1313
install:
14-
- pip install jinja2 pytest pytest-pythonpath
14+
- pip install pytest pytest-pythonpath jinja2
1515

1616
script:
1717
- python -m pytest tests

README.md

+11-14
Original file line numberDiff line numberDiff line change
@@ -71,20 +71,13 @@ To write a testing code, please refer the existing testing examples in "tests" d
7171
If the pull request code passes all the tests successfully and has no obvious problem, it will be merged to the *develop* branch by the main committers.
7272

7373

74-
Documentation
75-
==============================
76-
77-
To be described.
78-
79-
8074
Installation
8175
==============================
8276

8377
Requirements
8478
--------------------
8579

8680
- Python3: 3.6 or later
87-
8881
- Icarus Verilog: 10.1 or later
8982

9083
```
@@ -97,23 +90,27 @@ sudo apt install iverilog
9790
pip3 install jinja2
9891
```
9992

100-
Optional Installation
93+
Optional installation for testing
10194
--------------------
10295

103-
- pytest: 3.2 or later
104-
- pytest-pythonpath: 0.7 or later
96+
These are required for automatic testing of **tests**.
97+
We recommend to install these testing library to verify experimental features.
10598

106-
These are required for the testing execution of test codes in tests and examples.
99+
- pytest: 3.8.1 or later
100+
- pytest-pythonpath: 0.7.3 or later
107101

108102
```
109103
pip3 install pytest pytest-pythonpath
110104
```
111105

112-
- Graphviz: 2.38.0 or later
113-
- Pygraphviz: 1.3.1 or later
106+
Optional installation for visualization
107+
--------------------
114108

115109
These are required for graph visualization by dataflow/graphgen.py and controlflow/controlflow_analyzer.py.
116110

111+
- Graphviz: 2.38.0 or later
112+
- Pygraphviz: 1.3.1 or later
113+
117114
```
118115
sudo apt install graphviz
119116
pip3 install pygraphviz
@@ -122,7 +119,7 @@ pip3 install pygraphviz
122119
Install
123120
--------------------
124121

125-
Install Pyverilog:
122+
Now you can install Pyverilog using setup.py script:
126123

127124
```
128125
python3 setup.py install

README.rst

+12-15
Original file line numberDiff line numberDiff line change
@@ -81,19 +81,13 @@ If the pull request code passes all the tests successfully and has no
8181
obvious problem, it will be merged to the *develop* branch by the main
8282
committers.
8383

84-
Documentation
85-
=============
86-
87-
To be described.
88-
8984
Installation
9085
============
9186

9287
Requirements
9388
------------
9489

9590
- Python3: 3.6 or later
96-
9791
- Icarus Verilog: 10.1 or later
9892

9993
::
@@ -106,25 +100,28 @@ Requirements
106100

107101
pip3 install jinja2
108102

109-
Optional Installation
110-
---------------------
103+
Optional installation for testing
104+
---------------------------------
111105

112-
- pytest: 3.2 or later
113-
- pytest-pythonpath: 0.7 or later
106+
These are required for automatic testing of **tests**. We recommend to
107+
install these testing library to verify experimental features.
114108

115-
These are required for the testing execution of test codes in tests and
116-
examples.
109+
- pytest: 3.8.1 or later
110+
- pytest-pythonpath: 0.7.3 or later
117111

118112
::
119113

120114
pip3 install pytest pytest-pythonpath
121115

122-
- Graphviz: 2.38.0 or later
123-
- Pygraphviz: 1.3.1 or later
116+
Optional installation for visualization
117+
---------------------------------------
124118

125119
These are required for graph visualization by dataflow/graphgen.py and
126120
controlflow/controlflow_analyzer.py.
127121

122+
- Graphviz: 2.38.0 or later
123+
- Pygraphviz: 1.3.1 or later
124+
128125
::
129126

130127
sudo apt install graphviz
@@ -133,7 +130,7 @@ controlflow/controlflow_analyzer.py.
133130
Install
134131
-------
135132

136-
Install Pyverilog:
133+
Now you can install Pyverilog using setup.py script:
137134

138135
::
139136

pyverilog/dataflow/bindvisitor.py

+16-16
Original file line numberDiff line numberDiff line change
@@ -694,9 +694,9 @@ def getTermWidth(self, name):
694694
term = self.dataflow.getTerm(name)
695695
return term.msb, term.lsb
696696

697-
def getTermShape(self, name):
697+
def getTermDims(self, name):
698698
term = self.dataflow.getTerm(name)
699-
return term.shape
699+
return term.dims
700700

701701
def getTermtype(self, name):
702702
term = self.dataflow.getTerm(name)
@@ -708,7 +708,7 @@ def getBindlist(self, name):
708708
def renameVar(self, name):
709709
renamedvar = (name[:-1] +
710710
ScopeLabel('_rn' + str(self.renamecnt) +
711-
'_' + name[-1].scopename, 'signal'))
711+
'_' + name[-1].scopename, 'signal'))
712712
self.renamecnt += 1
713713
return renamedvar
714714

@@ -866,16 +866,16 @@ def addTerm(self, node, rscope=None):
866866
msb = DFIntConst('0') if node.width is None else self.makeDFTree(node.width.msb, scope)
867867
lsb = DFIntConst('0') if node.width is None else self.makeDFTree(node.width.lsb, scope)
868868

869-
shape = None
869+
dims = None
870870
if node.dimensions is not None:
871-
shape = []
871+
dims = []
872872
for length in node.dimensions.lengths:
873873
l = self.makeDFTree(length.msb, scope)
874874
r = self.makeDFTree(length.lsb, scope)
875-
shape.append((l, r))
876-
shape = tuple(shape)
875+
dims.append((l, r))
876+
dims = tuple(dims)
877877

878-
term = Term(name, termtypes, msb, lsb, shape)
878+
term = Term(name, termtypes, msb, lsb, dims)
879879
self.dataflow.addTerm(name, term)
880880
self.setConstantTerm(name, term)
881881

@@ -1057,7 +1057,7 @@ def makeDFTree(self, node, scope):
10571057
var_df = self.makeDFTree(node.var, scope)
10581058
ptr_df = self.makeDFTree(node.ptr, scope)
10591059

1060-
if isinstance(var_df, DFTerminal) and self.getTermShape(var_df.name) is not None:
1060+
if isinstance(var_df, DFTerminal) and self.getTermDims(var_df.name) is not None:
10611061
return DFPointer(var_df, ptr_df)
10621062
return DFPartselect(var_df, ptr_df, copy.deepcopy(ptr_df))
10631063

@@ -1247,7 +1247,7 @@ def resolveBlockingAssign(self, tree, scope):
12471247
if isinstance(tree, DFPointer):
12481248
resolved_ptr = self.resolveBlockingAssign(tree.ptr, scope)
12491249
if (isinstance(tree.var, DFTerminal) and
1250-
self.getTermShape(tree.var.name) is not None):
1250+
self.getTermDims(tree.var.name) is not None):
12511251
current_bindlist = self.frames.getBlockingAssign(tree.var.name, scope)
12521252
if len(current_bindlist) == 0:
12531253
return DFPointer(tree.var, resolved_ptr)
@@ -1273,7 +1273,7 @@ def getFitTree(self, bindlist, msb, lsb):
12731273
if bind.msb is None and bind.lsb is None:
12741274
return bind.tree
12751275
if (self.optimize(bind.msb) == optimized_msb and
1276-
self.optimize(bind.lsb) == optimized_lsb):
1276+
self.optimize(bind.lsb) == optimized_lsb):
12771277
return bind.tree
12781278
return self.getMergedTree(bindlist)
12791279

@@ -1384,7 +1384,7 @@ def getDst(self, left, scope):
13841384
if left.var.scope is not None:
13851385
name = left.var.scope + ScopeLabel(left.var.name, 'signal')
13861386
ptr = self.optimize(self.makeDFTree(left.ptr, scope))
1387-
if self.getTermShape(name) is not None:
1387+
if self.getTermDims(name) is not None:
13881388
return (name, None, None, ptr)
13891389
return (name, ptr, copy.deepcopy(ptr), None)
13901390

@@ -1480,8 +1480,8 @@ def makeBind(self, name, msb, lsb, ptr, part_msb, part_lsb,
14801480
if len(current_bindlist) > 0:
14811481
for current_bind in current_bindlist:
14821482
if (current_bind.msb == msb and
1483-
current_bind.lsb == lsb and
1484-
current_bind.ptr == ptr ):
1483+
current_bind.lsb == lsb
1484+
and current_bind.ptr == ptr ):
14851485
current_tree = current_bind.tree
14861486
current_msb = current_bind.msb
14871487
current_lsb = current_bind.lsb
@@ -1494,8 +1494,8 @@ def makeBind(self, name, msb, lsb, ptr, part_msb, part_lsb,
14941494

14951495
match_flowlist = ()
14961496
if (current_msb == msb and
1497-
current_lsb == lsb and
1498-
current_ptr == ptr ):
1497+
current_lsb == lsb
1498+
and current_ptr == ptr ):
14991499
(rest_tree,
15001500
rest_condlist,
15011501
rest_flowlist,

pyverilog/dataflow/dataflow.py

+11-11
Original file line numberDiff line numberDiff line change
@@ -687,12 +687,12 @@ def __hash__(self):
687687

688688

689689
class Term(object):
690-
def __init__(self, name, termtype=(), msb=None, lsb=None, shape=None):
690+
def __init__(self, name, termtype=(), msb=None, lsb=None, dims=None):
691691
self.name = name # tuple (str)
692692
self.termtype = termtype # set (str)
693693
self.msb = msb # DFNode
694694
self.lsb = lsb # DFNode
695-
self.shape = shape # tuple/list of pair of DFNode
695+
self.dims = dims # tuple/list of pair of DFNode
696696

697697
def __repr__(self):
698698
return str(self.name)
@@ -704,10 +704,10 @@ def tostr(self):
704704
ret += ' msb:' + self.msb.tostr()
705705
if self.lsb is not None:
706706
ret += ' lsb:' + self.lsb.tostr()
707-
if self.shape is not None:
708-
ret += ' shape:'
707+
if self.dims is not None:
708+
ret += ' dims:'
709709
ret += ''.join(['[' + l.tostr() + ':' + r.tostr() + ']'
710-
for l, r in self.shape])
710+
for l, r in self.dims])
711711
ret += ')'
712712
return ret
713713

@@ -721,10 +721,10 @@ def __eq__(self, other):
721721
and self.termtype == other.termtype
722722
and self.msb == other.msb
723723
and self.lsb == other.lsb
724-
and self.shape == other.shape)
724+
and self.dims == other.dims)
725725

726726
def __hash__(self):
727-
return hash((self.name, self.termtype, self.msb, self.lsb, self.shape))
727+
return hash((self.name, self.termtype, self.msb, self.lsb, self.dims))
728728

729729
def getScope(self, termname):
730730
return termname[:-1]
@@ -768,9 +768,9 @@ def tocode(self):
768768
and self.msb is not None and self.lsb is not None):
769769
code += '[' + self.msb.tocode(None) + ':' + self.lsb.tocode(None) + '] '
770770
code += flatname # signal name
771-
if self.shape is not None:
771+
if self.dims is not None:
772772
code += ''.join(['[' + l.tocode() + ':' + r.tocode() + ']'
773-
for l, r in self.shape])
773+
for l, r in self.dims])
774774
code += ';\n'
775775
return code
776776

@@ -969,8 +969,8 @@ def setTerm(self, name, term):
969969
self.terms[name].msb = term.msb
970970
if self.terms[name].lsb is None:
971971
self.terms[name].lsb = term.lsb
972-
if self.terms[name].shape is None:
973-
self.terms[name].shape = term.shape
972+
if self.terms[name].dims is None:
973+
self.terms[name].dims = term.dims
974974

975975
def hasTerm(self, name):
976976
return name in self.terms

pyverilog/dataflow/merge.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,11 @@ def getTermtype(self, termname):
5959
raise verror.DefinitionError('No such Term: %s' % termname)
6060
return term.termtype
6161

62-
def getTermShape(self, termname):
62+
def getTermDims(self, termname):
6363
term = self.getTerm(termname)
6464
if term is None:
6565
raise verror.DefinitionError('No such Term: %s' % termname)
66-
return term.shape
66+
return term.dims
6767

6868
def getAssignType(self, termname, bind):
6969
termtype = self.getTermtype(termname)
@@ -115,7 +115,7 @@ def getTree(self, termname, ptr=None):
115115
if len(bindlist) == 0:
116116
return None
117117

118-
if self.getTermShape(termname) is not None:
118+
if self.getTermDims(termname) is not None:
119119
discretebinds = {}
120120
for bind in bindlist:
121121
if isinstance(bind.ptr, DFEvalValue):
@@ -221,8 +221,8 @@ def getTermSources(self, termname):
221221
sources = set()
222222
sources |= self.getTreeSources(term.msb)
223223
sources |= self.getTreeSources(term.lsb)
224-
if term.shape is not None:
225-
for l, r in term.shape:
224+
if term.dims is not None:
225+
for l, r in term.dims:
226226
sources |= self.getTreeSources(l)
227227
sources |= self.getTreeSources(r)
228228
return sources
@@ -416,7 +416,7 @@ def splitBind(self, bind, splitpos):
416416
lsb = self.optimizer.optimizeConstant(bind.lsb)
417417
ptr = self.optimizer.optimizeConstant(bind.ptr)
418418
if ptr is not None and msb is None or lsb is None:
419-
if self.getTermShape(bind.dest) is not None:
419+
if self.getTermDims(bind.dest) is not None:
420420
msb = self.optimizer.optimizeConstant(copy.deepcopy(term.msb))
421421
lsb = self.optimizer.optimizeConstant(copy.deepcopy(term.lsb))
422422
else:

pyverilog/dataflow/optimizer.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ def optimizeConstant(self, tree):
146146
term = self.getTerm(tree.var.name)
147147
var = self.optimizeConstant(tree.var)
148148
ptr = self.optimizeConstant(tree.ptr)
149-
if term.shape is not None:
149+
if term.dims is not None:
150150
return DFPointer(var, ptr)
151151
if isinstance(var, DFEvalValue) and isinstance(ptr, DFEvalValue):
152152
evalcc = self.evalPointer(var, ptr)
@@ -335,7 +335,7 @@ def getWidth(self, node):
335335
if not isinstance(node.var, DFTerminal):
336336
return 1
337337
term = self.getTerm(node.var.name)
338-
if term.shape is not None:
338+
if term.dims is not None:
339339
msb = self.optimizeConstant(term.msb).value
340340
lsb = self.optimizeConstant(term.lsb).value
341341
width = abs(msb - lsb) + 1
@@ -1023,10 +1023,10 @@ def resolveConstant(self):
10231023
if tv.lsb is not None:
10241024
rslt = self.optimizeConstant(tv.lsb)
10251025
self.resolved_terms[tk].lsb = rslt
1026-
if tv.shape is not None:
1027-
shape = []
1028-
for l, r in tv.shape:
1026+
if tv.dims is not None:
1027+
dims = []
1028+
for l, r in tv.dims:
10291029
l = self.optimizeConstant(l)
10301030
r = self.optimizeConstant(r)
1031-
shape.append((l, r))
1032-
self.resolved_terms[tk].shape = tuple(shape)
1031+
dims.append((l, r))
1032+
self.resolved_terms[tk].dims = tuple(dims)

0 commit comments

Comments
 (0)