首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

SDRAM通用控制器的FPGA模块化设计之二

SDRAM通用控制器的FPGA模块化设计之二

   各个模块的设计与实现

          接口控制模块



        接口控制模块主要实现的功能是将CMD[2:0]翻译成接口指令和对刷新计数器的控制指令。接口模块在工作过程中首先通过要通过状态机来完成对CMD[2:0]的翻译。在VHDL程序中声明一个用户自定义类型states,根据CMD[2:0】输入来决定状态的转移,完成对CMD[2:0】的解码,部分代码如下:

        另外,SDRAM需要周期性刷新操作以保持数据。在模块的程序设计中,刷新周期的控制通过一个计数器来完成,到达规定的计数周期数时,接口模块通过REF_REQ信号向SDRAM发出刷新请求。直到SDRAM完成刷新操作,发出REF_AcK刷新应答信号,计数器才重新赋值,开始下一次的计数。


   命令生成模块


          命令生成模块实现对输入的SDRAM指令请求进行仲裁判断的功能,并将仲裁后要执行的指令解码成sDRAM需要的RAS、CAS等信号,从而实现指令对SDRAM的控制。仲裁机制是SDRAM控制器设计不可或缺的一个环节。仲裁机制实现要遵循如下规则:

           ·sDRAM在每一刻只有一个指令在执行;

           ·先到的指令先执行,如果刷新请求到来时,其它命令正在执行中,要等到当前命令执行完成后,才能执行刷新指令;

           ·其它指令和刷新请求同时到来时刷新操作先执行。

        经过仲裁判断后,指令将传入命令生成器。命令生成器不仅要把指令解码成SDRAM需要的RAS、CAS等信号,同时还要对命令执行的时间进行控制。下面的例程仅供参考。

        下面介绍输入的指令为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控制器结构,只要根据datasheei中的sDRAM的容量将地址线数和数据的位数做相应修改,再依据SDRAM的时序和读、写速度更改接口控制模块中的时间信号的周期,如刷新周期、命令生成模块中移位寄存器的位数和初值等,这样就可以对不同的SDRAM进行控制。最后,生成的SDRAM控制器顶层模块如图2所示。为了证明该控制器设计方案的可行性和通用性,在Altera公司的Cyclone系列FPGA--EP1C6Q240C8中生成SDRAM控制器,根据数据手册中SDRAM的参数对控制器各模块的VHDL语言程序做相应的改动,实现了对三星公司的8MByte SDRAM K4S641632E和2MByteSDRAM K4S161622D的控制,均达到了100MHz的读、写速度。

        结语


        本方案采用的模块化思想为SDRAM控制器的开发提供了一种层次分明、易于扩展的设计思路。实验结果表明,该控制器设计紧凑,维护升级方便,易于实现对SDRAM的通用化控制,这无疑将极大的提高SDRAM应用的开发速度。
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表