SDRAM 原型与生产困境

电器工程 记忆 信号 信号完整性 内存
2022-02-01 05:55:54

我有一个使用LPC1788和 ISSI ( IS42S32800D ) 的 SDRAM 模块的设计。这是一个 32 位的接口。

我已经完成了这个设计,并与一家 PCB 制造商制作了一个原型,该制造商制作了 6 层原型。原型 PCB 工作正常。然后我想我会从我通常的 PCB 供应商那里获得小批量(100 个)制造的 PCB。我给了他们我的原型用来确保没有问题的堆叠信息。

然而!我的生产板有很多问题。起初,我无法使用我在原型板上使用的相同代码从 SDRAM 获得任何响应。以前的板在 120Mhz 下工作,所以我确信这个新板有问题。然后我发现一个帖子,人们建议在 SDRAM 数据线上使用中继器模式(我以前没有使用过),这引起了 SDRAM 的响应,但它并不稳定。我可以写入 16 个左右的地址,但随后读取返回的数据(在每个地址)是我最后写入的数据(可能是由于中继器模式)。当我禁用中继器模式时,返回的数据是 0xFFFFFFF。我现在正在尝试以 48Mhz 连接,这是我有计时的最低配置。

我在两块板上都使用相同的 22 欧姆终端电阻(在数据线上),数据线平均长 3 厘米。时钟线长2.4cm。地址线平均长度为 3.8 厘米。

这是否太不规范了,如果时钟大大缩短,我是否应该将时钟延迟更长的时间?我真的被困在这里,因为我没有改变我希望为这些电路板无缝制造运行的设计。

Maximum Data Line Length: 59mm (Although this includes the branch to the NAND Flash)
Minimum Data Line Length (Ctrl to Res): 18mm
Maximum Address Line Length: 44mm
Minimum Address Line Length: 24mm
CLK: 24.5mm
CKE: 25mm
CAS: 28mm
RAS: 28.7mm

这是原始(工作)原型的 PCB 堆栈配置: 在此处输入图像描述

这是生产(非工作)PCB的PCB堆栈配置 在此处输入图像描述

这是 SDRAM 的路由: SDRAM 路由

3个回答

这是一个糟糕的叠加。您的核心应为 0.2 毫米,厚度的平衡应在第 3 层和第 4 层(内层 1 和内层 2)之间的预浸料中。

这样做的原因是,对于走线上的任何信号,在其正下方的平面上都需要有一个返回电流路径。平面中的返回电流将尽量减少电感(即环路面积),这意味着它将尝试在信号迹线下方跟随。如果信号走线远离平面,它将寻找其他走线以找到返回路径。这是你正在对抗的电磁学。

此外,与外层距离相比,通过使内层与其参考平面的距离不同(请记住,所有电源轨看起来都像交流电的接地!),每次交换层时都会产生阻抗变化(尽管这可以通过以下方式抵消)走线宽度会发生变化,尽管我发现它只值得麻烦一次),并且您显着增加了串扰和其他干扰的可能性。

您需要检查的另一件事是使用的材料:例如,有 20 多种不同的材料自称为“FR-4”。我通常使用的东西叫做 370-HR。它对高速 100-500 MHz 信号表现得非常好。

关于时钟线,IIRC 在我的最后一个 SDRAM 设计中,我设置了时钟,因此它的边缘最后出现(它的迹线最长 1 厘米),在所有地址和数据线稳定之后。所以,是的,延迟时钟是值得尝试的。我不需要对 SDRAM 线路进行任何阻抗控制。

您的终端电阻器应尽可能靠近线路驱动器放置。如果它们不在大约 0.5 厘米范围内,它们本身就会引起反射,从而导致过冲和振铃。恕我直言,3 厘米的走线长度非常短,需要终端电阻(我从 6-10 厘米左右开始使用它们);你试过把它们拿出来吗?

要检查的另一件事是您的飞机:您是否有信号迹线穿过平面切口?这是一个巨大的禁忌,因为它迫使返回电流绕着切口走很长的路。

