FPGA 与原型验证

FPGA Prototyping vs Emulation:应该如何选择?

2026/06/12 作者:星际 AI 笔记作者 161 次阅读 1 次点赞

在一个典型 SoC 或 AI 芯片项目中,验证团队经常会同时讨论两个平台:Emulation 和 FPGA Prototyping。前者常被用来承载大规模 RTL,在 Tapeout 前发现系统级问题;后者则常被软件团队、系统团队和 Bring-up 团队用来提前运行真实软件栈、连接真实外设,并做更接近最终系统的验证。

问题在于,这两个平台听起来都能“把芯片提前跑起来”,但它们解决的工程问题并不完全相同。如果只用“谁更快”“谁更贵”“谁更接近真实芯片”来判断,往往会得出过于简单的结论。

更合适的判断方式是:当前项目最需要的是看清楚 RTL 内部发生了什么,还是让完整系统尽可能快、尽可能真实地运行起来?

先给结论:不是替代关系,而是阶段互补

Emulation 更适合 RTL 仍在变化、系统问题还需要深度 debug 的阶段。它的核心价值是可观测性、可控性和调试效率,适合在 pre-silicon verification 中定位复杂协议、状态机、Cache coherency、启动流程和子系统集成问题。

FPGA Prototyping 更适合 RTL 相对稳定之后,用于高速运行、软件开发、真实 IO 验证和系统级场景验证。它的核心价值是 execution speed、真实外设连接、长时间 workload 运行,以及 Bring-up 前的软件和系统演练。

因此,这不是一个简单的二选一问题。成熟的 SoC 验证流程通常会组合使用 Simulation、Emulation、FPGA Prototyping 和 First Silicon 环境,让不同平台在不同阶段承担不同责任。

什么是 Emulation?

Emulation 是把 SoC RTL 映射到专用硬件验证平台上运行的一种验证方式。它比传统 RTL simulation 快很多,同时保留较强的 RTL 可见性和调试能力。

在工程实践中,Emulation 常用于大规模 SoC pre-silicon verification,例如 OS boot、driver bring-up、复杂子系统联调、协议异常定位和系统级回归。它的优势不是单纯“跑得最快”,而是在较高运行速度下,仍然能帮助工程师观察内部信号、控制测试场景,并复现复杂问题。

可以把 Emulation 理解为一个更适合硬件验证团队使用的系统级 RTL 调试平台。它回答的问题通常是:这个 SoC 设计在 RTL 层面是否能正确启动、交互和收敛?

什么是 FPGA Prototyping?

FPGA Prototyping 是把 ASIC 或 SoC 设计映射到 FPGA 或 FPGA Prototype Platform 上运行,使设计在接近真实硬件的环境中提前工作。

它通常不追求像 Emulation 那样强的内部信号可见性,而是更关注系统是否能以较高速度运行,软件栈是否能持续工作,真实接口是否能正确连接,外部设备是否能参与端到端验证。

在 AI SoC、Edge AI、视频处理和嵌入式系统项目中,FPGA Prototyping 常用于运行 Bootloader、Linux Kernel、Device Driver、AI Runtime、SDK、AI inference workload,以及 PCIe、DDR、Ethernet、SerDes、camera、display 等接口验证。

可以把 FPGA Prototyping 理解为一个更接近软件团队和系统团队日常使用方式的 pre-silicon system platform。它回答的问题通常是:这个系统是否能在接近真实应用的条件下稳定运行?

核心差异对比

