跳转到主要内容

FPGA 可移植设计怎么做?三大思路降低厂商依赖

导语

FPGA 项目很难完全消除厂商依赖。

更现实的目标,是明确厂商依赖出现在哪里,并把它限制在可以管理的范围内。

本文提供 FPGA 可移植设计三大思路,助您提升开发效率。

FPGA 行业里让人头疼的问题

FPGA 的优势之一,就是能够针对具体器件进行深度优化。

不同厂商提供了不同的 FPGA 架构、片上资源和开发工具。例如 RAM、DSP、高速收发器以及各种专用硬核,都可以通过厂商工具链提供的 IP 或原语进行调用。

对于当前项目而言,这种方式非常高效。

问题出现在产品生命周期后半段。

如果未来需要更换 FPGA 厂商,原先基于特定器件构建的设计可能需要重新处理大量内容:

  • 厂商专用 IP 需要替换;
  • FPGA 原语需要重新映射;
  • 存储资源的推断方式可能发生变化;
  • 时钟、复位和 CDC 设计需要重新验证;
  • 高速接口相关模块需要重新适配;
  • 综合、布局布线以及时序约束需要重新调整;
  • 某些原本依赖特定工具链行为的 RTL,也可能暴露兼容性问题。

因此,厂商依赖会出现在 FPGA 设计的多个环节。

即使完全使用 HDL 编写代码,也不能天然保证跨厂商可综合。不同工具对 VHDL、Verilog 的支持范围、综合属性以及推断行为存在差异,复位等边界场景也可能在迁移过程中出现问题。

所以,FPGA 设计需要从整体架构考虑可移植性。

可移植性可以分成三个层次

从实际 FPGA 项目来看,可移植性主要涉及三个层面:

RTL/IP层 → 平台/模块层 → 器件优化层。

第一层解决基础逻辑的复用问题;第二层关注 FPGA 模块与载板之间的接口和硬件平台;第三层则涉及具体 FPGA 器件的资源和性能优化。

1. RTL/IP层:优先追求通用

这是最适合实现跨厂商复用的一层。

例如:FIFO、CDC、UART、SPI、I²C、CRC、AXI、位宽转换、Arbiter、定时与延迟控制、固定点数学运算等,这些模块通常不需要绑定某一家 FPGA 的具体硬核。

如果每个项目都重新实现一遍,工程师会不断重复解决已经解决过的问题。因此,这一层最适合采用经过验证的、与厂商无关的 HDL 模块,将基础功能从具体项目中抽离出来。

FPGA 开源库 Open Logic 所提供的组件就属于这一层。

不过,RTL/IP 层只是 FPGA 可移植性的一部分。当设计进入具体硬件平台之后,还会遇到 FPGA 模块、载板、高速接口、电源和机械结构等问题。

2. 平台/模块层:降低硬件平台绑定

FPGA 最终需要与 DDR、PCIe、高速网络、时钟、电源以及各种外围接口组成完整系统。

这一层涉及的内容包括:

  • FPGA 模块的 I/O 与接口定义;
  • FPGA 与载板之间的连接方式;
  • 电源与时钟设计;
  • 高速接口资源;
  • DDR 等外部存储器;
  • 模块尺寸与机械结构;
  • FPGA 模块与载板之间的功能边界。

如果这些内容都根据具体 FPGA 器件进行定制,那么 FPGA 发生变化时,载板和外围系统也可能需要重新设计。

因此,平台/模块层主要通过模块化、接口抽象和标准化降低硬件平台之间的耦合。

oHFM:把可移植性延伸到 FPGA 模块

SGET 的 oHFM(Open Harmonized FPGA Module) 是面向 FPGA 和 SoC 模块的开放标准。

目前标准包含两种模块形态:

  • oHFM.c(Connector-based):连接器式模块
  • oHFM.s(Solderable):焊接式模块

oHFM.c 通过标准化的模块尺寸、连接器和接口定义,为 FPGA 模块与载板之间建立统一的接口框架。

SGET 对 oHFM.c 的定位包括中高端 FPGA、高 I/O 数量、高速接口,以及原型开发、评估和现场硬件升级等场景。

从可移植设计的角度看,oHFM.c 解决的是硬件平台的模块化和接口标准化问题。

这样,当 FPGA 模块需要升级或替换时,载板层不必每次都从头设计。

2026 年 7 月,ALINX 正式加入 SGET 嵌入式技术标准化组织,并参与 oHFM 标准工作组。ALINX 是中国大陆地区第一家加入 oHFM 标准的企业,结合深厚的 FPGA 硬件开发经验,主动参与开放、模块化 FPGA 生态建设,已将 oHFM 标准纳入后续产品规划。

标准化模块对于 FPGA 产品生命周期管理的价值极大,因此 ALINX 不断加强模块化产品矩阵建设,让 FPGA 开发变得更加便捷高效。

3. 器件优化层:针对具体FPGA优化

再往下,就是 FPGA 器件本身的资源和架构。

不同 FPGA 的 RAM、DSP、高速收发器以及其他专用资源存在差异。要充分利用这些资源,就需要针对具体器件进行设计和优化。

这一层包括:

  • BRAM / UltraRAM 等片上存储资源;
  • DSP 等计算资源;
  • 高速收发器;
  • 不同器件的时钟资源;
  • NoC 等特定架构资源;
  • 针对具体器件的 IP 和原语。

这一层的重点是性能、资源利用率和功耗。

例如,同一个 FIFO 可以采用通用 RTL 实现,也可以针对 AMD UltraScale+ FPGA 选择 UltraRAM。

通用实现更容易迁移;UltraRAM 实现可以更充分利用特定器件的片上资源。

因此,器件优化层需要做的是明确厂商相关部分,并把这些优化限制在具体模块或功能范围内,在这些局部模块内部,通过推断或例化 IP 等方式,提高性能、资源利用率和功耗表现。

这样既可以保留器件级优化,也方便后续进行替换和重新适配。

FPGA 项目很难完全消除厂商依赖。

更现实的目标,是明确厂商依赖出现在哪里,并把它限制在可以管理的范围内。

一个产品通常会经历:原型验证 → 产品开发 → 量产 → 产品升级 → 器件替代 → 下一代产品

在这个过程中,如果设计已经做到:

  • 基础 RTL 可以复用;
  • 硬件平台通过模块化和标准接口降低耦合;
  • 器件优化模块集中管理。

那么就从厂商依赖做到了可控替代

*参考资料:Designing for portability with open-source FPGA libraries(Oliver Bründler, Maintainer of Open Logic)