Skip to content

Commit cf82f46

Browse files
committed
Merge branch 'rc-1.9.1'
2 parents 43eda33 + 0203f3b commit cf82f46

File tree

8 files changed

+213
-4
lines changed

8 files changed

+213
-4
lines changed

tests/extension/stream_/div_validready/test_stream_div_validready.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,8 @@
259259
reg _divide_div_sign_tmp_30_2;
260260
reg _divide_div_sign_tmp_31_2;
261261
reg _divide_div_sign_tmp_32_2;
262-
assign _divide_div_osign_2 = _divide_div_sign_tmp_32_2;
262+
reg _divide_div_sign_tmp_33_2;
263+
assign _divide_div_osign_2 = _divide_div_sign_tmp_33_2;
263264
wire _divide_div_update_2;
264265
assign _divide_div_update_2 = oready;
265266
@@ -351,6 +352,7 @@
351352
_divide_div_sign_tmp_30_2 <= 0;
352353
_divide_div_sign_tmp_31_2 <= 0;
353354
_divide_div_sign_tmp_32_2 <= 0;
355+
_divide_div_sign_tmp_33_2 <= 0;
354356
end else begin
355357
if(oready) begin
356358
_ivalid_1 <= ivalid;
@@ -559,6 +561,9 @@
559561
if(oready) begin
560562
_divide_div_sign_tmp_32_2 <= _divide_div_sign_tmp_31_2;
561563
end
564+
if(oready) begin
565+
_divide_div_sign_tmp_33_2 <= _divide_div_sign_tmp_32_2;
566+
end
562567
end
563568
end
564569

tests/extension/thread_/stream_div/thread_stream_div.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def mkLed():
2828
a = strm.source('a')
2929
b = strm.source('b')
3030
a = a + 10000
31+
a = strm.Mux(a[0] == 0, a * -1, a)
3132
c = strm.Div(a, b)
3233
strm.sink(c, 'c')
3334

