#!/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))