DDR SDRAM是双数据率同步动态随机存储器的缩写。它能够在一个时钟周期内传送两次数据,也就是说数据速率是时钟频率的两倍,可以达到很高的数据读写速度。此外它通过对地址线的分时复用,可以做到很大的容量。比如我们设计实现的DDR内存时钟频率可达到150MHz,数据速率为300MHz,容量达到1M x 72bit。
从上面的介绍中可以看出DDR内存的性能虽然好,但接口控制很复杂。为了快速实现DDR内存接口,缩短设计周期,我们使用已经成熟的商业化内存控制器 IP 核对DDR内存进行控制。我们使用的是Altera公司的DDR Controller IP核,版本为2.2.0,使用的开发工具为Quartus II 4.1,使用VHDL语言进行描述。
DDR内存的空满由读写地址的比较得出,并且要提前几个时钟周期置出。非空标志由这样的地址比较得出:rdaddr/= wraddr-2 and rdaddr/= wraddr-1 and rdaddr/=wraddra;非满标志由这样的地址比较得出: wraddr+2/=rdaddr and wraddr+3/=rdaddr and rdaddr/= wraddr+1。
读请求rd_req产生条件是: ①DDR内存非空,DDR内存满且th2=0;
②DDR内存非空,DDR内存非满且th1=1至th2=1。
写请求wr_req产生条件是:①DDR内存非满,DDR内存空;
②DDR内存非满,DDR内存非空且th2=1至th1=1。
DDR内存模块的地址产生逻辑使用VHDL语言在Quartus II 4.1上实现,最后编程例化到Altera公司的Stratix GX系列FPGA中物理实现。仿真说明:输入时钟为150M,复位信号高有效,ready为DDR控制器准备好信号,th1=1表示出口FIFO几乎空,在DDR内存非空时,应该读DDR内存;th2=1表示出口FIFO几乎满,在DDR内存非满时,应该写DDR内存;输出数据为读请求信号rdreq,写请求信号wrreq,输出地址信号ddraddr(为仿真方便,仿真时的地址位宽设定为5bit)。
通过仿真从Quartus II 4.1的报告中可以看到如此设计的时钟可以最高达162.92MHz,符合设计要求的150MHz。其它功能要求也能满足。