DDR SDRAM是Double Data Rate SDRAM的缩写,即双倍速率同步动态随机存储器。DDR内存是在SDRAM内存基础上发展而来的,能够在时钟的上升沿和下降沿各传输一次数据,可以在与SDRAM相同的总线时钟频率下达到更高的数据传输率。虽然DDR2和DDR一样,都采用相同采样方式进行数据传输,但DDR2拥有两倍于DDR的预读取系统命令数据的能力。也就是说,在同样100MHz的工作频率下,DDR的实际频率为200MHz,而DDR2则可以达到400MHz。DDR2还引入了三项新的技术,它们是OCD、ODT和Post CAS。
我们的设计(图1)采用Cyclone III系列型号为EP3C16F484C6N的FPGA作为控制器,以MT47H16M16BG-5E(16M×16bit)的DDR2 SDRAM为存储器。用一个IP核完成对4片DDR2的控制(带宽为64bit),且DDR2的最高速率可达200MHz,以此完成对数据的高速大容量存储。由于采用一个DDR2的IP核进行控制,所以4片DDR2以地址和控制线共用、数据线独立的方式进行管脚连接。
图1 接口总框图
EP3C16只有TOP和BOTTOM边的BANK支持200MHz DDR2接口(因为DDR2管脚的特殊要求,DQS、DQ、DM管脚在FPGA上都需要专用管脚),且最高速率可达200MHz。
表1中Column I/O是指Top和Bottom I/O,Row I/O是指Right和Left I/O。Hybrid mode是指由Column和Row I/O混合。
从表1中可以看出,Cyclone III只有6系列的FPGA在Top和Bottom BANK才支持200MHz频率的DDR2。为了满足设计要求,我们将4片DDR2分别挂在FPGA的Top和Bottom的4个BANK。
从表2中可以看到,EP3C16 F484封装系列的FPGA每个边所支持的DQS和DQ组。因为在DDR中若干个DQ是由一个DQS进行采样的,所以FPGA以若干个DQ和一个DQS为最小单位进行分组。
表1 FPGA BANK管脚速度
表2 FPGA BANK DQ
如Number of ×8 Groups,其中×8就是指8个DQ,一个DQS即和8个DQ组成一个Group(即这8个DQ由这一个DQS进行采样)。FPGA分别有Left、Right、Top和Bottom四边,其表示FPGA的每边都支持4个DQS和DQ组,而每一边有两个Bank,即每个Bank都支持两个×8架构的DQS和DQ组。图2展示了FPGA的DQS和DQ组的分配。
由于设计中采用Top和Bottom边的Bank,这里以第3个Bank的DQS为例进行说明。在图2可以看到,FPGA的Bank3有三个DQS,分别为DQS1B、DQS3B和DQS5B。由于每组DQ都要和各自对应的DQS配对,所以理论上DQS1B应该和DQ1B为一组,DQS3B应该和DQ3B为一组,DQS5B应该和DQ5B为一组。
图2 FPGA BANK DQS/DQ
表3中展示了FPGA管脚中的DQ分配。可以看到,对于×8架构的DDR2,Bank3只有DQ3B和DQ5B,且DQ3B和DQ5B各自都有9个,DQS1B其实没有属于自己的DQ。其实在Bank4中还有1个DQS2B和8个DQ2B,1个DQS4B和8个DQ4B。
而对于×16架构的DDR2,则有18个DQ3B和1个DQ5B,DQS1B没有属于自己的DQ,其实在Bank4中还有17个DQ5B,这样在Bank3和Bank4中一共就有18个DQ5B。
表3 FPGA BANK Pin
在×32架构的DDR2中则有19个DQ5B,没有DQ1B和DQ3B,在Bank4中还有17个DQ5B,这样在Bank3和Bank4中一共就有36个DQ5B。
对于×9/×18/×36这里暂不讨论,其为QDRII SRAM设计,其多余DQ做奇偶校验使用。
从表4可以看出FPGA是如何支持不同架构的DDR2的,还可以知道同一组的DQ不一定在同一个Bank,不是每个DQS都有自己的DQ,即使DQS有自己的DQ,其DQ数量也不一定相同。
图3 FPGA DQ/DQS Pin
除了DQS和DQ外,DM也有自己专用的管脚,在DDR中DM为数据信号(DQ)屏蔽位,由于DM是以8bit为单位起作用的,所以理论上只要有8个DQ便会有一个DM。事实上在FPGA的Bottom边Bank中DM的分配如表5所示。
表4 不同架构DDR2的支持数量
表5 FPGA的Bottom边Bank中DM的分配
了解清楚FPGA中的DQS,DQ和DM分配,我们再来看看DDR2的架构。DDR2选用Micron生产的MT47H16M16BG-5E,其大小为16M×16bit,每一片分为4个Bank,每个Bank为4M×16bit。如果看到×16,你就认为这是一片×16架构的DDR2,再按照FPGA上×16架构的管脚去设计,那就大错特错了。
虽然该DDR2是16位的带宽,但其却有两个DQS,分别是LDQS和UQDS,也就是说其实两个DQS分别采样低8位和高8位数据。请注意,即使是32位带宽的DDR,其也有4个DQS,每个DQS也仅采样8位数据。至于有没有一个DQS能采样16位或32位数据的DDR,这就不为人知了。
确定了DDR2的架构,就确定了DDR2和FPGA的DQS,DQ和DM的连接方式。由于我们采用的是×8架构的DDR2,所以一组内的DQ仅需要8个,而有的DQS带有9个DQ,在选用该DQ的时候只要任意选取其中的8个就可以。
在SSTL-18电平标准中,为了实现更高的信号频率,输入信号需要和一个参考电压(VREF)进行比较输出后才被认为是实际输入。因为DDR2采用1.8V的SSTL电平进行数据传输,所以DDR2所在FPGA 的Bank电压必须是1.8V,FPGA就必须在该Bank使用VREF参考电压。在FPGA的每个Bank都有两个VREF参考电压输入,该Bank的I/O分属这两个VREF组,如在Bank3存在VREFB3N0和VREFB3N1。
当FPGA的一个Bank存在VREF输入或双向的管脚时,为了防止输出的开关噪声转移到VREF和限制输送到VCCIO的噪声水平,FPGA输入输出IO的位置有如下限制(BGA封装的FPGA):
• 每个VREF最多支持32个输入;
• 在Top和Bottom Bank每12个连续的管脚最多只支持9个输出。在Right和Left Bank每14个连续的管脚最多只支持9个输出;
• 在VREF和输出管脚(除了DQ和DQS)之间必须用两个输入或空脚进行隔离。一般是空着,因为输入会因为输出管脚引来的噪声而导致读入不正确;
• 如果不需VREF参考,一般在一个BANK中只要全部是同组数据总线或地址总线时,输出个数不受限制(即受同一个OE控制的不受限制)。如果不是同一个OE控制就要满足上面约束关系,以及驱动型接口要考虑驱动能力。
图4所示,输出脚必须和VREF用两个输入或空脚进行隔离。另外,由于DDR2的地址和控制线都是输出管脚,所以在手动分配管脚的时候很容易超出2所述的限制,而且FPGA是BGA封装,只从SYMBOL上很难看出管脚的连续性。FPGA的管脚在外部看来是方阵排列,但其在FPGA的内部却是线性的排列,所以硬件设计时最好通过软件去看管脚的连续性。在原理图设计分配DDR2所在Bank的输出管脚时,建议采用Quartus II软件自动分配,这样才能更好地避免错误。
图4 FPGA Output Pad
此外,还要注意:
• 在Cyclone III系列的FPGA中,不支持差分的DQS,该FPGA的IP只在写模式下用到DQS,在读数据时不用(因为IP复位时IP会发送接收训练序列自校正产生捕获时钟);
•多余不用的DQ可以当做普通I/O使用;
• Quartus II软件自动分配管脚时不会区分同一组的DQ和DM,即DQ和DM可以互换(在EP3C16时仅有TOP边的DQ和DM可以互换);
• DDR2的地址和控制线在FPGA上没有专用管脚,可以任意使用其它IO(只要符合输入输出位置限制);
• 可以使用任何一对临近的差分I/O管脚当作DDR2的时钟。