@@ -44,6 +45,8 @@ def comp_sequential(size, offset):
4445
a = ram_a.read(i + offset)
4546
b = ram_b.read(i + offset)
4647
a += 10000
48+
if a & 1 == 0:
49+
a *= -1
4750
sum = a // b
4851
ram_c.write(i + offset, sum)
4952

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: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from __future__ import absolute_import
2+
from __future__ import print_function
3+
4+
import os
5+
import veriloggen
6+
import thread_stream_mod
7+
8+
9+
def test(request):
10+
veriloggen.reset()
11+
12+
simtype = request.config.getoption('--sim')
13+
14+
rslt = thread_stream_mod.run(filename=None, simtype=simtype,
15+
outputfile=os.path.splitext(os.path.basename(__file__))[0] + '.out')
16+
17+
verify_rslt = rslt.splitlines()[-1]
18+
assert(verify_rslt == '# verify: PASSED')
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
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(os.path.dirname(
8+
os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))))
9+
10+
from veriloggen import *
11+
import veriloggen.thread as vthread
12+
import veriloggen.types.axi as axi
13+
14+
15+
def mkLed():
16+
m = Module('blinkled')
17+
clk = m.Input('CLK')
18+
rst = m.Input('RST')
19+
20+
datawidth = 32
21+
addrwidth = 10
22+
myaxi = vthread.AXIM(m, 'myaxi', clk, rst, datawidth)
23+
ram_a = vthread.RAM(m, 'ram_a', clk, rst, datawidth, addrwidth)
24+
ram_b = vthread.RAM(m, 'ram_b', clk, rst, datawidth, addrwidth)
25+
ram_c = vthread.RAM(m, 'ram_c', clk, rst, datawidth, addrwidth)
26+
27+
strm = vthread.Stream(m, 'mystream', clk, rst)
28+
a = strm.source('a')
29+
b = strm.source('b')
30+
a = a + 10000
31+
a = strm.Mux(a[0] == 0, a * -1, a)
32+
c = strm.Mod(a, b)
33+
strm.sink(c, 'c')
34+
35+
def comp_stream(size, offset):
36+
strm.set_source('a', ram_a, offset, size)
37+
strm.set_source('b', ram_b, offset, size)
38+
strm.set_sink('c', ram_c, offset, size)
39+
strm.run()
40+
strm.join()
41+
42+
def comp_sequential(size, offset):
43+
sum = 0
44+
for i in range(size):
45+
a = ram_a.read(i + offset)
46+
b = ram_b.read(i + offset)
47+
a += 10000
48+
if a & 1 == 0:
49+
a *= -1
50+
sum = a % b
51+
ram_c.write(i + offset, sum)
52+
53+
def check(size, offset_stream, offset_seq):
54+
all_ok = True
55+
for i in range(size):
56+
st = ram_c.read(i + offset_stream)
57+
sq = ram_c.read(i + offset_seq)
58+
if vthread.verilog.NotEql(st, sq):
59+
all_ok = False
60+
if all_ok:
61+
print('# verify: PASSED')
62+
else:
63+
print('# verify: FAILED')
64+
65+
def comp(size):
66+
# stream
67+
offset = 0
68+
myaxi.dma_read(ram_a, offset, 0, size)
69+
myaxi.dma_read(ram_b, offset, 512, size)
70+
comp_stream(size, offset)
71+
myaxi.dma_write(ram_c, offset, 1024, size)
72+
73+
# sequential
74+
offset = size
75+
myaxi.dma_read(ram_a, offset, 0, size)
76+
myaxi.dma_read(ram_b, offset, 512, size)
77+
comp_sequential(size, offset)
78+
myaxi.dma_write(ram_c, offset, 1024 * 2, size)
79+
80+
# verification
81+
myaxi.dma_read(ram_c, 0, 1024, size)
82+
myaxi.dma_read(ram_c, offset, 1024 * 2, size)
83+
check(size, 0, offset)
84+
85+
vthread.finish()
86+
87+
th = vthread.Thread(m, 'th_comp', clk, rst, comp)
88+
fsm = th.start(32)
89+
90+
return m
91+
92+
93+
def mkTest(memimg_name=None):
94+
m = Module('test')
95+
96+
# target instance
97+
led = mkLed()
98+
99+
# copy paras and ports
100+
params = m.copy_params(led)
101+
ports = m.copy_sim_ports(led)
102+
103+
clk = ports['CLK']
104+
rst = ports['RST']
105+
106+
memory = axi.AxiMemoryModel(m, 'memory', clk, rst, memimg_name=memimg_name)
107+
memory.connect(ports, 'myaxi')
108+
109+
uut = m.Instance(led, 'uut',
110+
params=m.connect_params(led),
111+
ports=m.connect_ports(led))
112+
113+
# simulation.setup_waveform(m, uut)
114+
simulation.setup_clock(m, clk, hperiod=5)
115+
init = simulation.setup_reset(m, rst, m.make_reset(), period=100)
116+
117+
init.add(
118+
Delay(1000000),
119+
Systask('finish'),
120+
)
121+
122+
return m
123+
124+
125+
def run(filename='tmp.v', simtype='iverilog', outputfile=None):
126+
127+
if outputfile is None:
128+
outputfile = os.path.splitext(os.path.basename(__file__))[0] + '.out'
129+
130+
memimg_name = 'memimg_' + outputfile
131+
132+
test = mkTest(memimg_name=memimg_name)
133+
134+
if filename is not None:
135+
test.to_verilog(filename)
136+
137+
sim = simulation.Simulator(test, sim=simtype)
138+
rslt = sim.run(outputfile=outputfile)
139+
lines = rslt.splitlines()
140+
if simtype == 'verilator' and lines[-1].startswith('-'):
141+
rslt = '\n'.join(lines[:-1])
142+
return rslt
143+
144+
145+
if __name__ == '__main__':
146+
rslt = run(filename='tmp.v')
147+
print(rslt)

tests/extension/thread_/stream_mul/thread_stream_mul.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ def mkLed():
2727
strm = vthread.Stream(m, 'mystream', clk, rst)
2828
a = strm.source('a')
2929
b = strm.source('b')
30+
a = strm.Mux(a[0] == 0, a * -1, a)
3031
c = strm.Mul(a, b)
3132
strm.sink(c, 'c')
3233

@@ -42,6 +43,8 @@ def comp_sequential(size, offset):
4243
for i in range(size):
4344
a = ram_a.read(i + offset)
4445
b = ram_b.read(i + offset)
46+
if a & 1 == 0:
47+
a *= -1
4548
sum = a * b
4649
ram_c.write(i + offset, sum)
4750

veriloggen/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.9.0
1+
1.9.1

veriloggen/stream/stypes.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -766,8 +766,10 @@ def _implement(self, m, seq, svalid=None, senable=None):
766766

767767
m.Assign(data(odata))
768768

769+
depth = self.latency - 1
770+
769771
s = sign
770-
for i in range(self.latency - 2):
772+
for i in range(depth):
771773
ns = m.Reg(self.name('div_sign_tmp_%d' % i), initval=0)
772774
seq(ns(s), cond=senable)
773775
s = ns
@@ -856,8 +858,10 @@ def _implement(self, m, seq, svalid=None, senable=None):
856858

857859
m.Assign(data(odata))
858860

861+
depth = self.latency - 1
862+
859863
s = sign
860-
for i in range(self.latency - 2):
864+
for i in range(depth):
861865
ns = m.Reg(self.name('div_sign_tmp_%d' % i), initval=0)
862866
seq(ns(s), cond=senable)
863867
s = ns

0 commit comments

Comments
 (0)