开发环境:
开发思路:
选择一个配置文件,txt格式
生成文件格式 ,txt格式
开发思路:读取配置文件信息,生成固定格式的文本文件,具体固定格式可根据自身需求生成
代码:
import os
file_name = 'reg_set.txt'
numbuf = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23',
'24','25','26','27','28','29','30','31','U','UL']
commont = "/*!< "
commont1= " */"
numbuf2=["0x00000001","0x00000002","0x00000004","0x00000008","0x00000010","0x00000020","0x00000040","0x00000080",
"0x00000100","0x00000200","0x00000400","0x00000800","0x00001000","0x00002000","0x00004000","0x00008000",
"0x00010000","0x00020000","0x00040000","0x00080000","0x00100000","0x00200000","0x00400000","0x00800000",
"0x01000000","0x02000000","0x04000000","0x08000000","0x10000000","0x20000000","0x40000000","0x80000000"]
head = "#define "
bitmask = ["0x0","0x1","0x3","0x7","0xF","0x1F","0x3F","0x7F","0xFF","0x1FF","0x3FF","0x7FF","0xFFF","0x1FFF","0x3FFF"] #1bit:0x1 2bit:0x3 4bit:0xf
bitwide = 2
#strpos,bitpos
def bitwide1(bitw,bitpos):
strbuf1 = head+strbuf+"_Pos" #define
strbuf11 = "("+numbuf[bitpos]+numbuf[32]+")" #(U)
resbuf ="{0:<60}{1:<60}".format(strbuf1,strbuf11)
f2.write(resbuf)
f2.write('\n')
strbuf2 = head+strbuf+"_Msk" #mak
strbuf22 = "("+bitmask[bitw]+numbuf[33]+"<<"+strbuf+"_Pos"+")"
## strbuf222 = commont+commont1
resbuf2 ="{0:<60}{1:<60}".format(strbuf2,strbuf22)
f2.write(resbuf2)
f2.write('\n')
strbuf3 = head+strbuf
strbuf33=strbuf+"_Msk" #mak
resbuf3 ="{0:<60}{1:<60}".format(strbuf3,strbuf33)
f2.write(resbuf3)
f2.write('\n')
def bitwide2(strpos):
#3bit add _0 and _1
strbuf5 = head+strbuf+"_0"
strbuf55 = "("+"0x1"+numbuf[33]+"<<"+strbuf +"_Pos"+")"
resbuf5 ="{0:<60}{1:<60}".format(strbuf5,strbuf55)
f2.write(resbuf5)
f2.write('\n')
strbuf6 = head+strbuf+"_1"
strbuf66="("+"0x2"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
resbuf6 ="{0:<60}{1:<60}".format(strbuf6,strbuf66)
f2.write(resbuf6)
f2.write('\n')
def bitwide3(strpos):
#4bit add _2
bitbuf3 = head+strbuf+"_2"
bitbuf33="("+"0x4"+numbuf[33]+"<<"+strbuf +"_Pos"+")"
resbuf6 ="{0:<60}{1:<60}".format(bitbuf3,bitbuf33)
f2.write(resbuf6)
f2.write('\n')
def bitwide4(strpos):
bitbuf4 = head+strbuf+"_3"
bitbuf44="("+"0x8"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
resbuf6 ="{0:<60}{1:<60}".format(bitbuf4,bitbuf44)
f2.write(resbuf6)
f2.write('\n')
def bitwide5(strpos):
# add _4
bitbuf5 = head+strbuf+"_4"
bitbuf55 ="("+"0x10"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
resbuf6 ="{0:<60}{1:<60}".format(bitbuf5,bitbuf55)
f2.write(resbuf6)
f2.write('\n')
def bitwide6(strpos):
# add _6
bitbuf6 = head+strbuf+"_5"
bitbuf66 = "("+"0x20"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
resbuf6 ="{0:<60}{1:<60}".format(bitbuf6,bitbuf66)
f2.write(resbuf6)
f2.write('\n')
def bitwide7(strpos):
# add _7
bitbuf7 = head+strbuf+"_6"
bitbuf77 = "("+"0x40"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
resbuf6 ="{0:<60}{1:<60}".format(bitbuf7,bitbuf77)
f2.write(resbuf6)
f2.write('\n')
def bitwide8(strpos):
# add _8
bitbuf8 = head+strbuf+"_7"
bitbuf88 ="("+"0x80"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
f2.write(resbuf6)
f2.write('\n')
def bitwide9(strpos):
# add _9
bitbuf8 = head+strbuf+"_8"
bitbuf88 ="("+"0x100"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
f2.write(resbuf6)
f2.write('\n')
def bitwide10(strpos):
# add _10
bitbuf8 = head+strbuf+"_9"
bitbuf88 ="("+"0x200"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
f2.write(resbuf6)
f2.write('\n')
def bitwide11(strpos):
# add _11
bitbuf8 = head+strbuf+"_10"
bitbuf88 ="("+"0x400"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
f2.write(resbuf6)
f2.write('\n')
def bitwide12(strpos):
# add _11
bitbuf8 = head+strbuf+"_11"
bitbuf88 ="("+"0x800"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
f2.write(resbuf6)
f2.write('\n')
def bitwide13(strpos):
# add _11
bitbuf8 = head+strbuf+"_12"
bitbuf88 ="("+"0x1000"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
f2.write(resbuf6)
f2.write('\n')
def bitwide14(strpos):
# add _13
bitbuf8 = head+strbuf+"_13"
bitbuf88 ="("+"0x2000"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
f2.write(resbuf6)
f2.write('\n')
def bitwide15(strpos):
# add _13
bitbuf8 = head+strbuf+"_14"
bitbuf88 ="("+"0x4000"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
f2.write(resbuf6)
f2.write('\n')
def bitwide16(strpos):
# add _13
bitbuf8 = head+strbuf+"_15"
bitbuf88 ="("+"0x8000"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
f2.write(resbuf6)
f2.write('\n')
with open(file_name , encoding='utf-8') as file_obj:
strbufall = file_obj.readlines()
filelen = len(strbufall)
print(filelen)
file_name1 = 'reg_result.txt'
f2=open(file_name1, mode='w+')
i=31 #register bit
j=0
flen=filelen-1
bitpos = 0;
register_name = strbufall[0]
while (filelen):
strspbuf = strbufall[flen].split("\t")
strbuf = register_name.rstrip()+"_"+strspbuf[1].rstrip()
## print(strspbuf[0])
## print(strspbuf[1])
strspbuflen = len(strspbuf[0])
if strspbuflen >2:
bitwidestr = strspbuf[0].split(":")
wideres=int(bitwidestr[0])-int(bitwidestr[1])
bitwideint = int(wideres)+1
bitpos = int(bitwidestr[1])
else:
bitwideint = 1
bitpos = int(strspbuf[0])
## print("bitwide:",bitwideint)
## print("bitpos",bitpos)
## print(strbuf)
if strbuf != register_name.rstrip()+"_"+"RSV":
bitwide1(bitwideint,bitpos)
if bitwideint == 2:
bitwide2(flen)
elif bitwideint == 3:
bitwide2(flen)
bitwide3(flen)
elif bitwideint == 4:
bitwide2(flen)
bitwide3(flen)
bitwide4(flen)
elif bitwideint == 5:
bitwide2(flen)
bitwide3(flen)
bitwide4(flen)
bitwide5(flen)
elif bitwideint == 6:
bitwide2(flen)
bitwide3(flen)
bitwide4(flen)
bitwide5(flen)
bitwide6(flen)
elif bitwideint == 7:
bitwide2(flen)
bitwide3(flen)
bitwide4(flen)
bitwide5(flen)
bitwide6(flen)
bitwide7(flen)
elif bitwideint == 8:
bitwide2(flen)
bitwide3(flen)
bitwide4(flen)
bitwide5(flen)
bitwide6(flen)
bitwide7(flen)
bitwide8(flen)
elif bitwideint == 9:
bitwide2(flen)
bitwide3(flen)
bitwide4(flen)
bitwide5(flen)
bitwide6(flen)
bitwide7(flen)
bitwide8(flen)
bitwide9(flen)
elif bitwideint == 10:
bitwide2(flen)
bitwide3(flen)
bitwide4(flen)
bitwide5(flen)
bitwide6(flen)
bitwide7(flen)
bitwide8(flen)
bitwide9(flen)
bitwide10(flen)
elif bitwideint == 11:
bitwide2(flen)
bitwide3(flen)
bitwide4(flen)
bitwide5(flen)
bitwide6(flen)
bitwide7(flen)
bitwide8(flen)
bitwide9(flen)
bitwide10(flen)
bitwide11(flen)
elif bitwideint == 12:
bitwide2(flen)
bitwide3(flen)
bitwide4(flen)
bitwide5(flen)
bitwide6(flen)
bitwide7(flen)
bitwide8(flen)
bitwide9(flen)
bitwide10(flen)
bitwide11(flen)
bitwide12(flen)
elif bitwideint == 13:
bitwide2(flen)
bitwide3(flen)
bitwide4(flen)
bitwide5(flen)
bitwide6(flen)
bitwide7(flen)
bitwide8(flen)
bitwide9(flen)
bitwide10(flen)
bitwide11(flen)
bitwide12(flen)
bitwide13(flen)
elif bitwideint == 14:
bitwide2(flen)
bitwide3(flen)
bitwide4(flen)
bitwide5(flen)
bitwide6(flen)
bitwide7(flen)
bitwide8(flen)
bitwide9(flen)
bitwide10(flen)
bitwide11(flen)
bitwide12(flen)
bitwide13(flen)
bitwide14(flen)
else:
print("bit is >14 or bit <2")
else:
print("register = rsv")
j=j+1
flen= flen-1
filelen=filelen-1
if flen==0:
break;
## i=i-bitwideint
## print("i=",i)
f2.close()
配置文件格式:
ip名字加寄存器名字加bit位描述
打包程序:
需要库: