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加载到 FPGAap_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 协同仿真会报错 必须是流式/流水线设计接口推荐使用hls::stream或axis避免使用m_axi内存映射作为数据主通路不能有循环内的 dataflow 区域ap_ctrl_none区域若嵌套在for循环内部会导致父级 FSM 永远等不到ap_done而死锁父级模块也需为 ap_ctrl_none若上层还有非自由运行模块等待该核的完成信号系统会挂起AXI4-Lite 仍可用虽然数据面无控制握手但寄存器配置接口S_AXILITE仍可独立存在用于状态查询和参数配置。五、总结ap_ctrl_none拉闸即运转数据来则动数据尽则停Host 不干预生命周期。对 CMAC 这类 100G 网络硬核而言它是自由运行内核的标准签名确保网卡从 FPGA 加载完成后即刻进入线速转发状态无需 CPU 逐包调度。六、cmac 概述CMAC 内核本文档提供 cmac 内核的概述。cmac 内核cmac内核是一个 RTL 自由运行内核它封装了 UltraScale 集成 100G 以太网子系统。该内核使用ap_ctrl_none作为硬件控制协议。该内核根据传递给 make 的INTERFACE、DEVICE和PADDING_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/LTIP以支持 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-FECRS-FEC 在 CMAC 实例中默认启用。在运行时RS-FEC 默认处于关闭状态可以通过调用 Pynq 和 C 驱动程序中的相应函数来激活。激活后RS-FEC 设置为子模式 1纠错和指示均启用。更多详情请参阅 UltraScale 集成 100G 以太网子系统 文档。注意RS-FEC 激活后会增加延迟。Copyright© 2022 Xilinx