# FPGA 项目源代码提取工具 从 Vivado/ISE 项目中自动提取**实际参与编译**的源代码文件。 --- ## 功能说明 自动按优先级检测并提取: ``` .xpr (Vivado) → .xise (ISE) → .syr (ISE 综合报告) ``` - **只提取参与综合/synthesis/Implementation 的文件** - 自动识别 testbench 并单独放入 `tb文件/` 子目录 - 自动防重名覆盖(重名文件自动加 `_1`, `_2` 后缀) - 输出目录带时间戳 `Copy_Files_YYYYMMDD_HHMMSS` --- ## 使用方式 1. 在 `config.txt` 中配置**需要提取的文件后缀**(每行一个),例如: ``` v vhd sv vh xdc ``` 2. 运行脚本: ```bash python xpr解析.py ``` 3. 输入**项目根目录**路径(可以直接从资源管理器拖拽进来,自动去除引号) 4. 脚本自动检测: - 有 `.xpr` → 按 Vivado 解析 - 无 `.xpr` 但有 `.xise` → 列出所有 `.xise`,让你选一个,然后按 ISE 解析 - 无 `.xpr` 和 `.xise` 但有 `.syr` → 列出所有 `.syr`,让你选一个,然后按综合报告解析 - 都没有 → 输出提示后退出 --- ## ⚠️ 重要说明 > **项目根目录下必须要有 `.xpr` / `.xise` / `.syr` 其中之一才能提取**。 如果你的项目只有 `.ise`(二进制): - 请在 ISE 中打开 → `File → Save Project As` → 另存为 `.xise` 格式 - 或者用已经跑过综合生成的 `.syr` 文件提取 --- ## 路径解析规则 ### Vivado (.xpr) - `$PPRDIR/xxx/yyy.v` → 直接拼接 `项目根目录/xxx/yyy.v` - `$PSRCDIR/xxx/yyy.v` → 优先在 `项目名.srcs/` 目录模糊匹配,找不到再全局搜索 ### ISE (.xise) - 路径都是相对项目根目录 → 直接拼接即可 - 只要有 `` 就提取 ### ISE (.syr) - 正则匹配 `Compiling ... file "path/to/file.v"` 提取引号中的路径 - 绝对路径存在就直接用,不存在则提取文件名去项目根目录找 - 相对路径/纯文件名 → 模糊搜索 --- ## 输出说明 输出目录 `Copy_Files_YYYYMMDD_HHMMSS`: ``` Copy_Files_20260703_143025/ ├── top.v ├── uart.vhd ├── ... └── tb文件/ ├── tb_top.v └── ... ``` 程序末尾会打印统计信息: - 成功复制数量 - 跳过(文件不存在)数量 - 未找到(解析到路径但定位失败)列表 - 最终输出目录绝对路径 如果识别到 testbench 文件,会打印醒目的提醒: ``` !!!!!!!!!!!!!!!!!! 识别到项目中存在testbench文件,请在vivado中检查是否为源代码 !!!!!!!!!!!!!!!!!! ```