FPGA与SDRAM的连接

阅读: 评论:0

基于FPGASDRAM控制器的设计和实现
1. 引言
清扫车扫刷随着电子技术在工业、医疗、商业等领域的发展,人们对数据传输率的要求越来越高,传统的单片机早已不能满足这种高速数据传输的要求。与此同时,可编程的逻辑器件FPGA/CPLD以其强大的功能,开发过程投资小、周期短,可反复编程修改,开发工具智能化等特点,成为当今硬件设计的潮流;相比而言,FPGA即现场可编程门阵列,它的集成度高,可完成极其复杂的时序与组合逻辑电路功能,更适用于高速、高密度的高端数字逻辑电路设计领域[1]SDRAM即:同步动态随即存储器,与传统的DRAM有很大区别。它可以与系统总线以同频率工作,用同一个CPU时钟周期即可完成数据的访问和刷新,进而大大的提高了数据传输率,其速度远大于DRAM。因而,SDRAM常作为数据缓存应用于高速数据传输系统中。目前,许多嵌入式设备的大容量、高速度存储器都采用SDRAM来实现,而且大多都是用专用芯片完成其控制电路,这不但提高了设计成本,而且使系统的硬件电路变得复杂。随着FPGA在嵌入式系统中的广泛应用,如果我们能够结合具体的需要,利用FPGA来设计自己的SDRAM控制器,这些问题就迎刃而解了。然而,SDRAM的控制逻辑复杂、时序要
求严格,常常困扰设计人员。有很多文章[2345]详细的介绍了SDRAM的工作原理、控制时序和指令特点,以及基于FPGASDRAM控制器的实现方法,但是并没有详细的给出控制器内部结构和指令时序的控制问题。因此。本文将介绍一种基于FPGA的通用SDRAM控制器,并着重介绍设计方案中各模块的功能和实现方法。该控制器用VHDL语言程序实现,完成了SDRAM指令状态转换、信号仲裁判断,并巧妙的用三个移位寄存器解决了指令的逻辑和时序的问题。
1. SDRAM简介
SDRAM具有空间存储量大、读写速度快、价格相对便宜的特点。但其控制逻辑复杂,需要周期性刷新操作、行列管理、不同延时和命令序列等。
1.1 SDRAM地址结构
SDRAM的存储地址分为页(bank)地址,行(row)地址和列(column)地址。例如一个8MByteSDRAM,被分为4bank,即1bank2MByte,每个bank包括128列。
废渣41.2 SDRAM的指令
SDRAM的一系列指令如表1所示,每个指令最终都是通过控制RASCASWE信号来实现。通常对SDRAM的操作过程如下:
1  SDRAM命令
(1) SDRAM初始化操作:
水性附着力促进剂上电后至少等待100ns,然后至少执行1条空操作;对所有页执行预充电操作;向各页发出两条刷新操作指令;最后执行SDRAM工作模式的设定LMR命令用来配置SDRAM工作模式寄存器,SDRAM工作寄存器如表2所示。其中A11A10是用户保留位;A9用来配置写突发模式;A8A7是操作模式,通常为“00”,代表标准操作模式;A6A4设置CAS延迟时间;
A3决定突发操作模式是顺序还是间隔型;最后的三位A2~A0用来配置突发长度。
2  SDRAM工作寄存器
A11
A10
A9
A8
A7
A6
A5
A4
A3
A2
A1
A0
Reserve
Write burst mode
Operating mode
Latency mode
Burst type
Burst length
(2) SDRAM读、写操作:
根据实际应用的需要,发出读、写指令。SDRAM可实现突发式读写,支持的突发长度可配置为1氧化沟工艺流程图个、2个、4个、8个数据周期或者页模式。并且突发的模式可以配置为顺序或者间隔型。对SDRAM进行访问的最主要操作就是读RD和写WR操作。SDRAM在进行读写操作时,必须要先进行页激活ACT操作,以保证存储单元是打开的,以便从中读取地址或者写入地址,关闭存储单元通过预充电PHC命令实现。在进行写操作时,内部的列地址和数据就会被寄存;进行读操作时,内部地址被寄存,等待CAS 延迟时间(通常为13个时钟周期)后,读出的数据出现在数据总线上,具体时序详见SDRAM数据手册,此处不再赘述。
(3) 操作终止:
负压脉动式清肺仪SDRAM接收到读、写指令后,开始进行顺次的读写操作,直到达到突发长度或者突发终止指令BT出现。
镜面银油墨
2. SDRAM控制器方案
SDRAM控制器6针对SDRAM的指令操作特点,为SDRAM提供同步命令接口和时序逻辑控制,下面将以ALTERA公司的Cyclone系列FPGA为例,主机系统时钟为100MHz,使用三星公司的K4S641632E8MByte SDRAM7,介绍SDRAM控制器的具体设计方法。图1SDRAM控制器的接口原理图。
1  SDRAM控制器接口原理图
接口信号介绍:
(1) 与主机接口信号:       
CLK:系统时钟信号;
RESET::系统复位信号;
CMD[2:0]:译码指令,如表3所示;
CMDACK:指令应答信号,通知主机命令已被SDRAM执行;
ADDR:地址线,根据具体情况确定位数,本例中为22位,A21A20代表页地址BA1,BA0A19A8代表行地址;A7A0代表列地址;
DATAIN/DATAOU:输入、输出数据总线;
DM:数据掩码;
(2) SDRAM接口信号:
SADDR12位地址线,在读、写操作时,地址线分时复用为行地址和列地址;
BA:页地址,BA0BA1
CS:片选信号;
CKE:时钟使能信号;
RASCASWE:命令控制信号;
DQMSDRAM数据掩码;
DQ:双向数据线;
SDRAM控制器作为顶层模块,由3个主要模块组成:接口控制模块、命令生成模块、数据路径模块。下面将详细的介绍各个模块的功能和关键设计的VHDL实现方法。
3  CMD命令字
2.1 接口控制模块
    接口控制模块主要实现的功能包括:将CMD[2:0]翻译成接口指令和对刷新计数器的控制,如图2所示。首先通过状态机来完成对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<=refresh;               
              when "111" => state<=nop;
