Files
skills-win/fpga_flash/SKILL.md
T

6.4 KiB
Raw Blame History

name, description
name description
fpga_flash 烧写 Artix-7 系列 FPGA 的外部 Flash(SPI NOR Flash)。适用于 EMV7.1 等 Artix-7 板卡,支持 Micron mt25ql128 和 Winbond w25q128bv 两种 Flash 型号。 当用户提到"烧写 flash"、"flash 编程"、"固化 bit 文件"、"下载到 flash"、"program flash"、"write flash"、"burn flash"、"Vivado flash"、"SPI flash 烧写"时,必须触发此 skill。

FPGA Flash 烧写流程(Artix-7 / EMV7.1)

本 skill 由 Claude 全自动执行完整的 Flash 烧写流程。除了向用户确认必要信息外,所有操作(文件检查、CSV 修改、Vivado 命令执行、硬件编程)均由 Claude 直接完成,不要求用户手动执行任何命令。


执行规范

自动执行原则:

  • 每个需要调用 Vivado 的步骤,Claude 通过 Bash 工具调用 skill scripts/ 目录下的 Python 脚本
  • 禁止在用户工程目录或系统临时目录(%TEMP%、/tmp)下创建任何脚本文件
  • 所有可执行脚本已预置在 skill 目录的 scripts/ 子目录中,Claude 只需传入正确的参数调用

定位 skill 脚本目录:

Claude 在执行前需先确认脚本的完整路径。使用 Glob 工具查找:

C:/Users/<当前用户>/.claude/skills/fpga_flash/scripts/gen_mcs.py

或直接使用默认路径:C:/Users/bowei/.claude/skills/fpga_flash/scripts/

scripts/ 目录内容:

scripts/
  check_flash_csv.py     # 第一步:检查/更新 Vivado Flash 器件表
  gen_mcs.py             # 第三步:生成 .mcs 文件
  program_flash.py       # 第四、五步:连接目标板并烧写 Flash
  step3_write_mcs.tcl    # gen_mcs.py 使用的 Tcl 模板(勿手动修改)
  step4_5_program.tcl    # program_flash.py 使用的 Tcl 模板(勿手动修改)

调用方式(Bash 工具):

python "C:/Users/bowei/.claude/skills/fpga_flash/scripts/<script>.py" [参数...]

各脚本通过命令行参数接受变量(Vivado 安装目录、工程名、bit 文件路径、mcs 文件路径等),内部调用 Vivado -mode batch -source <tcl模板> -tclargs <参数> 完成执行,全程不产生临时文件。


第一步:检查并修复 Vivado Flash 器件表

Claude 自动执行:

调用 check_flash_csv.py,检查 xicom_cfgmem_part_table.csv 中是否已包含 w25q128bv-spi-x1_x2_x4:

python "C:/Users/bowei/.claude/skills/fpga_flash/scripts/check_flash_csv.py" \
    --vivado-dir "D:/Xilinx/Vivado/2018.1"

返回值含义:

  • 退出码 0:器件已存在,直接进入第二步
  • 退出码 2:已成功添加器件行,需提示用户重启 Vivado 后才能识别
  • 退出码 1:CSV 未找到,询问用户提供正确的 Vivado 安装目录后重试

若 Vivado 不在默认路径 D:/Xilinx/Vivado/2018.1,询问用户后替换 --vivado-dir 的值。


第二步:选择 Flash 型号

询问用户板卡上焊接的 Flash 芯片型号,仅支持以下两种:

选项 厂商 --flash-part 值
1 Micron mt25ql128-spi-x1_x2_x4
2 Winbond w25q128bv-spi-x1_x2_x4

记录用户选择,后续步骤中作为 --flash-part 参数传入。如果用户不确定,提示查看板卡丝印或原理图中 Flash 芯片的位号。


第三步:确认文件路径并自动生成 .mcs

需向用户确认:

  1. .bit 文件的完整路径(通常在工程 runs/impl_1/ 目录下)
  2. 输出 .mcs 文件的保存路径和文件名(建议与 .bit 文件同目录)

用户确认后,Claude 自动调用:

python "C:/Users/bowei/.claude/skills/fpga_flash/scripts/gen_mcs.py" \
    --vivado-dir "D:/Xilinx/Vivado/2018.1" \
    --bit-file   "E:/Xilinx_design/smod/SMOD_DTMB_CG/RU_golden/RU_golden.runs/impl_1/RU_golden_top.bit" \
    --mcs-file   "E:/Xilinx_design/smod/SMOD_DTMB_CG/RU_golden/RU_golden.runs/impl_1/RU_golden_smod.mcs"

将示例路径替换为用户实际的 Vivado 安装路径、.bit 文件路径、.mcs 输出路径。

验证成功的标志: 输出中包含 write_cfgmem completed successfully 且显示 0 Errors。


第四步 + 第五步:连接目标板、配置存储器并烧写

确认板卡已上电并连接 JTAG 后,Claude 自动调用:

python "C:/Users/bowei/.claude/skills/fpga_flash/scripts/program_flash.py" \
    --vivado-dir  "D:/Xilinx/Vivado/2018.1" \
    --flash-part  "w25q128bv-spi-x1_x2_x4" \
    --bit-file    "E:/Xilinx_design/smod/SMOD_DTMB_CG/RU_golden/RU_golden.runs/impl_1/RU_golden_top.bit" \
    --mcs-file    "E:/Xilinx_design/smod/SMOD_DTMB_CG/RU_golden/RU_golden.runs/impl_1/RU_golden_smod.mcs" \
    --ltx-file    "E:/Xilinx_design/smod/SMOD_DTMB_CG/RU_golden/RU_golden.runs/impl_1/RU_golden_top.ltx"

参数说明:

  • --flash-part:第二步用户选择的型号
  • --bit-file:第三步确认的 .bit 路径
  • --mcs-file:第三步生成的 .mcs 路径
  • --ltx-file:若设计无 ILA,省略此参数(脚本自动跳过 PROBES.FILE 配置)

此脚本在同一个 Vivado batch 会话中完成:硬件连接 → cfgmem 器件创建 → 擦除/编程/验证。

验证成功的标志: 输出包含 End of startup status: HIGH 且无 ERROR 行。

ILA core 的 Dropping logic core WARNING 是正常现象(golden 镜像不含 ILA core),不影响烧写结果。


第六步:上电验证

烧写完成后,提示用户:

  1. 断开 JTAG,给板卡重新上电(或按复位键)
  2. 观察 FPGA 是否从 Flash 正常加载(DONE 灯亮起)
  3. 如果 DONE 灯不亮,检查:
    • BOOT_MODE 跳线是否选择 SPI Flash 启动模式
    • MCS 生成时起始地址是否为 0x0
    • 板卡电源是否满足 Flash 的 VCC 要求(3.3V / 1.8V)

常见错误排查

现象 可能原因 解决方法
check_flash_csv.py 退出码 1 Vivado 不在默认路径 询问用户,更换 --vivado-dir 参数
Vivado 中找不到 w25q128bv CSV 已修改但 Vivado 未重启 提示用户重启 Vivado 后重新执行
No hardware target 错误 JTAG 未连接或板卡未上电 检查连接后重新执行第四步
DONE 灯不亮 启动模式跳线错误 检查 MODE 引脚电平,确认为 SPI 启动模式
烧写后板卡跑旧程序 Flash 未完全擦除 确认 PROGRAM.ERASE 1 已设置后重新执行
PermissionError 写 CSV 权限不足 提示用户以管理员身份运行 Claude Code