#!/bin/env python3
######################/usr/bin/python
import argparse, sys, time, os, gzip, re, collections, json, shutil
#import pandas as pd
#sys.path.append('/home/w00412942/scripts')
#import eprocs
class gen_apg_file():
def __init__(self, dArg, idebug_mode):
self.patNum = int(dArg.pNum)
#self.patNum = dArg.pNum
self.testcfg = dArg.testcfg
self.algo = dArg.algo
self.step = dArg.step
self.bit = dArg.bit
self.vbuild = dArg.vbuild
self.devPath = dArg.devPath
self.outpath = dArg.outpath
#one macro = 512K bit, 256Mbit = 512*512Kbit
self.less_512K = ["256K","128K","64K","32K","16K","8K","6K","4K","2K","1K"]
if self.step == "256M":
self.zstep = 512
elif self.step == "128M":
self.zstep = 256
elif self.step == "64M":
self.zstep = 128
elif self.step == "32M":
self.zstep = 64
elif self.step == "16M":
self.zstep = 32
elif self.step == "8M":
self.zstep = 16
elif self.step == "4M":
self.zstep = 8
elif self.step == "2M":
self.zstep = 4
elif self.step == "1M":
self.zstep = 2
elif self.step == "512K":
self.zstep = 1
elif self.step in self.less_512K:
self.zstep = 1
else:
self.zstep = 0
#one wordline = 8(bit width)*64bit =512bit, 256K = 512*512bit
if self.step == "256K":
self.ystop = 512
elif self.step == "128K":
self.ystop = 256
elif self.step == "64K":
self.ystop = 128
elif self.step == "32K":
self.ystop = 64
elif self.step == "16K":
self.ystop = 32
elif self.step == "8K":
self.ystop = 16
elif self.step == "6K":
self.ystop = 12
elif self.step == "4K":
self.ystop = 8
elif self.step == "2K":
self.ystop = 4
elif self.step == "1K":
self.ystop = 2
else:
self.ystop = 0
self.astop = 0
self.zstop = 0
self.zStart = int(dArg.zStart)
self.apgCoreName = []
self.iTSELR = {}
self.iTSELW = {}
self.iTRA = {}
self.iTWA = {}
self.iTM = {}
self.patName = ""
self.apgFileName = ""
self.mtp_pat_dir = self.devPath+"/mtp/pattern_defs"
self.mtp_apg_dir = self.mtp_pat_dir+"/"+self.outpath
self.mtp_rec_dir = self.devPath+"/mtp/recon_datalib"
self.mtp_vec_dir = self.devPath+"/vectors/mempats/"+self.outpath
if self.algo == "M13N_mask":
self.progName = "MARCH13N_mask"
elif self.algo == "CHKWP_mask":
self.progName = "CHKWP_mask"
elif self.algo == "CHKWN_mask":
self.progName = "CHKWN_mask"
elif self.algo == "CHKRP_mask":
self.progName = "CHKRP_mask"
elif self.algo == "CHKRN_mask":
self.progName = "CHKRN_mask"
elif self.algo == "CHKWP_BL_mask":
self.progName = "CHKWP_BL_mask"
elif self.algo == "CHKWN_BL_mask":
self.progName = "CHKWN_BL_mask"
elif self.algo == "CHKRP_BL_mask":
self.progName = "CHKRP_BL_mask"
elif self.algo == "CHKRN_BL_mask":
self.progName = "CHKRN_BL_mask"
elif self.algo == "CHKWP_BL":
self.progName = "CHKWP_BL"
elif self.algo == "CHKWN_BL":
self.progName = "CHKWN_BL"
elif self.algo == "CHKRP_BL":
self.progName = "CHKRP_BL"
elif self.algo == "CHKRN_BL":
self.progName = "CHKRN_BL"
elif self.algo == "M13N":
self.progName = "MARCH13N"
elif self.algo == "CHKWP":
self.progName = "CHKWP"
elif self.algo == "CHKWN":
self.progName = "CHKWN"
elif self.algo == "CHKRP":
self.progName = "CHKRP"
elif self.algo == "CHKRN":
self.progName = "CHKRN"
elif self.algo == "RI":
self.progName = "RI"
elif self.algo == "RI100MS":
self.progName = "RI100MS"
elif self.algo == "CHECKBOARD":
self.progName = "CHECKBOARD"
else:
self.progName = ""
raise Exception("[Error:] the algo <%s> is supportted by this scr!"%(self.algo))
if '_BL' in self.progName:
print("[INFO:]the para -bit need define!")
self.apgCompileLog = self.mtp_apg_dir + "/" +self.algo + "_" + self.step + "_compile.log"
self.mtpVecPmfl = self.mtp_vec_dir + "/" +self.algo + "_" + self.step + "_vec.pmfl"
self.tamplate = "./incoming/tamplate_Q0001.apg"
#self.digtalAll = []
def praseCfg(self):
Finput=open(self.testcfg, 'r')
for iline in Finput:
rm = reCfg.match(iline)
if rm:
self.iTSELR[rm.group(6)] = rm.group(1)
self.iTSELW[rm.group(6)] = rm.group(2)
self.iTRA[rm.group(6)] = rm.group(3)
self.iTWA[rm.group(6)] = rm.group(4)
self.iTM[rm.group(6)] = rm.group(5)
Finput.close()
#8192 = 2^(y+x) (y+x =13 one marco addr len)
#8 = 2^x (x =3 bitline addr)
def genApg(self):
i_count = 0
i_zStart = 0
if os.path.isdir(self.devPath) == True:
if os.path.isdir(self.mtp_apg_dir) == False:
os.makedirs(self.mtp_apg_dir)
else:
print("[Info:]the apg dir has existed!")
else:
raise Exception("[Error:]device dir is not created, please create this dir before gen apg file!")
for key in self.iTSELR.keys():
for inum in range(1,self.patNum+1):
i_count = inum + int(self.zStart/self.zstep)
i_zStart = (i_count-1)*self.zstep
if self.step in self.less_512K:
self.astop = i_zStart*8192 + self.ystop*8
self.zstop = i_zStart + self.zstep
else:
self.astop = i_zStart*8192 + self.zstep*8192
self.zstop = i_zStart + self.zstep
if '_BL' in self.progName:
self.patName = self.progName + "_" + self.step + "_B" + self.bit + "_" + key + "_" + str(i_count) + "Label"
self.apgFileName = self.mtp_apg_dir + r"/" + self.progName + "_" + self.step + "_B" + self.bit + "_" + key + "_" + str(i_count) + ".apg"
self.apgCoreName.append(self.progName + "_" + self.step + "_B" + self.bit + "_" + key + "_" + str(i_count))
else:
self.patName = self.progName + "_" + self.step + "_" + key + "_" + str(i_count) + "Label"
self.apgFileName = self.mtp_apg_dir + r"/" + self.progName + "_" + self.step + "_" + key + "_" + str(i_count) + ".apg"
self.apgCoreName.append(self.progName + "_" + self.step + "_" + key + "_" + str(i_count))
Finput=open(self.tamplate, 'r')
Foutput=open(self.apgFileName, 'w')
for iline in Finput:
rm = re.match(r'\s+:apgProgram',iline)
if rm:
tmp_line = re.sub(r"March13N_XXXK",self.progName,iline)
Foutput.write("%s"%tmp_line)
#print(tmp_line)
continue
rm = re.match(r'\s+:testLabel',iline)
if rm:
tmp_line = re.sub(r"March13N_XXXK_YYY_0",self.patName,iline)
Foutput.write("%s"%tmp_line)
#print(tmp_line)
continue
if self.step in self.less_512K:
rm = re.search(r'yStop',iline)
if rm:
tmp_line = re.sub(r"MAX_Y",str(self.ystop),iline)
Foutput.write("%s"%tmp_line)
#print(tmp_line)
continue
rm = re.search(r'zStop',iline)
if rm:
tmp_line = re.sub(r"MAX_Z",str(self.zstop),iline)
Foutput.write("%s"%tmp_line)
#print(tmp_line)
continue
rm = re.search(r'zStart',iline)
if rm:
tmp_line = re.sub(r"0",str(i_zStart),iline)
Foutput.write("%s"%tmp_line)
#print(tmp_line)
continue
rm = re.search(r'aStop',iline)
if rm:
tmp_line = re.sub(r"2097152",str(self.astop),iline)
Foutput.write("%s"%tmp_line)
#print(tmp_line)
continue
rm = re.search(r'iTSELR',iline)
if rm:
tmp_line = re.sub(r"0x7",self.iTSELR[key],iline)
Foutput.write("%s"%tmp_line)
#print(tmp_line)
continue
rm = re.search(r'iTSELW',iline)
if rm:
tmp_line = re.sub(r"0x2",self.iTSELW[key],iline)
Foutput.write("%s"%tmp_line)
#print(tmp_line)
continue
rm = re.search(r'iTRA',iline)
if rm:
tmp_line = re.sub(r"0x2",self.iTRA[key],iline)
Foutput.write("%s"%tmp_line)
#print(tmp_line)
continue
rm = re.search(r'iTWA\s+',iline)
if rm:
tmp_line = re.sub(r"0x7",self.iTWA[key],iline)
Foutput.write("%s"%tmp_line)
#print(tmp_line)
continue
rm = re.search(r'iTM',iline)
if rm:
tmp_line = re.sub(r"1",self.iTM[key],iline)
Foutput.write("%s"%tmp_line)
#print(tmp_line)
continue
if '_BL' in self.progName:
rm = re.search(r'BLine',iline)
if rm:
tmp_line = re.sub(r"4",self.bit,iline)
Foutput.write("%s"%tmp_line)
#print(tmp_line)
continue
Foutput.write("%s"%iline)
Finput.close()
Foutput.close()
#print(self.apgFileName)
def genVec(self):
if os.path.isdir(self.mtp_vec_dir) == False:
os.makedirs(self.mtp_vec_dir)
else:
print("[Info:]the vector dir has existed!")
if os.path.isfile(self.apgCompileLog):
os.remove(self.apgCompileLog)
for iName in self.apgCoreName:
apg_filename = self.mtp_apg_dir+"/"+iName+".apg"
args_compile = "/opt/93000mts/mts/mtl/bin/apgc -v -r2 -lvs " + apg_filename + " -o " + self.apgCompileLog
os.system(args_compile)
sys.stdout.flush()
apg_vec_file = self.mtp_apg_dir+"/"+iName+".apg.vec"
if os.path.isfile(apg_vec_file):
shutil.move(apg_vec_file,self.mtp_vec_dir + r"/" +iName+".apg.vec")
else:
raise Exception("[Error:]apg vec and file are not generated as expected!")
apg_so_file = self.mtp_apg_dir+"/"+iName+"-EL7.x86_64.apg.rec.so"
if os.path.isfile(apg_so_file):
shutil.move(apg_so_file,self.mtp_rec_dir + r"/" + iName+"-EL7.x86_64.apg.rec.so")
else:
print("[Info:]there is no so file for algo <%s>"%(self.algo))
print("[Info:]the mtp vec file of algo <%s> is gen!"%(self.algo))
def genMtpPmfl(self):
if os.path.isdir(self.mtp_vec_dir) == False:
os.makedirs(self.mtp_vec_dir)
else:
print("[Info:]the vector dir has existed!")
if os.path.isfile(self.mtpVecPmfl):
os.remove(self.mtpVecPmfl)
Fout=open(self.mtpVecPmfl, 'w')
Fout.write("path:\n")
pmfl_path="../vectors/mempats/"+self.outpath
Fout.write("{}\n\n".format(pmfl_path))
Fout.write("files:\n")
for iName in self.apgCoreName:
apg_filename = iName+".apg.vec\n"
Fout.write("%s"%apg_filename)
Fout.close()
print("[Info:]the pmfl file of algo <%s> is gen!"%(self.algo))
################################
# Main
################################
reCfg = re.compile(r"^(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)")
#total 512*512K memory block,256M bit
#16*32*512K= 16*32M
#32*16*512K= 32*16M
#64*8*512K= 64*4M
#128*4*512K= 128*2M
#256*2*512K= 256*1M
#512*1*512K= 512*512K
if __name__ == "__main__":
cmdArgDef = argparse.ArgumentParser(description='Parse input args for burst label')
#cmdArgDef.add_argument('-mode', required=True, action='store', default="apg", help='(apg|prog)')
#cmdArgDef.add_argument('-prog', required=False, action='store', default="MARCH13N.prog", help='(testmode config)')
cmdArgDef.add_argument('-testcfg', required=False, action='store', default="test.cfg", help='(testmode config)')
cmdArgDef.add_argument('-algo', required=True, action='store', default="M13N", help='(M13N|CHKWP|CHKWN|CHKRP|CHKRN|RI|RI100MS)')
cmdArgDef.add_argument('-step', required=True, action='store', default="512K", help='(512K|256K|128K|64K|32K|16K|8K|6K|4K|2K|1K)')
cmdArgDef.add_argument('-bit', required=False, action='store', default="0", help='(0|1|2|3)')
cmdArgDef.add_argument('-pNum', required=True, action='store', default="1", help='(1|256|512|1024|2048|4096)')
cmdArgDef.add_argument('-zStart', required=True, action='store', default="0", help='(BLK start addr = 0|512|1024|1536|2048|2560|3072|3584)')
cmdArgDef.add_argument('-vbuild', required=False, action='store', default="YES", help='(YES|NO)')
cmdArgDef.add_argument('-devPath', required=True, action='store', default=os.getcwd()+'/', help='(device path)')
cmdArgDef.add_argument('-outpath', required=False, action='store', default=os.getcwd()+'/', help='(output path for apg file)')
dArg = cmdArgDef.parse_args()
idebug_mode = 1
oApgFile = gen_apg_file(dArg,idebug_mode)
oApgFile.praseCfg()
oApgFile.genApg()
if dArg.vbuild == "YES":
oApgFile.genVec()
oApgFile.genMtpPmfl()
if idebug_mode == 1:
print("debug info as follow:")
print(json.dumps(oApgFile.iTSELR,ensure_ascii=False, indent=4))
print(json.dumps(oApgFile.iTSELW,ensure_ascii=False, indent=4))
print(json.dumps(oApgFile.iTRA,ensure_ascii=False, indent=4))
print(json.dumps(oApgFile.iTWA,ensure_ascii=False, indent=4))
pass
实现什么功能
最新发布