最后,边缘率是这些设计中的一个大问题。很多芯片的上升和下降时间都不必要地缩短了,降低时钟频率对此没有影响这些快速边缘非常适合创建反射。这就是您的 22 欧姆终端电阻器试图解决的问题:它们会减慢边缘。不过,如果您真的很努力,可以使用 Mentor Graphics 的 HyperLynx 之类的工具来找到最佳的端接设计。

我可以向您推荐一些涵盖所有这些以及更多内容的书籍,我们在工作中向他们发誓:

这些书籍涵盖了 EMI 降低、屏蔽设计、PCB 叠层、阻抗控制、电源去耦等等。此外,奥特先生还教授有关该主题的研讨会(随附他的书的免费副本)。

在这种频率下,我认为轨道长度类型问题不太可能成为主要问题,尤其是延迟问题。由于问题始于新 PCB,首先要做的是测试所有线路的连续性(针对数据表,而不是您的原理图,以防您的原理图有错误),并检查每个引脚以检查波形是否在最不可信 - 即使您的示波器无法检查时序细节,如果有任何开路或短路的引脚应该是相当明显的。

在没有足够范围的情况下做这种事情充满了潜在的危险——你怎么知道你有多少利润?即使它有效,你怎么知道你是否处于边缘,并且容易因公差、温度或月相而受到现场/生产故障的影响?

第二次添加我们假设您的设计已经过边距测试,并且代码在您的问题中是完美的。(不)我建议您验证以下内容;

  1. 将 IO 配置为具有快速转换并禁用输入过滤器
  2. 在时钟上启用输入模式
  3. 设置摆位 (9?) 以增加 SDRAM 接口引脚的摆率
  4. 启用中继器模式,因为它们是双向的,并且不能在 cmos 输入上悬空。
  5. 更改电源电压以确定对错误的敏感度。
  6. 数据总线引脚的默认复位模式为 FUNC=0X00、MODE=0X02、HYSTERESIS=ENABLED、INVERT=DISABLED 和 SLEW=STANDARD
  7. 您是否使用新函数值调用 PINSEL_ConfigPin(),将 MODE 重置为 INACTIVE(无下拉/上拉电阻)并关闭 HYSTERESIS?
  8. 您是否使用 for/next 循环或离散代码,例如;

    • LPC_IOCON->P3_0 |= 1; // D0@P3.0
    • LPC_IOCON->P3_1 |= 1; // D1@P3.1
    • LPC_IOCON->P3_2 |= 1; // D2 @ P3.2 等
  9. 您是否断言每次需要时都重新启用 WE 引脚?
  10. 你用吗?*pPIN &= ~(0x00000007);//清除功能位"

我记得我的第一个 CMOS 设计是从一名物理学研究生那里调试的,用于地震便携式记录、可切换定时器逻辑板。没有固件或 uC,但他从未做过最坏情况容差分析,而且当我自己构建和调试十几个板时,硬件到处都是竞争条件。地震学教授请物理系主任问我为什么不能调试电路板,然后我不得不告诉他,由于亚稳态条件和使用的时钟沿,组件变化暴露了许多称为时序竞争条件的设计缺陷。他还是不明白,然后我问他,当我抬手时,我展开了多少根手指,才从低到高到了我的腰际。然后他说,你不能这样做并期望得到正确的答案。我说,准确。那是一个原始的竞争条件。随着复杂程度的增加,它们变得不那么明显。曼尼托巴大学 1973 年。

第一个补充:您使用了哪种总线终端方案? 公共汽车 首选方法(1),1.25Vdc干净吗?


  1. 是否在这些板上支付了 ICT 费用? 裸板测试是必须的
  2. 您是否在格柏布局说明中指定了阻抗?
  3. 您是否在您的布局上运行了带有公差的模拟?
  4. 电路板上的介电常数和预浸料层数控制带状线和微带线的阻抗以及走线宽度和间隙。

    有许多免费的带状线在线 Z 计算器。

    您可以尝试测量大走线或接地平面上的电容并比较两个裸板。

    还要使用高速示波器查看信号并观察过冲和时钟<>数据眼图。

错误必须有一个简单的解释,但不容易找到。但是一旦你找到了根本原因……你就不会再犯这个错误了。

补充: 我发现的另一个错误是您的堆叠高度图没有指示铜层厚度,除非错误或铜厚度为 0.039 毫米(不是;),否则不足以放入 6 层