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}")
24 assert hostmem.allocate(0)
is None
29 assert conn.sysinfo().esi_version() == 1
31 assert m.api_version == 1
33 for esiType
in m.type_table:
36 for info
in m.module_infos:
38 for const_name, const
in info.constants.items():
39 print(f
" {const_name}: {const.value} {const.type}")
40 if info.name ==
"LoopbackIP" and const_name ==
"depth":
41 assert const.value == 5
43 d = conn.build_accelerator()
45 loopback = d.children[esiaccel.AppID(
"loopback_inst", 0)]
48 assert appid.name ==
"loopback_inst"
51 mysvc_send = loopback.ports[esiaccel.AppID(
"mysvc_recv")].write_port(
"recv")
52 mysvc_send.connect(buffer_size=12)
53 mysvc_send.write(
None)
54 print(f
"mysvc_send.type: {mysvc_send.type}")
57 mysvc_recv = loopback.ports[esiaccel.AppID(
"mysvc_send")].read_port(
"send")
60 print(
"mysvc_recv.read() returned")
62 recv = loopback.ports[esiaccel.AppID(
"loopback_tohw")].write_port(
"recv")
66 send = loopback.ports[esiaccel.AppID(
"loopback_fromhw")].read_port(
"send")
71 recv.write(int.to_bytes(data, 1,
"little"))
72 resp_data: bytearray = send.read()
73 resp_int = int.from_bytes(resp_data,
"little")
75 print(f
"data: {data}")
76 print(f
"resp: {resp_int}")
78 if platform !=
"trace":
79 assert resp_int == data
82 myfunc = d.ports[esiaccel.AppID(
"structFunc")]
86 future_result = myfunc(a=10, b=-22)
87 result = future_result.result()
89 print(f
"result: {result}")
90 if platform !=
"trace":
91 assert result == {
"y": -22,
"x": -21}
93 if platform !=
"trace":
94 print(
"Checking function call result ordering.")
95 future_result1 = myfunc(a=15, b=-32)
96 future_result2 = myfunc(a=32, b=47)
97 result2 = future_result2.result()
98 result1 = future_result1.result()
99 print(f
"result1: {result1}")
100 print(f
"result2: {result2}")
101 assert result1 == {
"y": -32,
"x": -31},
"result1 is incorrect"
102 assert result2 == {
"y": 47,
"x": 48},
"result2 is incorrect"
104 myfunc = d.ports[esiaccel.AppID(
"arrayFunc")]
105 arg_chan = myfunc.write_port(
"arg").connect()
106 result_chan = myfunc.read_port(
"result").connect()
111 result: List[int] = result_chan.read()
113 print(f
"result: {result}")
114 if platform !=
"trace":
115 assert result == [-21, -22]
120@cosim_test(HW_DIR / "loopback.py")