news 2026/7/31 5:19:29

AMD/Xilinx 生态中的块级控制协议(Block-Level Control Protocol),以cmac 为例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AMD/Xilinx 生态中的块级控制协议(Block-Level Control Protocol),以cmac 为例

ap_ctrl_none是 AMD/Xilinx Vitis/Vivado HLS 生态中的块级控制协议(Block-Level Control Protocol),表示该硬件模块为**“自由运行”(Free-Running)**模式——一旦 FPGA 加载完成,模块即刻自主运转,无需 Host CPU 通过ap_start/ap_done等握手信号来逐次调度。


一、三种块级控制协议对比

在 Vitis HLS 或 RTL Kernel 中,块级协议决定整个 IP 核的执行生命周期(何时启动、何时算完成、何时空闲),与端口级的 AXI4-Stream/AXI4-Lite 等数据接口是不同层面的概念 :

协议控制信号执行模式典型场景
ap_ctrl_hsap_start,ap_done,ap_idle,ap_ready控制驱动,单次执行,Host 发令 → 核执行 → 核报告完成传统加速器(如 FFT、矩阵乘)
ap_ctrl_chain上述信号 +ap_continue控制驱动,支持流水线级联,下游可反压上游多核链式数据流
ap_ctrl_none无握手信号(或被优化为高电平常有效)数据驱动,持续运行网络包转发、视频流、自由运行 RTL Kernel

二、ap_ctrl_none 的核心语义

1. 无生命周期握手

模块不暴露ap_start/ap_done/ap_idle/ap_ready给 Host。对 Host 软件(XRT/OpenCL)而言,无法通过clEnqueueTask来"启动"一次任务,也无法查询"这次任务是否做完" 。

2. 数据驱动(Data-Driven)

模块的运行节奏完全由数据流可用性决定:

  • 输入端口(如S_AXIS)有数据 → 模块处理;
  • 输入为空 → 模块自动阻塞(stall)等待;
  • 输出端口(如M_AXIS)被下游反压 → 模块自动挂起。

这相当于硬件层面的while(1)循环 。

3. 上电即运行

在 RTL Kernel 语境下,一旦xclbin加载到 FPGA,ap_ctrl_none的内核立即开始工作,不需要 Host 下发启动命令 。


三、为什么 CMAC Kernel 使用 ap_ctrl_none

结合 CMAC Kernel 文档,该设计选择ap_ctrl_none的原因非常明确:

设计特征与 ap_ctrl_none 的契合点
网络子系统100G 以太网 MAC/PCS 是持续收发的流水线,没有"一次任务"的概念
AXIS 数据流通过S_AXIS/M_AXIS与上下游交互,天然适合数据驱动
控制与数据分离数据面(512-bit AXIS)持续跑;控制面(AXI4-Lite 寄存器)旁路配置,互不影响
无需 Host 调度Host 不需要说"发一个包"——包来了硬件自动处理

换句话说,CMAC 是一个**“永远在线"的 I/O 引擎**,而非"被 Host 反复调用的函数”。


四、使用 ap_ctrl_none 的约束与注意事项

根据 AMD 官方文档,采用该协议需满足特定条件,否则 C/RTL 协同仿真会报错 :

  1. 必须是流式/流水线设计:接口推荐使用hls::streamaxis,避免使用m_axi(内存映射)作为数据主通路;
  2. 不能有循环内的 dataflow 区域ap_ctrl_none区域若嵌套在for循环内部,会导致父级 FSM 永远等不到ap_done而死锁;
  3. 父级模块也需为 ap_ctrl_none:若上层还有非自由运行模块等待该核的完成信号,系统会挂起;
  4. AXI4-Lite 仍可用:虽然数据面无控制握手,但寄存器配置接口(S_AXILITE)仍可独立存在,用于状态查询和参数配置。

五、总结

ap_ctrl_none=拉闸即运转,数据来则动,数据尽则停,Host 不干预生命周期
对 CMAC 这类 100G 网络硬核而言,它是"自由运行内核"的标准签名,确保网卡从 FPGA 加载完成后即刻进入线速转发状态,无需 CPU 逐包调度。

六、cmac 概述

CMAC 内核

本文档提供 cmac 内核的概述。

cmac 内核

cmac内核是一个 RTL 自由运行内核,它封装了 UltraScale+ 集成 100G 以太网子系统。该内核使用ap_ctrl_none作为硬件控制协议。

该内核根据传递给 make 的INTERFACEDEVICEPADDING_MODE参数进行配置。它向用户逻辑暴露两个 512 位 AXI4-Stream 接口(S_AXIS 和 M_AXIS),这些接口以内核相同的频率运行;内核内部集成了 CDC(时钟域跨越)逻辑,用于将内核时钟转换为 100G 以太网子系统时钟。它还提供一个 AXI4-Lite 接口,用于查看 UltraScale+ 集成 100G 以太网子系统的寄存器映射。

UltraScale+ 集成 100G 以太网子系统

100G 以太网子系统提供了一个集成的 100 千兆比特每秒(Gbps)以太网媒体访问控制器(MAC)、物理编码子层(PCS)、IEEE 802.3bj 里德-所罗门前向纠错(RS-FEC)以及 100GE 自动协商/链路训练(AN/LT)IP,以支持 KR4、CR4、SR4、CWDM4、PSM4 或 ER4f 等高性能应用方案。

