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