……………… 
SDRAM需要周期性刷新操作以保持数据,数据手册中通常会给出在一定的时间T内,SDRAM至少刷新X次,如果用户使用频率为Fr MHz的时钟,则刷新周期Tf可以通过下面的公式计算出:Tf=(T*Fr / X。例如,本例中数据手册要求64ms内至少刷新4096次,系统时钟周期为100MHz,则刷新周期为(64ms*100MHz)/ 4096,得出结果等于1562.5,所以至多1562个时钟周期的时间就必须对SDRAM刷新一次。刷新控制在程序中通过一个计数器来完成,当到达规定的计数周期,就向SDRAM发出REF_REQ刷新请求,直到SDRAM完成刷新操作,发出REF_ACK刷新应答信号,计数器才重新赋值开始下一次的计数。
接口控制模块
2.2 命令生成模块
图3是命令生成模块,主要实现了对输入的指令请求进行仲裁判断,并将仲裁后要执行的指令解码成SDRAM需要的RAS、CAS等信号,从而实现对SDRAM的控制。
3 命令生成模块
之所以需要仲裁机制,是因为在指令执行之前可能会发生以下情况:其它指令和刷新请求同时到来;刷新请求到来时,其它指令正在执行。仲裁机制实现方法如下:
(1) SDRAM在每一刻只有一个指令在执行;
(2) 先到的指令先执行,即:如果刷新请求到来时,其它命令正在执行中,要等到当前命令执行完成后,才能执行刷新指令;
(3) 其它指令和刷新请求同时到来时刷新操作先执行。
经过仲裁判断后,指令将传入命令生成器。命令生成器不仅要把指令解码成可控制SDRAM的信号,同时还要用三个移位寄存器对命令执行的延迟时间进行控制。第一个为指令延时寄存器,用来保证SDRAM有充足时间完成最终指令。例如,如果命令的执行需要8各时钟周期的时间,则指令延时寄存器com_delay的初值设为“11111111”,同时声明一个内部信号com_done,作为指令执行完成的标志的。在指令执行期间,每一个时钟上升沿到来时,移位寄存器向右移位一次,com_delay[0]的移入com_done,同时“0” 移入最高
位com_delay[7]。当com_done为“0”时,就说明指令的延迟时间已到,即通过com_done的值,就可以判断当前指令是否执行完成。要注意的是:移位寄存器的位数和初值,应该根据SDRAM的数据手册中命令完成需要的时间和系统的时钟周期来确定。下面得例程仅供参考。
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)<="11111111"; ------移位寄存器初值
                  command_done<='1';
                  ………………
            else
              command_done<=command_delay(0);      --------移位操作
              command_delay(6 downto 0)<= command_delay(7 downto 1);
              command_delay(7)<='0';

本文发布于:2023-06-20 04:59:30,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/145545.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:指令   数据   完成   操作   命令   执行
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图