Skip to content

Commit 4e26c78

Browse files
committed
Updated examples and tests accordingly.
1 parent 9e6a391 commit 4e26c78

File tree

34 files changed

+2900
-2116
lines changed

34 files changed

+2900
-2116
lines changed

examples/simulation_verilator/test_simulation_verilator.py

+314-282
Large diffs are not rendered by default.

examples/stream_axi_stream_fifo_ipxact_ultra96v2_pynq/test_stream_axi_stream_fifo_ipxact.py

+448-430
Large diffs are not rendered by default.

examples/stream_axi_stream_fifo_ultra96v2_pynq/test_stream_axi_stream_fifo.py

+448-430
Large diffs are not rendered by default.

examples/thread_embedded_verilog_ipxact/test_thread_embedded_verilog_ipxact.py

+302-274
Large diffs are not rendered by default.

examples/thread_memcpy_ipxact_ultra96v2_pynq/test_thread_memcpy_ipxact.py

+302-274
Large diffs are not rendered by default.

examples/thread_verilog_submodule_ipxact/test_thread_verilog_submodule_ipxact.py

+302-274
Large diffs are not rendered by default.

tests/extension/thread_/axi_dma_multiram/thread_axi_dma_multiram.py

+8-11
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,6 @@ def blink(size):
5353
def body(size, offset):
5454
# narrow dma test
5555
myaxi.dma_read(myram0, 0, 0, size)
56-
57-
### ???
58-
5956
myaxi.dma_read(myram1, 0, 0, size)
6057
myaxi.dma_read(myram2, 0, 0, size)
6158
myaxi.dma_read(myram3, 0, 0, size)
@@ -83,8 +80,8 @@ def body(size, offset):
8380

8481
laddr = 0
8582
gaddr = offset
86-
myaxi.dma_write([myram0, myram1, myram2, myram3],
87-
laddr, gaddr, size)
83+
myaxi.dma_write_packed([myram0, myram1, myram2, myram3],
84+
laddr, gaddr, size * 4)
8885
print('dma_write: [%d] -> [%d]' % (laddr, gaddr))
8986

9087
# write
@@ -106,15 +103,15 @@ def body(size, offset):
106103

107104
laddr = 0
108105
gaddr = array_size + offset
109-
myaxi.dma_write([myram0, myram1, myram2, myram3],
110-
laddr, gaddr, size)
106+
myaxi.dma_write_packed([myram0, myram1, myram2, myram3],
107+
laddr, gaddr, size * 4)
111108
print('dma_write: [%d] -> [%d]' % (laddr, gaddr))
112109

113110
# read
114111
laddr = 0
115112
gaddr = offset
116-
myaxi.dma_read([myram0, myram1, myram2, myram3],
117-
laddr, gaddr, size)
113+
myaxi.dma_read_packed([myram0, myram1, myram2, myram3],
114+
laddr, gaddr, size * 4)
118115
print('dma_read: [%d] <- [%d]' % (laddr, gaddr))
119116

120117
for i in range(size):
@@ -148,8 +145,8 @@ def body(size, offset):
148145
# read
149146
laddr = 0
150147
gaddr = array_size + offset
151-
myaxi.dma_read([myram0, myram1, myram2, myram3],
152-
laddr, gaddr, size)
148+
myaxi.dma_read_packed([myram0, myram1, myram2, myram3],
149+
laddr, gaddr, size * 4)
153150
print('dma_read: [%d] <- [%d]' % (laddr, gaddr))
154151

155152
for i in range(size):

tests/extension/thread_/multibank_nested_ram_dma/thread_multibank_nested_ram_dma.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ def mkLed(memory_datawidth=128):
2525
numbanks=numbanks)
2626
myram1 = vthread.MultibankRAM(m, 'myram1', clk, rst, datawidth, addrwidth,
2727
numbanks=numbanks)
28-
myram = (myram0, myram1)
28+
29+
#myram = vthread.to_multibank_ram((myram0, myram1), keep_hierarchy=True)
30+
myram = vthread.to_multibank_ram((myram0, myram1))
2931

3032
all_ok = m.TmpReg(initval=0)
3133

@@ -59,7 +61,7 @@ def body(size, offset):
5961

6062
laddr = 0
6163
gaddr = offset
62-
myaxi.dma_write(myram, laddr, gaddr, size)
64+
myaxi.dma_write(myram, laddr, gaddr, size * 2 * numbanks)
6365
print('dma_write: [%d] -> [%d]' % (laddr, gaddr))
6466

6567
# write
@@ -71,13 +73,13 @@ def body(size, offset):
7173

7274
laddr = 0
7375
gaddr = array_size + offset
74-
myaxi.dma_write(myram, laddr, gaddr, size)
76+
myaxi.dma_write(myram, laddr, gaddr, size * 2 * numbanks)
7577
print('dma_write: [%d] -> [%d]' % (laddr, gaddr))
7678

7779
# read
7880
laddr = 0
7981
gaddr = offset
80-
myaxi.dma_read(myram, laddr, gaddr, size)
82+
myaxi.dma_read(myram, laddr, gaddr, size * 2 * numbanks)
8183
print('dma_read: [%d] <- [%d]' % (laddr, gaddr))
8284

8385
for bank in range(numbanks):
@@ -94,7 +96,7 @@ def body(size, offset):
9496
# read
9597
laddr = 0
9698
gaddr = array_size + offset
97-
myaxi.dma_read(myram, laddr, gaddr, size)
99+
myaxi.dma_read(myram, laddr, gaddr, size * 2 * numbanks)
98100
print('dma_read: [%d] <- [%d]' % (laddr, gaddr))
99101

