如何实现SDRAM接口电路的设计?
扫描二维码
随时随地手机看文章
存储器是容量数据处理电路的重要组成部分。随着数据处理技术的进一步发展,对于存储器的容量和性能提出了越来越高的要求。同步动态随机存储器SDRAM(Synchronous Dynamic Random Access Memory)因其容量大、读写速度快、支持突发式读写及相对低廉的价格而得到了广泛的应用。SDRAM的控制比较复杂,其接口电路设计是关键。
RAM又分动态存储器(DRAM,DYNAMIC RAM)和静态存储器(SRAM,STATIC RAM)。SRAM是利用双稳态触发器来保存信息的,只要不断电,信息是不会丢失的,所以谓之静态;DRAM利用MOS (金属氧化物半导体)电容存储电荷来储存信息,大家都知道,电容是会漏电的,所以必须通过不停的给电容充电来维持信息,这个充电的过程叫再生或刷新(REFRESH)。由于电容的充放电是需要相对较长的时间的,DRAM的速度要慢于SRAM。但SRAM免刷新的优点需要较复杂的电路支持,如一个典型的SRAM的存储单元需要六个晶体管(三极管)构成,而DRAM的一个存储单元最初需要三个晶体管和一个电容,后来经过改进,就只需要一个晶体管和一个电容了。由此可见,DRAM的成本、集成度、功耗等明显优于SRAM。
(一) DRAM
DRAM就是我们常说的内存,这显然就是狭义的内存概念了。后面我们说的内存也是这个狭义的概念--DRAM。常见的DRAM有许多规格,如FPM DRAM 、EDO DRAM、BEDO DRAM、SDRAM、DDR SDRAM、SLDRAM、RDRAM、DIRECT RDRAM等。
1. FPM DRAM(FAST PAGE MODE DRAM,快速页模式DRAM)
传统的DRAM在存取一个BIT的数据时,必须送出行地址和列地址各一次才能读写数据。FRM DRAM对此做了改进,在触发了行地址后,如果CPU需要的地址在同一行内,则可以连续输出列地址而不必再输出行地址了。由于一般的程序和数据在内存中排列的地址是连续的,这种情况下输出行地址后连续输出列地址就可以得到所需要的数据。因此FPM DRAM的设计可以提高内存的传输速率。在96年以前,在486时代和PENTIUM时代的初期,FPM DRAM被大量使用。
2. EDO DRAM(EXTENDED DATA OUT DRAM,扩充数据输出DRAM)
传统的DRAM和FPM DRAM 在存取每一BIT 数据时必须输出行地址和列地址并使其稳定一段时间,然后才能读写有效的数据。而下一个BIT的地址必须等待这次读写操作完成才能输出。EDO DRAM对FPM DRAM 的改进主要是缩短等待输出地址的时间。EDO DRAM不必等待资料的读写操作是否完成,只要规定的有效时间一到就可以准备输出下一个地址,由此可以减小等待时间。从另一个角度说,EDO DRAM 在读写数据的同时进行下一地址的准备工作,提高了工作效率。后期的486系统开始支持EDO DRAM,到96年后期,EDO DRAM开始执行。
3. BEDO DRAM (BURST EDO DRAM ,突发式EDO DRAM)
BEDO DRAM是突发式的读取方式,也就是当一个数据地址被送出后,剩下的三个数据每一个都只需要一个周期就能读取。BEDO 的主要加强之处是在芯片上增加了一个地址计数器来追踪下一个地址。BEDO DRAM可以一次存取一批数据而EDO DRAM只能存取一组数据,所以BEDO DRAM比EDO DRAM更快。但BEDO DRAM 在内存市场上只是昙花一现,只有很少的主板支持(如VIA APOLLO VP2),很快就被DRAM替代了。
4. SDRAM(SYNCHRONOUS DRAM)
SDRAM 的最大特点就是可以与CPU的外频同步,可以取消等待周期,减少了数据传输的延迟。而此前的DRAM 都使用异步方式工作,由于没有与系统的外频同步,在存取数据时,系统必须等待若干时序才能接受和送出数据,如SDRAM可以使存储器控制器知道在哪一个时钟脉冲周期使数据请求使能,因此数据可在脉冲沿来到之前便开始传输,而EDO DRAM每隔2时钟才开始传输,FPM DRAM每隔3个时钟脉冲周期才开始传输,从而制约了传输率。当CPU的频率越来越高后,异步DRAM的数据传输率就成为系统的瓶颈,而且,随着频率的提高,异步DRAM与SDRAM的性能差距会越来越大。
对DRAM而言,除了容量,最重要的指标就是速度了。一般FPM DRAM和EDO DRAM的速度在0~70ns之间,SDRAM的速度在10 ns左右。由于SDRAM的工作速度与系统的外频保持一致,所以SDRAM的速度标识可以换算成工作频率,如100 ns的SDRAM的频率是1 s/10 ns=100 MHz,同理,8 ns的SDRAM的工作频率是125 MHz,12 ns的SDRAM 的工作频率是83 MHz,15ns的SDRAM的工作频率是66 MHz。由于目前流行的是PC100的SDRAM,读者在采购内存时绝大多数希望选购符合PC100规范的SDRAM。PC100规格非常复杂,我们应该了解的部分主要是内存条上应带SPD,内存工作频率为100 MHz时,CL应为2或3个clk,最好为2 clk,tAC必须不超过6 ns等。
除了以上PC100规范要求的一些性能指标外,一个真正的发烧友还应该关心一下SDRAM芯片其他几个很重要的指标:如芯片的输出位宽、功耗(电压)等,因为这些指标也决定了内存的超频潜力--给内存超频的时候还是很多的,即使不超频,性能好的内存也意味着更高的稳定裕度和更好的升级潜力。
(二) SRAM
SRAM的速度快但昂贵,一般用小容量的SRAM作为更高速CPU和较低速DRAM 之间的缓存(cache).SRAM也有许多种,如AsyncSRAM (Asynchronous SRAM,异步SRAM)、Sync SRAM (Synchronous SRAM,同步SRAM)、PBSRAM (Pipelined Burst SRAM,管道突发SRAM),还有INTEL没有公布细节的CSRAM等。
SRAM是英文Static RAM的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。不像DRAM内存那样需要刷新电路,每隔一段时间,固定要对DRAM刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积,所以在主板上SRAM存储器要占用一部分面积,在主板上哪些是SRAM呢?
一种是置于CPU与主存间的高速缓存,它有两种规格:一种是固定在主板上的高速缓存(Cache Memory );另一种是插在卡槽上的COAST(Cache On A Stick)扩充用的高速缓存,另外在CMOS芯片1468l8的电路里,它的内部也有较小容量的128字节SRAM,存储我们所设置的配置数据。还有为了加速CPU内部数据的传送,自80486CPU起,在CPU的内部也设计有高速缓存,故在Pentium CPU就有所谓的L1 Cache(一级高速缓存)和L2Cache(二级高速缓存)的名词,一般L1 Cache是内建在CPU的内部,L2 Cache是设计在CPU的外部,但是Pentium Pro把L1和L2 Cache同时设计在CPU的内部,故Pentium Pro的体积较大。最新的Pentium II又把L2 Cache移至CPU内核之外的黑盒子里。SRAM显然速度快,不需要刷新的*作,但是也有另外的缺点,就是价格高,体积大,所以在主板上还不能作为用量较大的主存。现将它的特点归纳如下:
◎优点,速度快,不必配合内存刷新电路,可提高整体的工作效率。
◎缺点,集成度低,功耗较大,相同的容量体积较大,而且价格较高,少量用于关键性系统以提高效率。
◎SRAM使用的系统:
○CPU与主存之间的高速缓存。
○CPU内部的L1/L2或外部的L2高速缓存。
○CPU外部扩充用的COAST高速缓存。
○CMOS 146818芯片(RT&CMOS SRAM)。
广义的内存分为随机存储器(RAM,RANDOM ACCESS MEMORY)和只读存储器(ROM,READ ONLY MEMORY)。
SDRAM(synchronous dynamic random-access memory)即同步动态随机存取内存。在介绍SDRAM前,我们先了解下DRAM(Dynamic random-access memory),DRAR中文译为动态随机存取内存,也叫动态随机存取器,为什么叫动态随机存取器,原因是它的实现原理跟静态存储器SRAM不一样,DRAM是在芯片里集成很多个阵列的电容,DRAM存储二进制数据0和1就是通过给这些阵充放电荷实现。一个简单的单个DRAM存储单元示例图如下图所示。
单个DRAM单元实现电容充放电原理
电容C用来存储电荷,信号WRITE 1、WRITE 0控制开关晶体管Q1和Q2给电容充电和放电,实现二进制1和0存储。信号READ控制开关晶体管打开把电容C接到数据线DATA上,芯片内部处理电路通过读取DATA线上的电压信号来判断DRAM存储单元存储的数据为二进制1还是0。
从原理上去看DRAM实现数据存取很完美,但实际芯片按照上面的原理做好电路后,开关晶体管和电容本身都会有漏电流。漏电流会导致一个特别糟糕的情况,电容存储的电荷会慢慢通过漏电流方式流失掉,当电荷流失到一定的量后,内部电路读取电容的电压去判断数据时,就不能正确判断为二进制1了,这种情况下数据是错误。这样的错误肯定是不允许发生的,解决办法是通过定时刷新方式给电容充电,保证电容存储的电荷量稳定在理想的状态。因为这样的过程是一个一直的动态过程,动态随机存取器的名称由此而来。而SDRAM是DRAM的一种操作方式,如下图所示,SDRAM读写数据时,是通过在时钟的上升沿同步获取控制、数据信号,所以叫做同步动态随机存取器。
SDRAM在时钟CLK上升沿时同步获取控制、数据信号
DRAM和SRAM优缺点:
1. SRAM读写速度快,DRAM读写速度慢。
2. SRAM耗电量低,DRAM耗电量大。
3. SRAM制造成本高,容量低,DRAM制造成本低,容量大。
SDRAM接口信号
SDRAM主要信号如下(256Mb容量示例):
A0-A11: 地址信号。
BA0-BA1: Bank选择信号。
DQM0-DQM3: 读写数据掩码控制信号。
DQ0-DQ31: 数据信号。
CKE: 时钟使能信号。
CLK: 时钟信号。
CS: 片选信号。
CAS: 列地址选通控制信号。
RAS: 行地址选通控制信号。
WE: 写使能信号。
在上述罗列的信号中,A0-A11、BA0-BA1、CKE、CS、CAS、RAS、WE的不同组合,可以构成不同的Command如下图所示。
DRAM Commad真值表
从上图可以看到,DQ0-DQ31和DQM0-DQM3不参与组合成Command。这里说明下,DQMx是读写数据掩码信号,用于控制数据读写使能对应Byte的。它们的控制关系是DQM0控制DQ0-DQ7,DQM1控制DQ8-DQ15,以此类推。知道数据信号DQ0-DQ31不参与组合成Command后,在硬件设计的Layout阶段时,有时数据线不好走线,可以通过调换组内数据线来解决数据线Layout难度大问题。注意这里说的组内调换是单个Byte内的信号,DQ0-DQ7为一组,DQ8-DQ15为一组,以此类推,不能跨组调换,跨组调换读写数据就错误了。
这里介绍的组内数据线调换不影响数据的正确性,可能会有很多人困惑,我做了个图如下说明解释。如下图中,左侧为主控信号,右侧为DRAM。主控要写数据0x0F到DRAM中,因为数据线在DRAM端被调换了,所以实际到DRAM内的数据变为0x1D。这样看像是数据错了,但我们再看主控从DRAM读数据的情况,主控读数据时,DRAM内的0x1D顺着信号线原路返回,变成了0x0F,错错得正。所以DRAM信号线组内调线序不影响数据读写错误,但不能跨组调,不能跨组调的原因是即使有错错得正的逻辑,但是如果DQM信号没有使能对应的Byte,那就会导致数据缺失,所以必然出错。
在DRAM端做数据组内调换,不影响主控读写数据的正确性
当然,组内数据可调的这个思路,放在DDR3、DDR4等都可以的,但还是要先看DRAM规格书,确定数据线不参与任何Command组合,如果参与了就不能调,比如有的厂家的LPDDR就用了数据线来做Command。
STM32上的SDRAM电路设计
参考ST评估板MB1219的SDRAM部分电路如下,STM32使用SDRAM的目的是扩充芯片内存,由FMC接口控制,电路没什么复杂的,设计时注意了解各个信号的作用,然后参考规格书把信号一一对应连接上即可。评估板MB1219使用的主控是STM32F769NI,参考STM32F7xx规格书第86页的Table 12. FMC pin definition的SDRAM栏,有详细的信号定义。下图中的BA0和BA1接的信号为A14和A15,这里没有错,是ST工程师在设计评估板时,FMC总线上还挂了SRAM和Nor Flash,而A14和A15是SRAM和Nor Flash的,但对应SDRAM实际为BA0和BA1。
SDRAM参考设计电路
完成原理图设计,后面剩下的是大家比较关心的Layout要不要做信号线等长的问题,这个问题在网上一直是很多人热衷讨论的一个问题,各有说法。其实对于SDRAM,只要走线不会长度差得特别离谱,比如差不多十几个厘米这样的,不等长影响不会很大,但如果PCB空间资源足够的话建议按照500mil的规则做等长。如下图ST的评估板MB1219就做了等长。