4. 工业通信协议栈总览
在 Agilex 平台上做工业通信,第一件事不是写代码,而是把“协议栈放在哪里”想清楚。工业现场常见的 EtherCAT、PROFINET、EtherNet/IP、Modbus TCP、OPC UA、TSN、CAN/CANopen、IO-Link 这八类协议,对实时性、拓扑、芯片资源和软件依赖的要求差异极大。Agilex 的 FPGA 架构加上硬核处理器子系统(HPS,含双核 Arm Cortex-A76/A55),恰好提供了“硬核逻辑 + 软核软件”两条并行的实现路径。理解每条协议该走哪条路径,是后续所有工程决策的基础。
一、八类协议在 Agilex 上的落点
EtherCAT 是典型的硬实时协议,从站需要纳秒级的时间戳与帧处理。在 Agilex 上,EtherCAT 从站控制器(ESC)通常用 FPGA 逻辑实现,把 MAC、分布式时钟(DC)、过程数据接口都放进硬核逻辑,HPS 只负责应用层和参数配置。PROFINET 分 RT 和 IRT:RT 可用软件栈跑在 HPS 上,IRT 则必须借助 FPGA 逻辑做等时同步和带宽预留。EtherNet/IP 基于标准以太网和 CIP,实时性要求相对宽松,适合在 HPS 上以软件栈实现,必要时用 FPGA 做流量整形。
Modbus TCP 是纯软件协议,直接跑在 HPS 的 Linux 上即可,无需 FPGA 参与。OPC UA 是信息模型与安全层协议,同样以 HPS 软件栈为主,但它的发布/订阅模式(PubSub)若要走 TSN,就需要 FPGA 提供时间敏感网络支持。TSN 本身不是应用协议,而是一组 IEEE 802.1 标准,在 Agilex 上由 FPGA 逻辑实现时间同步、门控调度和帧抢占,为上层协议提供确定性通道。CAN/CANopen 属于现场总线,Agilex 没有原生 CAN 控制器,需要用 FPGA 逻辑实现 CAN 控制器,或通过外部收发器加软核。IO-Link 是点对点低速协议,通常由 FPGA 逻辑实现 IO-Link 主站,连接传感器/执行器。
二、硬核与软核协议栈的选择依据
选择硬核还是软核,核心看三个指标:周期时间、抖动容限和节点数量。EtherCAT 的循环周期常在 100 μs 到 1 ms 之间,抖动要求小于 1 μs,这种量级只有 FPGA 逻辑能稳定满足。PROFINET IRT 的周期可到 250 μs,同样需要硬核支持。而 Modbus TCP 的典型响应在毫秒到十毫秒级,HPS 软件栈完全够用。OPC UA 的请求-响应模式对实时性不敏感,但 PubSub 模式若要求确定性,就要下沉到 TSN 硬核。
另一个判断维度是协议栈的成熟度与维护成本。EtherNet/IP 和 Modbus TCP 有大量成熟的开源或商业软件栈,直接移植到 HPS 的 Linux 上,开发周期短、生态好。EtherCAT 从站虽然也有软件实现(如 SOEM),但在 Agilex 上更推荐用 FPGA 硬核 IP,因为软件方案在高速循环下 CPU 占用率会急剧上升,且抖动难以控制。CAN 和 IO-Link 在 Agilex 上没有原生控制器,必须用 FPGA 逻辑实现,这是硬件架构决定的,不是选择问题。
三、实时 MAC 与标准 MAC 的差异
标准 MAC 遵循 IEEE 802.3 的尽力而为模型,帧的发送时机取决于操作系统调度和网络拥塞,延迟不确定。实时 MAC 在标准 MAC 基础上增加了三个关键机制:时间戳单元、优先级队列和确定性转发逻辑。时间戳单元在帧的起始边界打上硬件时间戳,精度可达纳秒级,这是 EtherCAT 分布式时钟和 TSN 802.1AS 同步的基础。优先级队列按 VLAN PCP 或自定义优先级把帧分成不同等级,高优先级帧可以抢占低优先级帧的发送窗口。确定性转发逻辑则保证帧在预定时间窗口内被发出,不受 CPU 负载影响。
在 Agilex 上,实时 MAC 通常由 FPGA 逻辑实现,与 TSN 硬核 IP 配合使用。标准 MAC 则可以直接使用 HPS 内置的以太网控制器,或 FPGA 中的标准三速以太网 IP。两者的接口差异也很明显:实时 MAC 需要暴露时间戳、队列状态和调度配置接口给软件,标准 MAC 只需要标准的 MII/GMII 接口和 DMA 描述符。实际工程中,一个 Agilex 设备可能同时包含实时 MAC 和标准 MAC,前者跑 EtherCAT 或 TSN,后者跑 OPC UA 或 Modbus TCP,通过内部交换逻辑或 HPS 网络栈实现协议隔离与数据汇聚。
四、典型组合与配置示例
以一个工业边缘控制器为例,假设需要同时支持 EtherCAT 主站、OPC UA 服务器和 Modbus TCP 从站。EtherCAT 主站用 FPGA 逻辑实现,配置 1 ms 循环周期,分布式时钟参考从站偏移补偿;OPC UA 服务器跑在 HPS 的 Linux 上,监听 4840 端口,信息模型映射到共享内存中的过程数据;Modbus TCP 从站同样跑在 HPS 上,监听 502 端口,寄存器区与 OPC UA 节点共用同一份数据源。三者通过 HPS 内的共享内存或 RPMsg 与 FPGA 逻辑交换数据。
# 示例:HPS 侧 Modbus TCP 从站寄存器映射(伪代码)
# 保持寄存器 40001-40010 映射 EtherCAT 过程数据输入
# 保持寄存器 40101-40110 映射 EtherCAT 过程数据输出
# 线圈 00001-00016 映射数字量 IO 状态
mb_register_map = {
40001: ecat_input_word[0], # 轴 1 状态字
40002: ecat_input_word[1], # 轴 1 位置反馈低 16 位
40003: ecat_input_word[2], # 轴 1 位置反馈高 16 位
40101: ecat_output_word[0], # 轴 1 控制字
40102: ecat_output_word[1], # 轴 1 目标位置低 16 位
40103: ecat_output_word[2], # 轴 1 目标位置高 16 位
}
这个示例中,EtherCAT 的循环周期是 1 ms,Modbus TCP 的轮询周期通常是 10 ms 到 100 ms,OPC UA 的订阅发布周期可设为 100 ms。三者时间尺度不同,但共享同一份过程数据,由 HPS 上的数据同步任务保证一致性。判断配置是否成功,可以观察三个指标:EtherCAT 从站是否进入 OP 状态且工作计数器(WKC)等于预期值;Modbus TCP 客户端能否正确读写 40001 和 40101 寄存器;OPC UA 客户端能否订阅到节点值变化且时间戳连续。
五、协议栈选择检查表
| 协议 | 推荐实现位置 | 典型周期 | 关键判断依据 |
|---|---|---|---|
| EtherCAT | FPGA 硬核 | 100 μs ~ 1 ms | 抖动 < 1 μs,需 DC 同步 |
| PROFINET IRT | FPGA 硬核 | 250 μs ~ 1 ms | 等时同步,带宽预留 |
| PROFINET RT | HPS 软核 | 1 ms ~ 10 ms | 标准以太网,优先级标签 |
| EtherNet/IP | HPS 软核 | 1 ms ~ 10 ms | CIP 对象模型,TCP/UDP |
| Modbus TCP | HPS 软核 | 10 ms ~ 100 ms | MBAP 头,寄存器映射 |
| OPC UA | HPS 软核 | 100 ms ~ 1 s | 信息模型,安全通道 |
| TSN | FPGA 硬核 | 取决于调度 | 802.1AS/Qbv,确定性通道 |
| CAN/CANopen | FPGA 硬核 | 1 ms ~ 10 ms | 无原生控制器,需外部收发器 |
| IO-Link | FPGA 硬核 | 0.4 ms ~ 2 ms | 点对点,UART 帧,唤醒脉冲 |
这张表可以作为项目初期的快速决策依据。实际选型时还要考虑 IP 授权成本、团队熟悉度和认证要求。例如 EtherCAT 从站 IP 通常需要购买商业授权,而 Modbus TCP 和 OPC UA 有成熟的开源实现。Agilex 的 FPGA 逻辑资源有限,如果同时实现多个硬核协议,需要提前评估逻辑单元、Block RAM 和 DSP 的占用。建议在架构设计阶段就用 Quartus 的资源估算工具做一次预布局,确认硬核协议栈的组合不会导致时序收敛困难。