FPGA 作为 CXL 设备原型平台:为什么下一波互连创新先在 FPGA 板子上试

过去很多人看 FPGA,第一反应是两个字:加速。做个压缩,做个加密,做个网络 offload,或者在边缘侧跑一点 AI 推理。这当然没错,但如果只这么看,多少有点把 FPGA 看窄了。

到了 CXL / PCIe Gen6 这一波,FPGA 的一个新角色越来越明显:它不只是最终设备,也可能是下一代互连创新的“试车场”。

为什么?因为 CXL 这类东西不是写个软件库就能玩明白的。它涉及主机、设备、内存、缓存一致性、Fabric、Switch、端点类型、事务层、带宽、延迟、错误处理。你不能等芯片全流片了,再突然发现:“哎呀,这个设备行为好像不太对。”那成本就不是改代码了。那叫给硅片办追悼会。

所以,很多互连创新会先在 FPGA 板子上试。不是因为 FPGA 最便宜,也不是因为 FPGA 最省电,而是因为它有一个非常朴素、但在新标准早期极其珍贵的能力:改得动。

一、CXL 为什么需要“原型平台”

CXL 不是一个普通高速接口。如果 PCIe 更像“主机和设备之间的高速公路”,那 CXL 更像在高速公路上加了公共仓库、共享调度、专用通行规则,甚至还开始允许多个角色之间更复杂地协作。

CXL 3.1 里已经有很多明显面向复杂系统的能力,比如 Type 1/2/3 设备、Memory Pooling、多级 Switching、直接 peer-to-peer memory access、增强一致性、memory sharing、fabric capabilities 等。CXL 3.1 的公开材料还列出其最高链路速率为 64 GT/s,并支持 256B FLIT 等机制。

这意味着什么?意味着 CXL 设备不是“能枚举出来”就完事了。你还得验证:

  • 设备类型是否符合预期;

  • 内存窗口行为是否正确;

  • host 访问延迟和带宽是否稳定;

  • 多主机、多设备、多 switch 场景下会不会出问题;

  • peer-to-peer 路径是不是按设想工作;

  • 错误恢复、热插拔、初始化流程能不能扛住真实环境。

这种事情最怕“纸上正确”。互连协议一旦进系统,问题往往不是单点模块错,而是多个角色一起“各自没错,合起来很怪”。

这就像几个人一起合租。每个人都说自己生活习惯很好。真正住进去以后,才知道谁半夜洗衣服,谁把冰箱当档案柜。

CXL 也一样。规范是一回事,系统行为是另一回事。

二、为什么 FPGA 特别适合做 CXL 原型

FPGA 的价值不在于它能“最终替代所有 CXL ASIC”。真正的价值是:它可以在标准、IP、软件栈、系统架构还在快速演进时,先把设备行为跑起来。

Panmnesia 在 CES 2026 展示的 PANRDK 就很典型:这是一个带 FPGA、支持 PCIe Gen6 高速能力的 link development board;根据加载到 FPGA 里的 IP 不同,这块板可以扮演多种 CXL 设备角色,包括 CXL CPU、CXL GPU 和 CXL memory device。

这句话很值得细品。同一块 FPGA 板,换一套 IP,就能模拟不同 CXL 角色。这不就是互连实验最想要的东西吗?今天你想验证 Type-3 memory device;明天你想试 accelerator behavior;后天你想测某种 fabric switch 场景;如果每次都等专用芯片回来,那项目经理的头发基本可以提前走完生命周期。

FPGA 原型平台的意义就在这里:先把系统里的“角色”做出来,再让软件、固件、驱动、测试平台一起跑起来。

三、AMD 为什么也把 CXL / PCIe Gen6 放到 FPGA/Adaptive SoC 的核心卖点里

这不是个别厂商的小动作。AMD Versal Premium Series Gen 2 官方页面明确写到,它是业界首个在 FPGA 或 adaptive SoC 中通过硬 IP 支持 PCIe Gen6 和 CXL 3.1、速率达到 64 Gb/s 的平台;同一页面还强调 CXL 3.1 可用于 memory expansion,并把 computational tasks move closer to memory 作为应用价值之一。

AMD 的 CXL solution brief 也写得更具体:Versal Premium Series Gen 2 提供 CXL 3.1 hardware-based subsystem,支持 CXL.io、CXL.mem、CXL.cache,支持 Endpoint Mode Type-3/2/1,也支持 Host Mode Type-3;它还把 memory expansion、memory pooling、memory acceleration 列为适合场景。

