|  | #!/usr/bin/env python3 | 
|  | # Copyright lowRISC contributors. | 
|  | # Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
|  | # SPDX-License-Identifier: Apache-2.0 | 
|  | """Utility script | 
|  | Handles linear addresses generated from srec_cat to suit with fpga BRAM | 
|  | architecture which need word addressing.. Example | 
|  | 0x0 0x00000010 | 
|  | 0x1 0x000000FF | 
|  | 0x2 0x00000088 | 
|  |  | 
|  | get converted to | 
|  |  | 
|  | 0x0 0x00000010 | 
|  | 0x4 0x000000FF | 
|  | 0x8 0x00000088 """ | 
|  |  | 
|  | import argparse | 
|  | import imp | 
|  | import logging | 
|  | import os | 
|  | import sys | 
|  | from pathlib import Path | 
|  |  | 
|  | DESC = """addr4x.py script handles the address generated in mem file from | 
|  | srec_cat to suit with BRAM memory architecture which need word addressing""" | 
|  |  | 
|  |  | 
|  | def main(argv): | 
|  | parser = argparse.ArgumentParser(prog="addr4x.py", description=DESC) | 
|  | parser.add_argument('--infile', | 
|  | '-i', | 
|  | dest='inputfile', | 
|  | type=argparse.FileType('r', encoding='UTF-8'), | 
|  | required=True, | 
|  | help='Input Mem file') | 
|  | parser.add_argument('--outfile', | 
|  | '-o', | 
|  | dest='outputfile', | 
|  | type=argparse.FileType('w', encoding='UTF-8'), | 
|  | required=True, | 
|  | help='Output Mem file') | 
|  | args = parser.parse_args() | 
|  | in_file_path = Path(args.inputfile.name).resolve() | 
|  | with open(in_file_path) as file: | 
|  | for line in file: | 
|  | if "sourceforge" not in line: | 
|  | a = line.split("@") | 
|  | b = a[1].split(" ") | 
|  | mult = int(b[0], 16) | 
|  | final = "@" + hex(mult * 4)[2:] + " " + b[1] | 
|  | args.outputfile.write(final) | 
|  |  | 
|  |  | 
|  | if __name__ == "__main__": | 
|  | main(sys.argv) |