第二章:FPGA基础与收发器原理

各位同学,咱们今天聊聊FPGA内部结构和收发器。说实话,很多初学者一上来就盯着收发器看,结果连FPGA内部长啥样都没搞清楚。我个人习惯是,先摸清底层的家底,再去看那些高速接口。

2.1 FPGA内部结构:你手里的那块芯片到底有啥?

FPGA说白了就是一堆可编程逻辑单元拼起来的。你想想看,它不像CPU那样固定指令集,也不像ASIC那样焊死了功能。它的核心魅力在于——你想让它干啥,它就干啥。

典型的FPGA内部包含这几大块:

  • 可编程逻辑块(CLB):这是干活的主力。每个CLB里有一堆查找表(LUT)和触发器(FF)。LUT负责组合逻辑,FF负责时序逻辑。
  • 块RAM(BRAM):片上的存储资源。我做过一个项目,数据量不大但延迟要求极高,用BRAM比用DDR快了一个数量级。
  • DSP切片:专门干乘法和累加的。做卷积加速时,这玩意儿就是你的主力军。
  • 布线资源:把上面这些东西连起来的“高速公路”。
  • I/O块:和外界打交道的接口。
  • 收发器(Transceiver):咱们这章的重点,专门处理高速串行数据。

核心观点:FPGA不是一块“万能芯片”,它是一堆可配置资源的集合。你写的Verilog代码,最终就是把这些资源按你的想法搭起来。

2.2 SerDes与收发器基本概念:串行化,没那么神秘

SerDes是Serializer/Deserializer的缩写。说白了,就是把并行数据转成串行发出去,再把收到的串行数据转回并行。

为什么要这么折腾?

  • 减少引脚数:并行接口要几十根线,串行两根线搞定。
  • 提高速率:并行线之间有时序偏差(skew),频率上不去。串行线没有这个问题。
  • 降低功耗:线少了,驱动功耗自然降下来。

收发器就是SerDes的物理实现。它包含了PLL、CDR(时钟数据恢复)、串化器、解串器、均衡器等等。嗯,这里要注意,收发器不是你想用就能用的,它需要配置参考时钟、线速率、协议模式等参数。

我的经验:刚开始接触收发器时,我总以为配置好就能跑。结果有一次,参考时钟的抖动超标,导致链路死活锁不住。后来查了三天,才发现是时钟源选错了。所以,时钟质量是收发器工作的命根子。

2.3 GTX/GTH收发器架构解析

Xilinx的GTX和GTH是7系列和UltraScale系列里最常见的收发器。它们架构类似,但GTH支持更高的速率。

咱们来看一个典型的收发器通道(Quad)结构:

+------------------+     +------------------+
|   PCS层          |     |   PMA层          |
| (物理编码子层)    |<--->| (物理介质适配层)  |
| - 8B/10B编码     |     | - 串化器/解串器  |
| - 弹性缓冲       |     | - PLL            |
| - 通道绑定       |     | - CDR            |
| - 时钟修正       |     | - 均衡器         |
+------------------+     +------------------+

收发器分两层:

  • PMA层:处理模拟信号。包括PLL生成高速时钟、CDR从数据中恢复时钟、串化器把并行转串行、均衡器补偿信道损耗。
  • PCS层:处理数字逻辑。包括8B/10B编码(保证直流平衡)、弹性缓冲(跨时钟域处理)、通道绑定(多通道对齐)、时钟修正(补偿频偏)。

我做过一个项目,用GTH跑10.3125Gbps的速率。当时最头疼的是均衡器参数调优。信道损耗大了,眼图就睁不开;均衡器调太猛,又引入噪声。最后是拿着示波器一点一点试出来的。

避坑指南:我曾经在配置GTX时,把TX和RX的极性搞反了。结果数据死活不通,还以为是硬件坏了。后来发现,只要在配置里把极性翻转一下就行。所以,遇到链路不通,先检查极性、时钟、复位这三个基本项。

2.4 收发器在卷积加速中的角色

你可能会问:做卷积加速,为啥要学收发器?

原因很简单:

  • 数据搬运:卷积加速需要大量数据输入输出。用收发器接高速ADC或DDR,比用普通I/O快得多。
  • 多芯片级联:一个FPGA算力不够,用收发器把多个FPGA串起来,组成更大的加速阵列。
  • 与CPU/GPU通信:通过PCIe(本质也是收发器)和主机交换数据。

说白了,收发器就是FPGA和外界高速交互的“高速公路”。没有它,你的卷积加速器再牛,数据也喂不进去。

总结一下:FPGA内部结构是基础,SerDes是原理,GTX/GTH是具体实现。这三层搞清楚了,后面做上板联调时,你才知道问题出在哪儿。

好了,这一章就聊到这儿。下一章咱们会动手写收发器的配置代码,到时候你们会发现,理论懂了,写代码其实没那么难。


可可精品资料库