当前位置:首页 > 嵌入式 > 嵌入式分享
[导读]FPGA工程与纯软件工程有本质区别——RTL代码、IP核、约束文件、仿真波形、比特流文件混杂在一起,单个比特流可能几十MB到几百MB,且二进制文件无法diff。用Git管理时,如果不做分支规划和二进制文件处理,仓库会迅速膨胀到几十GB,clone和pull变得缓慢,历史记录也难以追溯。本文从分支模型和比特流归档两个维度,给出可落地的方案。


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,但核心思想一致:代码归代码,产物归产物,版本可追溯,存储可持续。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