Skip to content

Commit 66561a8

Browse files
committed
Merge branch 'develop' into 2.1.0-rc
2 parents 3e87880 + a44f187 commit 66561a8

File tree

17 files changed

+3632
-1333
lines changed

17 files changed

+3632
-1333
lines changed

examples/simulation_verilator/test_simulation_verilator.py

Lines changed: 476 additions & 199 deletions
Large diffs are not rendered by default.

examples/thread_embedded_verilog_ipxact/test_thread_embedded_verilog_ipxact.py

Lines changed: 533 additions & 256 deletions
Large diffs are not rendered by default.

examples/thread_memcpy_ipxact_ultra96v2_pynq/test_thread_memcpy_ipxact.py

Lines changed: 533 additions & 256 deletions
Large diffs are not rendered by default.

examples/thread_verilog_submodule_ipxact/test_thread_verilog_submodule_ipxact.py

Lines changed: 533 additions & 256 deletions
Large diffs are not rendered by default.
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_axi_dma_async_many
7+
8+
9+
def test(request):
10+
veriloggen.reset()
11+
12+
simtype = request.config.getoption('--sim')
13+
14+
rslt = thread_axi_dma_async_many.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: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
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+
23+
# deep request FIFO
24+
myaxi = vthread.AXIM(m, 'myaxi', clk, rst, datawidth,
25+
req_fifo_addrwidth=7)
26+
27+
myram0 = vthread.RAM(m, 'myram0', clk, rst, datawidth, addrwidth)
28+
myram1 = vthread.RAM(m, 'myram1', clk, rst, datawidth, addrwidth)
29+
30+
all_ok = m.TmpReg(initval=0, prefix='all_ok')
31+
wdata = m.TmpReg(width=datawidth, initval=0, prefix='wdata')
32+
rdata = m.TmpReg(width=datawidth, initval=0, prefix='rdata')
33+
rexpected = m.TmpReg(width=datawidth, initval=0, prefix='rexpected')
34+
35+
num_transactions = 512
36+
37+
def blink(size):
38+
all_ok.value = True
39+
40+
for i in range(4):
41+
print('# iter %d start' % i)
42+
# Test for 4KB boundary check
43+
offset = i * 1024 * 16 + (myaxi.boundary_size - (datawidth // 8) * 3)
44+
body(size, offset)
45+
print('# iter %d end' % i)
46+
47+
if all_ok:
48+
print('# verify: PASSED')
49+
else:
50+
print('# verify: FAILED')
51+
52+
vthread.finish()
53+
54+
def body(size, offset):
55+
# write
56+
for i in range(size * num_transactions):
57+
wdata.value = i + 0x1000
58+
myram0.write(i, wdata)
59+
60+
for i in range(num_transactions):
61+
laddr = size * i
62+
gaddr = size * i * 4 + offset
63+
myaxi.dma_write_async(myram0, laddr, gaddr, size)
64+
print('dma_write_async: [%d] -> [%d]' % (laddr, gaddr))
65+
66+
myaxi.dma_wait()
67+
print('dma_wait')
68+
69+
# write
70+
for i in range(size * num_transactions):
71+
wdata.value = i + 0x4000
72+
myram1.write(i, wdata)
73+
74+
for i in range(num_transactions):
75+
laddr = size * i
76+
gaddr = size * num_transactions * 4 + size * i * 4 + offset
77+
myaxi.dma_write_async(myram1, laddr, gaddr, size)
78+
print('dma_write_async: [%d] -> [%d]' % (laddr, gaddr))
79+
80+
myaxi.dma_wait()
81+
print('dma_wait')
82+
83+
# read
84+
for i in range(num_transactions):
85+
laddr = size * i
86+
gaddr = size * i * 4 + offset
87+
myaxi.dma_read_async(myram1, laddr, gaddr, size)
88+
print('dma_read_async: [%d] <- [%d]' % (laddr, gaddr))
89+
90+
myaxi.dma_wait()
91+
print('dma_wait')
92+
93+
for i in range(size * num_transactions):
94+
rdata.value = myram1.read(i)
95+
rexpected.value = i + 0x1000
96+
if vthread.verilog.NotEql(rdata, rexpected):
97+
print('rdata[%d] = %d (expected %d)' % (i, rdata, rexpected))
98+
all_ok.value = False
99+
100+
# read
101+
for i in range(num_transactions):
102+
laddr = size * i
103+
gaddr = size * num_transactions * 4 + size * i * 4 + offset
104+
myaxi.dma_read_async(myram0, laddr, gaddr, size)
105+
print('dma_read_async: [%d] <- [%d]' % (laddr, gaddr))
106+
107+
myaxi.dma_wait()
108+
print('dma_wait')
109+
110+
for i in range(size * num_transactions):
111+
rdata.value = myram0.read(i)
112+
rexpected.value = i + 0x4000
113+
if vthread.verilog.NotEql(rdata, rexpected):
114+
print('rdata[%d] = %d (expected %d)' % (i, rdata, rexpected))
115+
all_ok.value = False
116+
117+
th = vthread.Thread(m, 'th_blink', clk, rst, blink)
118+
fsm = th.start(1)
119+
120+
return m
121+
122+
123+
def mkTest(memimg_name=None):
124+
m = Module('test')
125+
126+
# target instance
127+
led = mkLed()
128+
129+
# copy paras and ports
130+
params = m.copy_params(led)
131+
ports = m.copy_sim_ports(led)
132+
133+
clk = ports['CLK']
134+
rst = ports['RST']
135+
136+
# fast memory
137+
memory = axi.AxiMemoryModel(m, 'memory', clk, rst, memimg_name=memimg_name,
138+
write_delay=0, read_delay=10, req_fifo_addrwidth=7)
139+
memory.connect(ports, 'myaxi')
140+
141+
uut = m.Instance(led, 'uut',
142+
params=m.connect_params(led),
143+
ports=m.connect_ports(led))
144+
145+
# simulation.setup_waveform(m, uut)
146+
simulation.setup_clock(m, clk, hperiod=5)
147+
init = simulation.setup_reset(m, rst, m.make_reset(), period=100)
148+
149+
init.add(
150+
Delay(1000000 * 2),
151+
Systask('finish'),
152+
)
153+
154+
return m
155+
156+
157+
def run(filename='tmp.v', simtype='iverilog', outputfile=None):
158+
159+
if outputfile is None:
160+
outputfile = os.path.splitext(os.path.basename(__file__))[0] + '.out'
161+
162+
memimg_name = 'memimg_' + outputfile
163+
164+
test = mkTest(memimg_name=memimg_name)
165+
166+
if filename is not None:
167+
test.to_verilog(filename)
168+
169+
sim = simulation.Simulator(test, sim=simtype)
170+
rslt = sim.run(outputfile=outputfile)
171+
lines = rslt.splitlines()
172+
if simtype == 'verilator' and lines[-1].startswith('-'):
173+
rslt = '\n'.join(lines[:-1])
174+
return rslt
175+
176+
177+
if __name__ == '__main__':
178+
rslt = run(filename='tmp.v')
179+
print(rslt)
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_memorymodel
7+
8+
9+
def test(request):
10+
veriloggen.reset()
11+
12+
simtype = request.config.getoption('--sim')
13+
14+
rslt = thread_memorymodel.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')

0 commit comments

Comments
 (0)