这一篇在干嘛?
综合(Place & Route)跑完只是拿到了”图纸”,这一篇讲的是怎么把图纸变成芯片里真实运行的电路:先用 TD 的 Generate Bitstream 选项定制位流,再用 BitWriter 把它烧进 SRAM 或 Flash,进阶玩法包括位流加密、Dual Boot 主备区、ChipLinker 生成 SVF 给第三方编程器,以及 AJE 嵌入式配置。同系列目录页见 位流与配置。
工具全景:BitWizard 是什么
在较老版本的 TD 里,下载工具叫 Download,管理器件扫描链的工具叫 Device Chain。安路后来把它们升级成了两个新名字:
- BitWriter:原 Download 工具的升级版,负责把位流文件下载到器件(SRAM 或 Flash)、回读校验、擦除 Flash、烧加密密钥等一切”写器件”的操作。
- ChipLinker:原 Device Chain 工具的升级版,核心能力是把位流文件转换成 SVF(Serial Vector File,串行向量格式) 文件,供第三方 JTAG 编程工具使用。
而 BitWizard 是独立于 TD 集成环境之外的独立工具,把 BitWriter、ChipLinker 都集成在一起,可以不打开 TD 主界面单独启动。它位于 TD 安装目录的 ~\bin\ 下,通过 bw.exe 直接运行。
先认识三个名词(官方表 1-1):
| 名词 | 说明 |
|---|---|
| AL-Link | 在线编程器,支持 TD(TangDynasty)软件 |
| AL-Link-Pro | 离线编程器 |
| AL-Link-FT | 在线编程器,支持 TD 和 FD(FutureDynasty)软件 |
常见坑:
使用 BitWizard 前,需要对原 AL-Link 工具的固件进行升级,否则可能存在稳定性问题。如果你的下载器是老版本 TD 配套的,先升级固件再上手 BitWizard,能省掉很多”莫名下载失败”的排查时间。
对 EG4S20 的比赛选手来说,最常用的是 AL-Link 在线下载器(最新型号 AL-LINK-V3.0),配 USB Type-B 数据线和 2.54mm 间距 10 针扁平线连接板卡,支持 JTAG 固件下载、ChipWatcher 在线调试、Flash 读写和级联烧录。
位流文件的配置与生成
位流文件在 TD 中通过 Properties → Generate Bitstream 进行配置。界面分四个选项页:General Option、Control Option、Startup Option、Attribute Option,每行选项都同时显示 Current Value 和 Default;你改过并保存后,Current Value 会更新为你设置的值。改完重新 Generate Bitstream,位流就按新配置生成。
General Option:位流的”外观”选项

这一页控制位流文件本身的属性:
- bin:是否生成 bin 文件或 rbf 文件(二进制配置文件);
- bin_compress:bin 文件压缩开关,用 Huffman 算法对位流做软压缩——CPU 平台读取 bin 后先解压、再配置器件,适合嵌入式(MCU 搬运 bin)的方案;
- compress:位流压缩开关,开启后直接产生压缩位流(由器件在配置时解压,与上面的软压缩是两回事);
- gen_mask:产生校验 FPGA ERAM 的 mask 文件罩;
- header:bin 文件头信息(16 字节 hex),供 AL-Link Pro 离线下载器使用;
- id:2 个字节的 ID 信息,留给用户自定义;
- max_stream:器件位流最大 Size。打开后位流文件大小固定不变,不随资源使用量波动——做 Flash 固定分区、多版本管理时很有用;
- time_info:在位流中增加时间戳信息;
- unused_io_status:未使用 IO 的状态(如 pullup),决定悬空引脚的电气行为;
- version:位流文件版本号(hex),配合 Bit Version 字段做版本追溯。
Control Option:配置过程的”行为”选项

- cascade_mode:使用多片级联时必须配置,配置后 done 引脚会在所有级联器件加载完成后才拉高;
- mclk_freq:MSPI 模式下的加载频率,即器件配置时读取 Flash 的时钟频率;
- osc_clk_disable:进入用户模式后是否关闭 OSC Clock;
- security:置位后禁止回读配置 RAM 数据,防止设计被读走;
- stateholdio:使用 Statehold IO 功能时的配置 RAM 初始化选项。
Startup Option 与 Attribute Option
Startup Option 涉及配置时序的启动参数(如各配置阶段的时钟周期数),官方建议保持默认值,如需调整请参考器件配置手册。Attribute Option 里最重要的是 boot_mode:把 MSPI 配置成 X1 / X2 / X4 模式——X4 读取速度最快,但要求 Flash 支持 Quad 且 QE 位已使能。不同系列器件在此页可能还有其他专属选项。
常见坑:
改了 Control/Attribute 里的选项(尤其 mclk_freq、boot_mode)后,一定要重新 Generate Bitstream,旧位流不会自动更新。烧完发现”加载不上”或”加载慢”,先检查位流配置和板上的 Flash 型号是否匹配(X4 模式配了不支持 Quad 的 Flash 就是典型翻车点)。
生成的文件格式
配置完成后,在工程目录的 best_result 文件夹里按你的选择生成文件(表 3-1):
| 格式 | 备注 |
|---|---|
| .bit | 二进制配置文件,包含头信息。通常用于 BitWriter/ChipLinker 结合下载器,下载至目标器件 |
| .bin | 二进制配置文件,不含头信息。用于 BitWriter 下载,也可用于用户自定义配置方案 |
| .rbf | 与 bin 相比,每四个字节为一组按字节翻转:bin 为 DD BB 66 22,rbf 为 22 66 BB DD |
| *_byteReverse.bin | 与 bin 相比,每个字节按位翻转:bin 为 DD BB 66 22,byteReverse.bin 为 BB DD 66 44 |
| .SVF | Serial Vector File 串行向量格式文件,通过 ChipLinker 工具生成 |
记忆方法:bit 给自家工具用(带元信息),bin 给裸数据场景用(自己搬),rbf/byteReverse 是字节序变体(给特定加载器),SVF 给第三方 JTAG 工具用。若器件支持位流压缩,还会包含带 _compress 命名的相关配置文件。
BitWriter:把位流烧进器件
在 TD 工具栏点击 BitWriter 按钮,或 Tools → BitWriter 启动;也可以直接运行 TD 安装目录 ~\bin\ 下的 bw.exe 独立启动。

界面分几大块:
- 器件/下载器信息栏(顶部):Refresh 按钮通过下载器发”读器件 ID”指令,ID 有效则显示器件型号;旁边显示 Bit Version(位流版本)和 Debug Server(下载器型号 AL-LINK)。每次插拔下载器后先点 Refresh,识别到器件再操作。
- 工具栏:Run(运行)、Stop(停止)、Add(加文件)、Delete(删文件)。
- 下载模式栏:选择烧录模式和速率。
- 文件选择栏:支持 bit、bin、SVF 等文件的选择与烧录。
- 控制/信息栏与状态栏:显示提示信息、支持 TD 命令运行,以及操作进度指示。
下载速率(AL-Link,TCK 频率)可选 16/8/5/3/2/1 MHz、500kHz、200kHz,默认 5MHz。下载不稳定时优先降速率。
十种下载模式速查
下载模式栏可选择的模式及用途:
| 模式 | 作用 | 掉电后 |
|---|---|---|
| Program SRAM | 位流下载到配置 RAM,用于调试阶段快速上板验证 | 丢失 |
| Verify SRAM | 回读校验配置 RAM 数据(不含用户 ERAM 数据),需软件生成对应文件 | — |
| Program Flash | 位流烧写到 Flash,用于固化;按位流大小选合适容量 | 保留 |
| Dual Boot | 主区(Default)+ 备区(Golden)位流 + Start Address 一起烧 Flash | 保留 |
| Multi Boot | 主区位流 + 跳转位流,Start Address 须与 dynamic_addr 相同 | 保留 |
| Program SPIBIN | 把任意 .bin 文件下载到 Flash 指定偏移区域 | 保留 |
| Flash Read | 回读 Flash 数据,可指定地址、长度并保存成文件,可与原 .bin 比对 | — |
| Verify Flash | 校验写入 Flash 的数据 | — |
| Erase Flash | 对 Flash 整片擦除(Chip erase) | — |
| Read Save SRAM | 把配置 RAM 数据按帧格式回读保存成文件 | — |

通关标准:
- 调试阶段用 Program SRAM(快,掉电丢);交付/上电自启用 Program Flash(慢一点,掉电保留)——这是最基本的取舍。
- 烧 Flash 后上电不跑:先用 Flash Read 回读开头几十字节和原 bin 对比,排除”根本没写进去”和”写进去了但配置模式不对”两种情况。
加密与 Dual Boot
位流加密(Encrypt)
工具栏的 Encrypt 提供 Generate encrypt bit 和 Program encrypt key 两个功能。
Generate encrypt bit(生成加密位流):选择源位流文件(Device 和加密模式 AES128/AES256/SM4 从位流中自动获取),Key Settings 里可提供 Hkey file(Hmac 密钥文件,配合 AES256/SM4)、Key file(密钥明文文件)或直接输入 Key number。可生成的产物包括:Key exp file(加密密钥文件)、Encrypt bit file(加密位流,bit 格式)、Encrypt bin file(加密位流,bin 格式)、Encrypt key svf file(加密密钥 SVF)、Offline download cable 密钥二进制(供 AL-Link Pro 离线下载器)。配置完点 Generate Encrypt Button 即可。
Program encrypt key(烧录密钥到 efuse):选择 Encrypt bit file 和 Key exp file,Auto Option 可勾选”烧位流时自动烧 key 到 efuse”和”自动烧 Lock”。烧录速率必须限制在 1MHz,否则 efuse 烧录不可靠。
常见坑:
Lock 选项是单向阀门。 若 efuse 烧录包含 Lock 功能,烧录后 efuse 既不能写也不能回读——后续想换密钥、想检查,都没有第二次机会。没有极端的保密需求,别轻易勾 Auto programing encrypt key lock。
Dual Boot 与位流合并
Dual Boot 是”主区启动失败自动切备区”的可靠性方案。工具栏 Merge Dualboot Bit 可把两份位流合并成一个文件:

