开发者生态
morning
DRAM 接口和 PHY(为什么必须在启动时调整 DDR3+ 接口)
摘要
The DRAM interface and the PHY {#dram-interface} This chapter explains what happens on the wires between the FPGA and the DRAM, and why a DRAM interface must be tuned at boot. It covers the signals, t...
the
and
DRAM
The
interface
signals
one
with
byte
its
2026-11-11
1 阅读
约7分钟阅读
peter_d_sherman
字号:
DRAM 接口和 PHY {#dram-interface} 本章解释了 FPGA 和 DRAM 之间的线路上发生的情况,以及为什么必须在启动时调整 DRAM 接口。它涵盖信号、选通、电路板拓扑、调平程序、终端和参考电压,然后是 FPGA 的时钟以及控制器和 PHY 之间的 DFI 接口。每个部分都以实现该机制的 LiteDRAM 部分结束。上一章“DRAM 概述”解释了命令和时序;初始化和校准给出了 BIOS 运行的确切步骤。信号 {#iface-signals} DRAM 接口有两半。命令和地址的一半是单向的,从控制器到 DRAM,并且由同一列中的每个芯片共享。数据一半是双向的,并分为字节通道,每个通道都有自己的选通脉冲。下图显示了信号。信号方向 作用 CK、CK# 至 DRAM 差分时钟;命令在其上升沿进行采样 CS#、RAS#、CAS#、WE# 到 DRAM 命令编码; DDR4 A、BA、BG 上添加的 ACT_n 至 DRAM 行或列地址、bank、bank 组 (DDR4) CKE 至 DRAM 时钟使能;低电平用于断电和自刷新 ODT 至 DRAM 打开 DRAM 数据引脚的终止 RESET# 至 DRAM 复位(DDR3 及更高版本) DQ 两者数据,每个芯片 4、8 或 16 个 DQS、DQS# 两者 数据选通,每字节通道一对差分对(x4 芯片上的每个半字节) DM 至 DRAM 数据屏蔽,每字节通道一个:在写入期间屏蔽字节 字节通道为 8 个 DQ,它们的 DQS对和他们的DM。每条车道都有自己的路线,因此每条车道的到达时间都略有不同,并且每条车道都有自己的调整。在 LiteDRAM 中,DRAM 的焊盘是来自平台文件的记录,其字段以这些信号命名( dq 、 dqs_p 、 a 、 ba 、 cs_n )。 PHY 从中计算通道数。 litedram/common.py 的两个助手重塑了 pad:PHYPadsReducer 仅保留一些通道,而 PHYPadsCombiner 将具有单独命令总线的芯片合并到一个控制器中。双倍数据速率和选通{#iface-dqs} SDR 存储器每个时钟传输一个字,在控制器发送的时钟的上升沿进行采样。 DDR 存储器每个时钟传输两个字,每个边沿一个字,在这些速率下,不能信任来自控制器的时钟来采样数据:电路板和芯片的延迟太大。因此,数据以自己的时钟(选通 DQS)传输:发送数据的一侧也发送 DQS,接收器用它对 DQ 进行采样。这是一个源同步接口。两者都走相同的路径,因此它们的延误被抵消。下图显示了 DQS 如何与 DQ 对齐。写入时,控制器发送 DQS 中心对齐,其边缘位于每个位的中间。读取时,DRAM 在位转换时发送边沿对齐的 DQS,并且接收器将其延迟四分之一个时钟。在突发之前,DQS 被驱动用于前同步码,在突发之后驱动 DQS 用于后同步码,但不携带数据。在 LiteDRAM 中,DDR PHY 通过其 FPGA 的方式将写入 DQS 从 DQ 偏移四分之一时钟:Artix-7 PHY 从偏移 90 度的时钟 sys4x_dqs 为其 DQS 串行器提供时钟,sys4x_dqs 是目标构建的 ( bench/arty.py )。具有输出延迟的 PHY(Kintex-7 和 Virtex-7 HP 组、UltraScale)将 DQS 延迟四分之一个时钟。 Lattice 和 Gowin PHY 采用其 FPGA 的 DQS 模块的移位写入时钟。在读取方面,PHY 有所不同:Xilinx PHY 不使用 DQS。他们使用自己的快速时钟对 DQ 进行采样,通过输入延迟读取每个通道的调平调谐。 Lattice 和 Gowin PHY 使用其 FPGA 的 DQS 模块,将 DQS 延迟 90 度,用它捕获 DQ 并在看到突发时报告(突发检测)。 Fly-by 拓扑和写入均衡 {#iface-flyby} DDR3 和 DDR4 将时钟、命令和地址引脚作为一条总线路由,依次经过每个芯片并在终端上结束:fly-by 拓扑。它以高速率保持这些重负载信号的清洁,但每个芯片接收时钟的时间都比前一个芯片晚一点。下图展示了这一点。数据通道是点对点的,因此它们的延迟不遵循时钟。芯片需要 DQS 才能接近其自身的 CK 边缘 (tDQSS)。通过 Fly-by 布线,第一个芯片和最后一个芯片之间的偏差可能会超过一个时钟周期,因此每个通道都需要自己的 DQS 延迟。写出延迟的调平措施。控制器通过模式寄存器位(DDR3 和 DDR4 上的 MR1 位 A7)将 DRAM 设置为写入均衡模式,然后发送 DQS 脉冲。 DRAM 在每个 DQS 上升沿对其 CK 进行采样,并在 DQ 上返回采样值。控制器逐步延迟 DQS,直到 DQ 从 0 变为 1:然后 DQS 与该芯片上的 CK 对齐。在 LiteDRAM 中,PHY 通过寄存器公开写入均衡:wlevel_en 启用该模式,wlevel_strobe 发送一个 DQS 脉冲,每通道输出延迟移动 DQS 和 DQ。 BIOS 运行扫描( liblitedram 中的 sdram_write_leveling )。写整平需要输出
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