一块板子上有两块大 FPGA,一块是 Zynq UltraScale+ RFSoC,一块是 Kintex UltraScale, 中间用八条高速串行线相连。这一次的目标,是把第二块芯片变成第一块的扩展仓:模块放过去算,旁边那 4GB 内存拿来当远程存储。整个过程由 AI 在 Python2Verilog 框架下完成,工程师只在每一步给方向。
要做成这些,两块芯片之间的链路得先双向跑通真实字节。一个方向很快通了。另一个不通,而且是以一个问题 最磨人的方式:没有报错,没有崩溃,每一项检查都是绿的。
一个方向死活不通,每一层却都过了
这条链路走一种标准线路编码:每 64 位数据配一个 2 位同步头,接收端连续看到足够多的合法同步头就锁定。 一个方向锁定了,另一个一直在滑动,永远差一点。于是我们逐层测量,每一层都通过:厂商自带的例程仿真建起了 链路;一次自环仿真锁定并逐位精确地传过一帧;一次按真实接线连好的跨芯片仿真两个方向都锁定、回环逐字节精确; 对仿真导线上 40 万比特的分析发现,在唯一正确的偏移上同步头 100% 合法;对好坏两版布线后网表逐属性、逐引脚 的对比,结果完全相同。
眼图说的是同一件事。接收端的扫描显示眼睛又大又干净:水平张开度 77.8%,垂直 93.6%。信号质量无可挑剔。 问题恰恰不在信号质量。
抓到导线上的真实字节
到此为止的每个读数都是统计出来的数字。于是我们加了一个一次性抓取器,把锁定状态下连续三拍的原始 64 位字 直接读回来。回来的是 0011 循环。扰码数据本该像随机数,这却是一个纯方波,一个 2.5 GHz 的时钟。而 66 除以 4 余 2,所以按 66 位切帧,每帧相位走 2 位,同步头永远落在 01 或 10 上,两种都合法。
这一次抓取排除了一整类猜测。导线上根本没有数据,只有一个自由振荡的时钟图案,一直在冒充一条健康的链路。
地图是反的
于是我们把通道接线重新量了一次:只认物理通道名,不认工具序号,每条通道发一个不一样的二进制编码标记, 三轮解出全部八条。结果和我们一直信任的那份记录正好相反。发送端一直往一条没人监听的通道上发正确的数据, 而被监听的那条,连着一条从未配置的通道,自由振荡出那个方波。所有仿真都照同一份记录接线,记录内部自洽, 所以每次仿真都通过。
之前对这八条线已经跑过一次误码率测试,其中七条零误码,那它怎么会漏掉一对接反的线?因为那种测试 往每条线上发同一个伪随机序列:不管谁连着谁,每个接收端都能锁定、都报零误码。它对"谁连着谁"天生是盲的。 每条铜线确实都好,错的是"谁对谁"那张表。修法是换到正确的两条通道上重建,一次就通,逐字节精确。排查途中顺手 修掉的三个真实 bug 都留下了,但都不是根因。
从原理图 PDF 里,用机器抠出 DDR4 引脚表
接下来是远程内存。第二块芯片旁的 4GB DDR4 没有任何机器可读的引脚文件,只有一份 75 页的原理图 PDF, 而它的 64 位接口有 119 个引脚,手抄错一根线就是一次校准失败。于是 AI 把它变成一个几何问题:提取每页每个词 和它的坐标框,把每个网络名和同一行里最近的引脚号配成一对,并要求每个网络都配两次、必须配到同一个引脚,否则 整份作废。这道零冲突硬闸解出 117 个网络,零冲突,连藏在复用名字里的地址线也认了出来。裁判是厂商的内存控制器 IP:它一路跑到布局,字节组和 bank 合法性检查全部通过,全程不靠人眼看图纸。烧进板子,DDR4 第一次上电校准 就通过。
第二块芯片成了扩展仓
链路能跑真实字节、内存也校准之后,第二块芯片承担了三种角色,全部在真实硬件上验证。一次 256KB 的往返在 链路上回来逐字节精确。一个放在第二块芯片上的 Wi-Fi LDPC 译码器,吃进 1296 字节软信息、吐出 164 字节判决, 与基准模型比对零错,中间不复位连跑两次仍零错。跨链路写 4KB 再读回逐字节精确,换个深地址再来一遍仍精确。 从此第二块芯片对第一块就是三样东西:一条 10 千兆管道、一个算力节点、一块 4GB 远程内存。
还留了个尾巴。之前的误码率测试在八条线里有一条测出过少量误码。收官前用测试仪把这条线单独泡了十分钟: 6 万亿比特,零误差,眼图张开度和其他七条一个水平。这条线正好就是反向链路一直在用的那条。链路后来又往前走 了一步,把多条线捆绑成一条更宽的通道,两条线并跑的版本已经逐字节精确。捆绑时又冒出一个假设:两块芯片给通道 编号的顺序正好相反,单条线永远暴露不了。修法是让每条线在数据里自报身份,接收端按听到的身份重排。接线关系 从此是测出来的,不是假设出来的。
留下的三条准则
每一条都写回了框架,成为每次构建都会跑的强制检查。
锁定不等于数据。一个方波能同时满足同步头锁定、CDR 锁定、干净的眼图和完美的同步头合法率。 一条链路只有在解出真实载荷、逐字节对上时才算验收通过。
地图只认物理名字。通道接线用两端的物理名记录,用每条一个的独立标记实测。工具的编号不算 "谁连着谁"的证据。
引脚表只信机器。原理图引脚用几何配对提取,只有每个网络都零冲突解出才放行,再由厂商 IP 验证,而不是靠人读图。
为什么这件事重要
最贵的失败,就是每一层都报通过的那种。当电路在每个层级都查过没问题时,该检查的是测量本身。一条只写反了 一行的记录能存活整整一天,正是因为每一次仿真都老老实实照着它接线。这份纪律贯穿我们做的每一件事:每一层都对 着真实读数验证,相信硬件的真实状态,而不是描述它的那份文档。第二块芯片就是这样,一步一个测量地,成了第一块 的扩展仓。




