SummerCart64/fw/picorv32/scripts/romload/map2debug.py
Polprzewodnikowy e61d06275d whatever
2021-08-05 19:50:29 +02:00

31 lines
929 B
Python

#!/usr/bin/env python3
import re
symbol = re.compile("\s*0x([0-9a-f]+)\s+([\w_]+)")
symbol_map = {}
with open("firmware.map", "r") as fh:
for fd in fh:
sym = symbol.match(fd)
if (sym):
addr = int(sym.group(1), 16)
symbol_map[addr] = sym.group(2)
with open("firmware_dbg.v", "w") as fh:
for k, v in symbol_map.items():
fh.write("`define C_SYM_{1:s} 32'h{0:08x}\n".format(k, v.upper()))
fh.write(" task firmware_dbg;\n")
fh.write(" input [31:0] addr;\n");
fh.write(" begin\n");
fh.write(" case (addr)\n");
for k, v in symbol_map.items():
fh.write(" 32'h{0:08x} : $display(\"%t: FCALL: {1:s}\", $time);\n".format(k, v))
fh.write(" endcase\n");
fh.write(" end\n");
fh.write(" endtask\n");
with open("firmware_addr.txt", "w") as fh:
for k, v in symbol_map.items():
fh.write("{0:08x} {1:s}\n".format(k,v))