多路读写的SDRAM接口设计
摘要:介绍SDRAM的主要控制信号和基本命令时序,提出一种应用于解复用的支持多路读写的SDRAM接口设计,为需要大容量存储器的电路设计提供了新思路。
关键词:SDRAM 解复用 接口
存储器是容量数据处理电路的重要组成部分。随着数据处理技术的进一步发展,对于存储器的容量和性能提出了越来越高的要求。同步动态随机存储器SDRAM(Synchronous Dynamic Random Access Memory)因其容量大、读写速度快、支持突发式读写及相对低廉的价格而得到了广泛的应用。SDRAM的控制比较复杂,其接口电路设计是关键。
本文首先介绍SDRAM的主要控制信号和基本命令;然后介绍接口电路对SDRAM的主要操作路径及操作过程,应用于解复用的SDRAM接口电路的设计方法;最后给出了实现结果。
javascript:window.open(this.src);" style="cursor:pointer;"/>
1 SDRAM的主要控制信号和基本命令
SDRAM的主要控制信号为:
·CS:片选使能信号,低电平有效;
·RAS:行地址选通信号,低电平有效;
·CAS:列地址选通信号,低电平有效;
·WE:写使能信号,低电平有效。
SDRAM的基本命令及主要控制信号见表1。
表1 SDRAM基本操作及控制信号
命 令 名 称 | CS | RAS | CAS | WE |
命令禁止(NOP:Command inhibit) | H | X | X | X |
空操作(NOP:No operation) | L | H | H | H |
激活操作(ACT:Select bank and active row) | L | L | H | H |
读操作(READ:Select bank and column,and start READ burst) | L | H | L | H |
写操作(WRITE:Select bank and column,and start WRITE burst) | L | H | L | L |
突发操作停止(BTR:Burst terminate) | L | H | H | L |
预充电(PRE:Deactive row in bank or banks) | L | L | H | L |
自动刷新或自我刷新(REF:Auto refresh or self refresh) | L | L | L | H |
配置模式寄存器(LMR:Load mode register) | L | L | L | L |
所有的操作控制信号、输入输出数据都与外部时钟同步。
2 接口电路对SDRAM的主要操作路径及操作过程
一个完备的SDRAM接口很复杂。由于本文的SDRAM接口应用于解复用,处理的事件相对来说比较简单,因而可以简化设计而不影响性能。接口电路SDRAM的主要操作可以分为:初始化操作、读操作、写操作、自动刷新操作。
javascript:window.open(this.src);" style="cursor:pointer;"/>
(1)初始化操作
SDRAM上电一段时间后,经过初始化操作才可以进入正常工作过程。初始化主要完成预充电、自动刷新模式寄存器的配置。操作过程如图1所示。
(2)读写操作
读写操作主要完成与SDRAM的数据交换。读操作过程如图2所示,写操作过程如图3所示。
(3)刷新操作
动态存储器(Dynamic RAM)都存在刷新问题。这里主要采用自动刷新方式,每隔一段时间向SDRAM发一条刷新命令。刷新过程如图4所示。
javascript:window.open(this.src);" style="cursor:pointer;"/>
3 接口电路的设计
(1)解复用电路
本解复用电路主要完成将1路高速数据流解复用为4路数据流,其结构框图如图5所示。1路数据流进入解复用器后,经过SDRAM缓冲,解复用为4路数据流。
由于要解复用为4路数据流,为了充分利用时隙,满足高速的要求,采用4个bank的SDRAM,各路数据缓冲对应不同的bank。为简化设计,数据流1的缓冲区定为bank0,数据流2的缓冲区定为bank1,数据流3的缓冲区定为bank2数据流4的缓冲区定为bank3。对于每路数据实际上是以高速率集中写入,然后以低速率均匀读出。
javascript:window.open(this.src);" style="cursor:pointer;"/>
由于进行的是解复用,因此写入的数据只有1路,但是有可能4路数据同时都要读出。所以对于4路数据流,其读写地址和读写使能信号是分开的。
(2)SDRAM接口电路的时序控制
高速数据流的速率为3M字节/秒,采用的系统时钟为20倍的字节时钟。送入SDRAM的时钟为60MHz系统时钟。在一个字节时钟内对SDRAM的操作最多有5次(1次读,4次写),而且为了满足刷新的要求,每个字节时钟进行一次刷新操作。根据SDRAM的时序要求,这样的操作是难以实现的。因而要通过多bank操作,尽量做到时分复用来实现。图6给出了在一个字节时钟周期的内数据流1进行读写操作,其它3路数据进行读操作的命令排序时序图。可以看出通过多bank操作,时分复用,在20个系统时钟节拍内所需的读写操作命令刚好很紧凑地排开。
javascript:window.open(this.src);" style="cursor:pointer;"/>
一个字节时钟内对SDRAM读写操作是随机的,这与数据流的复用比例有在。为了满足时序,根据上面的说明,需要把一个字节时钟周期内对SDRAM的命令合理排序,然后按照排好的顺序执行命令。这样就需要把一个字节时钟周期内对SDRAM的操作进行缓存,然后在下一个字节时钟周期内进行排序、与SDRAM命令相对应、将命令译码产生相应的控制信号线,完成操作。缓存排序过程如图7所示。
(3)SDRAM接口电路
SDRAM接口电路中需要专门操作缓冲区存储一个字节时钟周期内的操作,以备下一字节时钟的排序。为了方便处理,对每路数据的缓冲操作内容(或读或写)放在一个缓冲区。由于数据流的连续性,排序的同时仍然会有操作要求,因此每路的操作内容缓冲区分为两块。对一块缓冲区写入时,读出另一块缓冲区中的操作内容,进行排序、译码、执行。根据字节时钟切换对缓冲区的读写,从而避免冲突。对于从SDRAM读出的数据,每路数据写入相应的读出数据缓冲区。同样每路的读出数据缓冲区也分为两块,根据字节时钟切换读写。
由于一个字节时钟周期内,每路所需的操作最多有2次,每路的操作内容缓冲区只需两个单元(每个单元存储了此次的读写使能信号、写入数据、地址)即可。对于读出数据缓冲区,由于一个字节时钟每路数据最多执行一次读操作,所以读出数据缓冲区只需要一个字节。这两类缓冲区容量都小,因此人部用寄存器来实现,控制简单。
整个接口电路的结构框图如图8所示。
javascript:window.open(this.src);" style="cursor:pointer;"/>
4 SDRAM接口的实现结果
针对MT48LC8M8A2的SDRAM,采用同步设计方法,用Verilog HDL硬件描述语言建立模型,接口电路已经调试通过,规模为2100门(NAND)。整个解复用电路也已经调试通过。