在开源硬件生态系统中,FPGA 领域长期存在一个关键空白:现有的开源努力要么聚焦于逆向工程专有架构(如 Project IceStorm、Apicula),要么围绕封闭芯片构建工具链(如 Yosys、nextpnr),但芯片本身始终保持闭源。Aegis 项目的出现彻底改变了这一局面 —— 它从另一个端点出发,实现了从硅片到工具链的完全开源。Aegis 是首个真正意义上的开源 FPGA 项目,其 fabric 设计完全开放,工具链完全开放,通往真实芯片的路径则通过开源 PDK 和晶圆 shuttle 服务(如 wafer.space)实现。本文将深入分析 Aegis 的架构设计理念、硬件描述语言选型依据以及完整开源工具链的工程集成要点。

一、架构设计:从参数化生成到可流片 fabric

Aegis 采用了参数化的 tile-based 架构,这一设计选择使其能够生成针对不同工艺节点和应用场景的 FPGA 设备。项目的核心设计思路是通过 ROHD(Dart 硬件描述框架)描述 FPGA fabric,然后输出可综合的 SystemVerilog 代码。这种方法与传统的静态 HDL 设计有着本质区别 —— 开发者可以通过调整参数快速生成不同规模的 FPGA 设备,而无需手动修改每一行硬件描述代码。

在具体的架构实现上,Aegis 遵循了 Xilinx 风格的业界惯例,这使得熟悉传统 FPGA 开发的工程师能够快速上手。整个 FPGA fabric 由多种不同类型的 tile 组成,每种 tile 承担特定的功能。CLB(可配置逻辑块)是基本计算单元,包含 4 输入查找表(LUT4)、D 触发器以及 MUXCY carry 链,其中配置位宽为 18 位。多个 CLB 与四方向路由 mux 组合形成完整的 tile,tile 一级的配置位宽为 46 位。这种分层配置机制使得比特流生成器能够精确控制每个逻辑单元的行为。

除了计算逻辑 tile,Aegis 还集成了多种专用资源。BRAM tile 提供双端口 128×8 位的块 RAM,配置位宽仅 8 位,开发者可以在很小的配置开销下获得大容量存储资源。DSP tile 实现 18×18 位乘法累加操作,支持可选流水线级,配置位宽为 16 位。IO tile 提供双向 pad 功能,支持输入输出寄存器,配置位宽 8 位。SerDes tile 是协议无关的串行器 / 解串器模块,配置位宽 32 位,支持高速接口应用。Clock tile 提供 4 输出时钟分频器,支持相位控制,配置位宽 49 位。

值得注意的是,Aegis 的配置机制采用了经典的串行移位寄存器链。配置数据按照特定顺序加载:时钟 tile 首先配置,随后是 IO tile、SerDes tile,最后是 fabric 内部的各个 tile(按行主序排列)。这种设计简化了配置电路的实现,同时也使得比特流格式相对规整,有利于后续比特流打包工具的开发。

二、硬件描述语言选型:ROHD 与 Dart 的优势

Aegis 项目选择 ROHD(Rapid Open Hardware Development)作为 fabric 生成的核心框架,这一决策背后有着深刻的技术考量。ROHD 是 Intel 开源技术中心推出的硬件描述框架,使用 Dart 编程语言作为建模和验证的基础。与传统的 Verilog/SystemVerilog 相比,Dart 提供了更现代的语言特性,包括更强的类型系统、更好的面向对象支持、更丰富的标准库以及更简洁的语法。

从工程实践角度来看,选择 ROHD 有几个关键优势。首先,Dart 的抽象能力使得复杂硬件结构的描述更加简洁。开发者可以使用 Dart 的类继承、泛型、mixin 等特性构建可复用的硬件组件库,而不必像在 Verilog 中那样受限于相对扁平的模块层次。其次,ROHD 提供了完善的验证框架,开发者可以直接使用 Dart 的测试生态来编写测试平台,实现功能验证的自动化。第三,ROHD 支持将模型转换为 SystemVerilog,这意味着最终的输出是与传统 EDA 工具链完全兼容的可综合代码。

从项目组织角度分析,Aegis 的代码统计显示 Dart 占比约 55.1%,Rust 占比 19.7%,Nix 占比 14.2%,C++ 占比 8.6%,而 Verilog/SystemVerilog 合计仅占 1.7%。这个比例清晰地表明,项目采用了 "高抽象层次建模 + 低层次输出" 的策略 —— 用 Dart/ROHD 进行架构设计和验证,用 Rust 实现工具链核心功能,最终生成的 SystemVerilog 仅作为下游工具链的输入。这种分工充分发挥了各种语言的擅长领域。

三、开源工具链集成:端到端完整流程

Aegis 的工具链设计体现了高度的可集成性,每个设备都获得完整的 FPGA 工具链支持。整个流程包括四个关键阶段:综合、布局布线、比特流打包和仿真。

