|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
import xlrd # xlrd 的版本为1.2
import os
FILE_PATH = os.path.abspath(os.path.dirname(__file__))
# 文件路径,根据自己的文件名进行更改,但需要将py、slsx、sv这三个文件放在一个目录下
EXCEL_PATH = os.path.join(FILE_PATH, 'sram_data.xlsx')
SV_PATH = os.path.join(FILE_PATH, 'ecc.sv')
def read_xlsx(filename):
# 打开excel文件
data1 = xlrd.open_workbook(filename)
# 读取第一个工作表
table = data1.sheets()[0
# excel行数
n_rows = table.nrows
excel_data = []
for v in range(1, n_rows):
# 从第二行开始读取数据,第一行不需要
values = table.row_values(v)
excel_data.append(values)
return excel_data
# =============================================================================
# x修改sram的信号
# =============================================================================
def write_sv(excel_data, sv_path):
total_num = 0 # 模块替换数初始化
# sv_data = open(sv_path, "r", encoding="utf-8")
for i in range(0, len(excel_data)): # 按行循环遍历excel_data
# sv文件内容初始化为空,此后将按行读取原sv文件内容,并赋值给sv_file_data
# 找到要替换的模块就更改该行内容
sv_file_data = ""
find_block_flag = 0 # 模块定位标志
block_index = int(excel_data[i][0]) # 取出excel中的模块名
num_col = len(excel_data[i]) - 1 # 求excel中每个模块的数据长度
j = 1 # excel数据从第1列开始, 因为0列为模块名
sv_data = open(sv_path, "r", encoding="utf-8") # 每替换一个模块就打开一次sv文件
for line in sv_data: # 按行循环读取sv文件
if str(line) == str(block_index) + ':begin\n': # 判断excel中的模块序号是否在sv文件中,用模块序号+begin判断,防止误判
find_block_flag = 1 # 找到要替换的模块,同时将该行文件写入sv_file_data
sv_file_data += line
total_num += 1
continue
if find_block_flag == 1 and j != num_col: # 在sv文件中找到要替换的模块
sv_data_line = line.split('=')[0 + '=' # 以‘=’划分sv文件的一行,并取‘=’前部分内容
exl_data = ' ' + str(excel_data[i][j]) + ';' # 将excel中的数据按照原sv文件格式,组合为新sv文件的后半部分
line = sv_data_line + exl_data + '\n'
j += 1
sv_file_data += line
assert find_block_flag == 1, f"excel中的模块序号:{block_index }不在sv文件中!" # 断言,确保excel中的序号正确
with open(sv_path, "w", encoding="utf-8") as f:
f.write(sv_file_data)
f.close()
print(f'已替换sv文件中的第:{block_index}模块') if find_block_flag == 1 else ""
print(f'完成全部共:{total_num}个模块的替换!')
# =============================================================================
# 替换特定行
# =============================================================================
def replace_data(excel_data,sv_path):
sv_data = open(sv_path, "r", encoding="utf-8") # 每替换一个模块就打开一次sv文件
for line in sv_data:
print(line)
if len(line) == 16:
line = str(excel_data[0][5])
# =============================================================================
# rep=""
# with open("C:/Users/pgl/Desktop/change_sv_data - 副本/change_sv_data/ecc.sv","r") as fp:
# contents = fp.read()
# rep=contents.replace("eeee",str(excel_data[0][5]))
# #rep = rep.replace("eeee","a")
# with open("C:/Users/pgl/Desktop/change_sv_data - 副本/change_sv_data/ecc.sv","w") as fp2:
# fp2.write(rep)
# =============================================================================
def case_genterate():
case_name = []
file_path = "C:/Users/pgl/Desktop/change_sv_data - 副本/change_sv_data"
Filelist = []
Filelist = os.listdir(file_path)
for i in range(len(Filelist)):
Filelist[i = Filelist[i.replace("ecc","case")
Filelist[i = Filelist[i.replace(".sv", "")
print(Filelist[i)
if __name__ == '__main__':
# 读取excel 文件
excel_data = read_xlsx(EXCEL_PATH)
# 写入sv文件,传入excel数据、sv文件路径
write_sv(excel_data, SV_PATH)
# replace_data(excel_data,SV_PATH)
case_genterate()
|
|