对于我正在设计的项目,我使用的是带有LPC1788 (QFP) 微控制器的IS42s32800 (TSOP) SDRAM 。在 PCB 上,我有 4 层,在顶部信号层正下方有一个接地层,在底部信号层正上方有一个 VDD 层。CPU 和 RAM 之间的平均走线长度为 60 毫米,最长的走线为 97 毫米,时钟线长 53 毫米,并且没有安装终端电阻的线路。我很好奇的是是否绝对有必要在 DRAM 线上安装终端电阻。如果没有它们,这个设计是否可以工作,或者我什至不应该在没有电阻的情况下尝试它?
SDRAM 终端电阻器:需要它们吗?
如果频率/上升时间和距离高到足以引起问题,那么是的,您需要终止。
传输线模型
在最长 97mm 的走线处,我认为您可能会在没有它们的情况下侥幸逃脱(给出下面的计算结果)如果您有一个处理 IBIS 模型和板级仿真的 PCB 封装(例如 Altium 和其他昂贵的封装),然后模拟您的设置并判断你需要他们从结果中。
如果您没有此功能,则可以使用 SPICE 进行一些粗略的计算。我对LTSpice
有点乱,这是结果(如果有人看到错误,请随时纠正)
如果我们假设:
- 您的 RAM 输入信号上升时间约为 2ns
- PCB 为 FR4,带有 Er 或 ~4.1
- PCB铜厚度为1oz = 0.035mm
- 地平面以上的走线高度 = 0.8mm
- 走线宽度 = 0.2mm
- 走线长度 = 97mm
- RAM 数据输入为 10kΩ 与 5pF 并联(来自数据表的电容,为典型 LVTTL 输入选择的电阻,因为没有给出任何内容 - 数据表非常糟糕,例如 p.21 上的泄漏电流为 10A!?)
- 驱动器阻抗为 100Ω(取自数据表输出高/低值和电流 -> Vh = Vdd - 0.4 @ 4mA,因此 0.4V / 4mA = 100Ω)
使用设置为微带模式的wCalc(传输线计算器工具)并输入数字,我们得到:
- Zo = 177.6Ω
- L = 642.9 pH/mm
- C = 0.0465 pF/mm
- R = 34.46 毫欧/毫米
- 延迟 = 530.4 ps
现在,如果我们使用有损传输线元素将这些值输入 LTSpice 并进行模拟,我们将得到:
下面是上述电路的仿真:
从这个结果中,我们可以看到,对于 100 Ω 的输出阻抗,我们不应该期待任何问题。
只是出于兴趣,假设我们有一个输出阻抗为 20 Ω 的驱动器,结果会完全不同(即使在 50 Ω 下也会有 0.7 V 的过冲/下冲。请注意,这部分是由于 5pF 输入电容导致振铃,在没有电容 [~3.7V] 的情况下,2ns 的过冲会更少,因此 Kortuk 指出,即使不将其视为 TLine,也要检查集总参数 - 见结尾):
一个经验法则是,如果延迟时间(信号从驱动器传输到输入的时间)超过上升时间的 1/6,那么我们必须将走线视为传输线(注意有些人说是 1/8,有些人说比如说 1/10,这是更保守的)0.525 ns 延迟和 2ns 上升时间给出 2 / 0.525 = 3.8 (<6) 我们必须将其视为 TLine。如果我们将上升时间增加到 4ns -> 4 / 0.525 = 7.61 并再次进行相同的 20 Ω 仿真,我们得到:
我们可以看到振铃要少得多,因此可能不需要采取任何措施。
因此,要回答这个问题,假设我与参数很接近,那么将它们排除在外不太可能会给您带来问题 - 特别是因为我选择了 2ns 的上升/下降时间,这比 LPC1788 数据表更快(第 88 页) Tr min = 3 ns, Tfall min = 2.5 ns)
可以肯定的是,在每条线上放置一个 50 Ω 的串联电阻可能不会造成伤害。
集总组件模型
如上所述,即使线路不是传输线,我们仍然会出现由集总参数引起的振铃。如果Q足够高,迹线 L 和接收器 C 会引起大量振铃。
经验法则是,响应完美的阶跃输入,0.5 或更小的 Q 将不会响铃,1 的 Q 将有 16% 的过冲和 2 的 Q 44% 的过冲。
实际上,没有一个阶跃输入是完美的,但如果信号阶跃具有高于 LC 谐振频率的显着能量,那么就会出现振铃。
因此,对于我们的 20 Ω 驱动器阻抗示例,如果我们仅将线路视为集总电路,Q 将为:
\$ Q = \dfrac{\sqrt{\dfrac{L}{C}}}{Rs} = \dfrac{\sqrt{\dfrac{62.36 nH}{9.511 pF}}}{20 \Omega} = 4.05 \ $
(电容为 5pF 输入电容 + 线路电容 - 线路电阻忽略)
对完美步进输入的响应将是:
\$ V_{过冲} = 3.3 V \cdot e^{-\dfrac{\pi}{\sqrt{ (4 \cdot Q^2) - 1}} } = 2.23 V \$
所以最坏情况下的过冲峰值将是 3.3V + 2.23V = ~5.5V
对于 2 ns 的上升时间,由于上升时间,我们需要计算 LC 谐振频率和高于此的频谱能量:
振铃频率 = 1 / (2PI * sqrt(LC)) = 1 / (2PI * sqrt(62.36nH * 9.511pF)) = 206MHz
振铃频率 = \$ \dfrac{1}{2 \pi \cdot \sqrt{LC}} = \dfrac{1}{2 \pi \cdot \sqrt{62.36nH \cdot 9.511pF}} \$ = 206MHz
2 ns 的上升时间具有显着低于(经验法则)“拐点”频率的能量,即:
0.5 / Tr = 0.5 / 2 ns = 250 MHz,高于上面计算的振铃频率。
如果拐点频率恰好是振铃频率,则过冲将是完美步进输入的一半左右,因此在拐点频率的 1.2 倍左右,我们可能会看到完美步进响应的 0.7 左右:
所以 0.7 * 2.23 V = ~1.6 V
上升时间为 2 ns 的估计过冲峰值 = 3.3 V + 1.6 V = 4.9 V
解决方案是将 Q 降低到 0.5,这对应于 \$\dfrac{\sqrt{\dfrac{L}{C}}}{0.5} \$ = 162 Ω 电阻(160 Ω 即可)。
使用上面的 100 Ω 驱动器电阻,这意味着 60 Ω 串联电阻(因此上面的“添加 50 Ω 串联电阻不会造成伤害”)
模拟:
完美的步进模拟:
2 ns 上升时间仿真:
解决方案(100 Ω Rdrv + 60 Ω 串联电阻 = 160 Ω 总 R1 添加):
我们可以看到添加 160 Ω 电阻会产生预期的 0 V 过冲临界阻尼响应。
上述计算基于经验法则,并不完全准确,但在大多数情况下应该足够接近。Jonhson 和 Graham 的优秀著作“高速数字设计”是此类计算以及更多内容的极好参考(阅读 NEWCO 示例章节以了解与上述类似的内容,但更好 - 以上大部分内容都是基于此知识书)
Altera 在本文档中建议将它们与某些类型的 SDRAM 一起使用,但表示可以通过为 FPGA 和 SDRAM 使用内部匹配来避免它们(如果提供的话)。我拥有的带有 SDRAM 的 FPGA 板在连接上都没有任何外部端接,并且设备没有内部端接。理想情况下,看起来应该使用它们,但实际上它们经常被忽略。你应该摆脱它。