# 本脚本的功能为重命名当前文件夹下的文件,其重命名的依据为预先定义的列表。 # 将该脚本放置到fpga_image_xxx/reg/head目录下执行即可。 # 文件的改动如下: # 1.soc/macro目录下头文件去掉名称中的"_m"。 # 2.soc/struct目录下的头文件名加上"_s",同时更改文件中的文件名宏定义。 # 3.gpio_mtx_signal.h更改为gpio_mtx_sig.h,调整文件中sfc、smc相关信号宏定义,向前兼容(详见list_mtx_sig变量)。 # 4.soc/phy目录更改为plc/phy目录,删除目录下的struct文件夹,重命名macro文件夹为parse_reg,去掉parse_reg目录下文件名称中的"_m"。 # 5.soc/mac目录更改为plc/mac目录,删除目录下的struct文件夹,重命名macro文件夹为parse_reg,去掉parse_reg目录下文件名称中的"_m"。 # 6.调整mac相关宏定义,向前兼容,主要涉及mac相关头文件以及chip_reg_base.h(详见list_reg_operation、list_reg_base) # 7.删除所有空文件夹 # 当前版本需要额外拷贝的文件为:ly68s32xx.h efuse_mapping.h hw_war.h ds35x1gaxxx.h gd25lq16x.h # 当前列表对应的fpga image版本为 kunlun3_mpw_fpga_img_auto_export_1992_220530_1501 import os import sys import shutil g_list_rename = [ ["chip_irq_vector.h", "chip_irq_vector.h"], ["chip_reg_base.h", "chip_reg_base.h"], ["gpio_mtx_signal.h", "gpio_mtx_sig.h"], ["rfplc_reg_base.h", "rfplc_reg_base.h"], ["soc\\phy", "plc\\phy"], ["soc\\mac", "plc\\mac"], ["soc\\macro\\ada_reg_m.h", "soc\\macro\\ada_reg.h"], ["soc\\macro\\ahb_lite_reg_m.h", "soc\\macro\\ahb_rf.h"], ["soc\\macro\\ahb_l_reg_m.h", "soc\\macro\\ahb_l_reg.h"], # cache IP有更新,头文件名称去掉了apb_,这里为了减少改动,依然保留apb_ ["soc\\macro\\cache_reg_m.h", "soc\\macro\\apb_cache_reg.h"], ["soc\\macro\\apb_lite_reg_m.h", "soc\\macro\\apb_glb_reg.h"], ["soc\\macro\\dig_pin_reg_m.h", "soc\\macro\\pin_rf.h"], ["soc\\macro\\dma_reg_m.h", "soc\\macro\\dma_reg.h"], ["soc\\macro\\dtop_ana_inf_reg_m.h", "soc\\macro\\ana_dig_wrap_rf.h"], ["soc\\macro\\fdma_mst_reg_m.h", "soc\\macro\\fdma_mst_reg.h"], ["soc\\macro\\gpio_mtx_reg_m.h", "soc\\macro\\gpio_mtx_reg.h"], ["soc\\macro\\gpio_reg_m.h", "soc\\macro\\gpio_reg.h"], ["soc\\macro\\gtmr_reg_m.h", "soc\\macro\\gtmr_reg.h"], ["soc\\macro\\i2c_master_reg_m.h", "soc\\macro\\i2c_reg.h"], ["soc\\macro\\intc_reg_m.h", "soc\\macro\\intc_reg.h"], ["soc\\macro\\ledc_reg_m.h", "soc\\macro\\ledc_reg.h"], ["soc\\macro\\mail_box_reg_m.h", "soc\\macro\\mail_box_rf.h"], # 去掉了pmu # ["soc\\macro\\pmu_ana_inf_reg_m.h", "soc\\macro\\ana_pmu_wrap_rf.h"], # ["soc\\macro\\pmu_reg_m.h", "soc\\macro\\pmu_rf.h"], ["soc\\macro\\pwm_reg_m.h", "soc\\macro\\pwm_reg.h"], # sadc寄存器变更为sar_adc_reg_m.h # ["soc\\macro\\sadc0_reg_m.h", "soc\\macro\\sadc0_reg.h"], # ["soc\\macro\\sadc1_reg_m.h", "soc\\macro\\sadc1_reg.h"], ["soc\\macro\\sar_adc_reg_m.h", "soc\\macro\\sar_adc_reg.h"], ["soc\\macro\\sec_sys_reg_m.h", "soc\\macro\\sec_sys_rf.h"], ["soc\\macro\\sfc_reg_m.h", "soc\\macro\\sfc_rf.h"], ["soc\\macro\\smc_reg_m.h", "soc\\macro\\smc_rf.h"], ["soc\\macro\\spinlock_reg_m.h", "soc\\macro\\spinlock_top.h"], ["soc\\macro\\spi_reg_m.h", "soc\\macro\\spi_reg.h"], ["soc\\macro\\uart_reg_m.h", "soc\\macro\\uart_reg.h"], ["soc\\macro\\wdg_reg_m.h", "soc\\macro\\wdg_reg.h"], # afft_reg_m.h未更改为audio_fft_rf.h,因为仅afft_hw.c中使用该头文件 ["soc\\macro\\afft_reg_m.h", "soc\\macro\\afft_reg.h"], ["soc\\macro\\eq_reg_m.h", "soc\\macro\\eq_reg.h"], ["soc\\macro\\gmac_reg_m.h", "soc\\macro\\gmac_reg.h"], ["soc\\macro\\bond_reg_m.h", "soc\\macro\\bond_reg.h"], ["soc\\macro\\efuse_ctrl_reg_m.h", "soc\\macro\\efuse_dig_reg.h"], ["soc\\macro\\pll_cal_reg_m.h", "soc\\macro\\pll_cal_reg.h"], ["soc\\macro\\rtc_tmr_reg_m.h", "soc\\macro\\rtc_tmr_reg.h"], ["soc\\struct\\ada_reg.h", "soc\\struct\\ada_reg_s.h"], ["soc\\struct\\ahb_lite_reg.h", "soc\\struct\\ahb_rf_s.h"], ["soc\\struct\\ahb_l_reg.h", "soc\\struct\\ahb_l_reg_s.h"], ["soc\\struct\\cache_reg.h", "soc\\struct\\apb_cache_reg_s.h"], ["soc\\struct\\apb_lite_reg.h", "soc\\struct\\apb_glb_reg_s.h"], ["soc\\struct\\dig_pin_reg.h", "soc\\struct\\dig_pin_reg_s.h"], ["soc\\struct\\dma_reg.h", "soc\\struct\\dma_reg_s.h"], ["soc\\struct\\dtop_ana_inf_reg.h", "soc\\struct\\ana_dig_wrap_rf_s.h"], ["soc\\struct\\fdma_mst_reg.h", "soc\\struct\\fdma_mst_reg_s.h"], ["soc\\struct\\gpio_mtx_reg.h", "soc\\struct\\gpio_mtx_reg_s.h"], ["soc\\struct\\gpio_reg.h", "soc\\struct\\gpio_reg_s.h"], ["soc\\struct\\gtmr_reg.h", "soc\\struct\\gtmr_reg_s.h"], ["soc\\struct\\i2c_master_reg.h", "soc\\struct\\i2c_reg_s.h"], ["soc\\struct\\intc_reg.h", "soc\\struct\\intc_reg_s.h"], ["soc\\struct\\ledc_reg.h", "soc\\struct\\ledc_reg_s.h"], ["soc\\struct\\mail_box_reg.h", "soc\\struct\\mail_box_rf_s.h"], # ["soc\\struct\\pmu_ana_inf_reg.h", "soc\\struct\\ana_pmu_wrap_rf_s.h"], # ["soc\\struct\\pmu_reg.h", "soc\\struct\\pmu_rf_s.h"], ["soc\\struct\\pwm_reg.h", "soc\\struct\\pwm_reg_s.h"], # ["soc\\struct\\sadc0_reg.h", "soc\\struct\\sadc0_reg_s.h"], # ["soc\\struct\\sadc1_reg.h", "soc\\struct\\sadc1_reg_s.h"], ["soc\\struct\\sar_adc_reg.h", "soc\\struct\\sar_adc_reg_s.h"], ["soc\\struct\\sec_sys_reg.h", "soc\\struct\\sec_sys_rf_s.h"], ["soc\\struct\\sfc_reg.h", "soc\\struct\\sfc_rf_s.h"], ["soc\\struct\\smc_reg.h", "soc\\struct\\smc_rf_s.h"], ["soc\\struct\\spinlock_reg.h", "soc\\struct\\spinlock_top_s.h"], ["soc\\struct\\spi_reg.h", "soc\\struct\\spi_reg_s.h"], ["soc\\struct\\uart_reg.h", "soc\\struct\\uart_reg_s.h"], ["soc\\struct\\wdg_reg.h", "soc\\struct\\wdg_reg_s.h"], ["soc\\struct\\afft_reg.h", "soc\\struct\\afft_reg_s.h"], ["soc\\struct\\eq_reg.h", "soc\\struct\\eq_reg_s.h"], ["soc\\struct\\gmac_reg.h", "soc\\struct\\gmac_reg_s.h"], ["soc\\struct\\bond_reg.h", "soc\\struct\\bond_reg_s.h"], ["soc\\struct\\efuse_ctrl_reg.h", "soc\\struct\\efuse_dig_reg_s.h"], ["soc\\struct\\pll_cal_reg.h", "soc\\struct\\pll_cal_reg_s.h"], ["soc\\struct\\rtc_tmr_reg.h", "soc\\struct\\rtc_tmr_reg_s.h"], # usb头文件不上传,因此需要手动删除usb文件再执行脚本 ] def delete_empty_folder(path): if os.path.isdir(path): for dir in os.listdir(path): path_dir = os.path.join(path, dir) if os.path.isdir(path_dir): delete_empty_folder(path_dir) if not os.listdir(path): print("删除空目录:", path) os.rmdir(path) # else: # print("目录非空:", path) def main(): dir_script = os.path.split(os.path.realpath(__file__))[0] file_renamed = [] file_not_find = [] file_all = [] file_rename_num = len(g_list_rename) # 解析文件列表 for i in range(0, file_rename_num): path_src = os.path.join(dir_script, g_list_rename[i][0]) path_dst = os.path.join(dir_script, g_list_rename[i][1]) if not os.access(path_src, os.F_OK | os.W_OK): if not os.access(path_dst, os.F_OK): file_not_find.append(path_src) else: file_renamed.append([path_src, path_dst]) # 获取当前所有文件列表 for dir, dirs, files in os.walk(dir_script): # 跳过mac和phy目录,后续直接按目录操作 dir_relative = str(dir).replace(dir_script, "") if dir_relative.count("plc") or dir_relative.count("soc\\phy") or\ (dir_relative.count("soc\\mac") and (not dir_relative.count("soc\\macro"))): continue for file_temp in files: file_all.append(os.path.join(dir, file_temp)) file_all.remove(os.path.realpath(__file__)) for i in range(0, file_rename_num): for j in range(0, 2): file_temp = os.path.join(dir_script, g_list_rename[i][j]) if file_all.count(file_temp): file_all.remove(file_temp) if len(file_not_find): print("***************************************************************") print("未找到以下文件:") for file_temp in file_not_find: print(file_temp) if len(file_all): print("***************************************************************") print("存在以下新文件: ") for file_temp in file_all: print(file_temp) while (len(file_not_find) or len(file_all)): input_str = input("输入 Y继续,N退出\n") if str(input_str) == "y" or str(input_str) == "Y": break elif str(input_str) == "n" or str(input_str) == "N": sys.exit(1) else: continue # 重命名文件 print("开始重命名文件") for i in range(0, len(file_renamed)): print("%s --> %s" % (file_renamed[i][0], file_renamed[i][1])) # 创建不存在的文件夹 parent_dir = os.path.dirname(file_renamed[i][1]) if not os.path.exists(parent_dir): os.makedirs(parent_dir) try: os.rename(file_renamed[i][0], file_renamed[i][1]) except: shutil.move(file_renamed[i][0], file_renamed[i][1]) # struct文件夹中的文件,需要同步更改头文件中的宏定义,目前只更改soc文件 if str(parent_dir).count("soc\\struct"): str_list = str(file_renamed[i][0]).split("\\") header_old = str(str_list[len(str_list) - 1]).upper().replace(".", "_") str_list = str(file_renamed[i][1]).split("\\") header_new = str(str_list[len(str_list) - 1]).upper().replace(".", "_") print("macro of file name old:%s, new:%s" % (header_old, header_new)) with open(file_renamed[i][1], "r+", newline="\n") as fd: data = fd.read() data = data.replace(header_old, header_new) fd.seek(0, 0) fd.write(data) fd.truncate() # # 部分signal名称变更为kl1、kl2风格 # list_mtx_sig = [ # "GPIO_MTX_SFC_SPI_CLK_OUT_MON", "GPIO_MTX_SFC_SPI_CLK_OUT ", # "GPIO_MTX_SFC_SPI_CS1_OUT_MON", "GPIO_MTX_SFC_SPI_CS1_OUT ", # "GPIO_MTX_SFC_SPI_CS0_OUT_MON", "GPIO_MTX_SFC_SPI_CS0_OUT ", # "GPIO_MTX_SFC_SPI_SI_OUT_MON", "GPIO_MTX_SFC_SPI_D0_OUT ", # "GPIO_MTX_SFC_SPI_SO_OUT_MON", "GPIO_MTX_SFC_SPI_D1_OUT ", # "GPIO_MTX_SFC_SPI_WP_OUT_MON", "GPIO_MTX_SFC_SPI_D2_OUT ", # "GPIO_MTX_SFC_SPI_HOLD_OUT_MON", "GPIO_MTX_SFC_SPI_D3_OUT ", # "GPIO_MTX_SMC_SPI_CLK_OUT_MON", "GPIO_MTX_SMC_SPI_CLK_OUT ", # "GPIO_MTX_SMC_SPI_CS_OUT_MON", "GPIO_MTX_SMC_SPI_CS_OUT ", # "GPIO_MTX_SMC_SPI_SI_OUT_MON", "GPIO_MTX_SMC_SPI_SI_OUT ", # "GPIO_MTX_SMC_SPI_SO_OUT_MON", "GPIO_MTX_SMC_SPI_SO_OUT ", # "GPIO_MTX_SMC_SPI_SIO2_OUT_MON", "GPIO_MTX_SMC_SPI_SIO2_OUT ", # "GPIO_MTX_SMC_SPI_SIO3_OUT_MON", "GPIO_MTX_SMC_SPI_SIO3_OUT ", # ] # path_src = os.path.join(dir_script, "gpio_mtx_sig.h") # print("Modify the name of the signal, path:%s" % path_src) # with open(path_src, "r+", newline="\n") as fd: # data = fd.read() # for i in range(0, int(len(list_mtx_sig) / 2)): # data = data.replace(list_mtx_sig[i * 2], list_mtx_sig[i * 2 + 1]) # fd.seek(0, 0) # fd.write(data) # fd.truncate() # plc phy\mac文件需要新增一个文件夹,且去掉原文件夹 path_plc = ["mac", "phy"] for plc in path_plc: path_src = os.path.join(dir_script, "plc", plc, "macro") path_dst = os.path.join(dir_script, "plc", plc, "parse_reg") path_struct = os.path.join(dir_script, "plc", plc, "struct") if not os.path.exists(path_src): continue if os.path.exists(path_dst): shutil.rmtree(path_dst) shutil.copytree(path_src, path_dst) files = os.listdir(path_dst) for i in range(0, len(files)): file_temp = os.path.join(path_dst, files[i]) os.rename(file_temp, file_temp.replace("_m.h", ".h")) shutil.rmtree(path_src) shutil.rmtree(path_struct) # mac需要将操作寄存器的宏定义修改为之前的版本,且基地址宏定义也需要调整 list_reg_operation = [ "MAC_SYS_READ_REG", "RGF_MAC_READ_REG", "MAC_SYS_WRITE_REG", "RGF_MAC_WRITE_REG", "MAC_SYS_BASEADDR", "RGF_MAC_BASEADDR", "MAC_RX_READ_REG", "RGF_RX_READ_REG", "MAC_RX_WRITE_REG", "RGF_RX_WRITE_REG", "MAC_RX_BASEADDR", "RGF_RX_BASEADDR", "MAC_TMR_READ_REG", "RGF_TMR_READ_REG", "MAC_TMR_WRITE_REG", "RGF_TMR_WRITE_REG", "MAC_TMR_BASEADDR", "RGF_TMR_BASEADDR", "MAC_RAW_READ_REG", "RGF_RAW_READ_REG", "MAC_RAW_WRITE_REG", "RGF_RAW_WRITE_REG", "MAC_RAW_BASEADDR", "RGF_RAW_BASEADDR", "MAC_HWQ_READ_REG", "RGF_HWQ_READ_REG", "MAC_HWQ_WRITE_REG", "RGF_HWQ_WRITE_REG", "MAC_HWQ_BASEADDR", "RGF_HWQ_BASEADDR" ] path_src = os.path.join(dir_script, "plc", "mac", "parse_reg") print("Modify the macro of the mac, path:%s" % path_src) files = os.listdir(path_src) for file in files: str_temp = str(file).replace("reg.h", "READ_REG").upper() try: index = list_reg_operation.index(str_temp) except: continue print("file name:%s, %s -> %s, %s -> %s, %s -> %s" % (file, list_reg_operation[index], list_reg_operation[index + 1], list_reg_operation[index + 2], list_reg_operation[index + 3], list_reg_operation[index + 4], list_reg_operation[index + 5])) with open(os.path.join(path_src, file), "r+", newline="\n") as fd: data = fd.read() data = data.replace(list_reg_operation[index], list_reg_operation[index + 1]) data = data.replace(list_reg_operation[index + 2], list_reg_operation[index + 3]) data = data.replace(list_reg_operation[index + 4], list_reg_operation[index + 5]) fd.seek(0, 0) fd.write(data) fd.truncate() list_reg_base = [ "MAC_SYS_BASEADDR", "RGF_MAC_BASEADDR", "MAC_RX_BASEADDR", "RGF_RX_BASEADDR", "MAC_TMR_BASEADDR", "RGF_TMR_BASEADDR", "MAC_RAW_BASEADDR", "RGF_RAW_BASEADDR", "MAC_HWQ_BASEADDR", "RGF_HWQ_BASEADDR" ] path_src = os.path.join(dir_script, "chip_reg_base.h") print("Modify the macro of the mac, path:%s" % path_src) with open(path_src, "r+", newline="\n") as fd: data = fd.read() for i in range(0, int(len(list_reg_base) / 2)): data = data.replace(list_reg_base[i * 2], list_reg_base[i * 2 + 1]) fd.seek(0, 0) fd.write(data) fd.truncate() # rfplc phy\mac文件需要新增一个文件夹,且去掉原文件夹 # rfplc永远只更新mac,不包含phy的更新 path_plc = ["mac", "phy"] for rfplc in path_plc: path_src = os.path.join(dir_script, "rfplc", rfplc, "macro") path_dst = os.path.join(dir_script, "plc", "mac", "parse_reg") path_struct = os.path.join(dir_script, "rfplc", rfplc, "struct") if not os.path.exists(path_src): continue # shutil.copytree(path_src, path_dst) files = os.listdir(path_src) for file in files: file_src = os.path.join(path_src, file) file_dst = os.path.join(path_dst, file).replace("_m.h", ".h") os.rename(file_src, file_dst) shutil.rmtree(path_src) shutil.rmtree(path_struct) delete_empty_folder(dir_script) print("文件重命名完成") if __name__ == '__main__': main()