99 lines
2.6 KiB
Markdown
99 lines
2.6 KiB
Markdown
# 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)
|
||
- 路径都是相对项目根目录 → 直接拼接即可
|
||
- 只要有 `<association name="Implementation">` 就提取
|
||
|
||
### 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中检查是否为源代码
|
||
!!!!!!!!!!!!!!!!!!
|
||
``` |