本节基于 DFI 协议 4.5 节(协议 4.0 版本)讨论 DFI 的协议功能之写传输。
注意,本文没有讨论启用 CRC 时的写传输,以后有需求会更新 CRC 专题。
写传输
DFI 协议中的写传输(Write Transaction)定义为 MC 通过 DFI 总线向 PHY 写入数据的过程,PHY 随后负责将数据转换为 DRAM 总线形式,发送给 DRAM 颗粒。
写传输信号
写传输信号共有 4 个:
- dfi_wrdata
- dfi_wrdata_en
- dfi_wrdata_mask
- dfi_wrdata_cs
dfi_wrdata_mask 是部分比特写入时,用于指示无需写入比特的掩码。dfi_wrdata_cs 用于在多 rank 系统中指示写传输 rank 的片选信号。
上述两者是可选信号,对于一个简单的单个 rank 的 DFI 系统,如果其不支持部分比特 masked 写入,写传输可以简化为一个 Command - Data(dfi_wrdata)- Enable(dfi_wrdata_en) 行为。
dfi_wrdata_en 信号置起表示数据有效(或者即将有效),信号置起后,保持高电平的长度则对应待传输的数据长度,比如高电平持续 4 个 DFI 时钟周期表示总线上即将传输 4 个周期的数据。
写传输时序图示例
下图这个例子中发送了两个 burst 长度为 4 的写命令,以第一个命令为例。MC 在 DFI 上发送写命令后,间隔一段时间(t_phy_wrlat)后,置起 dfi_wrdata_en 信号,持续两个 DFI 时钟周期,表示传输 2 个周期长度的写数据。置起 dfi_wrdata_en 后再间隔一段时间(t_phy_wrdata),开始在 dfi_wrdata 上发送数据。
两个周期后写数据传输完成,后续再传输下一个写命令及其数据。如果图中的两个写命令之间的间隔再减少一个周期,那么两个 dfi_wrdata_en 的脉冲将合二为一,这也是 DFI 协议允许的,如下图这个例子。
写传输主要 DFI 时序参数
上一节的写传输示例中提到了,在 dfi_wrdata_en 和 dfi_wrdata 有效之前,分别要等待一段时间。这两段等待时间就是写传输的主要 DFI 时序参数
- t_phy_wrlat,发送写命令和 dfi_wrdata_en 信号置起之间的 DFI 时钟周期间隔
- t_phy_wrdata,dfi_wrdata_en 信号置起和发送 dfi_wrdata 之间的 DFI 时钟周期间隔
PHY 在处理写命令、写有效信号以及写数据之间可能需要时间间隔,用于内部数据处理,所以定义了这些 DFI 时序参数,用于通知 MC 按照 PHY 的能力行事,严格控制各信号之间的间隔,保证数据传输无误。
写传输流程
以下是对协议写传输流程的简化归纳,省去了支持多 rank,CRC,DBI 的部分。
MC 在 DFI CA 通道发送写命令
- 等待 t_phy_wrlat 个周期, 协议规定 t_phy_wrlat 可以等于 0。
- MC 在 t_phy_wrlat 等待结束后,MC 置起 dif_wrdata_en 信号,保持高电平的周期数与有效数据周期数相等
- 等待 t_phy_wrdata 个周期
- MC t_phy_wrdata 等待结束后,MC 在 dfi_wrdata 和 dfi_wrdata_mask 信号上发送有效数据和有效位信号
- dif_wrdata_en 信号保持高电平足够时钟周期后置低
- 等待 t_phy_wrdata_delay 个时钟周期后,写数据传输完成,DFI 总线重回 idle 状态
多 Rank 写传输流程
当系统支持多个 rank 时,DFI 写传输会增加 dfi_wrdata_cs 片选信号,写传输流程也会增加一点儿复杂度,粗体为多 rank 流程增加的部分。
- MC 在 DFI CA 通道发送写命令
- 等待 t_phy_wrlat 个周期, 协议规定 t_phy_wrlat 可以等于 0。
- 或者等待 t_phy_wrcslat 个周期,这是 DFI 协议规定的写命令和 t_phy_wrcslat 信号之间的延迟。
- MC 在 t_phy_wrcslat 等待结束后,MC 驱动 dfi_wrdata_cs 信号为此次写传输的片选信号值,信号至少保持 dfi_rw_length + t_phy_wrcsgap 个周期
- MC 在 t_phy_wrlat 等待结束后,MC 置起 dif_wrdata_en 信号,保持高电平的周期数与有效数据周期数相等
- 等待 t_phy_wrdata 个周期
- MC t_phy_wrdata 等待结束后,MC 在 dfi_wrdata 和 dfi_wrdata_mask 信号上发送有效数据和有效位信号
- dif_wrdata_en 信号保持高电平足够时钟周期后置低
- 等待 t_phy_wrdata_delay 个时钟周期后,写数据传输完成,DFI 总线重回 idle 状态
多 Rank 写传输示例
下图这个例子中,MC 首先发出第一个写命令,记为 WR_A。MC 等待 t_phy_wrcslat = 2 个周期之后,在 dfi_wrdata_cs 上驱动 WR_A 所属的片选信号 (2'b10)。MC 再等待一个周期后,置高 dfi_wrdata_en 信号(t_phy_wrlat = 3),再等待一个周期后开始传输数据(t_phy_wrdata = 4)。
MC 后续又发送了两个写命令,WR_B 和 WR_C。WR_A 和 WR_B 属于同一个 cs 信号,因此两者命令之间的间隔是 2 (dfi_wr_length = 2)。而 WR_B 和 WR_C cs 信号不同, 所以 MC 必须保持 WR_B 的 dfi_wrdata_cs 信号 3 个周期 (dfi_wr_length + t_phy_wrcsgap),因此 WR_B 和 WR_C 的命令之间也需要间隔 3 个周期。
写传输 DFI 时序参数汇总
- t_phy_wrlat,发送写命令和 dfi_wrdata_en 信号置起之间的 DFI 时钟周期间隔
- t_phy_wrdata,dfi_wrdata_en 信号置起和发送 dfi_wrdata 之间的 DFI 时钟周期间隔
- t_phy_wrcslat, 发送写命令和 dfi_wrdata_cs 信号有效之间的 DFI 时钟周期间隔
- t_phy_wrcsgap, dfi_wrdata_cs 信号变化之间的最小 DFI 时钟周期间隔, 等于 t_phy_wrcslat 加上 dfi_rw_length 值
- dfi_rw_length 是传输完当前 DFI 读写命令所需的最小时钟周期间隔,一般为 burst 长度 / 2。
后续
本文讨论的单倍 DFI 和 PHY DFI 时钟频率比时的 DFI 写传输流程,后续将更新文章介绍多倍频率比下的写传输流程,那个会复杂一点儿。
在本文讨论的单倍频率比系统中,因为 DFI 时钟与 DFI PHY 时钟频率相同,因此在介绍时序参数的单位时没有详细区分 DFI 时钟和 DFI PHY 时钟,多倍频率比系统中两者频率不同,因此会严格区分这两者。
结语
本期我们讨论了:
- DFI 写传输过程中的信号、时序参数
- DFI 写传输流程,以及支持多 rank 的写传输流程
- DFI 写传输示例
作者:LogicJitterGibbs
原文:知乎
相关文章推荐
- DDR 学习时间 (Part C - 9):DFI 协议功能- LPDDR4 多通道模式
- 开设芯片设计中的 DDR 奇怪问题 Debug 咨询窗口
- IC 工程师视角:泰凌微 2023 年报
- IC 工程师视角:裕太微 2023 年报
- Multiport RAM,多读多写寄存器
更多FPGA干货请关注FPGA的逻辑技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。