这说明 FPGA 在 CXL 世界里不是只适合做“小实验”。它可以做几类很关键的事情:

  • CXL Type-3 memory device 原型;

  • CXL accelerator endpoint 原型;

  • memory expansion / pooling 方案验证;

  • near-memory processing 原型;

  • CXL host 或 endpoint 行为验证;

  • 数据中心系统软件和固件 bring-up。

特别是 CXL 这种“协议 + 内存 + 系统软件”强绑定的东西,硬件出来之前,软件团队就得开始干活。

如果没有可编程原型板,软件只能盯着文档练想象力。这就像厨师还没见到锅,只能拿菜单练颠勺。态度是好的,效果比较抽象。

四、CXL 设备原型真正要验证什么

很多人以为 CXL 原型就是“把接口跑通”。这理解太轻了。一个像样的 CXL 设备原型,至少要验证四层东西。

第一层是链路和枚举。

设备能不能被主机发现,BAR 怎么映射,配置空间是否正确,链路训练是否稳定。

第二层是事务行为。

读写请求能不能正确落到本地 memory window,completion 是否按规则返回,tag、ordering、flow control 有没有问题。

第三层是内存语义。

如果是 Type-3 memory device,主机看到的 memory capacity、latency、bandwidth 是否符合预期;如果涉及 pooling 或 fabric,还要看多路径、多设备、多主机下的访问行为。

第四层是系统软件。

驱动、内核、firmware、BIOS/UEFI、资源管理器、监控工具,能不能把这个设备当成真实设备来用。

这四层里,哪一层都不适合等 ASIC 回来再第一次验证。因为你很可能会发现:

  • 硬件看起来对,软件说不对;

  • 软件认为能用,系统压力一上来又不对;

  • 压力测试过了,异常恢复又开始讲玄学。

这就是为什么 FPGA 原型平台很值钱。它不是为了把最终性能做到极致。它是为了让系统尽早暴露真问题。

五、CXL 设备原型的核心味道,是“请求进来,内存行为出去”

下面这段 SystemVerilog 表达的是 CXL Type-3 memory device 原型里最核心的一类行为:主机发起读写请求,FPGA 把地址映射到本地内存窗口,再返回完成响应。

module cxl_type3_mem_model #(
    parameter ADDR_W = 32,
    parameter DATA_W = 512,
    parameter TAG_W  = 8,
    parameter DEPTH  = 1024
)(
    input  logic                 clk,
    input  logic                 rst_n,
    // 简化后的 host request 流
    input  logic                 req_valid,
    output logic                 req_ready,
    input  logic                 req_write,
    input  logic [ADDR_W-1:0]    req_addr,
    input  logic [DATA_W-1:0]    req_wdata,
    input  logic [TAG_W-1:0]     req_tag,
    // 简化后的 completion 流
    output logic                 cpl_valid,
    input  logic                 cpl_ready,
    output logic [DATA_W-1:0]    cpl_rdata,
    output logic [TAG_W-1:0]     cpl_tag,
    output logic                 cpl_error
);
localparam WORD_ADDR_W = $clog2(DEPTH);
logic [DATA_W-1:0] mem [0:DEPTH-1];
logic              req_fire;
logic [WORD_ADDR_W-1:0] word_addr;
assign req_fire  = req_valid && req_ready;
assign word_addr = req_addr[WORD_ADDR_W+$clog2(DATA_W/8)-1:$clog2(DATA_W/8)];
assign req_ready = !cpl_valid || cpl_ready;
always_ff @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        cpl_valid <= 1'b0;
        cpl_rdata <= '0;
        cpl_tag   <= '0;
        cpl_error <= 1'b0;
    end else begin
        if (cpl_ready)
            cpl_valid <= 1'b0;
        if (req_fire) begin
            cpl_valid <= 1'b1;
            cpl_tag   <= req_tag;
            if (word_addr >= DEPTH) begin
                cpl_rdata <= '0;
                cpl_error <= 1'b1;
            end else begin
                cpl_error <= 1'b0;
                if (req_write) begin
                    mem[word_addr] <= req_wdata;
                    cpl_rdata      <= '0;
                end else begin
                    cpl_rdata <= mem[word_addr];
                end
            end
        end
    end
end
endmodule

