4. 反射与端接:反射产生的机理、源端端接、并联端接、AC端接、戴维南端接、端接电阻计算
各位同学,咱们今天聊一个在高速设计中绕不开的话题——反射与端接。
说实话,我刚开始做FPGA设计那会儿,觉得信号能通就行。直到有一次,一块DDR3板子在200MHz死活跑不稳,示波器一抓,波形上全是毛刺。嗯,那就是反射在作怪。从那以后,我对端接这件事再也不敢马虎了。
4.1 反射是怎么产生的?
反射的本质,说白了就是阻抗不连续。
信号在传输线上跑,就像水流在管道里流。管道粗细均匀,水流就平稳。突然管道变细了,水就会反弹回来。信号也一样,遇到阻抗变化的地方,一部分能量继续往前走,另一部分就被弹回来了。
反射系数Γ的计算公式很简单:
Γ = (Z_load - Z0) / (Z_load + Z0)
其中Z_load是负载阻抗,Z0是传输线的特性阻抗。
我给大家几个典型值感受一下:
| 负载情况 | 反射系数 | 现象 |
|---|---|---|
| 开路(Z_load = ∞) | Γ = 1 | 全反射,电压翻倍 |
| 短路(Z_load = 0) | Γ = -1 | 全反射,电压反相 |
| 匹配(Z_load = Z0) | Γ = 0 | 无反射,完美传输 |
关键点:反射会导致信号过冲、下冲、振铃。过冲大了会烧芯片,振铃长了会误判逻辑电平。我见过一块板子,就因为反射导致时钟沿抖动,整个系统间歇性死机。
4.2 源端端接(串联端接)
源端端接是我个人最常用的一种方式。为什么?因为它省电、简单。
做法就是在驱动器的输出端串一个电阻,让驱动器的输出阻抗加上这个电阻,等于传输线的特性阻抗。
计算公式:
R_series = Z0 - R_driver
比如,你的传输线是50Ω,驱动器的输出阻抗大约是10Ω,那串一个39Ω或43Ω的电阻就行。
我的经验:源端端接适合点对点的连接。我在做SPI Flash接口时,时钟线串一个33Ω电阻,波形干净得很。但要注意,源端端接不能用在双向总线上,比如I2C就不行。
源端端接的原理是:信号从源端出发时,电压只有一半(因为电阻分压),到了末端遇到高阻抗,反射回来叠加,正好达到满幅。你想想看,这个巧妙之处就在于利用了反射,而不是消除反射。
4.3 并联端接
并联端接,就是在接收端把信号拉到地或者电源上。
最常见的做法是:在接收端放一个电阻到地,阻值等于Z0。这样信号到了末端,直接进地,没有反射。
但有个问题——直流功耗大。信号为高电平时,电流一直流经这个电阻到地。对于3.3V的LVTTL信号,如果接50Ω到地,静态电流就有66mA。一个接口还好,八个接口呢?功耗就上去了。
注意:并联端接不适合低功耗设计。我曾经在一个电池供电的项目里用了并联端接,结果电池续航直接砍了一半。后来换成了源端端接,问题才解决。
4.4 AC端接
AC端接是并联端接的改良版。它在电阻和地之间串了一个电容。
这样做的目的是:对于直流信号,电容隔断了,没有静态功耗。对于高频信号,电容相当于短路,电阻起作用,消除反射。
电容的取值一般这样算:
C > 10 / (2π × f_min × R)
其中f_min是信号的最低频率。比如信号速率是100MHz,R=50Ω,那C至少要大于318pF。我一般取470pF或1nF,留点余量。
AC端接的好处很明显——没有直流功耗。但缺点是多了一个电容,占面积。而且电容的寄生参数在高频时会引入新的问题。
4.5 戴维南端接
戴维南端接,也叫分压端接。它用两个电阻,一个拉到电源,一个拉到地。
两个电阻的并联值等于Z0,同时分压点要等于信号的阈值电压。
计算公式:
R1 || R2 = Z0
V_cc × R2 / (R1 + R2) = V_threshold
对于3.3V的LVCMOS,阈值大约是1.65V,那R1和R2取相等值,各100Ω,并联就是50Ω。
戴维南端接的好处是:同时提供了上拉和下拉,对信号的上升沿和下降沿都有好处。而且它不需要额外的参考电压。
但缺点也很明显——两个电阻,静态功耗比并联端接还大。因为电流从电源经过两个电阻到地,一直流着。
我的建议:戴维南端接适合DDR等双向总线。我在做DDR3设计时,地址线和控制线就用戴维南端接,效果不错。但数据线我建议用源端端接,因为数据线是双向的,源端端接更灵活。
4.6 端接电阻计算实战
咱们来一个实际例子。假设你有一个FPGA驱动一个DDR3芯片,时钟频率800MHz,传输线特性阻抗50Ω。
情况一:点对点时钟信号
用源端端接。FPGA的IO输出阻抗约12Ω,串一个39Ω电阻(50-12=38,取标称值39Ω)。
情况二:地址总线(多负载)
用戴维南端接。每个接收端放两个电阻,R1=R2=100Ω,并联后50Ω。注意电阻要靠近接收端放。
情况三:数据总线(双向)
用源端端接。但因为是双向,需要在两端都放电阻。FPGA端串39Ω,DDR3端也串39Ω。这样无论哪边驱动,都能匹配。
避坑指南:我曾经在一个项目里,把端接电阻放得太远了。信号从FPGA出来,走了2英寸才到电阻,这段没匹配的走线就成了天线,辐射超标。记住,端接电阻要尽量靠近源端或接收端,越近越好。
4.7 端接方式对比总结
| 端接方式 | 功耗 | 适用场景 | 元件数量 |
|---|---|---|---|
| 源端端接 | 低 | 点对点、单向 | 1个电阻 |
| 并联端接 | 高 | 接收端匹配 | 1个电阻 |
| AC端接 | 极低 | 高频、低功耗 | 1个电阻+1个电容 |
| 戴维南端接 | 高 | 双向总线、多负载 | 2个电阻 |
最后说一句,端接不是万能的。如果PCB走线本身就有问题,比如阻抗控制不好、过孔太多、走线太长,光靠端接也救不回来。我见过有人端接做得很好,但信号还是差,最后发现是走线绕了三个弯,每个弯都是阻抗不连续点。
所以,端接要和良好的PCB设计配合。走线尽量短、尽量直、阻抗控制好,再加上合适的端接,信号质量才能有保障。
嗯,今天就聊到这儿。下一节咱们讲串扰,那又是一个让人头疼的话题。