Skip to content

Commit c548d58

Browse files
authored
Merge pull request #48 from sh-mug/develop
Support for binary operations with _Numeric class in the right term
2 parents 9e278bf + 666d4ec commit c548d58

File tree

4 files changed

+127
-0
lines changed

4 files changed

+127
-0
lines changed

tests/core/op_reverse/Makefile

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
TARGET=$(shell ls *.py | grep -v test | grep -v parsetab.py)
2+
ARGS=
3+
4+
PYTHON=python3
5+
#PYTHON=python
6+
#OPT=-m pdb
7+
#OPT=-m cProfile -s time
8+
#OPT=-m cProfile -o profile.rslt
9+
10+
.PHONY: all
11+
all: test
12+
13+
.PHONY: run
14+
run:
15+
$(PYTHON) $(OPT) $(TARGET) $(ARGS)
16+
17+
.PHONY: test
18+
test:
19+
$(PYTHON) -m pytest -vv
20+
21+
.PHONY: check
22+
check:
23+
$(PYTHON) $(OPT) $(TARGET) $(ARGS) > tmp.v
24+
iverilog -tnull -Wall tmp.v
25+
rm -f tmp.v
26+
27+
.PHONY: clean
28+
clean:
29+
rm -rf *.pyc __pycache__ parsetab.py .cache *.out *.png *.dot tmp.v uut.vcd
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from __future__ import absolute_import
2+
from __future__ import print_function
3+
import sys
4+
import os
5+
6+
# the next line can be removed after installation
7+
sys.path.insert(0, os.path.dirname(os.path.dirname(
8+
os.path.dirname(os.path.dirname(os.path.abspath(__file__))))))
9+
10+
from veriloggen import *
11+
12+
13+
def mkLed():
14+
m = Module('blinkled')
15+
width = m.Parameter('WIDTH', 8)
16+
a = m.Input('A', 32)
17+
b = m.Output('B', width)
18+
19+
b.assign(a[32-width:32])
20+
21+
return m
22+
23+
if __name__ == '__main__':
24+
led = mkLed()
25+
verilog = led.to_verilog()
26+
print(verilog)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from __future__ import absolute_import
2+
from __future__ import print_function
3+
import veriloggen
4+
import op_reverse
5+
6+
expected_verilog = """
7+
module blinkled #
8+
(
9+
parameter WIDTH = 8
10+
)
11+
(
12+
input [32-1:0] A,
13+
output [WIDTH-1:0] B
14+
);
15+
16+
assign B = A[31:32-WIDTH];
17+
18+
endmodule
19+
"""
20+
21+
def test():
22+
veriloggen.reset()
23+
test_module = op_reverse.mkLed()
24+
code = test_module.to_verilog()
25+
26+
from pyverilog.vparser.parser import VerilogParser
27+
from pyverilog.ast_code_generator.codegen import ASTCodeGenerator
28+
parser = VerilogParser()
29+
expected_ast = parser.parse(expected_verilog)
30+
codegen = ASTCodeGenerator()
31+
expected_code = codegen.visit(expected_ast)
32+
33+
assert(expected_code == code)

veriloggen/core/vtypes.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,45 @@ def __lshift__(self, r):
383383
def __rshift__(self, r):
384384
return Srl(self, r)
385385

386+
def __radd__(self, l):
387+
return Plus(l, self)
388+
389+
def __rsub__(self, l):
390+
return Minus(l, self)
391+
392+
def __rpow__(self, l):
393+
return Power(l, self)
394+
395+
def __rmul__(self, l):
396+
return Times(l, self)
397+
398+
def __rdiv__(self, l):
399+
return Divide(l, self)
400+
401+
def __rtruediv__(self, l):
402+
return Divide(l, self)
403+
404+
def __rfloordiv__(self, l):
405+
return Divide(l, self)
406+
407+
def __rmod__(self, l):
408+
return Mod(l, self)
409+
410+
def __rand__(self, l):
411+
return And(l, self)
412+
413+
def __ror__(self, l):
414+
return Or(l, self)
415+
416+
def __rxor__(self, l):
417+
return Xor(l, self)
418+
419+
def __rlshift__(self, l):
420+
return Sll(l, self)
421+
422+
def __rrshift__(self, l):
423+
return Srl(l, self)
424+
386425
def __neg__(self):
387426
return Uminus(self)
388427

0 commit comments

Comments
 (0)