将DDR内存与AMD/Xilinx FPGA接口连接

Phil Salmony
|  已创建:July 18, 2023  |  已更新:五月 14, 2024
连接 DDR 内存与 AMD/Xilinx FPGA

简介

初次尝试将DDR易失性内存与FPGA接口,可能会让人感到相当棘手。尽管FPGA具有固有的灵活性,我们可能会认为可以将外部DDR内存的I/O连接到任何空闲引脚,但我们仍然需要考虑许多约束。

例如,将某些DDR内存引脚组放在哪里,运行银行的电压是多少,我们需要什么时钟以及在哪里连接它们,如何避免时序违规等等。

除了“原理图级别”的接口外,我们还需要关注印刷电路板上的“现实世界”接口,例如电源和供电、去耦、终止、迹线阻抗和长度、延迟匹配等等。

本文将从系统级和原理图视角探讨与FPGA接口的DDR内存。作为一个实际例子,我们将研究一个基于AMD/Xilinx Spartan-7的音频DSP设计(名为‘Xerxes’),它与一些DDR2内存接口。

与AMD/Xilinx FPGA接口的DDR内存_Xerxes

Xerxes音频DSP硬件(AMD/Xilinx Spartan-7 FPGA与DDR2内存)

内存类型

我们使用的内存类型取决于设计。它取决于我们的内存容量和内存带宽需求,以及我们选择的FPGA能够做什么。

一般来说,大多数现代FPGA可以与DDR2和DDR3内存(及其低功耗、低电压变体)接口。当然,更快的DDR4内存及以上也是可能的,但通常只适用于更高级的FPGA。

不仅最大可能的数据速率很重要,电压和功率要求、封装类型、成本和可用性也很重要。这些都需要在设计阶段早期考虑。

DDR内存比较(来源:synopsys.com)

DDR内存比较(来源:synopsys.com)

在选择我们的内存类型时,我们还需要注意内存设备的速度等级和FPGA内存控制器的速度评级。我们可以选择对我们的内存或控制器进行“降级”,从而不以全带宽运行,这反过来给我们更多的时序余地。

典型的内存降级表(来源:AMD/Xilinx UG933)

典型的内存降级表(来源:AMD/Xilinx UG933)

特别是对于AMD/Xilinx FPGA,我建议下载他们的Vivado IDE并尝试使用免费的Memory Interface Generator (MIG) IP。

这将迅速向您展示可以使用哪些内存类型、速度等级和兼容部件。

Vivado MIG兼容内存部件示例

Vivado MIG兼容内存部件示例

您可能会问,为什么我会为Xerxes板选择DDR2内存?

尽管它是一个相当老的标准,使用DDR2内存意味着我可以使用板上已有的1.8V调节器(这为FPGA的其他部分供电),而不必再添加另一个单独的调节器。

此外,Xerxes设计的内存带宽需求并不特别高,因此DDR2接口就足够了。

而且,拥有一个低带宽接口可以简化PCB、终端和时序约束。

 

DDR内存与FPGA接口

在选择了合适的内存设备后,是时候将其连接到您的原理图中的FPGA了。

首先,我们需要选择一个合适的银行。如果您使用的是16位宽(或更低)的数据接口,对于大多数FPGA来说,这通常可以适配在一个银行内。如果不行,我们需要将内存接口分布在多个银行中。

为了简单起见,我们将选择一个16位宽的内存接口,就像Xerxes板一样。选择一个空闲的银行,它能够使用与DDR内存本身相同的电压运行(在Xerxes的情况下,这是使用DDR2内存的1.8V的银行34)。

FPGA银行34带有适当的去耦,从1.8V供电

FPGA银行34带有适当的去耦,从1.8V供电

对于AMD/Xilinx FPGA,使用Vivado和MIG工具,获取我们DDR内存的引脚图非常直接。该工具要么为该银行建议一个合适的引脚图,要么我们可以手动分配引脚并验证引脚图。

Vivado MIG引脚图工具

Vivado MIG引脚图工具

如果您手动配置引脚图,请确保各个DDR字节通道具有相同的银行字节编号,且差分选通在差分FPGA DQS能力引脚上。

请记住,在PCB布局和布线阶段,引脚图可能会进行调整。得益于FPGA的灵活性,在PCB设计过程中交换引脚可以简化布线并最小化层次转换。

在这个例子中,由于我们是从单一银行运行,我们必须使用内部VREF,这限制了最大内存带宽。

此外,我们还需要注意时钟。理想情况下,时钟源应该位于同一银行,并连接到具有时钟能力的引脚(如果使用差分时钟源,则为引脚)。

最后,确保使用供应商工具来验证设计和时序。然后,将初始引脚布局放置到您的原理图中,定义网络类别、差分对和规则,并使用颜色编码来简化您的PCB设计生活。

FPGA Bank 34 DDR2连接和时钟源

FPGA Bank 34 DDR2连接和时钟源

对于单个设备,我们只需在DDR内存组件上进行点对点连接。

地址/命令/控制信号(ACC)上应该有终止,但是对于较低的数据速率,我们很多时候可以不需要这样做。我总是在差分时钟对上添加终止。数据字节通道在两端内部终止。

推荐在CKE、ODT以及可选的CS#线上放置4.7k下拉电阻。

DDR2内存模块信号和电源连接

DDR2内存模块信号和电源连接

最后,当然需要为内存模块供电。在Xerxes板的情况下,DDR2模块连接到与我们的FPGA bank 34相同的1.8V调节器。需要适当的去耦 - 作为经验法则,如果数据手册或应用说明中没有另外指定,目标是每两个VDD引脚使用一个小的(~100nF)电容器,每十个VDD引脚使用一个较大的体积电容器。

VREF引脚电压可以通过带有滤波电容器的简单电位分压器产生,如上图所示。

结束语

在本文中,我们概述了从系统级和原理图级别的角度,将外部非易失性DDR内存纳入我们基于FPGA的设计中的基本策略。

记住,这些只是最基本的知识,根据您的系统要求,设计将会更加复杂。特别是,如果您计划使用更快的内存部件和接口,以及多个模块。

在设计高级FPGA和DDR基础系统时,确保您正在使用世界级ECAD工具如Altium Designer中包含的工具和功能。在这里确保获取Altium Designer和Altium 365的免费试用版。

关于作者

关于作者

Phil Salmony 是一位专业的硬件设计工程师和教育工程内容创建者。从剑桥大学顺利拿到电气与控制系统工程硕士学位后,他在一家大型德国航空航天公司开启了工程职业生涯。后来,他在丹麦联合创办了一家无人机初创公司,担任首席电子和 PCB 设计工程师,专注于嵌入式混合信号系统。他目前在德国经营他的工程咨询公司,主要专注于数字电子和 PCB 设计。

除了咨询工作之外,他还经营着自己的 YouTube 频道 (Phil's Lab),上传制作有关 PCB 设计、数字信号处理和混合信号电子学等主题的教育工程视频。

相关资源

相关的技术文档

返回主页
Thank you, you are now subscribed to updates.