4.5.5 读响应
这部分描述了从DRAM DQ总线到DFI总线的读响应机制。总共有两种模式:
- 异步读响应 (PGCR3.RDMODE=2’b00)
- 静态读响应 (PGCR3.RDMODE=2’b01)
4.5.5.1 异步读响应模式
在异步读响应模式下(RDMODE=2'b00
),读DQS#信号被用作写时钟,将数据写入到DATX8读FIFO(先进先出队列)。这个FIFO的功能类似于传统的异步FIFO。在这个FIFO中,读DQS#的上升沿会将数据从DRAM的DQ总线中采样并写入FIFO,同时更新FIFO的写指针。然后,写指针会被同步到读取时钟域(ctl_clk
),并与读取指针进行比较。
当写指针和读指针不相同时,就会从FIFO中弹出数据,并更新读指针。
关键点:
- 读响应的延迟与读DQS#信号的时序以及同步器的延迟直接相关。
4.5.5.2 静态读响应模式
在静态读响应模式下,数据同样会以与异步模式相同的方式写入DATX8读FIFO。但是,读取FIFO数据的方式有所不同。静态读模式下,PUB(可能是某个时钟控制单元)会从dfi_rddata_en
信号开始计数,并在固定的周期数之后,将读数据从DATX8读FIFO回送到DFI总线。
在这种模式下,延迟是由每个字节通道在DXnGCR0.RDDLY
寄存器中设置的固定读响应值来确定的。每个字节通道的延迟可能有所不同,因此需要进行对齐。具有最大DXnGCR0.RDDLY
值的字节通道将决定整个接口的读延迟。
静态读延迟可以通过PUB的自动静态读训练算法来进行调整和优化。静态读模式具有一个1个ctl_clk
的裕度。如果DQS信号发生漂移并超过这个范围(超过2个tCK
周期),那么静态读训练值就会失效,可能导致读取失败。
4.5.5.3 读FIFO旁路
PUB还包含一个FIFO,用于在读取响应路径中对每个字节通道的响应进行对齐。对于静态读模式,如果所有字节通道的往返读延迟已经匹配得很好,可以设置相同的DXnGCR0.RDDLY
值,从而减少延迟。在这种情况下,你可以选择绕过这些对齐的FIFO,从而进一步减少延迟。通过设置PGCR3.PRFBYP=1
来实现FIFO旁路。
示例场景
假设有一个简单的DDR内存系统,它有两个字节通道(Byte Lane 0 和 Byte Lane 1),每个字节通道的数据读响应是通过PHY的读FIFO进行处理的。我们需要从内存中读取数据,并将数据从内存传输到DFI总线。
在这个场景中,主要关注两种不同的读响应模式:异步读响应模式 和 静态读响应模式。
1. 异步读响应模式 (RDMODE = 00)
工作原理:
- 假设在DDR内存中,数据读取操作是通过读DQS#信号触发的。
- 在异步读响应模式下,读DQS#信号会被用作时钟,时钟信号带动数据进入FIFO。每次读DQS#上升沿到来时,数据会从内存的DQ总线进入到FIFO中。
- 读FIFO在异步模式下工作,就像一个普通的FIFO。数据被写入FIFO后,会不断向前推进(更新写指针)。当读指针和写指针不同步时,FIFO中的数据就会被弹出。
- 延迟:延迟受读DQS#时序和同步器延迟的影响,因为读DQS#的时序可能会受到外部时钟变化的影响,所以延迟不固定。
例子:
假设你在内存中有一个数据块,内存读操作发起后,DQS#上升沿到来时,数据会从内存的DQ总线被采样,并写入FIFO。FIFO中的数据会按照DQS#信号的节奏逐步进入,并最终被送到DFI总线。但是,如果DQS#的时序发生漂移(即DQS#的时序没有完全与数据同步),可能会导致读数据的延迟波动。
这种模式适合对延迟要求不高的场合,但对DQS#时序的稳定性有一定要求。
2. 静态读响应模式 (RDMODE = 01)
工作原理
- 在静态读响应模式下,数据还是首先写入FIFO,就像在异步模式中那样。
- 不同的是,在静态读模式下,PUB会从
dfi_rddata_en
信号开始计数,并等待固定的周期数后再将数据从FIFO传送到DFI总线。 - 延迟:静态读模式的延迟是固定的,它由
DXnGCR0.RDDLY
寄存器的值决定。每个字节通道的延迟可以根据不同的需求进行调整。 - 每个字节通道的延迟值可能会不同,最大延迟的字节通道会决定整个系统的延迟。这个延迟值可以通过静态读训练算法进行优化。
例子
假设你在读取一个数据块时,数据会进入FIFO并根据dfi_rddata_en
信号计数。假设字节通道0的延迟需要4个周期,而字节通道1的延迟需要6个周期。在这种情况下,字节通道1会成为决定整个系统读延迟的瓶颈,因为它的延迟较大。
如果系统的静态读延迟经过训练并优化过,这样可以保证延迟是固定的,并且不会像异步模式那样因为时序问题而波动。因此,静态读响应模式适用于那些对延迟有严格要求的系统。
对比总结:
特性 | 异步读响应模式 | 静态读响应模式 |
---|---|---|
时序控制 | 依赖于DQS#时钟的上升沿,时序波动较大 | 固定延迟,时序稳定 |
延迟 | 延迟受DQS#时序和同步器影响,可能不稳定 | 延迟由DXnGCR0.RDDLY 设置,经过训练可以优化 |
适用场景 | 对延迟要求不严格,时序漂移不会影响整体功能 | 对延迟要求严格,需要保证稳定的读延迟 |
FIFO行为 | 异步FIFO,数据通过DQS#时钟输入FIFO并弹出 | 静态FIFO,数据从FIFO按固定周期读取 |
具体应用
- 异步模式:适用于对时序要求不高,系统需要简单处理并不需要精确控制延迟的情况。
- 静态模式:适用于对延迟有精确要求的情况,特别是在需要优化每个字节通道的读延迟时,静态模式可以提供更稳定的性能。
总结
- 异步读响应模式:数据通过DQS#时钟进入FIFO,延迟主要由DQS#的时序决定。
- 静态读响应模式:数据写入FIFO后,PUB根据固定的周期数将其送回DFI总线,延迟由
DXnGCR0.RDDLY
设置来控制,支持自动训练。 - 读FIFO旁路:当所有字节通道的延迟匹配时,可以绕过对齐FIFO来减少延迟。
本文链接: https://talent-tudou.github.io/2025/07/06/DDR/PUB-Architecture-Read Responses/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!