adjust
This commit is contained in:
parent
abd20774f5
commit
c4f9668515
|
@ -18,6 +18,94 @@ def validate_sheet(rb, sheet_name):
|
||||||
print(f"[Error] Sheet '{sheet_name}' not found in {rb}")
|
print(f"[Error] Sheet '{sheet_name}' not found in {rb}")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def generate_sram_wrapper(template_file, sram_name, width, depth, ref_name,\
|
||||||
|
asmbly_depth_nums,asmbly_width_nums,compile_depth,compile_width,\
|
||||||
|
wtsel,\
|
||||||
|
output_dir):
|
||||||
|
"""生成单个SRAM包装文件"""
|
||||||
|
with open(template_file, 'r') as f:
|
||||||
|
template = f.read()
|
||||||
|
|
||||||
|
# 执行模板替换(根据您提供的模板结构)
|
||||||
|
replaced = template.replace('${SramWrapName}', sram_name)\
|
||||||
|
.replace('${Width}', str(width))\
|
||||||
|
.replace('${Depth}', str(depth))\
|
||||||
|
.replace('${AssemblyDepth}',str(asmbly_depth_nums))\
|
||||||
|
.replace('${AssemblyWidth}',str(asmbly_width_nums))\
|
||||||
|
.replace('${CompileDepth}',str(compile_depth))\
|
||||||
|
.replace('${CompileWidth}',str(compile_width))\
|
||||||
|
.replace('${WTselRange}', str(wtsel))\
|
||||||
|
.replace('${ReferenceName}', ref_name)
|
||||||
|
|
||||||
|
# 写入输出文件
|
||||||
|
output_path = f"{output_dir}/{sram_name}.v"
|
||||||
|
with open(output_path, 'w') as f:
|
||||||
|
f.write(replaced)
|
||||||
|
|
||||||
|
def get_mem_ctrl_bus_fields(i_compilerName,mux,width, depth):
|
||||||
|
compilerName = i_compilerName.split('_')[0]
|
||||||
|
# get WTSEL
|
||||||
|
wtsel = '[45:44]'
|
||||||
|
if compilerName == 'tsn12ffcllspsram':
|
||||||
|
if (mux == 4 and (depth>1024 and depth <= 4096)) or \
|
||||||
|
(mux == 8 and (depth>2048 and depth <= 8192)) or \
|
||||||
|
(mux == 16 and (depth>4096 and depth <= 16384)):
|
||||||
|
wtsel = '[47:46]'
|
||||||
|
|
||||||
|
return wtsel
|
||||||
|
|
||||||
|
def gen_sram_sh(rb,sheet_name, output_dir):
|
||||||
|
"""生成SRAM相关的Shell脚本"""
|
||||||
|
config_dir = os.path.join(output_dir, "config")
|
||||||
|
os.makedirs(config_dir, exist_ok=True)
|
||||||
|
try:
|
||||||
|
sheet = rb.sheet_by_name(sheet_name)
|
||||||
|
headers = sheet.row_values(1)
|
||||||
|
|
||||||
|
# 获取关键列索引
|
||||||
|
name_col = headers.index('SramWrapName')
|
||||||
|
compiler_col = headers.index('CompilerName') if 'CompilerName' in headers else -1
|
||||||
|
|
||||||
|
if compiler_col == -1:
|
||||||
|
print(f"[Error] Missing 'CompilerName' column in sheet {sheet_name}")
|
||||||
|
return
|
||||||
|
|
||||||
|
commands = []
|
||||||
|
for row_idx in range(2, sheet.nrows):
|
||||||
|
row = sheet.row_values(row_idx)
|
||||||
|
sram_name = row[name_col]
|
||||||
|
compiler = row[compiler_col]
|
||||||
|
|
||||||
|
if sram_name and compiler: # 空值检查
|
||||||
|
cmd = f"../{compiler}.pl -file {sram_name}_{compiler}_config.txt -ColRed -NonBist"
|
||||||
|
commands.append(cmd)
|
||||||
|
else:
|
||||||
|
print(f"[Warning] Missing data in row {row_idx} for SRAM '{sram_name}' with compiler '{compiler}', skipping.")
|
||||||
|
|
||||||
|
|
||||||
|
# 写入bash文件
|
||||||
|
sh_path = os.path.join(config_dir, f"run_{sheet_name}.sh")
|
||||||
|
with open(sh_path, 'w') as f:
|
||||||
|
f.write("#!/bin/bash\n")
|
||||||
|
f.write("\n".join(sorted(commands)))
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Generate shell script failed: {str(e)}")
|
||||||
|
|
||||||
|
def gen_config_txt(sram_name, compiler, compile_depth, compile_width, mux, output_dir):
|
||||||
|
"""生成SRAM配置文本文件到config子目录"""
|
||||||
|
config_dir = os.path.join(output_dir, "config")
|
||||||
|
os.makedirs(config_dir, exist_ok=True)
|
||||||
|
|
||||||
|
config_content = f"{compile_depth}x{compile_width}m{mux}scp ulvt"
|
||||||
|
|
||||||
|
config_path = os.path.join(config_dir, f"{sram_name}_{compiler}_config.txt")
|
||||||
|
with open(config_path, 'w') as f:
|
||||||
|
f.write(config_content)
|
||||||
|
|
||||||
|
|
||||||
def generate_files(xls_path, sheet_name=None):
|
def generate_files(xls_path, sheet_name=None):
|
||||||
"""主生成函数"""
|
"""主生成函数"""
|
||||||
rb = xlrd.open_workbook(xls_path)
|
rb = xlrd.open_workbook(xls_path)
|
||||||
|
@ -131,92 +219,6 @@ def generate_files(xls_path, sheet_name=None):
|
||||||
|
|
||||||
gen_sram_sh(rb, sheet.name, output_dir)
|
gen_sram_sh(rb, sheet.name, output_dir)
|
||||||
|
|
||||||
|
|
||||||
def generate_sram_wrapper(template_file, sram_name, width, depth, ref_name,\
|
|
||||||
asmbly_depth_nums,asmbly_width_nums,compile_depth,compile_width,\
|
|
||||||
wtsel,\
|
|
||||||
output_dir):
|
|
||||||
"""生成单个SRAM包装文件"""
|
|
||||||
with open(template_file, 'r') as f:
|
|
||||||
template = f.read()
|
|
||||||
|
|
||||||
# 执行模板替换(根据您提供的模板结构)
|
|
||||||
replaced = template.replace('${SramWrapName}', sram_name)\
|
|
||||||
.replace('${Width}', str(width))\
|
|
||||||
.replace('${Depth}', str(depth))\
|
|
||||||
.replace('${AssemblyDepth}',str(asmbly_depth_nums))\
|
|
||||||
.replace('${AssemblyWidth}',str(asmbly_width_nums))\
|
|
||||||
.replace('${CompileDepth}',str(compile_depth))\
|
|
||||||
.replace('${CompileWidth}',str(compile_width))\
|
|
||||||
.replace('${WTselRange}', str(wtsel))\
|
|
||||||
.replace('${ReferenceName}', ref_name)
|
|
||||||
|
|
||||||
# 写入输出文件
|
|
||||||
output_path = f"{output_dir}/{sram_name}.v"
|
|
||||||
with open(output_path, 'w') as f:
|
|
||||||
f.write(replaced)
|
|
||||||
|
|
||||||
def get_mem_ctrl_bus_fields(i_compilerName,mux,width, depth):
|
|
||||||
compilerName = i_compilerName.split('_')[0]
|
|
||||||
# get WTSEL
|
|
||||||
wtsel = '[45:44]'
|
|
||||||
if compilerName == 'tsn12ffcllspsram':
|
|
||||||
if (mux == 4 and (depth>1024 and depth <= 4096)) or \
|
|
||||||
(mux == 8 and (depth>2048 and depth <= 8192)) or \
|
|
||||||
(mux == 16 and (depth>4096 and depth <= 16384)):
|
|
||||||
wtsel = '[47:46]'
|
|
||||||
|
|
||||||
return wtsel
|
|
||||||
|
|
||||||
def gen_sram_sh(rb,sheet_name, output_dir):
|
|
||||||
"""生成SRAM相关的Shell脚本"""
|
|
||||||
config_dir = os.path.join(output_dir, "config")
|
|
||||||
os.makedirs(config_dir, exist_ok=True)
|
|
||||||
try:
|
|
||||||
sheet = rb.sheet_by_name(sheet_name)
|
|
||||||
headers = sheet.row_values(1)
|
|
||||||
|
|
||||||
# 获取关键列索引
|
|
||||||
name_col = headers.index('SramWrapName')
|
|
||||||
compiler_col = headers.index('CompilerName') if 'CompilerName' in headers else -1
|
|
||||||
|
|
||||||
if compiler_col == -1:
|
|
||||||
print(f"[Error] Missing 'CompilerName' column in sheet {sheet_name}")
|
|
||||||
return
|
|
||||||
|
|
||||||
commands = []
|
|
||||||
for row_idx in range(2, sheet.nrows):
|
|
||||||
row = sheet.row_values(row_idx)
|
|
||||||
sram_name = row[name_col]
|
|
||||||
compiler = row[compiler_col]
|
|
||||||
|
|
||||||
if sram_name and compiler: # 空值检查
|
|
||||||
cmd = f"../{compiler}.pl -file {sram_name}_{compiler}_config.txt -ColRed -NonBist"
|
|
||||||
commands.append(cmd)
|
|
||||||
else:
|
|
||||||
print(f"[Warning] Missing data in row {row_idx} for SRAM '{sram_name}' with compiler '{compiler}', skipping.")
|
|
||||||
|
|
||||||
|
|
||||||
# 写入bash文件
|
|
||||||
sh_path = os.path.join(config_dir, f"run_{sheet_name}.sh")
|
|
||||||
with open(sh_path, 'w') as f:
|
|
||||||
f.write("#!/bin/bash\n")
|
|
||||||
f.write("\n".join(sorted(commands)))
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Generate shell script failed: {str(e)}")
|
|
||||||
|
|
||||||
def gen_config_txt(sram_name, compiler, compile_depth, compile_width, mux, output_dir):
|
|
||||||
"""生成SRAM配置文本文件到config子目录"""
|
|
||||||
config_dir = os.path.join(output_dir, "config")
|
|
||||||
os.makedirs(config_dir, exist_ok=True)
|
|
||||||
|
|
||||||
config_content = f"{compile_depth}x{compile_width}m{mux}scp ulvt"
|
|
||||||
|
|
||||||
config_path = os.path.join(config_dir, f"{sram_name}_{compiler}_config.txt")
|
|
||||||
with open(config_path, 'w') as f:
|
|
||||||
f.write(config_content)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
args = parse_args()
|
args = parse_args()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue