本文主要介绍模块级DDR验证和实际硬件测试如何测试DDR带宽。
1.理论带宽如何计算?
PHY出口时钟CK频率是600MHz,SDRAM数据位宽是16的话,由于DDR是双沿采样,那么DDR的理论带宽是600*2*16 Mbps
2.实际带宽的计算?
我们一般至少仿真1ms来计算带宽
方向1:通过ctrl侧发布了多少数据,比如ctrl侧是axi总线,我们可以awvalid和awready相与可以知道发了多少个指令,比如发了10000个指令,然后burst是32,wdata位宽是128but。那么实际带宽=10000*32*128 bit/1 ms
方向2:通过颗粒侧看发布了多少数据,dqs是指示DQ的,那么你可以测量dqs跳变了多少次(因为前后导的存在,dqs会略多余data个数)
方向3:部分IP的CTRL是有带宽统计功能的,但是我没有用过,所以不在此介绍了。
3. 实际带宽低怎么处理?
首先要确保数据发够了,DDR反压了。
其次,带宽低主要是因为气泡的存在。你看下颗粒侧空隙大的地方,主要是什么时序关系导致的,比如是否是刷新指令发多了导致的。
4. 影响DDR带宽的因素有哪些?
最重要的影响因素是对颗粒的访问方式,要先访问col,再访问bank,再访问row。
Column 是同一个 Row 内部的偏移,不需要 ACT、不需要 tRCD,延迟最低、效率最高。
先col后bank可以省去激活时间;
先bank再row可以省precharge时间(同一个bank不同row必须要percharge,延时比较长)。
其次还有刷新方式之类的,perabank刷新方式效率比all bank高,All-bank refresh,发一次 REF,同一个 Rank 里所有 Bank 全部被锁住,整个 Rank 不能做读写;Per-bank refresh(单 Bank 刷新):一次 REF 只锁住指定的那一个 Bank,剩下其他 Bank 照常跑业务。