DDR2的调试记录(MT47H64M16)-草稿

环境说明

由于项目设计需要,在FPGA上挂载了一个1G的DDR2 SDRAM,型号为MT47H64M16,FPGA为Cyclone IV E系列。要用DDR2实现多个GMII高速输入的缓存。

DDR2驱动需求:

1、最大限度的提升DDR2的吞吐率。

2、支持多通道、不同类型、不同位宽的数据。

3、支持FIFO和RAM两种接口。

结构

-->FIFO[0]---->|--->---\                                                                                         /-->FIFO'[0]---->

-->FIFO[n-1]-->|--->----\                                                                                     /--->FIFO'[n-1]-->

                                         |--->[ID,WRaddr,RDaddr,ExistNum]--->[DDR2]---->|

-->RAM[0]---->|--->----/                                                                                     \--->RAM'[0]---->

-->RAM[m-1]->|--->---/                                                                                        \-->RAM'[m-1]->

关于速度方面的考虑

根据<ug_ddr_ddr2_sdram_hp.pdf>的Interface Description章节的描述,可以知道,Consecutive Write/Read将会有更高的吞吐率,而Consecutive Write/Read在一个ROW内的操作,因此,尽量减少row的切换将有效提高DDR2的吞吐率。

在这里,我们采用突发长度为2,Full-Rate模式,即local端,数据结构为32比特,不超过单个M9K的最大位宽(36比特)。

因此,我们在对连续地址的数据进行读写时,尽量按尽可能多的突发的操作进行。就是,一次性进行1~N个突发读或突发写操作。

在Cyclone IV E中,基本RAM单元是M9K,可配置成256x32bits的模式,因此,输入缓存可以最大缓存128个突发操作。设计时,同样需要考虑数据的延迟、读空。

较大的连续突发操作,能够抵抗输入最大的突发性;较小的连续突发操作可以保证FIFO中的数据可以被完全读出。

设计伪随机序列进行验证,在125MHz(Cyclone IV E中最大时钟频率167MHz)的时钟下,突发连续突发操作为1,DDR的吞吐率大约在800Mbps,在突发操作为2的情况下,DDR2的吞吐率大约在1Gbps,其余待验证。

最后

格式很乱,还是习惯用typora做项目文档,详细设计将在调试完成后一起上传。

 


版权声明:本文为kemi450原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。