FPGA 作为 CXL 设备原型平台:为什么下一波互连创新先在 FPGA 板子上试
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 最适合干这件事,它像互连世界里的试驾车:不一定是最终量产款,但没有它,你很难知道这条路到底能不能开。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)