#!/usr/bin/env python3 ############################################################################# # hex2hex # # Script uses objcopy to dump a Verilog comptatible hex file # # The script assumes the hex file has max 16 byte entries per line # # Script also supports creating EMF transactions with one address per data # # Offset to remove from all hex addresses # ############################################################################# import sys import re hexin = sys.argv[1] hexout = sys.argv[2] width = int(int(sys.argv[3])/8) #needed for both offset = int(sys.argv[4],16) emf = 0 # emf ################################################### # Read file into list and strip off trail junk list = [line.rstrip(' \n') for line in open(hexin)] ################################################### # Loop through byte list and print to output file fileout=open(hexout,"w") for line in list: if (~line.find('@')): #detects new memory section address = int((int(line.replace('@','',1),16)-offset)/8) if(emf): print ("Not Implemented") else: fileout.write("@"+format(address, 'x')+"\n") else: #write out data byte stream bytes=line.split(' ') length=len(bytes) for i in range(0,(16-length)): # zero extend buffer for simplicity bytes.append("00") for i in range(0,16,width): sublist=bytes[i:i+width] sublist.reverse() word="" word=word.join(sublist) if(emf): print ("Not Implemented") else : fileout.write(word+"\n") fileout.close()