100102
for bank in range(numbanks):

tests/extension/thread_/multibank_nested_ram_dma_block/thread_multibank_nested_ram_dma_block.py

+5-13
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ def mkLed(memory_datawidth=128):
2323
myaxi = vthread.AXIM(m, 'myaxi', clk, rst, memory_datawidth)
2424

2525
pack_size = memory_datawidth // datawidth
26-
2726
rams = [vthread.MultibankRAM(m, 'myram%d' % i, clk, rst, datawidth, addrwidth,
2827
numbanks=pack_size)
2928
for i in range(numbanks)]
@@ -73,9 +72,7 @@ def body(size, offset):
7372

7473
laddr = 0
7574
gaddr = offset
76-
myram.dma_write_block(myaxi, laddr, gaddr,
77-
size // pack_size,
78-
block_size // pack_size)
75+
myaxi.dma_write_block(myram, laddr, gaddr, size, block_size)
7976
print('dma_write: [%d] -> [%d]' % (laddr, gaddr))
8077

8178
# write
@@ -99,17 +96,13 @@ def body(size, offset):
9996

10097
laddr = 0
10198
gaddr = array_size + offset
102-
myram.dma_write_block(myaxi, laddr, gaddr,
103-
size // pack_size,
104-
block_size // pack_size)
99+
myaxi.dma_write_block(myram, laddr, gaddr, size, block_size)
105100
print('dma_write: [%d] -> [%d]' % (laddr, gaddr))
106101

107102
# read
108103
laddr = 0
109104
gaddr = offset
110-
myram.dma_read_block(myaxi, laddr, gaddr,
111-
size // pack_size,
112-
block_size // pack_size)
105+
myaxi.dma_read_block(myram, laddr, gaddr, size, block_size)
113106
print('dma_read: [%d] <- [%d]' % (laddr, gaddr))
114107

115108
count = 0
@@ -136,8 +129,7 @@ def body(size, offset):
136129
# read
137130
laddr = 0
138131
gaddr = array_size + offset
139-
myram.dma_read_block(myaxi, laddr, gaddr, size //
140-
pack_size, block_size // pack_size)
132+
myaxi.dma_read_block(myram, laddr, gaddr, size, block_size)
141133
print('dma_read: [%d] <- [%d]' % (laddr, gaddr))
142134

143135
count = 0
@@ -187,7 +179,7 @@ def mkTest(memimg_name=None, memory_datawidth=128):
187179
params=m.connect_params(led),
188180
ports=m.connect_ports(led))
189181

190-
#simulation.setup_waveform(m, uut)
182+
# simulation.setup_waveform(m, uut)
191183
simulation.setup_clock(m, clk, hperiod=5)
192184
init = simulation.setup_reset(m, rst, m.make_reset(), period=100)
193185

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

tests/extension/thread_/multibank_ram_dma_packed/test_thread_multibank_ram_dma.py renamed to tests/extension/thread_/multibank_ram_dma/test_thread_multibank_ram_dma.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33

44
import os
55
import veriloggen
6-
import thread_multibank_ram_dma
6+
import thread_axi_dma
77

88

99
def test(request):
1010
veriloggen.reset()
1111

1212
simtype = request.config.getoption('--sim')
1313

14-
rslt = thread_multibank_ram_dma.run(filename=None, simtype=simtype,
15-
outputfile=os.path.splitext(os.path.basename(__file__))[0] + '.out')
14+
rslt = thread_axi_dma.run(filename=None, simtype=simtype,
15+
outputfile=os.path.splitext(os.path.basename(__file__))[0] + '.out')
1616

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

tests/extension/thread_/multibank_ram_dma_bank/thread_multibank_ram_dma_bank.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def body(bank, size, offset):
5858

5959
laddr = 0
6060
gaddr = offset
61-
myram0.dma_write_bank(bank, myaxi, laddr, gaddr, size)
61+
myaxi.dma_write_bank(myram0, bank, laddr, gaddr, size)
6262
print('dma_write: [%d] -> [%d]' % (laddr, gaddr))
6363

6464
# write
@@ -68,13 +68,13 @@ def body(bank, size, offset):
6868

6969
laddr = 0
7070
gaddr = (size + size) * 4 + offset
71-
myram1.dma_write_bank(bank, myaxi, laddr, gaddr, size)
71+
myaxi.dma_write_bank(myram1, bank, laddr, gaddr, size)
7272
print('dma_write: [%d] -> [%d]' % (laddr, gaddr))
7373

7474
# read
7575
laddr = 0
7676
gaddr = offset
77-
myram1.dma_read_bank(bank, myaxi, laddr, gaddr, size)
77+
myaxi.dma_read_bank(myram1, bank, laddr, gaddr, size)
7878
print('dma_read: [%d] <- [%d]' % (laddr, gaddr))
7979

8080
for i in range(size):
@@ -87,7 +87,7 @@ def body(bank, size, offset):
8787
# read
8888
laddr = 0
8989
gaddr = (size + size) * 4 + offset
90-
myram0.dma_read_bank(bank, myaxi, laddr, gaddr, size)
90+
myaxi.dma_read_bank(myram0, bank, laddr, gaddr, size)
9191
print('dma_read: [%d] <- [%d]' % (laddr, gaddr))
9292

9393
for i in range(size):

0 commit comments

Comments
 (0)