综合阶段使用业界标准的 Yosys 开源综合工具。Aegis 项目提供了专门的工艺映射文件(techmap)和单元库,开发者只需执行 yosys -c synth.tcl 即可将用户设计的 Verilog 代码映射到 Aegis 特定的基本单元。工艺映射文件位于工具共享目录下的 aegis/*_cells.vaegis/*_techmap.v,这些文件定义了 LUT4、D 触发器、carry 链等基本单元的逻辑实现。

布局布线阶段使用定制化的 nextpnr-aegis 工具。nextpnr 是一个开源的 FPGA 布局布线框架,Aegis 项目为其开发了专门的后端以支持 Terra 1 设备。开发者通过 nextpnr-aegis-terra_1 --json design_mapped.json --write design_pnr.json 命令完成布局布线,输入是综合输出的 JSON 网表,输出是包含布局布线结果的 JSON 文件。

比特流打包是 Aegis 工具链的独特之处。项目使用 Rust 实现的 terra_1-pack 工具,将布局布线的结果转换为最终的比特流文件。与某些开源工具链将比特流格式视为黑盒不同,Aegis 的比特流打包过程是透明的,开发者可以深入理解每个配置位的含义。这种透明性对于调试和安全审计都有重要价值。

仿真阶段同样使用 Rust 实现的 terra_1-sim 工具。该工具支持加载比特流并在芯片模型上运行设计,生成 VCD 波形文件用于调试。仿真器支持指定周期数,例如 terra_1-sim --bitstream design.bin --cycles 1000 --vcd waves.vcd 可以运行 1000 个时钟周期并输出波形。

四、ASIC 流片管道:从 RTL 到 GDS2 的完整路径

Aegis 最有突破性的特性之一是提供了完整的 ASIC 流片管道。这意味着开发者不仅可以生成运行在 FPGA 上的比特流,还可以将整个 FPGA fabric 本身作为目标芯片进行流片。管道使用 nix build .#terra-1-tapeout 命令触发,最终产出包括:Yosys 生成的 gate-level 网表(terra_1_synth.v)、OpenROAD 布局布线后的 DEF 文件(terra_1_final.def)、用于提交给晶圆厂的 GDS2 文件(terra_1.gds)、布局渲染图(terra_1_layout.png)以及时序分析报告和功耗报告。

这一管道目前支持两个主流的开源 PDK:GF180MCU(通过 wafer.space 服务)和 Sky130(SkyWater Open Source PDK)。GF180MCU 是较为成熟的工艺节点,适合对成本和性能有更高要求的应用;Sky130 则是完全开源的工艺库,适合学术研究和原型验证。开发者可以根据项目需求选择合适的工艺节点,而无需对上层架构进行任何修改。

从工程角度评估,Aegis 的流片管道代表了开源硬件的一个重要里程碑。传统上,FPGA 芯片的 fabric 设计是厂商的核心商业机密,Aegis 首次证明了即使是完整的 FPGA 架构也可以在开源社区中开发和维护。这种开放性不仅降低了硬件准入门槛,也为定制化 FPGA 应用开辟了新的可能性。

五、Terra 1 设备规格与构建参数

Terra 1 是 Aegis 项目的首个设备,目标是 GF180MCU 工艺节点。以下是具体的资源规格:LUT4 数量约 2880 个,BRAM(128×8)tile 128 个,DSP18(18×18 MAC)tile 64 个,I/O pad 224 个,SerDes 通道 4 个,时钟 tile 2 个(每个 8 输出),路由轨道每边 4 条。这些资源使得 Terra 1 足以支持中小规模的设计实现,同时也为工具链的验证提供了可行的目标。

构建系统采用 Nix 并启用 flakes 功能,这一选择反映了项目对可复现性的高度重视。Nix 包管理器可以确保在任意机器上获得完全一致的构建环境,开发者无需手动安装依赖或处理版本冲突。项目提供了多个构建目标:nix build 默认构建 aegis-ip-tools,nix build .#terra-1 生成 Terra 1 的 IP(包含 SystemVerilog、JSON、chipdb、techmap),nix build .#checks.*.terra-1-blinky 运行 blinky 示例作为基本验证。

开发环境的初始化使用 nix develop 命令,该命令会启动一个包含所有必要工具的开发 shell,开发者可以在其中进行代码修改、运行测试和构建各类输出。这种基于 Nix 的开发流程虽然学习曲线略陡,但长期来看大大降低了 "在我机器上能运行" 类型的问题。

六、工程意义与实践建议

Aegis 项目的出现标志着开源硬件生态进入了一个新阶段。在此前,开源 FPGA 工具链虽然已经相当成熟(Yosys + nextpnr 组合可以与商业工具链比肩),但始终受制于缺乏开源芯片的困境 —— 开发者只能在 proprietary FPGA 上运行开源工具链,无法真正掌控底层硬件。Aegis 填补了这一空白,使得从算法描述到芯片物理实现的完整开源流程成为可能。

对于有意参与或使用 Aegis 项目的开发者,以下几点工程实践值得关注。首先,项目的架构设计采用了高度参数化的方式,开发者应当理解 ROHD 的参数化建模思路,这有助于根据具体需求定制 tile 参数或添加新的 tile 类型。其次,工具链虽然已经完整可用,但在生产环境中的稳定性仍需进一步验证,建议从小规模设计开始逐步积累信心。第三,流片过程涉及与晶圆厂的交互,需要关注 wafer.space 等 shuttle 服务的具体要求和时间表。

综上所述,Aegis 作为首个完全开源的 FPGA 芯片项目,在架构设计、硬件描述语言选型和工具链集成方面都展现了深思熟虑的工程决策。其参数化生成方法、ROHD + Rust 的混合语言策略、端到端的开源工具链以及 ASIC 流片能力,共同构成了一套完整的开源 FPGA 解决方案。随着社区的发展和工艺节点的扩展,Aegis 有望成为开源硬件运动的重要里程碑。


参考资料