- Default Bit File:主区位流(Device 型号自动从位流获取);
- Start Address:Dual boot 的加载地址(示例中为 0x12D0000);
- Golden Bit File:备区位流;
- Merge Bit File:合并输出的位流文件。
合并文件通过 BitWriter 的 Dual Boot 模式烧进 Flash。另外,Create Flash File 工具支持多文件按地址合并:可指定绝对地址(Absolute address)、相对地址(Relative address)、起始地址(Set Start Address)并选择待合并的 Hex File——比如把固件和用户数据拼到同一片 Flash 的不同地址。
Multi Boot 与 Dual Boot 类似,但用的是”跳转位流”,Start Address 必须和位流配置中的 dynamic_addr 一致,否则加载地址对不上。
ChipLinker:生成 SVF 文件
为什么要 SVF?因为 SVF 文件把”如何配置 FPGA”的 JTAG 时序全部记录了下来,使用它无须关心位流格式,任何支持 SVF 的第三方编程工具都能对目标器件编程——产线用别的烧录器、别的厂商上位机,都不再受限制。TD 菜单 Tools → ChipLinker 启动。
ChipLinker 的界面结构与 BitWriter 类似:器件/下载器信息栏(Refresh 枚举 Cable)、工具栏(Program/Add/Delete)、文件选择栏、Device Chains、控制/信息栏。几点关键设置:
- Speed:可配置 200kHz~16MHz。但 SVF 文件生成的参考时钟是 1MHz,所以播放 SVF 时 Program Speed 建议用默认 1MHz,与生成时的参考频率匹配。
- Program SVF:下载指定 SVF 文件(支持自定义 SVF);Merge SVF:把多个 SVF 合并成一个。
- Add Flash Wizard:自定义 Flash 器件。填 Vendor Name(如 Winbond、Cypress)、Device Name(如 W25Q16)、Manufacture/Device ID、Volumn(容量);Enable QE 配置 QE 命令、数据值和等待时长(QE 位用于 MSPI X4 模式,以 GD25 系列为例它位于状态寄存器 S9 位;改 QE 时不能影响其他位域,否则可能破坏 Flash 其他功能);Maximum Time 填 4KB/32KB/64KB Sector Erase、Chip Erase、Page Program 的等待时长。
Create SVF 的十种模式
文件选择栏 Add 加入位流后,可见 File/Device/Package/File Info/Bit Version/Level(级联级数)/Option/SVF File/Bypass(JTAG Bypass 指令长度)等信息。Create SVF 提供以下模式:
| 模式 | 生成的 SVF 用途 |
|---|---|
| SVF for SRAM | 把位流下载到配置 RAM(掉电丢失) |
| SVF for SPI | 把位流下载到 Flash |
| Verify SPI Only | 回读校验 Flash |
| Erase SPI(4k) | Flash 扇区擦除(Erase Area 可选 all/primary/golden) |
| Check Device | 读器件 ID,验证器件与封装 |
| Refresh | 器件刷新 |
| Erase SRAM | 擦除配置 RAM |
| Check Status Done | 读 Done 状态,检测器件是否进入工作模式 |
| Check Status Lock | 校验 Golden 区是否已 Lock(仅部分器件) |
| SVF for User Data | 烧录用户数据到 Flash(指定 User Data File 与地址) |
公共选项包括 Add Comments(注释)、Enable Header(文件头含时间戳)、Frequency(100kHz~10MHz)、Enable TIR/TDR/HIR/HDR(缩减 SVF 体积)、Generate Aje File(同时生成 AJE 文件,推荐压缩模式)。

