17def run(conn: AcceleratorConnection, platform: str =
"cosim") ->
None:
18 hostmem = conn.get_service_hostmem()
19 if hostmem
is not None:
20 mem1 = hostmem.allocate(1024)
21 assert mem1.size == 1024
22 print(f
"mem1: {mem1.ptr} size {mem1.size}")
25 assert conn.sysinfo().esi_version() == 0
27 assert m.api_version == 0
29 for esiType
in m.type_table:
32 for info
in m.module_infos:
34 for const_name, const
in info.constants.items():
35 print(f
" {const_name}: {const.value} {const.type}")
36 if info.name ==
"LoopbackIP" and const_name ==
"depth":
37 assert const.value == 5
39 d = conn.build_accelerator()
41 loopback = d.children[esiaccel.AppID(
"loopback_inst", 0)]
44 assert appid.name ==
"loopback_inst"
47 mysvc_send = loopback.ports[esiaccel.AppID(
"mysvc_recv")].write_port(
"recv")
48 mysvc_send.connect(buffer_size=12)
49 mysvc_send.write(
None)
50 print(f
"mysvc_send.type: {mysvc_send.type}")
51 assert isinstance(mysvc_send.type, types.VoidType)
53 mysvc_recv = loopback.ports[esiaccel.AppID(
"mysvc_send")].read_port(
"send")
56 print(
"mysvc_recv.read() returned")
58 recv = loopback.ports[esiaccel.AppID(
"loopback_tohw")].write_port(
"recv")
60 assert isinstance(recv.type, types.BitsType)
62 send = loopback.ports[esiaccel.AppID(
"loopback_fromhw")].read_port(
"send")
64 assert isinstance(send.type, types.BitsType)
67 recv.write(int.to_bytes(data, 1,
"little"))
68 resp_data: bytearray = send.read()
69 resp_int = int.from_bytes(resp_data,
"little")
71 print(f
"data: {data}")
72 print(f
"resp: {resp_int}")
74 if platform !=
"trace":
75 assert resp_int == data
78 myfunc = d.ports[esiaccel.AppID(
"structFunc")]
82 future_result = myfunc(a=10, b=-22)
83 result = future_result.result()
85 print(f
"result: {result}")
86 if platform !=
"trace":
87 assert result == {
"y": -22,
"x": -21}
89 if platform !=
"trace":
90 print(
"Checking function call result ordering.")
91 future_result1 = myfunc(a=15, b=-32)
92 future_result2 = myfunc(a=32, b=47)
93 result2 = future_result2.result()
94 result1 = future_result1.result()
95 print(f
"result1: {result1}")
96 print(f
"result2: {result2}")
97 assert result1 == {
"y": -32,
"x": -31},
"result1 is incorrect"
98 assert result2 == {
"y": 47,
"x": 48},
"result2 is incorrect"
100 myfunc = d.ports[esiaccel.AppID(
"arrayFunc")]
101 arg_chan = myfunc.write_port(
"arg").connect()
102 result_chan = myfunc.read_port(
"result").connect()
107 result: List[int] = result_chan.read()
109 print(f
"result: {result}")
110 if platform !=
"trace":
111 assert result == [-21, -22]
116@cosim_test(HW_DIR / "loopback.py")