图1 SDRAM控制器的FPGA模块化设计方案
下面,对其接口信号进行介绍,需要注意的是,为了实现该控制器的通用性,ADDR、DATAIN、DATAOUT、DQ、DOM信号设计成可根据SDRAM的容量改变的形式。
与主机接口信号:CLK(系统时钟);RESET(系统复位);CMD[2:0](译码指令);CMDACK(指令应答信号);ADDR[ASIZE-1:0](地址线);DATAIN/DATAOU[DSIZE-1:0](输入、输出数据总线);DM[(DSIZE/8)-1:0](数据掩码)。
与SDRAM接口信号:SA(地址线);BA(页地址);CS_N(片选信号);CKE(时钟使能信号);RAS、CAS、WE(命令控制信号);DQM[(DSIZE/8)-1:0](SDRAM数据掩码);DQ[DSIZE-1:0](双向数据线)。
各个模块的设计与实现
接口控制模块
接口控制模块主要实现的功能是将CMD[2:0]翻译成接口指令和对刷新计数器的控制指令。接口模块在工作过程中首先通过要通过状态机来完成对CMD[2:0]的翻译。在VHDL程序中声明一个用户自定义类型states,根据CMD[2:0]输入来决定状态的转移,完成对CMD[2:0]的解码,部分代码如下:
type states is(nop,reada,writea,refresh,
precharge,load_mode);
signal state : states ;
………………
case cmd is
when “011” =》 state state
另外,SDRAM需要周期性刷新操作以保持数据。在模块的程序设计中,刷新周期的控制通过一个计数器来完成,到达规定的计数周期数时,接口模块通过REF_REQ信号向SDRAM发出刷新请求。直到SDRAM完成刷新操作,发出REF_ACK刷新应答信号,计数器才重新赋值,开始下一次的计数。
命令生成模块
命令生成模块实现对输入的SDRAM指令请求进行仲裁判断的功能,并将仲裁后要执行的指令解码成SDRAM需要的RAS、CAS等信号,从而实现指令对SDRAM的控制。仲裁机制是SDRAM控制器设计不可或缺的一个环节。仲裁机制实现要遵循如下规则:
*SDRAM在每一刻只有一个指令在执行;
*先到的指令先执行,如果刷新请求到来时,其它命令正在执行中,要等到当前命令执行完成后,才能执行刷新指令;
*其它指令和刷新请求同时到来时刷新操作先执行。
经过仲裁判断后,指令将传入命令生成器。命令生成器不仅要把指令解码成SDRAM需要的RAS、CAS等信号,同时还要对命令执行的时间进行控制。下面的例程仅供参考。
if (do_state=refresh or do_state=reada or
do_state=writea
or do_state=precharge or
do_state=load_mode)then
command_delay(7 downto 0)
下面介绍输入的指令为writea和reada指令时模块所进行的操作。当SDRAM的writea和reada指令到来时,将引发一系列指令的执行,和其它指令相比需要更多的附加时间。所以,在这种情况下需要声明第二个移位寄存器rw_shift来完成这两个指令的附加时间的实现。rw_shift的工作原理和第一个移位寄存器command_delay是一样的,需根据读、写的时间决定rw_shift的位数。
最后一个移位寄存器oe_shift用来为数据通道生成数据输入、输出使能信号oe。对于非页模式的读写来说,oe保持有效的时间取决于突发长度,需要注意的是,读操作时,oe有效的起始时间取决于CAS延时时间,而对于写操作,则在写指令开始时oe就是有效的。
数据路径模块
数据路径模块的作用是在writea和reada命令期间生成数据的路径。在用VHDL语言程序中,用简单的赋值语句就可以实现数据路径模块。
通用性的实现
根据SDRAM控制器的FPGA模块化设计方案生成的FPGA控制器易于修改和扩展,具有可通用的特性。在具体的应用中,针对不同的SDRAM,并不需要更改SDRAM控制器结构,只要根据datasheet中的SDRAM的容量将地址线数和数据的位数做相应修改,再依据SDRAM的时序和读、写速度更改接口控制模块中的时间信号的周期,如刷新周期、命令生成模块中移位寄存器的位数和初值等,这样就可以对不同的SDRAM进行控制。最后,生成的SDRAM控制器顶层模块如图2所示。为了证明该控制器设计方案的可行性和通用性,在Altera公司的Cyclone系列FPGA——EP1C6Q240C8中生成SDRAM控制器,根据数据手册中SDRAM的参数对控制器各模块的VHDL语言程序做相应的改动,实现了对三星公司的8MByte SDRAM K4S641632E和2MByte SDRAM K4S161622D的控制,均达到了100MHz的读、写速度。
图2 SDRAM控制器接口
图1 SDRAM控制器的FPGA模块化设计方案
下面,对其接口信号进行介绍,需要注意的是,为了实现该控制器的通用性,ADDR、DATAIN、DATAOUT、DQ、DOM信号设计成可根据SDRAM的容量改变的形式。
与主机接口信号:CLK(系统时钟);RESET(系统复位);CMD[2:0](译码指令);CMDACK(指令应答信号);ADDR[ASIZE-1:0](地址线);DATAIN/DATAOU[DSIZE-1:0](输入、输出数据总线);DM[(DSIZE/8)-1:0](数据掩码)。
与SDRAM接口信号:SA(地址线);BA(页地址);CS_N(片选信号);CKE(时钟使能信号);RAS、CAS、WE(命令控制信号);DQM[(DSIZE/8)-1:0](SDRAM数据掩码);DQ[DSIZE-1:0](双向数据线)。
各个模块的设计与实现
接口控制模块
接口控制模块主要实现的功能是将CMD[2:0]翻译成接口指令和对刷新计数器的控制指令。接口模块在工作过程中首先通过要通过状态机来完成对CMD[2:0]的翻译。在VHDL程序中声明一个用户自定义类型states,根据CMD[2:0]输入来决定状态的转移,完成对CMD[2:0]的解码,部分代码如下:
type states is(nop,reada,writea,refresh,
precharge,load_mode);
signal state : states ;
………………
case cmd is
when “011” =》 state state
另外,SDRAM需要周期性刷新操作以保持数据。在模块的程序设计中,刷新周期的控制通过一个计数器来完成,到达规定的计数周期数时,接口模块通过REF_REQ信号向SDRAM发出刷新请求。直到SDRAM完成刷新操作,发出REF_ACK刷新应答信号,计数器才重新赋值,开始下一次的计数。
命令生成模块
命令生成模块实现对输入的SDRAM指令请求进行仲裁判断的功能,并将仲裁后要执行的指令解码成SDRAM需要的RAS、CAS等信号,从而实现指令对SDRAM的控制。仲裁机制是SDRAM控制器设计不可或缺的一个环节。仲裁机制实现要遵循如下规则:
*SDRAM在每一刻只有一个指令在执行;
*先到的指令先执行,如果刷新请求到来时,其它命令正在执行中,要等到当前命令执行完成后,才能执行刷新指令;
*其它指令和刷新请求同时到来时刷新操作先执行。
经过仲裁判断后,指令将传入命令生成器。命令生成器不仅要把指令解码成SDRAM需要的RAS、CAS等信号,同时还要对命令执行的时间进行控制。下面的例程仅供参考。
if (do_state=refresh or do_state=reada or
do_state=writea
or do_state=precharge or
do_state=load_mode)then
command_delay(7 downto 0)
下面介绍输入的指令为writea和reada指令时模块所进行的操作。当SDRAM的writea和reada指令到来时,将引发一系列指令的执行,和其它指令相比需要更多的附加时间。所以,在这种情况下需要声明第二个移位寄存器rw_shift来完成这两个指令的附加时间的实现。rw_shift的工作原理和第一个移位寄存器command_delay是一样的,需根据读、写的时间决定rw_shift的位数。
最后一个移位寄存器oe_shift用来为数据通道生成数据输入、输出使能信号oe。对于非页模式的读写来说,oe保持有效的时间取决于突发长度,需要注意的是,读操作时,oe有效的起始时间取决于CAS延时时间,而对于写操作,则在写指令开始时oe就是有效的。
数据路径模块
数据路径模块的作用是在writea和reada命令期间生成数据的路径。在用VHDL语言程序中,用简单的赋值语句就可以实现数据路径模块。
通用性的实现
根据SDRAM控制器的FPGA模块化设计方案生成的FPGA控制器易于修改和扩展,具有可通用的特性。在具体的应用中,针对不同的SDRAM,并不需要更改SDRAM控制器结构,只要根据datasheet中的SDRAM的容量将地址线数和数据的位数做相应修改,再依据SDRAM的时序和读、写速度更改接口控制模块中的时间信号的周期,如刷新周期、命令生成模块中移位寄存器的位数和初值等,这样就可以对不同的SDRAM进行控制。最后,生成的SDRAM控制器顶层模块如图2所示。为了证明该控制器设计方案的可行性和通用性,在Altera公司的Cyclone系列FPGA——EP1C6Q240C8中生成SDRAM控制器,根据数据手册中SDRAM的参数对控制器各模块的VHDL语言程序做相应的改动,实现了对三星公司的8MByte SDRAM K4S641632E和2MByte SDRAM K4S161622D的控制,均达到了100MHz的读、写速度。
图2 SDRAM控制器接口