这段代码把 CXL 设备原型的一个核心观念表达出来了:对主机来说,你不是一块普通逻辑;你是一段有行为的内存资源。真正的 CXL 设备当然要复杂得多:

  • 要处理协议层;

  • 要处理 cache/mem/io 语义;

  • 要处理 FLIT、CRC、FEC、流控;

  • 要处理配置空间和枚举;

  • 要处理错误、RAS、安全和复位流程;

  • 要处理多 outstanding request 和 ordering。

但在原型阶段,很多系统问题可以先从这种“内存窗口行为”开始跑起来。先让系统知道:这块 CXL memory device 长什么样,能不能访问,访问延迟如何,压力上来会怎样。这比拿着规范开会强多了。

六、FPGA 原型平台的真正新意:不是“仿真快”,而是“角色可变”

我觉得这件事最有新意的地方,不是 FPGA 可以做 CXL。而是 FPGA 可以在 CXL 生态里不断换角色。今天它是 Type-3 memory device;明天它是 Type-2 accelerator;后天它可能是某种桥接、过滤、near-memory processing 设备;再往后,它甚至可以用来验证 host-side 行为或 fabric 场景。

AMD 的资料也说明 Versal Premium Gen 2 的 CXL subsystem 支持 Endpoint Mode Type-3/2/1 和 Host Mode Type-3。这就很有意思了。ASIC 世界里,角色基本是一出生就定了,FPGA 世界里,角色可以先试,这对互连创新太重要了,因为下一代数据中心不是简单“设备更多”,而是设备之间关系更复杂。

CXL 3.1 已经把 memory pooling、多级 switching、peer-to-peer、fabric capability 这些东西摆上桌。关系一复杂,原型平台就变得值钱。你要先试出:

  • 哪种设备角色最合理;

  • 哪种拓扑最稳;

  • 哪种访问路径最短;

  • 哪些功能放 device 端,哪些放 host 端;

  • 什么东西值得做成 ASIC,什么东西还适合留在 FPGA。

这不是“做个 demo”。这是在给未来芯片定性格。

七、为什么 AI 数据中心尤其需要这种平台

因为 AI 数据中心的变化太快了。以前加速器更像独立设备。现在越来越像一个复杂集群里的节点:

  • GPU 要访问大量内存;

  • CPU 要调度多个加速器;

  • SmartNIC / DPU 要搬运和过滤数据;

  • CXL memory expander 要补内存墙;

  • CXL switch / fabric 要把资源连起来;

  • 近内存计算还想把一部分处理放到数据旁边。

AMD 在 Versal Premium Gen 2 页面里也把数据中心应用写得很清楚,包括 enterprise SSD、encryption/compression accelerators、memory pooling、live migration;并且说明 CXL 3.1 能支持 memory expansion,把计算任务更靠近内存。

这种环境里,FPGA 原型平台的价值不是“我能不能最后量产”。而是:我能不能让架构团队、软件团队、系统团队,在真实硬件行为上提前吵架。

别笑,这是好事,在白板上大家都很友好。一上硬件,问题才开始讲真话。

八、不要神化 FPGA,它也有边界

说到这里,也得降降温。FPGA 做 CXL 原型很适合,但它不是万能。它的边界也很明显:

  • 最高性能不一定等同最终 ASIC;

  • 功耗和面积不是最终形态;

  • 某些物理层能力仍依赖硬核 IP;

  • 完整 CXL 一致性和内存语义不能靠几段 RTL 糊出来;

  • 真正产品化仍需要合规、验证、固件、驱动、RAS、安全一起跟上。

所以正确态度不是:“有 FPGA,就能随便做 CXL 芯片。”而是:有 FPGA,我们可以更早、更便宜、更灵活地验证 CXL 设备行为和系统架构。

这才是它的真实价值。它不是最终答案,它是把问题提前问出来的工具。而在互连这种领域,问题问得越早,越省钱。

结语:

下一波互连创新先在 FPGA 板子上试,不是因为 FPGA 最终一定是所有 CXL 设备的形态,而是因为 CXL 这种系统级互连太复杂,必须先有一个能改、能试、能变角色的硬件平台。

CXL 不是单纯连线。它是主机、加速器、内存和 Fabric 之间关系的重新组织。而关系越复杂,越不能只靠文档和仿真过日子。你得让设备真的站到系统里,看看它会不会闹脾气。

FPGA 最适合干这件事,它像互连世界里的试驾车:不一定是最终量产款,但没有它,你很难知道这条路到底能不能开。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