一、DDR的使用
在之前的文章中我们介绍了DDR的基本概念,但是DDR内存的操作不仅仅是简单的数据读取和写入,它包括许多时序要求和信号调度。为了让DDR内存有效运作,系统需要在逻辑层和物理层之间进行大量的协作。我们拿出一张DDR的操作简化状态图来看:
显然对于一个DDR的使用者来说,我们不想应付这么复杂的初始化过程,这会大大增加我们的开发周期和难度,因此,最好有人可以给我们提供一个封装好的DDR操作接口,让我们只需要处理一些读写相关信号即可,芯片制造商也是这么想的,因此不同的厂商也会提供自己的解决方案,总体上,大家把DDR的操作最终设计了下图的样子:
- MASTER(主机):其实就是我们这样的DDR使用者,我们在整个过程中扮演了对DDR内存进行操作的主设备。
- DDRC(DDR控制器):负责处理内存访问的逻辑,管理数据的流入和流出,处理数据缓存、行开/关(Row Open/Close)、命令调度等高层逻辑操作。
- DDRPHY(DDR物理层):则处理低层次的电信号转换和传输,确保信号在内存控制器和DDR芯片之间以高速度和稳定性传输。它还负责处理时钟、信号完整性和电源管理等。
- DRAM:被操作的DDR内存
其中DDRC(Dynamic Data Rate Controller)和 DDRPYH(DDR Physical Layer)通常作为一个整体的设计方案出现,它并不是由 DDR内存厂商(如三星、海力士、美光等)提供的,而是由 芯片制造商(如高通、联发科、英特尔、AMD等)在设计 SoC(片上系统) 时集成的。DDR厂商负责制造和提供DDR内存芯片本身,而 DDRC 是集成在主控芯片或处理器中的,用来管理和调节DDR内存的工作频率和带宽,DDRPHY通常由处理器或SoC制造商提供,和DDR控制器(DDRC)一起工作。DDRC负责逻辑控制和协议处理,而DDRPHY则负责底层的电信号传输。
- DDR厂商:提供物理内存芯片,负责存储数据。
- SoC或处理器厂商:提供DDRC,负责根据系统需求动态调整DDR内存的运行频率和性能。
之所以要把DDRC和DDRPYH分开,主要是为了实现功能分离,提高性能和灵活性。将内存操作分为控制器和物理层有助于提高系统的整体效率和灵活性:DDRC和DDRPHY各自专注于不同层面的优化。控制器可以进行复杂的调度和内存管理策略,而物理层则可以专注于处理信号传输的速度和稳定性。这种分工让每个模块可以独立优化,从而提升整个系统的性能。另一方面,将逻辑控制和物理传输分开,允许不同厂商设计出不同的物理层和控制器,以适应不同类型的DDR内存(如DDR3、DDR4、DDR5)。通过这种模块化设计,系统设计者可以更容易地更换内存类型,保持兼容性和扩展性。
二、DDRC
DDRC(Dynamic Data Rate Controller),主要就是起到一个对于DDR的控制的作用,负责把MASTER发送过来的命令,转换成DDR认识的命令。通俗点说,就是起到了一个翻译的作用。
我们找两个DDRC的设计方案:
上面的一张图中,只包含DDRC,下面的图中,左侧是DDRC,右侧是DDRPHY。我们暂时只关注DDRC的部分,可以看到,对于DDRC与MASTER之间的接口支持的是AXI接口,这对于开发者来说就非常友好了。对于DDRC与后级(也就是DDRPYH)的接口,这里用到的是DFI。其实对于使用者来说,我们也不关心这个DFI了,我们在文章的最后简单介绍一下它,这里就暂时跳过了。
回到我们的DDRC上,这么看DDRC的功能就很清楚了,就是实现了DDR的访问通路,把用户的AXI总线信息转换成DFI给到DDRPHY,DDRPHY在给到DDR就行了。这是从宏观的角度对于DDRC功能的认知,这一个看似简单的事情又可以细分成很多的部分:
2.1 内存读写管理
DDRC 的核心任务是管理和调度处理器对 DDR 内存的读写请求。它确保处理器发送的内存访问请求能够按照 DDR 内存的协议正确执行。
- 读操作:DDRC 接收处理器的读取请求,调度 DDR 内存的相关行和列地址,读取数据并返回给处理器。
- 写操作:处理器通过 DDRC 发出写入请求,DDRC 将数据写入指定的内存地址。
2.2 内存时序管理
DDR 内存具有复杂的时序要求,例如激活(ACT)、读取(READ)、写入(WRITE)等操作都有严格的时序限制。DDRC 负责控制内存操作的时序,确保不同命令的发出、执行以及数据传输之间的延时符合内存的时序要求。
2.3 地址和数据调度
DDR 内存控制器需要处理大量来自处理器的读写请求,并将这些逻辑地址映射到物理内存的行、列和银行地址。为了最大化内存的利用率,DDRC 会对这些请求进行调度和优化,以减少行开关和bank冲突,提高内存的访问速度。
2.4 刷新管理
DDR 内存是基于电容存储数据的,电容会随时间流失电荷,导致数据丢失。因此,DDRC 必须定期刷新内存中的数据,以确保数据的正确性。刷新操作需要遵循一定的时序要求,同时要尽量避免影响正常的读写操作。
2.5 低功耗管理
为了应对现代设备的功耗要求,DDRC 支持多种低功耗模式,通过动态调整内存的工作状态来降低功耗。这对于移动设备和嵌入式系统尤为重要。
2.6 错误检测与纠正(ECC)
在一些高可靠性应用(如服务器、数据中心)中,DDRC 通常会支持 ECC(Error-Correcting Code)。这种机制能够检测和纠正内存中的单比特错误,从而提高系统的可靠性。
2.7 多通道和多端口支持
现代系统中,内存控制器通常支持 多通道 和 多端口,以提高内存带宽并支持多任务操作。DDRC 通过分配多个内存通道并行处理数据读写请求,提升系统的整体性能。
- 多通道:多个内存通道可以同时处理多个数据流,从而大幅提高内存带宽。
- 多端口:多个外设或处理器核可以同时通过 DDRC 访问内存,提升并行处理能力。
2.8 仲裁机制
在多核处理器或多任务系统中,多个处理器核或外设会同时发出内存访问请求。DDRC 具有仲裁机制,用于合理分配资源,确保每个请求能够在公平的条件下得到处理,同时最大化带宽利用。
2.9 扩展性
随着 DDR 技术的进步,DDRC 需要支持不同代的 DDR 标准(如 DDR3、DDR4、DDR5)以及 LPDDR(低功耗 DDR)。每代 DDR 内存的时序、命令集和数据传输速率有所不同,DDRC 通过适应这些标准,确保系统可以使用最新的内存技术。
三、DDRPHY
我们已经知道了DDRC会把主机的AXI协议的DDR操作指令转换成DFI给到DDRPYH,那接下来就是DDRPYH的舞台了。
DDRPHY(DDR物理层)是内存系统中的关键模块,负责在 DDR内存控制器(DDRC)与 DDR内存芯片 之间进行物理信号传输。它的主要功能包括将控制器发出的读写命令和数据转换为内存芯片能够理解的电信号,同时接收并恢复内存芯片返回的数据。此外,DDRPHY 通过 时钟同步 确保数据传输的时序准确,管理信号的完整性以减少干扰和噪声,提供 校准和训练机制 以优化数据传输延迟,确保在高频条件下系统的稳定运行。它还支持多种 低功耗模式,如自刷新和深度休眠,适用于移动设备和嵌入式系统,提升系统的功耗效率。同时,DDRPHY 能够兼容不同代的 DDR 标准,如 DDR3、DDR4、DDR5,实现对高速、高带宽内存系统的支持。
DDRPHY 一般由多个子模块组成,它们共同完成数据的传输和校准工作。其结构通常包括:
- 发射器(Transmitter):将来自 DDRC 的信号转化为内存芯片可识别的物理电信号,负责将命令、地址和数据发送到内存芯片。
- 接收器(Receiver):从内存芯片中接收数据,恢复信号并传输回内存控制器。
- 数据选通单元(Data Strobe Unit):用于生成和校准 DQS 信号,以保证数据传输的时钟同步。
- 校准单元(Calibration Unit):负责在系统启动时对信号的时序进行校准,确保信号传输的可靠性和时序正确性。
- 功耗管理单元(Power Management Unit):负责处理内存的低功耗模式,管理自刷新、深度睡眠等操作。
四、DFI
DFI(DDR PHY Interface)是一个标准化的接口,用于连接 DDR 内存控制器(DDRC) 和 DDR PHY(物理层)。该接口由 DFI 协会制定,目的是为了简化和标准化内存控制器和物理层之间的通信,确保不同厂商设计的控制器和物理层可以无缝协同工作。通过 DFI,DDR 控制器和 PHY 层可以高效、灵活地协同操作,从而实现高性能的内存访问。
4.1 DFI 的主要目的和优势
标准化接口:DFI 作为控制器和物理层之间的通信桥梁,确保了不同厂商设计的控制器和 PHY 模块可以互操作。这种标准化有助于减少设计复杂性,并提高不同内存解决方案的兼容性。
高效数据传输:DFI 确保控制器和 PHY 层能够高效地交换数据和命令,同时处理高速时钟信号的同步。它支持 DDR2、DDR3、DDR4 和 LPDDR 等多种内存类型。
低功耗设计支持:DFI 支持低功耗模式,通过该接口,控制器可以命令 PHY 进入低功耗状态,如自刷新模式或深度休眠模式。
可扩展性:DFI 是可扩展的,支持最新的 DDR 内存标准(如 DDR4 和 DDR5),并为未来的内存技术提供扩展能力。
4.2 DFI 的关键模块和信号
DFI 接口由多个模块和信号组成,涵盖了控制器与 PHY 之间的主要交互。以下是一些 DFI 的关键模块和信号:
-
DFI 命令通道(Command Channel):
- 控制器通过命令通道向 PHY 发送内存操作命令,如读取、写入、刷新等。
- 命令信号包括 RAS(行选通信号)、CAS(列选通信号)、WE(写使能信号)等。
-
DFI 地址通道(Address Channel):
- 控制器通过地址通道向 PHY 发送内存地址信息,用于确定内存操作的目标地址。
- 地址信号包括行地址、列地址和银行地址。
-
DFI 数据通道(Data Channel):
- 数据通道用于传输数据,支持读写数据操作。
- PHY 会根据控制器的指令,从 DDR 内存中读取数据或向 DDR 内存写入数据。
-
DFI 时钟和控制信号(Clock and Control Signals):
- DFI 提供时钟信号和控制信号,用于控制时钟的相位对齐和命令的同步,确保控制器和 PHY 之间的操作在高频率下同步进行。
- 包括时钟、复位等信号。
-
低功耗控制信号(Low Power Control Signals):
- 该信号通道允许控制器通过 DFI 命令 PHY 进入低功耗状态,如自刷新模式或暂停模式,帮助系统降低功耗。
4.3 DFI 的工作原理
DFI 通过定义控制器与物理层之间的标准化信号和接口规范,使 DDR 控制器与 PHY 层能够无缝协同工作。其基本工作原理如下:
-
控制器发送命令和地址:DDR 控制器通过 DFI 接口将内存操作命令(如读取、写入、刷新)以及相应的地址信息发送给 PHY 层。
-
PHY 处理命令:PHY 层接收到命令后,执行相应的电信号操作,将命令转换为物理信号,完成对 DDR 内存芯片的实际读写操作。
-
数据传输:在读写操作中,数据通过 DFI 接口从 DDR 内存传回控制器或从控制器写入到内存。DFI 确保了数据通道的高速传输和同步。
-
时钟同步:DFI 还提供了时钟同步功能,确保控制器和 PHY 之间的时钟信号相位对齐,从而在高频率下维持高性能。
-
低功耗操作:通过 DFI 的低功耗通道,控制器可以命令 PHY 进入低功耗模式,当系统空闲时降低功耗。PHY 则根据控制器的命令进入或退出低功耗模式。