uMCTL2手册2.6,DFI Interface, DFI接口是内存控制器和物理层之间的标准通信协议,确保数据可靠传输和系统稳定性。
2.6 DFI(DDR PHY Interface)接口的概述
1. DFI接口简介
- DFI是内存控制器(MC)和物理层(PHY)之间的标准接口
- 用于传输地址、控制信号和数据
- 支持单数据率(SDR)和半数据率(HDR)时钟模式
2. DFI接口的主要子接口组
a) 控制接口(Control Interface)
- 包含SDRAM控制信号
- 如地址、Bank、片选、行列选通、写使能等
b) 写数据接口(Write Data Interface)
- 处理写数据传输
- 通过DFITMG0寄存器配置时序(dfi_tphy_wrlat, dfi_tphy_wrdata)
c) 读数据接口(Read Data Interface)
- 处理读数据返回
- 通过DFITMG0寄存器配置时序(t_rddata_en)
d) 更新接口(Update Interface)
- 用于在系统运行时更新内部设置
- 确保更新不会干扰SDRAM接口
e) 状态接口(Status Interface)
- 提供初始化和时钟控制相关的状态信息
f) 训练接口(Training Interface)
- 支持写和读电平校准
- PHY独立模式,无需控制器交互
g) 低功耗控制接口
- 通知PHY进入/退出低功耗模式
3. 关键特点
- 兼容不同的DDR PHY
- 可配置的接口时序
- 支持系统运行时的动态调整
2.6.1 1:1 Frequency Ratio Mode Considerations
1:1频率比模式也叫做单数据速率(SDR,Single Data Rate)模式。在这种模式下,uMCTL2控制器及其DFI接口与DDR SDRAM的工作频率是相同的。具体来说:
- DFI命令和地址信号宽度与DDR信号相同:在1:1模式下,DFI的命令和地址信号的宽度与DDR SDRAM的命令和地址信号宽度相同。例如,如果DDR的命令宽度是32位,那么DFI的命令宽度也是32位。
- DFI数据信号宽度是DDR信号的两倍:DFI的数据线是DDR数据线宽度的两倍,这意味着在DFI接口上有更多的信号来支持数据的传输。例如,如果DDR的一个数据总线宽度是16位,那么DFI的数据总线宽度是32位。
- 时钟频率:uMCTL2控制器使用SDR时钟运行,也就是说,uMCTL2控制器和PHY都以相同的频率运行,不需要进行速率转换。
core_ddrc_core_clk
和CK/CK#
(时钟信号)以相同的频率运行。 - PHY进行数据转换:虽然DFI控制器和SDR时钟频率相同,但数据传输是由PHY(物理层)来实现从SDR到DDR的速率转换,尤其是在数据总线中,PHY会根据时钟信号对数据进行转换。
2.6.2 1:2 Frequency Ratio Mode Considerations
1:2频率比模式也叫做半数据速率(HDR,Half Data Rate)模式。与1:1模式不同,在1:2模式下,控制器和物理层的时钟频率不同。
- DFI命令和地址信号宽度是DDR信号的两倍:在1:2模式下,DFI的命令和地址信号的宽度是DDR信号宽度的两倍。例如,如果DDR的命令是32位,那么DFI的命令是64位。
- DFI数据信号宽度是DDR信号的四倍:DFI的数据线是DDR数据线宽度的四倍。例如,如果DDR的数据总线宽度是16位,那么DFI的数据总线宽度是64位。
- 时钟频率:在1:2模式下,uMCTL2控制器运行在半速率时钟(HDR clock)下,这意味着
core_ddrc_core_clk
的频率是CK/CK#
频率的一半。 - PHY进行时钟转换:在这种模式下,PHY不仅需要处理数据总线的HDR到SDR的转换,还需要处理地址总线从HDR到SDR的转换,确保时钟和数据在物理层之间正确同步。
DFI协议中的_ p0 和 _p1 信号
在1:2频率比模式下,DFI协议引入了相位(Phase)的概念,分别是Phase 0(p0)和Phase 1(p1)。DFI协议要求将数据和信号分成两个相位(p0和p1)进行传输,但uMCTL2控制器并没有明确的p0和p1信号,而是通过信号的低半部分和高半部分来区分。
DFI命令信号
- 例如,在4rank系统中,
dfi_cs[7:0]
表示所有的命令信号。在uMCTL2中,低半部分dfi_cs[3:0]
对应于Phase 0,高半部分dfi_cs[7:4]
对应于Phase 1。
DFI写数据信号
- 在一个16位的系统中,
dfi_wrdata[63:0]
表示所有的写数据。低半部分dfi_wrdata[31:0]
对应于Phase 0,高半部分dfi_wrdata[63:32]
对应于Phase 1。 - 类似的,
dfi_wrdata_en[3:0]
表示写数据的使能信号,低半部分dfi_wrdata_en[1:0]
对应于Phase 0,高半部分dfi_wrdata_en[3:2]
对应于Phase 1。 - 数据掩码
dfi_wrdata_mask
也有类似的分配:例如,在一个16位的系统中,dfi_wrdata_mask[7:0]
的低半部分对应于Phase 0,高半部分对应于Phase 1。
DFI读数据信号
- 读数据信号
dfi_rddata_en
、dfi_rddata_valid
、dfi_rddata_dbi
也遵循类似的规则,在1:2模式下,低半部分对应于Phase 0,高半部分对应于Phase 1
2.6.3 DFI Write/Read Data to SDRAM Conversion
1. 数据转换的背景
DFI 数据信号包括读取数据(dfi_rddata
)和写入数据(dfi_wrdata
),这些信号从 DFI 传递到物理层 (PHY) 后,会根据 SDRAM 配置(比如 SDRAM 数据总线宽度、时钟模式等)进行转换。在 DFI 接口中,数据可能需要按不同的规则组织(如按数据节拍 beat
或字节 byte
来排列),而物理层(PHY)将根据这些规则将数据送入或读取出内存。
2. 1:1 和 1:2 时钟模式
- 1:1 模式:控制器和 PHY 使用相同的时钟频率。
- 1:2 模式:控制器使用比 PHY 更低的时钟频率。具体来说,控制器的时钟频率是 PHY 时钟的二分之一。
3. DFI 数据组织与物理层的数据传输
对于 1:1 和 1:2 时钟模式,DFI 数据信号的组织顺序有所不同。在这些模式下,数据通常是以“**节拍 (beat)**”为单位组织的,每个节拍包含一个字节或多个字节。
详细说明
1. 在 1:1 模式下的数据组织
对于 16 位(2 字节)SDRAM 配置的情况,在 1:1 模式下,DFI 数据顺序如下:
1 | [ ] |
- 这意味着第一个节拍
beat0
包含byte1
和byte0
的数据,然后依此类推。数据传输顺序是:首先传输dfi_wrdata[15:0]
到 DQ[15:0],接着是dfi_wrdata[31:16]
到 DQ[15:0]。
在这个模式下,数据是按照 节拍(beat) 和 字节(byte) 来组织的,并且 PHY 会把这些数据依次发送到内存。
2. 在 1:2 模式下的数据组织
对于 16 位 SDRAM 配置的 1:2 模式,数据的顺序如下:(MSB->LSB)
1 | [ ] |
这里可以看到,4 个节拍(beat)被定义为不同的数据片段。具体地,数据首先按节拍 0 到 3 进行传输。相同的数据结构适用于 32 位 SDRAM 配置(4 字节)和更多节拍数据。
3. 数据写入和读取示例
在 16 位 SDRAM 1:2 配置下:
写入数据(
dfi_wrdata
):dfi_wrdata[63:0] 代表 4 个节拍的写入数据。数据将依次传送到内存:- beat 0:
dfi_wrdata[15:0]
传送到 DQ[15:0] - beat 1:
dfi_wrdata[31:16]
传送到 DQ[15:0] - beat 2:
dfi_wrdata[47:32]
传送到 DQ[15:0] - beat 3:
dfi_wrdata[63:48]
传送到 DQ[15:0]
- beat 0:
读取数据(
dfi_rddata
):类似于写入数据,读取数据也是按节拍传送,顺序如下:
- beat 0:
dfi_rddata[15:0]
传送到 DQ[15:0] - beat 1:
dfi_rddata[31:16]
传送到 DQ[15:0] - 等等。
- beat 0:
4. dfi_wrdata_en
和 dfi_rddata_en
信号
dfi_wrdata_en
、dfi_rddata_en
、dfi_rddata_valid
等信号有一个位对应于 DQ 总线的每个字节,而不是对应于 DFI 数据信号。举个例子,在 32 位 SDRAM 1:2 配置中,
dfi_wrdata_en
的信号顺序如下:(MSB->LSB)1
[byte3-phase1, byte2-phase1, byte1-phase1, byte0-phase1, byte3-phase0, byte2-phase0, byte1-phase0, byte0-phase0]
这表示每个字节的使能信号在两个阶段(phase0 和 phase1)之间按字节顺序分配。
5. 例子
在一个 32 位的 SDRAM 配置下,
dfi_wrdata_en
与dfi_wrdata
的映射如下:1
2dfi_wrdata_en[0] -> {dfi_wrdata[39:32], dfi_wrdata[7:0]} (byte0-phase0)
dfi_wrdata_en[1] -> {dfi_wrdata[47:40], dfi_wrdata[15:8]} (byte1-phase0)这意味着
dfi_wrdata_en[0]
控制着dfi_wrdata[39:32]
和dfi_wrdata[7:0]
数据的使能信号,分别对应于 字节0 在 phase0 阶段的写入。
2.6.3 补充
在 DDR (Double Data Rate) 系统中,phase0 和 phase1 是指在数据传输过程中,时钟信号的 两个不同阶段。它们的存在主要是为了提高数据传输速率和利用率。
1. 背景:DDR 中的时钟
DDR 内存的主要特点是它能够在 时钟信号的上升沿和下降沿同时进行数据传输。换句话说,在每个时钟周期内,数据在时钟的 两个不同阶段 被传输,这就是所谓的 双倍数据速率(DDR)。
通常,DDR 内存使用一个 时钟信号来驱动数据的读写操作,而数据的传输则发生在这个时钟信号的 上升沿 和 下降沿,这两个沿分别代表两个阶段:
- phase0:对应 时钟的上升沿(在时钟信号由低变高的瞬间)。
- phase1:对应 时钟的下降沿(在时钟信号由高变低的瞬间)。
2. phase0 和 phase1 在 DFI 中的作用
在 DFI 接口中,phase0 和 phase1 指的是数据和控制信号在时钟的不同阶段上进行的活动。具体来说,phase0 和 phase1 是与 DFI 接口的 数据传输时序相关的。
为什么会有 phase0 和 phase1?
由于 DDR 内存的时钟信号具有 双倍速率,每个时钟周期内有 两个时钟边沿可以进行数据传输。为了区分在这两个时钟边沿上传输的数据,DFI 接口在设计时会将数据划分为 phase0 和 phase1。每个时钟周期内的 前半部分 和 后半部分(即上升沿和下降沿)都会承载不同的数据片段。
例如,在一个 4 字节的配置(32 位 SDRAM),在 DFI 信号中,写数据使能(dfi_wrdata_en
)会被分为两部分:phase0 和 phase1。这意味着数据会分布到两个时钟边沿,确保最大的数据传输速率。
3. 例子
假设你有一个 32 位的 SDRAM 配置,且工作在 1:2 模式下。数据写入的使能信号(dfi_wrdata_en
)和数据(dfi_wrdata
)的映射可能是这样的:
dfi_wrdata_en[0]
负责控制:
dfi_wrdata[39:32]
和dfi_wrdata[7:0]
,即 byte0-phase0
dfi_wrdata_en[1]
负责控制:
dfi_wrdata[47:40]
和dfi_wrdata[15:8]
,即 byte1-phase0
dfi_wrdata_en[4]
负责控制:
dfi_wrdata[103:96]
和dfi_wrdata[71:64]
,即 byte0-phase1
dfi_wrdata_en[5]
负责控制:
dfi_wrdata[111:104]
和dfi_wrdata[79:72]
,即 byte1-phase1
4. phase0 和 phase1 如何影响数据传输
- 阶段划分:每个时钟周期的 phase0 会在时钟的上升沿发生,phase1 会在时钟的下降沿发生,这样在同一个时钟周期内可以传输两倍的数据。
- 数据同步:在写操作时,数据和使能信号会按照这些阶段进行同步,以确保在正确的时钟沿上发送正确的数据。
- 性能提升:通过这种方式,DDR 内存可以在一个时钟周期内完成两次数据传输,提高了内存带宽和数据传输速率。
2.6.4 Control Interface(控制接口)
控制接口反映了 SDRAM 控制接口,它处理一些控制信号,比如地址、芯片选择、行选通信号、列选通信号、写使能、时钟使能和 ODT(On Die Termination,芯片内终端)控制等。具体的信号和控制取决于所使用的内存技术(如 DDR3、DDR4 等)。
- **地址 (Address)**:指示要读写的内存位置。
- **芯片选择 (Chip Select, CS)**:指示操作的是哪个内存芯片。
- **行选通信号 (Row Strobe, RAS)**:用来选择内存的特定行。
- **列选通信号 (Column Strobe, CAS)**:用来选择内存的特定列。
- **写使能 (Write Enable, WE)**:用来标记是否是写操作。
- **时钟使能 (Clock Enable, CKE)**:控制时钟是否启用。
- **ODT 控制 (ODT Control)**:控制内存的终端阻抗,用于高频信号的稳定性。
这些控制信号与 SDRAM 的工作方式密切相关。DFI 协议将这些控制信号映射到其接口上,以便正确地控制内存的读写操作。
2.6.5 Write Data Interface(写数据接口)
写数据接口负责通过 DFI 接口传输写数据。DFI 规范定义了写数据的信号和时序关系。
配置和时序
- 写数据的时序是可以配置的,通过 DFITMG0.dfi_tphy_wrlat 和 DFITMG0.dfi_tphy_wrdata 寄存器来调整。
- DFI 1:2模式下,
DFITMG0.dfi_wrdata_use_dfi_phy_clk
决定了时序是基于 SDR 时钟还是 HDR 时钟:- HDR 时钟:表示数据生成的时序在 phase0 和 phase1 是一样的,所有的 dfi_wrdata 信号都与 HDR 时钟对齐。
- SDR 时钟:表示 phase0 和 phase1 的时序分开处理,dfi_wrdata 信号在这两个阶段不一定对齐 HDR 时钟。
DFI Write Data Mask(dfi_wrdata_mask):用于控制写数据的字节反转(DBI),尤其是在 DDR4 或 LPDDR4 配置中。如果启用 DBI,dfi_wrdata_mask
信号的极性会在 DDR4 中反转。比如,如果 dfi_wrdata_mask
的某个位为 ‘0’,则对应的字节将会被屏蔽(不写)。
2.6.6.1 **Support for dfi_wrdata_cs/dfi_rddata_cs Signals (DFI 3.1)**(支持 dfi_wrdata_cs
和 dfi_rddata_cs
信号)
DFI 3.1 引入了对 dfi_wrdata_cs
和 dfi_rddata_cs
的支持。这些信号与 芯片选择 (CS) 信号相关,控制特定内存芯片的读写。
- dfi_wrdata_cs:在发生写操作时(如写命令或 DDR4 中的 PDA),根据相应的
tphy_wrcslat
时钟周期后驱动。它会在一定时间内保持不变,以保证写数据的传输完整性。 - dfi_rddata_cs:与读操作相关(如 DDR4 中的 MPR 或其他内存类型的读命令)。它会在相应的
tphy_rdcslat
时钟周期后驱动,并保持一定时间,直到读取操作完成。
这些信号的极性是可配置的,通过 DFIMISC.dfi_data_cs_polarity 设置。
2.6.6 Read Data Interface(读数据接口)
读数据接口负责通过 DFI 接口返回读取的数据。DFI 规范定义了该接口的信号和时序关系。
配置和时序
- 读数据的时序也是可以配置的,通过 DFITMG0.t_rddata_en 寄存器来调整。
- DFI 1:2 模式下,
DFITMG0.dfi_rddata_use_dfi_phy_clk
决定了读数据时序是否使用 SDR时钟或 HDR时钟:- HDR 时钟:表示 phase0 和 phase1 的时序相同,dfi_rddata 信号与 HDR 时钟对齐。
- SDR 时钟:表示 phase0 和 phase1 的时序分开处理,dfi_rddata 信号不一定对齐 HDR 时钟。
**DFI Read Data Inversion (dfi_rddata_dbi)**:类似于写数据接口中的 DBI,读数据接口也可能使用 DBI 信号。在 DDR4 配置下,dfi_rddata_dbi
用于反转读数据的字节。
2.6.6.1 Latency Considerations
- tphy_rdlat:这是一个寄存器参数,表示读取数据的延迟。DFI 控制器假设 tphy_rdlat 的最大值在 48 个时钟周期以内(对于 mDDR 使用 26 个时钟周期)。
- trddata_en:这个参数决定了读数据使能信号的延迟,不能超过 SDRAM 的读延迟(RL)。
本文链接: https://talent-tudou.github.io/2024/12/19/DDR/uMCTL2-DFI Interface/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!