这一篇在干嘛?

综合(Place & Route)跑完只是拿到了”图纸”,这一篇讲的是怎么把图纸变成芯片里真实运行的电路:先用 TD 的 Generate Bitstream 选项定制位流,再用 BitWriter 把它烧进 SRAM 或 Flash,进阶玩法包括位流加密、Dual Boot 主备区、ChipLinker 生成 SVF 给第三方编程器,以及 AJE 嵌入式配置。同系列目录页见 位流与配置

工具全景:BitWizard 是什么

位流文件的配置与生成

生成的文件格式

BitWriter:把位流烧进器件

加密与 Dual Boot

ChipLinker:生成 SVF 文件

AJE:嵌入式平台配置 FPGA

驱动安装与常见问题

工具全景: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:位流的”外观”选项

TD 中 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:配置过程的”行为”选项

TD 中 Generate Bitstream 的 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
.SVFSerial Vector File 串行向量格式文件,通过 ChipLinker 工具生成

记忆方法:bit 给自家工具用(带元信息),bin 给裸数据场景用(自己搬),rbf/byteReverse 是字节序变体(给特定加载器),SVF 给第三方 JTAG 工具用。若器件支持位流压缩,还会包含带 _compress 命名的相关配置文件。

BitWriter:把位流烧进器件

在 TD 工具栏点击 BitWriter 按钮,或 Tools → BitWriter 启动;也可以直接运行 TD 安装目录 ~\bin\ 下的 bw.exe 独立启动。

BitWriter 主界面:左侧工具栏、上方下载模式栏、中部文件选择栏、下方命令/状态输出

界面分几大块:

  • 器件/下载器信息栏(顶部):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 数据按帧格式回读保存成文件

BitWriter 中选择 PROGRAM_SRAM 模式以 5MHz 下载成功的界面

通关标准:

  • 调试阶段用 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 可把两份位流合并成一个文件:

Merge Dualboot Bit Files 对话框:主区位流、起始地址 0x12D0000、备区位流、合并输出文件

  • 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 文件,推荐压缩模式)。

ChipLinker 的 SVF for SPI 配置界面:Flash 型号、起始地址、bg_mode/rf_mode/Verify 等选项

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 接口配置外部可编程器件。

AJE2JTAG 验证平台:CPU 用 4 个 GPIO 模拟 TCK/TMS/TDI/TDO 连接 Anlogic FPGA

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 -r

SRAM 配置场景还可以用 -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 完成配置。