3 from litex
.soc
.tools
.remote
.etherbone
import EtherbonePacket
, EtherboneRecord
4 from litex
.soc
.tools
.remote
.etherbone
import EtherboneReads
, EtherboneWrites
8 def __init__(self
, server
="192.168.1.50", port
=1234, debug
=False):
14 if hasattr(self
, "tx_socket"):
16 self
.tx_socket
= socket
.socket(socket
.AF_INET
, socket
.SOCK_DGRAM
)
17 self
.rx_socket
= socket
.socket(socket
.AF_INET
, socket
.SOCK_DGRAM
)
18 self
.rx_socket
.bind(("", self
.port
))
21 if not hasattr(self
, "tx_socket"):
23 self
.tx_socket
.close()
25 self
.rx_socket
.close()
28 def read(self
, addr
, length
=None):
29 length_int
= 1 if length
is None else length
30 record
= EtherboneRecord()
31 record
.reads
= EtherboneReads(addrs
=[addr
+4*j
for j
in range(length_int
)])
32 record
.rcount
= len(record
.reads
)
34 packet
= EtherbonePacket()
35 packet
.records
= [record
]
37 self
.tx_socket
.sendto(bytes(packet
), (self
.server
, self
.port
))
39 datas
, dummy
= self
.rx_socket
.recvfrom(8192)
40 packet
= EtherbonePacket(datas
)
42 datas
= packet
.records
.pop().writes
.get_datas()
44 for i
, value
in enumerate(datas
):
45 print("read {:08x} @ {:08x}".format(value
, addr
+ 4*i
))
46 return datas
[0] if length
is None else datas
48 def write(self
, addr
, datas
):
49 datas
= datas
if isinstance(datas
, list) else [datas
]
51 record
= EtherboneRecord()
52 record
.writes
= EtherboneWrites(base_addr
=addr
, datas
=iter(datas
))
53 record
.wcount
= len(record
.writes
)
55 packet
= EtherbonePacket()
56 packet
.records
= [record
]
58 self
.tx_socket
.sendto(bytes(packet
), (self
.server
, self
.port
))
61 for i
, value
in enumerate(datas
):
62 print("write {:08x} @ {:08x}".format(value
, addr
+ 4*i
))