SVF for SPI(烧 Flash)的重点选项是三种升级模式的组合:
- rf_mode(刷新模式):烧录前先复位正在运行的功能,烧完后器件立即从 Flash 加载新版本;
- bg_mode(背景模式):烧录过程不影响正在运行的功能,新版本要掉电或外部复位(programn)后才生效;
- bg_mode + rf_mode:烧录不打扰运行功能,烧完自动加载新版本;
- Verify:附加回读校验,可与上面模式组合,代价是烧录时长增加;
- Enable Loop:擦除/编程时查询 Flash BUSY 位来节约等待时间,能明显缩短烧录时间,但只对嵌入式配置 AJE 方案有效,AL-Link、AL-Link FT 不支持此指令。
Golden Lock 选项用于给备区加锁保护。
常见坑:
SVF 播放速率要和生成时的 Frequency 一致(默认都 1MHz)。用第三方工具播放时随意调高 TCK 速率,是”SVF 单独能跑、上了产线就失败”的常见根因。
AJE:嵌入式平台配置 FPGA
AJE(Anlogic JTAG Embedded)解决的问题是:产品里没有下载器,怎么让板上的 MCU/CPU 自己把 FPGA 配起来?原理是把 AJE2JTAG 系统代码嵌入 MCU/CPU,让 GPIO 模拟 JTAG 时序,通过 JTAG 接口配置外部可编程器件。

AJE 文件有两种生成方式:
方式一:界面生成。 在 ChipLinker 的任一 Create SVF 界面勾选 Generate AJE File,SVF 生成的同时自动产出对应 AJE 文件(可选压缩/非压缩,推荐压缩)。
方式二:命令行生成。 TD 安装目录下用 svf2aje 工具手动转换:
# 默认生成压缩版 .aje
svf2aje.exe -svffile V.svf -ajefile file.aje
# 生成非压缩版 .aje
svf2aje.exe -svffile V.svf -ajefile file.aje -full
# 把 .aje 还原成 .svf(加 -r)
svf2aje.exe -ajefile file.aje -svffile file4.svf -rSRAM 配置场景还可以用 -max_size 限定指令长度:
svf2aje.exe -svffile PH4Led_L1SRAM.svf -ajefile PH4LedSRAM.aje -max_size 64其中 size 可取 1、2、4、8、16、32、64,默认 64(即 max_size×1000)。生成的 .aje 文件保存在工具所在目录下。
这条路线和 General Option 里的 bin_compress 呼应:MCU 从存储器读压缩 bin → 解压/转换为 AJE 数据 → GPIO 模拟 JTAG 写入 FPGA,是量产产品”无下载器自启动”的标准方案。
驱动安装与常见问题
Windows:首次用 USB Type-B 线连接 AL-LINK,设备管理器”其它设备”里会出现 AL-LINK 设备,按提示安装驱动即可。
Linux:AL-LINK 免驱,但可能需要手动授权 USB 设备。先用 lsusb 找到设备(如 Bus 003 Device 006: ID 336c:1001),然后:
chmod 0666 /dev/bus/usb/003/006
./td.sh -gui &打开 BitWriter 后即可正常识别到器件。
通关标准:
- 能独立完成一次”生成位流 → Program SRAM 验证 → Program Flash 固化 → Flash Read 回读比对”的完整闭环。
- 能用 ChipLinker 生成一份 SVF for SPI 文件,并说清 rf_mode 与 bg_mode 的生效时机差异。
- 理解 AJE 的定位:无下载器产品中用 MCU GPIO 模拟 JTAG 完成配置。
Program SRAM 成功了,掉电重启后板子没反应,为什么?
SRAM 配置掉电即丢。SRAM 下载只用于调试阶段快速验证;要上电自启动必须把位流烧进板载 Flash(Program Flash 或 Dual Boot 模式),并确认 boot_mode/mclk_freq 与板卡 Flash 硬件匹配。
.bit 和 .bin 都能烧,有什么区别,什么时候必须用哪个?
.bit 带头信息等元数据,供 BitWriter/ChipLinker 使用;.bin 是纯数据、不带头信息,用于 BitWriter 下载或用户自定义配置方案(如 MCU 搬运)。通过 BitWriter 正常烧录用 .bit 即可;做嵌入式自定义加载方案时用 .bin(或其压缩版 bin_compress)。
为什么建议 SVF 的播放速率用 1MHz?
ChipLinker 生成 SVF 文件时参考时钟默认就是 1MHz,SVF 里的时序参数按这个频率记录。播放时若用其他速率(尤其远高于 1MHz),时序关系可能失配导致下载失败,所以 Program Speed 建议保持默认 1MHz。
位流加密时勾了 Auto programing encrypt key lock,之后想换密钥怎么办?
换不了。efuse 一旦烧入 Lock,将不再提供任何访问权限(包括烧录和回读),密钥区域永久封死。这是产品防克隆的终极手段,调试阶段绝对不要勾选,只在量产定型且确认密钥不再变更时使用。
Dual Boot 的 Start Address 随便填一个行不行?
不行,它有明确约定:Dual Boot 模式下备区(Golden)位流放在指定 Start Address(示例为 0x12D0000),主区从默认位置加载;Multi Boot 模式下 Start Address 还必须与位流配置中的 dynamic_addr 相同。地址填错器件会从错误位置读位流,导致加载失败或永远起备区。