Skip to content

[fpga] feat: 支持 Toy/Linux Flash 固化与断电自主启动 - #7

Merged
Cody-ic merged 1 commit into
mainfrom
codex/arty-a7-flash-boot
Oct 11, 2026
Merged

Cody-ic merged 1 commit into
mainfrom
codex/arty-a7-flash-boot

Conversation

@Cody-ic

@Cody-ic Cody-ic commented Oct 11, 2026 •

Copy link
Copy Markdown
Collaborator

功能与两种使用场景

原来的 JTAG 配置和串口加载流程中,FPGA SRAM 与 DDR 内容只在持续供电时保留;断电后需要重新下载位流和软件。本 PR 增加可选的板载 Flash 固化流程,保存 FPGA 配置和原 OpenSBI/Linux 启动映像,重新上电后自主启动。CPU、Sv39 虚拟内存、FPU、Gemmini 8×8 和原 Linux 软件均保留。

本 PR 接续已合并的 #6。两种流程各有场景,并非互相替代:

项目 上次 #6:开发调试流程(易失) 本次:Flash 固化流程(可断电)
FPGA 配置 JTAG 下载到 FPGA SRAM 首次烧写 Flash,随后上电自动配置
软件启动 串口写 DDR、完整读回验证,再 RUN ROM 从 Flash 读取并解压到 DDR,CRC 校验后启动 Linux
断电后 需要重新下载配置并加载软件 配置和启动映像保留,重新上电自动启动
适用场景 频繁更换 RTL/软件、联调、回归;减少 Flash 擦写 固定演示、脱机运行、断电恢复

上次“不断电流程”指已下载状态依赖持续供电,并不是禁止关机。Flash 中保存的是启动映像;运行中的 DDR 内容及 initramfs 文件改动仍不持久化。Flash 目标通过 SW0=1 后按 BTN0 保留串口恢复入口;正常自主启动使用 JP1 短接、SW0=0。

实现与复现

  • 新增 8 KiB 同步 BRAM 启动 ROM、SPI 字节引擎、STARTUPE2 CCLK 接入、有界 LZ4 解压及 CRC32 校验。生成核心仅替换 TLROM;其他核心逻辑与原 Linux payload 保持不变。
  • Flash 配置区从 0x000000 开始,软件区从 0x400000 开始;原 17,409,032 字节软件压缩为 3,636,031 字节。实际 Flash 为 S25FL128S(JEDEC 012018)。
  • 提交 backup_flash.tcl、make_flash_image.tcl、program_flash.tcl 和对应 host 入口。烧写前完整备份 16 MiB,随后擦除/烧写/验证,再从 Flash 重新配置。工具保留一小时超时。
  • 上传实现报告、原始烧写/串口/冷启动日志、实际使用源文件快照和摘要清单。旧 [fpga] docs: record Toy/Linux hardware bring-up and programming entry #6 日志及十月十一日实现记录保留原样;旧实现源文件另行归档,避免将旧报告用于证明新目标。
  • 位流、MCS、软件二进制及原 Flash 内容备份不进入 Git。缺少 Artix 构建文件的烧写机可使用构建机生成的 MCS 和配套哈希侧文件。

入口文档:Flash 固化与启动指南;证据:实现与实物验证档案。此次已有英文文档保留,后续新增文档使用中文。

核验结果

  • Arty A7-100T / xc7a100tcsg324-1,25 MHz 核心,Vivado 2024.1 整板布局布线完成:53,944 LUT、15,618/15,850 Slice、35,645 FF、31 BRAM、117 DSP;WNS/WHS 为 +1.276/+0.015 ns,布线错误 0,严重 CDC/DRC 检查通过,构建 1,391.1 秒。
  • 原 CPU oracle 通过真实 ROM/SPI 路径启动;损坏头与损坏 payload 被拒绝。UART 恢复测试从空 DDR 经真实串口信号写入并读回全部 110,592 字节,再通过 RUN 启动;AXI/SCU/loader 三项接口测试通过。
  • 实物使用 Vivado 2025.1 烧写并校验 Flash,通过从 Flash 重新配置的自动启动。用户随后确认拔掉全部供电并重接;观察器记录一次 USB 断开,无需再次下载配置或软件即启动 OpenSBI v1.9 / Linux 6.6.0 / BusyBox。
  • 两次实物启动均通过 COW、页保护、FP64 进程上下文、定时器及总体系统检查,返回码 0。页保护测试中的子进程 SIGSEGV 是预期行为。
  • 来源/证据校验、Python 编译及 git diff --check 通过;公开文件 Gitleaks 8.30.1 扫描未发现泄漏。
  • GitHub Actions 的 source-and-interfaces 检查及 GitGuardian 均通过:Actions 结果。

首次观察器对 CRCRLF 结束符的识别已修正;原始日志和中断记录保留,后续冷启动观察器正常完成。构建后 XDC 只增加非 Flash 配置下缺失同步器的查询保护;Flash 模式实际约束不变,精确构建输入已归档。

当前边界

只余 232 个 Slice 位置,仍是工程验证目标。PCB revision 未确认,Gemmini 算子实物回归、完整 DDR 扫描、长期稳定性及功耗测试尚未完成;本 PR 不将首次启动成功等同于完成全部硬件验收。

@Cody-ic
Cody-ic merged commit 936aba4 into main Oct 11, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant