在第一篇试用帖子里从宏观谈了谈Cyclone V的优点,接下来的帖子我将具体到某一方面的功能来介绍Cyclone V器件的使用。这次涉及到DDR3,使用Altera的UniPHY控制器,采用软核和硬核两种模式。
我的DDR3控制器是例化在Qsys里的,除了它之外还有Nios II处理器,On-chip RAM,JTAG-UART等等常用的外设。首先看看软核和硬核控制器的资源占用:
采用软核控制器的资源:
采用硬核控制器的资源:
从上图可以看出,软核的资源使用量大约是硬核的4倍。
在时序上,Altera官方给出的DDR3软核和硬核的频率上限分别为300Mhz和400MHz,当然速度等级为C8的器件频率会低一些。
当选用软核控制器,工作在Half Rate模式下,DDR3频率设定为400MHz时,时序分析显示DDR3控制器的setup时间违规。如下图所示:
下面说一说软核的例化。
基本参数
Quartus version :QuartusII v12.0sp2
FPGA :5CGXFC7D6F31C7ES
Kit :Cyclone V GX FPGA Development Kit
Memory device :DDR3 SDRAM (Micron MT41J128M16LA-15E)
Memory speed :667 MHz
Memory topology :X32-bit,2 DDR3 SDRAM components withT-topology(这里不使用ECC)
IP used :DDR3 SDRAM Controller with UniPHY IP
例化步骤
1. 设定速度等级为7
2. 在右侧的内存预设中选择Micron MT41J128M16LA-15E,点击Apply
3. 设定PLL参考时钟为125 MHz
4. 选择 half-rate
5. 进入Memory Parameter,修改interface width为32
6. 进入Controller Settings,选中Generate power of 2 data bus width for Qsys
7. 选中Enable Avalon MM byte enable signal
硬核与软核的设计基本相同,不同之处是要选择Enable Hard External Memory Interface,将速率改为full rate, 在ControllerSettings中将MPFE的port0宽度改为64.
DDR3控制器例化完成后要进行IO的设置,包括位置的分配和属性的添加。位置的分配可以自己写TCL来完成,属性的添加利用控制器IP自带的pin assignment TCL来完成。需要注意的是名称的统一。分配完在Pin Planner里看一下,确认是否分配正确。
时序约束方面,生成的IP会自动添加SDC到TimeQuest中,如果发现没有,检查Files路径中是不是没有包含Qsys的QIP。自带的SDC完成了大量的工作,包括DDR的时钟,clock group,false path,multi-cycle等等约束。我们自己需要写的SDC则比较简单,约束一下晶振输入,derive一下PLL,设定一下IO的延迟即可。首次STA结果可能有很多Clock域的交叠,需要修改SDC来隔开。顺利的话反复几次就可以完成约束。
总结一下:
DDR3在越来越多的系统中扮演着重要的角色,高速、高效的控制器至关重要。Altera这些年在降低DDR2、DDR3设计的门槛上做了大量的工作,从HPC到HPC II,现在的趋势是使用UniPHY。包括在License授权方面,Altera也放开了很多,只要是订购版的Quartus II用户,就有各种自带的内存控制器的授权。最新推出的硬核内存控制器,极大地方便了用户的设计。就我个人而言,它简化了DDR3管脚的分配。有过硬件设计经验的工程师,十有八九都在FPGA的内存管脚分配问题上费过不少脑筋。