forked from M-Labs/artiq
56 lines
1.4 KiB
Python
56 lines
1.4 KiB
Python
import unittest
|
|
|
|
from migen import *
|
|
|
|
from artiq.gateware.drtio.wrpll import thls
|
|
|
|
|
|
a = 0
|
|
|
|
def simple_test(x):
|
|
global a
|
|
a = a + (x*4 >> 1)
|
|
return a
|
|
|
|
|
|
class TestTHLS(unittest.TestCase):
|
|
def test_thls(self):
|
|
global a
|
|
|
|
proc = thls.Processor()
|
|
a = 0
|
|
cp = thls.compile(proc, simple_test)
|
|
print("Program:")
|
|
cp.pretty_print()
|
|
cp.dimension_processor()
|
|
print("Encoded program:", cp.encode())
|
|
proc_impl = proc.implement(cp.encode(), cp.data)
|
|
|
|
def send_values(values):
|
|
for value in values:
|
|
yield proc_impl.input.eq(value)
|
|
yield proc_impl.input_stb.eq(1)
|
|
yield
|
|
yield proc_impl.input.eq(0)
|
|
yield proc_impl.input_stb.eq(0)
|
|
yield
|
|
while (yield proc_impl.busy):
|
|
yield
|
|
@passive
|
|
def receive_values(callback):
|
|
while True:
|
|
while not (yield proc_impl.output_stb):
|
|
yield
|
|
callback((yield proc_impl.output))
|
|
yield
|
|
|
|
send_list = [42, 40, 10, 10]
|
|
receive_list = []
|
|
|
|
run_simulation(proc_impl, [send_values(send_list), receive_values(receive_list.append)])
|
|
print("Execution:", send_list, "->", receive_list)
|
|
|
|
a = 0
|
|
expected_list = [simple_test(x) for x in send_list]
|
|
self.assertEqual(receive_list, expected_list)
|