Skip to content

Commit

Permalink
tools/litex_client: add utils to dump FPGA identifier and registers a…
Browse files Browse the repository at this point in the history
…nd expose it as litex_cli.

Dump FPGA identifier: litex_cli --ident
Dump FPGA registers: litex_cli --regs
  • Loading branch information
enjoy-digital committed Oct 22, 2020
1 parent 30b226f commit 0dec446
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 1 deletion.
53 changes: 52 additions & 1 deletion litex/tools/litex_client.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
#!/usr/bin/env python3

#
# This file is part of LiteX.
#
# Copyright (c) 2015-2019 Florent Kermarrec <[email protected]>
# Copyright (c) 2015-2020 Florent Kermarrec <[email protected]>
# Copyright (c) 2016 Tim 'mithro' Ansell <[email protected]>
# SPDX-License-Identifier: BSD-2-Clause

import os
import argparse
import socket

from litex.tools.remote.etherbone import EtherbonePacket, EtherboneRecord
from litex.tools.remote.etherbone import EtherboneReads, EtherboneWrites
from litex.tools.remote.etherbone import EtherboneIPC
from litex.tools.remote.csr_builder import CSRBuilder

# Remote Client ------------------------------------------------------------------------------------

class RemoteClient(EtherboneIPC, CSRBuilder):
def __init__(self, host="localhost", port=1234, base_address=0, csr_csv=None, csr_data_width=None, debug=False):
Expand Down Expand Up @@ -79,3 +83,50 @@ def write(self, addr, datas):
if self.debug:
for i, data in enumerate(datas):
print("write {:08x} @ {:08x}".format(data, self.base_address + addr + 4*i))

# Utils --------------------------------------------------------------------------------------------

def dump_identifier(port):
wb = RemoteClient(port=port)
wb.open()

fpga_identifier = ""

for i in range(256):
c = chr(wb.read(wb.bases.identifier_mem + 4*i) & 0xff)
fpga_identifier += c
if c == "\0":
break

print(fpga_identifier)

wb.close()

def dump_registers(port):
wb = RemoteClient(port=port)
wb.open()

for name, register in wb.regs.__dict__.items():
print("0x{:08x} : 0x{:08x} {}".format(register.addr, register.read(), name))

wb.close()

# Run ----------------------------------------------------------------------------------------------

def main():
parser = argparse.ArgumentParser(description="LiteX Client utility")
parser.add_argument("--port", default="1234", help="Host bind port")
parser.add_argument("--ident", action="store_true", help="Dump FPGA identifier")
parser.add_argument("--regs", action="store_true", help="Dump FPGA registers")
args = parser.parse_args()

port = int(args.port, 0)

if args.ident:
dump_identifier(port=port)

if args.regs:
dump_registers(port=port)

if __name__ == "__main__":
main()
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
# full names
"litex_term=litex.tools.litex_term:main",
"litex_server=litex.tools.litex_server:main",
"litex_cli=litex.tools.litex_client:main",
"litex_jtag_uart=litex.tools.litex_jtag_uart:main",
"litex_crossover_uart=litex.tools.litex_crossover_uart:main",
"litex_sim=litex.tools.litex_sim:main",
Expand Down

0 comments on commit 0dec446

Please sign in to comment.