基于FPGA的DDR控制器设计
作。伴随着状态的转换,相应的地址信号也锁存进DDR。
2.1 时钟设计
根据DDR的时序要求,本文一共采用了三个时钟,分别是DDR的一对反相时钟(DDR_CLK_P,DDR_CLK_N)和数据控制时钟(CLK_X2,由时钟模块产生)。根据DDR的要求,指令信号要在DDR_CLK_P的上升沿采样,所以采用其反相时钟信号DDR_CLK_N来同步命令逻辑,使DDR_CLK_P的上升沿恰好在命令的中心。根据DDR读写数据的要求,采用了一个DDR系统时钟频率两倍的数据时钟,用来处理读写数据。
2.2 DDR的状态控制
DDR的控制器主要有读、写、预充电、刷新、配置模式寄存器等操作。图4是各种操作的状态转化图,是指指令之间转换的可能操作。DDR在工作时主要分为两个阶段:上电初始化和读写过程。初始化很重要,主要完成时钟稳定与寄存器配置的过程,它是一些指令的顺序执行过程。本文采用的DDR是Hynix公司的产品,其初始化配置过程如下[1]:
1、上电,开启时钟,并且稳定最小200μs的时间;
2、时钟稳定后,执行空指令,并且CKE=1;
3、配置扩展模式寄存器(EMRS)来使能DLL(Delay Locked Loop,延时锁定环),等待200个周期后进行下一步操作;
4、配置模式寄存器(MRS)来重启DLL,将芯片设置到等待状态(设置A8=1来重启DLL);
5、对所有BANK进行预充电;
6、执行两次或更多自刷新命令;
7、执行一次模式寄存器配置命令,来初始化模式寄存器,设置读写操作的参数;
8、等待200个周期后,初始化完成。
不同厂家的DDR初始化过程不尽相同,其寄存器配置的参数可能也不同,为了提高控制器的通用性,可以在控制器外来配置初始化操作。
2.3 DDR的读写效率
DDR需要定时刷新指令与预充电指令,所以合理地处理这两个指令可以有效地提高读写的效率。刷新是周期性操作,预充电是在地址换行的时候需要执行的操作,所以提高效率的主要方法就是合理的安排预充电命令。读写操作有两种方式:一种是带预充电的读写,一种是普通的读写。在采用普通读写时需要在地址换行的时候用预充电命令来重新进行行使能。两种读写方式在指令上的区别就是:带预充电的读写命令在ACT命令(此时,地址输入为DDR的行地址)时,将A10置高;而普通读写不需要将A10置高。
当然这种方案是在一个行地址中进行数据读写的有效方法,当数据地址随机且经常跨越一行地址时就需要执行预充电命令。如果还是采用普通读写方式的话,下一个读(写)地址随机,这样
2.1 时钟设计
根据DDR的时序要求,本文一共采用了三个时钟,分别是DDR的一对反相时钟(DDR_CLK_P,DDR_CLK_N)和数据控制时钟(CLK_X2,由时钟模块产生)。根据DDR的要求,指令信号要在DDR_CLK_P的上升沿采样,所以采用其反相时钟信号DDR_CLK_N来同步命令逻辑,使DDR_CLK_P的上升沿恰好在命令的中心。根据DDR读写数据的要求,采用了一个DDR系统时钟频率两倍的数据时钟,用来处理读写数据。
2.2 DDR的状态控制
DDR的控制器主要有读、写、预充电、刷新、配置模式寄存器等操作。图4是各种操作的状态转化图,是指指令之间转换的可能操作。DDR在工作时主要分为两个阶段:上电初始化和读写过程。初始化很重要,主要完成时钟稳定与寄存器配置的过程,它是一些指令的顺序执行过程。本文采用的DDR是Hynix公司的产品,其初始化配置过程如下[1]:
1、上电,开启时钟,并且稳定最小200μs的时间;
2、时钟稳定后,执行空指令,并且CKE=1;
3、配置扩展模式寄存器(EMRS)来使能DLL(Delay Locked Loop,延时锁定环),等待200个周期后进行下一步操作;
4、配置模式寄存器(MRS)来重启DLL,将芯片设置到等待状态(设置A8=1来重启DLL);
5、对所有BANK进行预充电;
6、执行两次或更多自刷新命令;
7、执行一次模式寄存器配置命令,来初始化模式寄存器,设置读写操作的参数;
8、等待200个周期后,初始化完成。
不同厂家的DDR初始化过程不尽相同,其寄存器配置的参数可能也不同,为了提高控制器的通用性,可以在控制器外来配置初始化操作。
2.3 DDR的读写效率
DDR需要定时刷新指令与预充电指令,所以合理地处理这两个指令可以有效地提高读写的效率。刷新是周期性操作,预充电是在地址换行的时候需要执行的操作,所以提高效率的主要方法就是合理的安排预充电命令。读写操作有两种方式:一种是带预充电的读写,一种是普通的读写。在采用普通读写时需要在地址换行的时候用预充电命令来重新进行行使能。两种读写方式在指令上的区别就是:带预充电的读写命令在ACT命令(此时,地址输入为DDR的行地址)时,将A10置高;而普通读写不需要将A10置高。
当然这种方案是在一个行地址中进行数据读写的有效方法,当数据地址随机且经常跨越一行地址时就需要执行预充电命令。如果还是采用普通读写方式的话,下一个读(写)地址随机,这样
Tags:
上一篇:音频隐写分析技术研究综述下一篇:CDMA网络规划覆盖分析的仿真技术研究