我们如何设计、生成并验证 FPGA IP,写给评估它的工程师看。这些文章里的每一个数字都是实测结果。
一个 CCSDS AR4JA LDPC 译码器,在仿真里九个码点全部与黄金模型逐比特一致, 一上真硬件却从第二帧起帧帧丢头。问题不在译码器里,而厂商手册比波形更快地指出了它。
板上第二块 FPGA,过去每换一次固件都要接一条维护线。现在整个更新走两块芯片本来就在用的 10 千兆链路:固件写进目标旁边的配置闪存并逐字节回读,再用一条带内命令让它从闪存重启。至于 怎么证明它跑的是哪一份,靠的是一个计数器,而不是一个标志位。
一块板子上两块大 FPGA,跨八条 10 千兆通道。哪块单独都不够用,于是第二块成了第一块的扩展仓: 一个算力节点,加四千兆字节远程内存,每一项都在真实芯片上逐字节验证。而调通这条链路,靠的是揪出 一条被所有仿真照着接线的、写反的通道映射记录。
高价的射频和 FPGA 硬件之所以闲置,是因为从算法跨越到能跑的系统,至今仍靠人力。我们 正在做的,以及逐比特验证如何让 AI 生成的硬件变得可信。
一套为厂商评估板写的参考收发机,搬到定制硬件上,用线缆把发射接回接收。两次失败都骗过了 所有仿真,只在硅片上现形:一个由构建流程自己引入的缺陷,以及一个转换器配置项。
一块合作伙伴的试用板卡到手时没有操作系统。整个调试由 AI 操盘:每一块硬件先验证过再 往上搭,然后编译并安装 Linux,一路启动到一个能通过 ssh 登录的登录提示符。
从第一性原理复刻 IBM 面向 gross 量子码的 Relay-BP 译码器,由一个逐层逐位对齐的模型生成。 它落在公开的硅片包络上,真正的余量在算法层:译码停滞时提前停,把最坏情况延迟削掉而不损失精度。
一台生成好的译码器,交给 AI 做 FPGA 资源优化。AI 用折叠把逻辑砍到约三分之一, 诊断出掉时钟是微架构问题不是折叠问题,换上旋转读取把时钟提回 160 MHz,认掉一条实测更慢的死路, 并把每一步都逐比特验证。
一台完整的 802.11a 接收机,从 MATLAB 参考设计变成没有人手写过一行的逐比特一致 FPGA 硬件,并把一段 MATLAB 生成的波形 0 误码恢复。每一层是如何对照标准核对的。
一台 5G NR 小区搜索接收机,从参考设计变成没人手写的 FPGA 硬件,把三个真实空口小区都读到 了一份一致的广播消息。检测器比早先手写的 HLS 实现小 38%。
一颗 5G LDPC 译码器,RTL 由 Python 算法生成,时钟从 221 优化到 463 MHz,在同一颗 FPGA 上 越过付费商用 IP。最难的是层与层之间的数据依赖,而非在哪插寄存器。
一条参数化流程,自动生成、自动收敛、逐位验证二十种 5G LDPC 译码器配置。调好一个是特例, 把整批自动做出来、并逐个证明,才是方法。