4、收发器IP核配置实战:使用Vivado配置Transceiver Wizard、线速率与参考时钟选择、QPLL与CPLL的区别
好,咱们今天直接上手干活。收发器IP核的配置,说白了就是让FPGA的高速串行接口能跟外部设备对上话。我见过不少新手,一打开Vivado的Transceiver Wizard就懵了——选项太多,不知道哪些该动、哪些不该动。别急,咱们一步步来拆解。
4.1 打开Transceiver Wizard,第一眼看到什么
在Vivado的IP Catalog里搜“Transceiver Wizard”,双击打开。你会看到一个分步向导,总共大概四五步。我个人习惯,第一步先选器件——当然,如果你已经打开了工程,它会自动匹配。重点在第二步:协议模板。
这里有个坑:很多人上来就选“Start from Scratch”(从头开始),结果后面一堆参数要自己填,填错了还不报错,直到上板调试才发现眼图打不开。我建议你,尽量选一个接近你需求的协议模板。比如你做SFP+光口通信,就选“10G BASE-R”;做PCIe就选“PCIe Gen3”。模板会把大部分参数给你设好,你只需要微调。
4.2 线速率与参考时钟选择——这对“搭档”必须匹配
线速率(Line Rate)就是你收发器串行链路上每秒传输的比特数。参考时钟(Refclk)是给收发器内部PLL用的基准时钟。这两者的关系,说白了就是:参考时钟 × 倍频系数 = 线速率。
举个例子:你想跑10.3125 Gbps(10G光模块的典型速率),参考时钟用156.25 MHz。那么倍频系数就是:
10.3125 Gbps / 156.25 MHz = 66
这个66倍是怎么实现的?靠PLL内部的乘法器。但注意,不是所有倍频系数都能实现。收发器内部的PLL有固定的分频比范围,你得查数据手册。
我遇到过最头疼的一次:客户要求线速率12.5 Gbps,但板子上只有100 MHz的参考时钟。算一下倍频系数125倍——超出了QPLL的极限。最后只能换125 MHz的晶振,或者改用CPLL(但CPLL的抖动性能又不够)。所以,选参考时钟时,先算好倍频系数,别等板子画完了才发现不行。
| 线速率(Gbps) | 常用参考时钟(MHz) | 倍频系数 | 适用PLL |
|---|---|---|---|
| 1.25 | 125 | 10 | CPLL |
| 3.125 | 156.25 | 20 | CPLL |
| 6.25 | 156.25 | 40 | QPLL |
| 10.3125 | 156.25 | 66 | QPLL |
| 12.5 | 125 | 100 | QPLL(需确认) |
4.3 QPLL与CPLL的区别——到底该用谁?
收发器内部有两种PLL:QPLL(Quad PLL)和CPLL(Channel PLL)。名字听起来差不多,但用途天差地别。
QPLL:一个Quad(4个收发器通道)共享一个PLL。它的特点是:频率高、抖动低、功耗大。适合跑高速率(通常6 Gbps以上),而且多个通道可以共用同一个时钟域。
CPLL:每个通道独立一个PLL。它的特点是:频率低、灵活性高、功耗小。适合跑中低速率(通常6 Gbps以下),而且每个通道可以独立配置线速率。
怎么选?我总结了一个简单粗暴的原则:
- 线速率 > 6 Gbps → 用QPLL。别犹豫,CPLL的抖动性能跟不上。
- 线速率 < 3 Gbps → 用CPLL。省功耗,而且每个通道可以独立配置。
- 3 ~ 6 Gbps之间 → 看情况。如果所有通道速率一致,用QPLL;如果各通道速率不同,用CPLL。
嗯,这里要注意:QPLL一旦锁定,所有共享它的通道必须用同一个线速率。如果你有4个通道,其中2个跑10 Gbps,另外2个跑5 Gbps——那对不起,QPLL没法同时满足。这时候要么用两个QPLL(如果器件支持),要么其中一个用CPLL。
4.4 实战配置步骤(以10.3125 Gbps为例)
好,咱们走一遍完整的配置流程。假设我要做一个10G光口通信,线速率10.3125 Gbps,参考时钟156.25 MHz。
- 打开Transceiver Wizard,选择器件(比如XC7K325T)。
- 协议模板:选“10G BASE-R”。它会自动把线速率设为10.3125 Gbps,参考时钟设为156.25 MHz。
- PLL选择:向导会自动推荐QPLL。确认一下“QPLL Settings”里的参考时钟频率是不是156.25 MHz。
- 数据通路:设置内部数据位宽。10G BASE-R通常用64位数据总线,内部时钟156.25 MHz(10.3125 / 64 = 161.13 MHz,实际取156.25 MHz是因为用了64B66B编码)。
- 高级选项:保持默认。除非你知道自己在做什么,否则别动“RX Equalization”和“TX Pre-emphasis”。
- 生成IP:点“Generate”,等它跑完。
生成之后,你会得到一个.xci文件。在顶层例化时,记得把参考时钟引脚连到板上的晶振输入。我习惯在约束文件里加上一句:
set_property PACKAGE_PIN Y9 [get_ports refclk_p]
set_property PACKAGE_PIN Y10 [get_ports refclk_n]
set_property IOSTANDARD LVDS [get_ports refclk_*]
嗯,差分时钟的引脚分配一定要跟原理图对清楚,别搞反了P和N。
4.5 知识体系总览
下面这张图,是我自己画的一个配置决策流程。你照着走,基本不会出错。
这张图的核心逻辑就是:先定速率,再选PLL,最后配参数。你只要按这个顺序走,就不会在配置界面里迷失方向。
4.6 几个容易忽略的细节
- 参考时钟的差分摆幅:Vivado里默认是LVDS,但有些板子用的是LVPECL或HCSL。记得在“Refclk Input”选项里选对电平标准,否则PLL可能锁不住。
- TXUSRCLK和RXUSRCLK:这两个时钟是内部数据通路的时钟。它们必须与线速率匹配。如果配错了,数据会错位,现象就是误码率奇高。
- 复位顺序:收发器上电后,先复位PLL,等PLL锁定后再复位数据通路。我习惯写一个状态机来控制复位时序,而不是一股脑全复位。
好了,收发器IP核配置这块,核心就是这些。你只要记住:线速率和参考时钟是基础,QPLL和CPLL是工具,协议模板是捷径。下次打开Transceiver Wizard,心里就有底了。
可可精品资料库