10 from litex
.soc
.tools
.remote
import RemoteClient
12 class ConnectionClosed(Exception):
15 # struct vexriscv_req {
20 #} __attribute__((packed));
21 class VexRiscvDebugPacket():
22 def __init__(self
, data
):
23 self
.is_write
, self
.size
, self
.address
, self
.value
= struct
.unpack("=?BII", data
)
25 class VexRiscvDebugBridge():
30 if not hasattr(self
, "debugger_socket"):
31 self
.debugger_socket
= socket
.socket(socket
.AF_INET
, socket
.SOCK_STREAM
)
32 self
.debugger_socket
.bind(('',7893))
33 self
.debugger_socket
.listen(0)
35 if not hasattr(self
, "rc"):
36 self
.rc
= RemoteClient(csr_csv
=self
.args
.csr
)
38 self
.core_reg
= self
.rc
.regs
.cpu_or_bridge_debug_core
39 self
.data_reg
= self
.rc
.regs
.cpu_or_bridge_debug_data
40 self
.refresh_reg
= self
.rc
.regs
.cpu_or_bridge_debug_refresh
43 parser
= argparse
.ArgumentParser()
44 parser
.add_argument("--csr", default
="test/csr.csv", help="csr mapping file")
45 self
.args
= parser
.parse_args()
48 if hasattr(self
, "debugger"):
50 print("Waiting for connection from debugger...")
51 self
.debugger
, address
= self
.debugger_socket
.accept()
52 print("Accepted debugger connection from {}".format(address
[0]))
54 def _refresh_reg(self
, reg
):
55 self
.refresh_reg
.write(reg
)
59 self
.write_to_debugger(self
.core_reg
.read())
63 self
.write_to_debugger(self
.data_reg
.read())
65 def write_core(self
, value
):
66 self
.core_reg
.write(value
)
68 def write_data(self
, value
):
69 self
.data_reg
.write(value
)
71 def read_from_debugger(self
):
72 data
= self
.debugger
.recv(10)
76 raise ConnectionClosed()
77 return VexRiscvDebugPacket(data
)
79 def write_to_debugger(self
, data
):
80 self
.debugger
.send(struct
.pack("=I", data
))
83 vrvb
= VexRiscvDebugBridge()
89 pkt
= vrvb
.read_from_debugger()
90 if pkt
.is_write
== True:
91 if pkt
.address
== 0xf00f0000:
92 vrvb
.write_core(pkt
.value
)
93 elif pkt
.address
== 0xf00f0004:
94 vrvb
.write_data(pkt
.value
)
96 raise "Unrecognized address"
98 if pkt
.address
== 0xf00f0000:
100 elif pkt
.address
== 0xf00f0004:
103 raise "Unrecognized address"
104 except ConnectionClosed
:
105 print("Debugger connection closed")
107 if __name__
== "__main__":