维度 Emulation FPGA Prototyping
主要目标 大规模 RTL 系统验证和 debug 高速系统运行、软件开发和真实 IO 验证
典型阶段 RTL 仍在变化,系统问题需要收敛 RTL 相对稳定,软件和系统验证前移
运行速度 明显快于 RTL simulation,但通常不是最高速 在完成平台适配后,通常更适合较长时间、高速运行 workload
Debug visibility 较强,适合观察内部 RTL 行为 中等,依赖插桩、ILA 或日志系统
RTL 修改适应性 更适合频繁迭代和验证调试 需要综合、分割、时序适配,迭代成本更高
软件开发支持 可支持 OS boot 和 driver bring-up,但资源通常较紧张 更适合软件团队持续开发、回归和压力测试
真实 IO 支持 可支持部分接口,常依赖模型或适配器 更适合连接真实 PCIe、DDR、Ethernet、SerDes 和外设
系统级验证能力 强,尤其适合可控系统场景 强,尤其适合真实数据流和长时间运行
部署复杂度 平台资源集中,使用成本较高 前期搭建、RTL 分割、时序收敛和 debug 插桩成本不低,但平台稳定后更适合长期共享
典型使用者 验证团队、RTL 团队、架构团队 软件团队、系统团队、Bring-up 团队、FAE

简单来说,Emulation 更擅长“看清楚问题”,FPGA Prototyping 更擅长“把系统跑起来并长期运行”。

什么时候更适合选择 Emulation?

如果项目还处于 RTL 快速变化阶段,Emulation 通常更合适。这个阶段最重要的不是让软件跑得多快,而是要尽快发现并定位设计内部的问题。

典型场景包括:

  • RTL 还在频繁修改,模块接口和寄存器定义仍在收敛。
  • 需要深入观察内部信号、状态机、总线事务和协议交互。
  • 需要做复杂 SoC 子系统联调,例如 CPU、NoC、DDR Controller、DMA、PCIe、NPU 之间的协同行为。
  • 需要可重复、可控制的 debug 环境,方便重放特定场景。
  • 需要在 Tapeout 前定位 cache coherency、memory ordering、interrupt handling、reset sequence 等复杂问题。
  • 软件已经可以启动,但系统稳定性还不足以支撑长时间 workload。

例如,一个 AI SoC 项目在启动 Linux 时偶发卡死。软件日志只能看到 kernel 初始化停在某个 driver probe 阶段,但无法解释底层原因。通过 Emulation,验证团队可以观察到 CPU 发出的 AXI transaction、DMA 状态变化、中断控制器响应和 NoC backpressure,最终定位到某个复位域释放顺序不正确。这类问题需要较强的 RTL visibility,适合在 Emulation 上解决。

什么时候更适合选择 FPGA Prototyping?

当 RTL 架构已经相对稳定,软件团队开始深度介入,项目重点从“RTL 是否正确”转向“系统是否能持续工作”时,FPGA Prototyping 的价值会更突出。

典型场景包括:

  • 软件团队需要接近真实速度运行 Bootloader、Linux、Driver、Runtime 和 SDK。
  • 需要验证 PCIe、DDR、Ethernet、SerDes、camera、display 等真实接口。
  • 需要提前做 First Silicon Bring-up rehearsal,减少硅片回来后的不确定性。
  • 需要运行 AI inference、Edge AI、video pipeline、embedded Linux 或多任务 workload。
  • 需要长时间运行压力测试,观察稳定性、吞吐、内存访问和中断行为。
  • 需要为算法、软件、系统团队提供一个可持续使用的实验平台。

例如,一个 Edge AI 设备项目需要验证 camera input、图像预处理、NPU inference、DDR 数据搬运和 display output 的完整链路。单独看每个模块,RTL 仿真和 Emulation 都可以覆盖一部分功能;但真正的问题可能出现在长时间视频流、DMA 压力、缓存维护和 driver 并发访问之间。FPGA Prototyping 更适合把这些环节连接起来,在接近真实系统的条件下运行。

常见误区

误区一:FPGA Prototyping 速度更快,所以一定更好。
速度快只是优势之一,但并不代表更适合所有验证任务。如果问题发生在复杂 RTL 内部,而平台缺乏足够的信号可见性,定位成本可能反而更高。