注意:自动协商/链路训练在此内核中未启用。

cmac_sync

该 IP 实现了 PG203 中描述的内核启动序列。

frame_padding

该 IP 实现可选的帧填充至 60 或 64 字节。填充模式在编译时通过PADDING_MODE参数设置,具体如下:模式0表示不填充,模式1(默认)填充至 60 字节,模式2填充至 64 字节。

时钟域跨越

UltraScale+ 集成 100G 以太网子系统中的 Rx 和 Tx AXI4-Stream 接口工作在 322.265625 MHz。为了适应设计中其余部分的不同频率,在 Tx 路径(acc_kernel_tx_cdc 和 fifo_cmac_tx)和 Rx 路径(fifo_cmac_rx_cdc)中均包含了跨时钟域逻辑。

寄存器映射

UltraScale+ 集成 100G 以太网子系统的寄存器映射(详见 PG203)可通过 AXI4-Lite 接口访问。其中许多寄存器已通过 template.xml 文件方便地映射为内核参数。

如果您希望访问未映射的寄存器,可以使用 pynq MMIO 的读写方法。

例如:

# 读取 CONFIGURATION_AN_ABILITY 寄存器cmac.read(0xA8)# 在 CONFIGURATION_AN_ABILITY 寄存器中设置 ctl_an_ability_1000base_kxcmac.write(0xA8,0x1)

您也可以修改 template.xml 文件以添加更多寄存器。修改此文件时需谨慎,确保 id 正确更改。一旦修改了 template.xml 文件,您必须重新构建设计,以便将这些更改包含到 xclbin 中。修改 template.xml 后,请删除此文件夹中的所有 *.xo 文件。

接口

名称描述
ap_clk主时钟
ap_rst_n主低电平复位
clk_gt_freerun自由运行内核时钟
gt_ref_clkGT 参考时钟
gt_serial_portGT 串行通道
S_AXILITEAXI4-Lite 从属控制接口
S_AXIS512 位 AXI4-Stream 发送接口
M_AXIS512 位 AXI4-Stream 接收接口

多路 100 GbE 接口与 Alveo 卡

为了支持多路 100 GbE 接口和 Alveo 卡,会生成略有不同的内核,其内部结构和接口保持不变。但 UltraScale+ 集成 100G 以太网子系统的配置会根据每个接口和 Alveo 卡进行调整。这些配置详见 此处。

许可证

要生成使用 UltraScale+ 集成 100G 以太网子系统 的 xclbin 文件,您需要有效的许可证。您可以按照这些步骤生成免费许可证。

注意:要启用自动协商/链路训练,您需要单独的许可证。更多信息请参阅相关文档。

修改 RS-FEC

RS-FEC 在 CMAC 实例中默认启用。在运行时,RS-FEC 默认处于关闭状态,可以通过调用 Pynq 和 C++ 驱动程序中的相应函数来激活。激活后,RS-FEC 设置为子模式 1(纠错和指示均启用)。更多详情请参阅 UltraScale+ 集成 100G 以太网子系统 文档。

注意:RS-FEC 激活后会增加延迟。


Copyright© 2022 Xilinx

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 5:19:24

智能手机传感器全解析:从原理到应用,揭秘日常交互背后的核心技术

1. 拆解一部现代智能手机:那些你每天都在用,却可能从未察觉的“感官”拿起你的手机,点亮屏幕、自动旋转、计步、拍照防抖……这些看似简单的功能背后,是一整套精密而复杂的传感器系统在默默工作。它们就像手机的“感官”&#xff…

作者头像 李华
网站建设 2026/7/31 5:19:07

SpringBoot构建智慧社区平台的技术实践

1. 项目背景与核心需求社区分享平台作为连接居民与社区服务的数字化桥梁,在智慧社区建设中扮演着关键角色。这个基于SpringBoot的项目实际上要解决三个层面的问题:信息孤岛问题:传统社区中,公告通知、二手交易、活动报名等信息分散…

作者头像 李华
网站建设 2026/7/31 5:16:05

2026年TOP5全自动焊接成型一体机专业公司排名揭晓

2026年全自动焊接成型一体机行业TOP5专业公司排名随着自动化技术在制造业中的深入应用,全自动焊接成型一体机已成为提高生产效率、降低生产成本的关键设备之一。以下是根据技术实力、市场表现及用户反馈综合评定的2026年全自动焊接成型一体机领域内TOP5专业公司&…

作者头像 李华
网站建设 2026/7/31 5:16:02

Android自动化熄屏:基于Auto.js的device.setScreenTimeout实现

1. 项目概述:为什么我们需要自动化熄屏?在移动设备的使用中,熄屏操作看似简单,却常常是重复性最高、最容易被忽视的环节。想象一下,你正在用手机进行一项需要长时间等待的任务,比如下载一个大文件、运行一个…

作者头像 李华
网站建设 2026/7/31 5:14:44

Lua实现可扩展行为树:游戏AI模块化与热更新实战

1. 项目概述:为什么游戏AI需要可扩展的行为树?在游戏开发,尤其是独立游戏或中小型团队项目中,我们常常面临一个矛盾:既希望AI逻辑足够复杂、智能,能够应对多样的游戏场景,又受限于紧张的开发周期…

作者头像 李华