Git管理FPGA工程:版本分支划分与比特流文件增量归档方案
FPGA工程与纯软件工程有本质区别——RTL代码、IP核、约束文件、仿真波形、比特流文件混杂在一起,单个比特流可能几十MB到几百MB,且二进制文件无法diff。用Git管理时,如果不做分支规划和二进制文件处理,仓库会迅速膨胀到几十GB,clone和pull变得缓慢,历史记录也难以追溯。本文从分支模型和比特流归档两个维度,给出可落地的方案。
一、分支划分:适配FPGA开发流程
推荐采用类似Git Flow但简化的分支模型,适配FPGA的“RTL开发→仿真→综合→布局布线→上板验证”流程。
master:只存放经过上板验证、评审通过的稳定版本。每次合并需打tag,如v1.0.0。
develop:日常开发主线,RTL代码、约束、仿真testbench在此分支上迭代。所有feature分支从此分出,合并回此。
feature/xxx:每个新功能或模块独立分支,如feature/i2c_master、feature/ddr_init。开发完成后合并到develop。
release/x.y.z:从develop分出,冻结RTL改动,只修bug,生成比特流并归档。验证通过后合并到master并打tag。
experiment/:临时试验分支,如尝试新的综合策略或约束,不上传远程仓库,避免污染。
关键原则:RTL代码、约束、脚本、文档等文本文件纳入Git管理;综合/实现生成的中间文件(.dcp、.edf、.jou、.log)全部添加.gitignore忽略,只保留必要的报告。
# .gitignore 示例
*.dcp
*.edf
*.jou
*.log
*.bit
*.bin
*.mcs
*.prm
Xilinx/**
vivado.log*
二、比特流文件增量归档:Git LFS + 外部存储
比特流是二进制大文件,直接放入Git仓库会导致历史臃肿。推荐使用Git LFS(Large File Storage),将比特流指针存储在仓库中,实际文件存储在远程LFS服务器。同时,配合增量归档策略,只保留必要的比特流版本。
1. Git LFS 配置
git lfs track "*.bit"
git lfs track "*.bin"
git add .gitattributes
git commit -m "Add LFS tracking for bitstream files"
之后所有.bit文件都会被LFS接管,本地仓库只保存指针,push/pull时自动传输大文件。
2. 增量归档脚本
即使有LFS,过多比特流版本仍会占用大量存储空间。建议在release分支上,每次生成比特流后,只保留最新的几个版本,并将历史版本打包到外部归档(如NAS、S3)。以下脚本实现“保留最近3个比特流,其余打包压缩”:
#!/bin/bash
# archive_bitstream.sh
BIT_DIR="./bitstreams"
ARCHIVE_DIR="./archive"
KEEP=3
mkdir -p "$ARCHIVE_DIR"
cd "$BIT_DIR"
# 列出所有.bit文件按时间排序
files=( $(ls -t *.bit 2>/dev/null) )
count=${#files[@]}
if [ $count -gt $KEEP ]; then
# 打包旧文件
old_files=("${files[@]:$KEEP}")
tar czf "$ARCHIVE_DIR/bitstream_$(date +%Y%m%d_%H%M%S).tar.gz" "${old_files[@]}"
# 删除旧文件
rm -f "${old_files[@]}"
echo "Archived ${#old_files[@]} old bitstreams."
fi
将此脚本集成到CI/CD流程中,每次综合实现完成后自动执行。
3. 版本与比特流的对应关系
在Git仓库中维护一个bitstream_manifest.txt文件,记录每个tag对应的比特流文件名、哈希值、生成时间:
v1.0.0 top_v1.0.0.bit a3f2c8e... 2026-07-22
v1.1.0 top_v1.1.0.bit b4d9e1f... 2026-08-05
这样即使删除了旧比特流文件,仍可通过manifest回溯到归档包。
三、三个翻车高发点
忘记.gitignore中间文件:综合生成的.dcp、.jou等文件动辄几百MB,一旦被commit,历史就洗不掉了。务必在项目初始化时就配置好.gitignore。
LFS配额不足:免费GitHub LFS只有1GB存储和每月1GB流量。对于大型FPGA项目,建议自建GitLab CE或使用阿里云Codeup,它们提供更大的LFS空间。
比特流文件名不含版本号:多个release的比特流都叫top.bit,无法区分。强制命名规则:{project}_{version}_{date}.bit。
合理的分支划分让多人协作有序,LFS+增量归档让仓库保持轻盈。FPGA工程管理不必照搬软件Git Flow,但核心思想一致:代码归代码,产物归产物,版本可追溯,存储可持续。