误区二:Emulation 能做系统验证,所以不需要 FPGA Prototype Platform。
Emulation 能支撑系统级验证,但资源通常更集中,成本更高,也不一定适合多个软件团队长期运行真实 workload。FPGA Prototype Platform 在软件开发、真实 IO 和长期稳定性测试上有自己的位置。

误区三:FPGA Prototyping 可以替代 RTL debug。
FPGA Prototyping 可以暴露系统问题,但不一定适合定位所有 RTL 细节。对于协议边界、状态机异常、时序相关控制路径,Simulation 和 Emulation 仍然非常重要。

误区四:只有大芯片项目才需要这两类平台。
即使是中等规模 SoC 或嵌入式 AI 系统,只要软件栈复杂、外设接口多、Bring-up 风险高,也可能需要 Emulation 或 FPGA Prototyping。关键不是芯片规模,而是验证目标和项目风险。

一个实用选择框架

选择 Emulation 还是 FPGA Prototyping,可以先问几个工程问题:

问题 更偏向 Emulation 更偏向 FPGA Prototyping
当前最关键的是 debug visibility 还是 execution speed? 需要看清 RTL 内部行为 需要高速运行完整系统
RTL 是否已经稳定? 仍在频繁变化 架构和接口已基本稳定
软件团队是否已经深度介入? 主要是早期 bring-up 和 debug 需要持续开发、回归和压力测试
是否需要真实 IO 和外部设备? 可先用模型或适配器 需要连接真实外设和数据流
验证目标是什么? block、subsystem、SoC debug full-system workload 和应用场景
当前阶段更接近什么? verification 和 bug convergence software enablement 和 bring-up preparation

如果当前问题的核心是“为什么这个 RTL 行为不对”,优先考虑 Emulation。
如果当前问题的核心是“这个系统能不能像真实产品一样长时间工作”,优先考虑 FPGA Prototyping。

组合使用的典型流程

在一个较成熟的 SoC 项目中,验证流程通常不是单平台推进,而是多平台接力。

早期阶段,RTL simulation 负责 IP、block 和局部协议验证,Emulation 开始承载更大的 subsystem 和 SoC 级场景。这个阶段的重点是把硬件功能和关键系统路径收敛下来。

中期阶段,Emulation 支持 OS boot、driver bring-up、关键数据路径验证和复杂问题定位。软件团队可以开始介入,但平台使用仍以问题定位和系统验证为主。

后期阶段,FPGA Prototyping 开始承担更重要的系统角色。软件团队可以运行更完整的软件栈,系统团队可以连接真实外设,Bring-up 团队可以提前演练启动流程、日志采集、异常恢复和性能观察方法。

Tapeout 前后,FPGA Prototype Platform 还可以继续作为 First Silicon 的对照平台。硅片回来后,如果某个问题在真实芯片上出现,可以回到 Prototype 上尝试复现;如果 Prototype 上无法复现,也能帮助团队判断问题是否与硅片实现、板级环境、真实频率、时序条件或 FPGA 映射差异相关。

总结

Emulation 和 FPGA Prototyping 都属于 pre-silicon validation 的重要组成部分,但它们不是同一种工具的两个版本。

如果你的主要问题是“如何看清楚 RTL 内部发生了什么”,Emulation 通常更合适。它适合 RTL 变化频繁、系统问题复杂、debug visibility 要求高的阶段。

如果你的主要问题是“如何让系统尽可能真实、尽可能快地跑起来”,FPGA Prototyping 通常更合适。它适合软件开发、真实 IO 验证、长期 workload、Bring-up rehearsal 和应用场景验证。

真正有效的选择,不是先问“应该买哪种平台”,而是先问“当前项目阶段最需要解决什么问题”。当 verification、software enablement 和 system validation 的边界被梳理清楚之后,Emulation 和 FPGA Prototyping 的位置也会自然清晰起来。

在实际项目中,还需要结合验证阶段、软件栈成熟度、接口类型和团队协作方式,进一步细化 Emulation 与 FPGA Prototyping 的平台策略。