MENU

VU9P 上手

August 26, 2026 • Nico的日常生活阅读设置

最近为了跑某个软核,于是在寻找一个FPGA板子,最开始考虑的是7k480t,但是发现容量不够塞不进去,后面在朋友的推荐下发现了这个XCVU9P,全称为 AMD Virtex UltraScale+ FPGA VCU118,不过到手发现是CIV器件(IDCODE位为0x?4b35093),速度等级为 -1-e (也就是筛片时筛出不同体质的),不过作为一个FPGA初学者的起点来说(这是我第一块板子),还是提供了一个较高的起点。

根据AMD官方描述:CIV版本的区别为 管脚数小于700个,GTs/SerDes 线速率总和上限小于500G

这个板子的来源似乎是中兴的一个智能网卡,直接插上电脑会发现出现大量网络设备

02:0f.0 PCI bridge: Xilinx Corporation Device 9138
03:00.0 Ethernet controller: Red Hat, Inc. Virtio network device

但是在中兴官网并没有记载,按照ROM里面写的东西可以得知这玩意型号叫做 XE310 ,具备两个QSFP28 两个SFP28,板子上也引出了JTAG和UART,我用的是tigard(https://github.com/tigard-tools/tigard )来进行下载调试,没有买官方的那个下载器(

b60bbe713ccfaf23506979c844c9514d.jpg

使用openFPGALoader通过tigard来执行相关操作,扫链可得相关信息

Jtag frequency : requested 6.00MHz    -> real 6.00MHz
index 0:
        idcode 0x4b35093
        manufacturer xilinx
        family virtexusp
        model  xcvu9p
        irlength 18

接下来就是搞定这上面的DDR和时钟,时钟部分是由一个Si5381A芯片来实现的,据调查一共接了四组时钟出来

时钟

首先使用 ClockBuilder Pro 导出一份配置,用来研究,然后调查得知目前这个芯片是用I2C控制的状态,进一步跑线可以得到

R16 SI5381_A0/CSb W15 SI5381_A1/SDO
V14 SI5381_SCLK W14 SI5381_SDA/SDIO
AA12 SI5381_RSTN U12 SI5381_INTRN

他的控制部分全部接到了FPGA上面,未来要使用的话大概率需要在bitstream里面加入这部分对于时钟的控制(

以及在Claude老师帮助下,发现了这个板子上有些特殊定义

0x090E = 0x02 XAXB 是两脚晶体(XTAL),不是振荡器(XO)
0x0016 = 0x00 关掉 LOL_ON_HOLD,否则强制 holdover 的 DSPLL 会假报失锁

结合这个情况那就可以得到魔改之前导出的配置下面的配置,其他部分还是参考原厂导出来的配置(((

Reference : 54 MHz ← 导出时选的是 "XO - Oscillator",本板实为 XTAL
Outputs : OUT3 / OUT4 / OUT5 / OUT6 = 300 MHz, LVDS 2.5 V
OUT3 -> DSPLL A (Free Run) OUT4 -> DSPLL B
OUT5 -> DSPLL C (Free Run) OUT6 -> DSPLL D (Free Run)
Fvco = 14.7456 GHz MXAXB = 273 + 1/15
P0..P3 = 150 Fms1 = 600 MHz

最终可得:

SYSINCAL=0 LOSXAXB=0 LOL A=0 B=1 C=0 D=0
cfgmclk 97606820 cnt / 2009 ms = 48.585 MHz
OUT3->C1 602347854 cnt / 2009 ms = 299.825 MHz
OUT4->C3 602347853 cnt / 2009 ms = 299.825 MHz
OUT5->C2 602347854 cnt / 2009 ms = 299.825 MHz
OUT6->C4 602347854 cnt / 2009 ms = 299.825 MHz

以及这玩意的一些寄存器信息:

地址 名称 用途
0x0002/03 PN_BASE 得到 0x5381 代表成功识别芯片
0x000B I2C_ADDR 基址;叠加 A1/A0 strap 得到实际地址
0x000C STATUS bit0 SYSINCAL(1 = 未校准/未配置)、bit1 LOSXAXB(1 = 基准丢失)
0x000D LOS 各输入通道失锁;本板 IN0–3 未接,置位属正常
0x000E LOL bit0..3 = DSPLL A..D 失锁
0x0016 LOL_ON_HOLD 0x00,否则 holdover 的 DSPLL 假报 LOL(坑 2)
0x00FE DEVICE_READY 0x0f = 寄存器可访问
0x0102 OUTALL_DISABLE_LOW bit0 = 0 → 所有输出被全局关断
0x0108 + 5n OUTn_CFG bit0 OUTn_PDN,1 = 该路下电
0x090E XAXB_EXTCLK_EN 本板必须写 0x02(XTAL 模式)
0x0B24/25 配置前后导码 0xC0/0x04 开始,0xC3/0x06 结束,必须成对
0x0540 前导码 0x01、后导码 0x00

DDR

然后是DDR部分,群友给了一份不太完整的脚位,而且分成了四组 4+2+1+2(64+32+16+32bit) 一共18G,在GPT老师的协助猜测脚位下,成功跑通了 C4和C2 ,但是C1还是没通(

通道 位宽 状态
C1 64 bit ❌ 卡在校准 stage 1 DQS Gate
C2 32 bit ✅ 校准 + 读写全通过
C3 16 bit ❌ 卡在校准 stage 1 DQS Gate
C4 32 bit ✅ 校准 + 读写全通过

经过群友的最新的点位,现在跑通了,发现是有两组球对调了((

PCIe

这个板子在屁股上有一个SFF-8654的接口,通过这个就可以转接出两个M.2 但是还未做探索

UART

在板子的屁股下半部分,可以看到有三个排针,按照丝印可得这就是UART,但是按照常规思路发现这个东西确实能正常输出 但是输入也就是RX似乎是不对的,不能往里面输入东西

后来发现是我的tigard有问题导致只能收不能发

未完待续(

Last Modified: August 27, 2026
Leave a Comment