1. 工业控制与实时信号处理系统概述

工业控制与实时信号处理系统,本质上是一类对“时间”有硬性承诺的嵌入式系统。它需要在确定的时间窗口内完成采样、计算与输出,否则控制质量下降,重则导致设备损坏或人身事故。AMD FPGA(含 Zynq-7000、Zynq UltraScale+ MPSoC、Versal ACAP 等器件)在这类系统中的角色,不是简单地“跑得快”,而是把时间不确定性从系统中消除:用可编程逻辑实现纳秒级确定性的采样与执行,用处理器子系统承担协议栈、状态机与上层调度,从而在同一个芯片上同时满足硬实时与复杂控制逻辑的需求。

一、FPGA 在工业场景中的角色定位

在典型的工业控制器中,MCU 或通用 CPU 采用中断响应加软件循环的方式处理任务,其响应时间受缓存、中断嵌套、操作系统调度影响,抖动通常在微秒到数十微秒量级。而 FPGA 内部逻辑由时钟驱动,只要时序收敛,从输入引脚到输出引脚的延迟就是固定的若干时钟周期。以 100 MHz 时钟为例,一个时钟周期为 10 ns,若关键路径为 8 级逻辑,则延迟约 80 ns,且每次运行完全一致。这种“确定性”正是 FPGA 在工业场景中最核心的价值。

具体而言,AMD FPGA 在工业系统中通常承担四类角色:

  • 高速数据采集前端:直接连接 ADC、编码器、霍尔传感器,完成并行采样、滤波与打包,采样率可达数十至数百 MSPS。
  • 硬实时控制回路:实现电流环、速度环、位置环等对周期要求严格的闭环运算,控制周期可稳定在 1 μs 至 100 μs。
  • 多轴同步与总线主站:作为 EtherCAT、PROFINET IRT、CANopen 的主站或从站,利用硬件时间戳实现多轴同步,同步误差可控制在百纳秒级。
  • 信号处理加速器:完成 FFT、FIR、CIC、坐标变换(Clarke/Park)等运算,把 CPU 从密集计算中解放出来。

二、典型系统架构

以 Zynq-7000 或 Zynq UltraScale+ 为例,工业控制器通常采用“PS + PL”协同架构。PL(可编程逻辑)侧放置采样接口、实时控制核、PWM 发生器和总线从站;PS(处理系统)侧运行 Linux 或裸机程序,负责参数管理、人机界面通信、故障记录与网络协议。两者通过 AXI 总线交互,PS 通过 AXI-Lite 读写 PL 寄存器,PL 通过 AXI-Stream 或中断向 PS 上报数据。

下图给出一个典型的四轴运动控制与实时信号处理架构,其中采样、控制、PWM 全部在 PL 内闭环,PS 只做非实时任务,从而保证控制周期的确定性。

四轴运动控制与实时信号处理系统架构(Zynq PS+PL) PL 可编程逻辑(硬实时域) ADC / 编码器接口 并行采样 · 20 MSPS 数字滤波 / 抽取 CIC + FIR 实时控制核(4 轴) PID · 周期 10 μs PWM 发生器 死区 · 20 kHz EtherCAT 从站 硬件时间戳 AXI 互联(AXI-Lite 寄存器 / AXI-Stream 数据 / 中断) PS 与 PL 的确定性交互边界 时序约束与实时性指标 采样→控制→PWM 全链路延迟:约 1.2 μs(示例值) 控制周期抖动:< 1 个时钟周期(10 ns @100 MHz) 多轴同步误差:< 100 ns(硬件时间戳对齐) PS 处理系统(非实时域) ARM Cortex-A9/A53 Linux / 裸机 参数管理与轨迹规划 非实时 · 毫秒级 HMI / 以太网通信 Modbus TCP · OPC UA 故障记录与诊断 日志 · 波形回传 DDR 缓存 AXI 参数下发 硬实时闭环 总线同步 PS-PL 交互

三、实时性指标与设计约束

工业实时性通常用三个指标衡量:响应时间(从事件发生到输出动作的时间)、抖动(响应时间的波动范围)、同步误差(多轴或多节点之间的时间偏差)。硬实时要求最坏情况响应时间也必须满足截止期,软实时只要求统计意义上满足。

在 FPGA 设计中,实时性由以下约束共同决定:

  • 时钟约束:必须为每个时钟域编写 create_clock,并为跨时钟域路径设置 set_clock_groups 或 set_false_path,否则时序分析结果不可信。
  • 关键路径延迟:控制回路的组合逻辑级数直接决定延迟。若时钟 100 MHz、目标延迟 1 μs,则关键路径最多允许 100 级时钟周期,但实际应留足余量,通常控制在 60% 以内。
  • 跨时钟域同步:采样时钟域与控制时钟域之间必须使用双触发器同步或异步 FIFO,避免亚稳态导致偶发错误。
  • 资源与布线:高扇出信号、长布线会增大延迟抖动,应通过寄存器复制、流水线切割来稳定时序。
  • PS-PL 交互频率:AXI-Lite 读写通常需要数十个时钟周期,不应放在硬实时回路内;实时数据应通过 AXI-Stream 或 BRAM 双端口交互。
在工程实践中,建议把“采样—滤波—控制—PWM”全部放在 PL 内闭环,PS 只负责参数下发和状态监视。这样即使 Linux 发生调度延迟或网络阻塞,控制回路仍然按固定周期运行,系统不会失稳。

四、一个可参考的设计示例

假设设计一个 4 轴伺服控制器,要求电流环周期 10 μs、PWM 频率 20 kHz、多轴同步误差小于 100 ns。可采用如下参数配置(示例值,需根据实际器件与需求调整):

项目示例参数说明
系统时钟100 MHz周期 10 ns,控制周期 1000 个时钟
ADC 采样率20 MSPS每轴 2 通道,共 8 通道
电流环周期10 μsPL 内定时器触发,抖动 < 10 ns
PWM 频率20 kHz死区时间 500 ns,由硬件计数实现
EtherCAT 周期125 μs硬件时间戳,同步误差 < 100 ns
PS 通信周期1 ms参数下发与状态回传,非实时

实现时,PL 内用一个 10 μs 定时器产生控制使能信号,每个使能周期依次完成:读取 ADC 结果、执行 Clarke/Park 变换、运行 4 路 PID、更新 PWM 比较寄存器。整个链路从采样到 PWM 更新约 120 个时钟周期,即 1.2 μs,远小于 10 μs 周期,留有充足余量。PS 侧通过 AXI-Lite 每 1 ms 更新一次 PID 参数和目标值,参数在 PL 内经过双缓冲后在下个控制周期生效,避免参数切换时出现半更新状态。

注意:上述延迟和抖动为设计目标示例,实际数值必须通过时序报告(report_timing_summary)和在线逻辑分析(ILA)测量确认。不同器件速度等级、布局布线结果和温度条件都会影响最终时序。

理解 FPGA 在工业系统中的角色,关键不是记住某个型号或某个工具,而是建立“时间确定性”这一设计视角:哪些任务必须由硬件保证周期,哪些任务可以交给软件灵活处理,两者之间的边界在哪里。这个边界划清楚了,后续的架构设计、时序约束和调试方法才有明确的依据。