网站管理助手 mysql,网络公司除了建网站,汕头网站建设推广价格,wordpress取消页尾前几篇文章讲解了SDRAM到DDR3各自的变化#xff0c;本文讲解如何使用DDR3#xff0c;在Altera的Cyclone IV开发板上一般会使用SDRAM作为存储数据的芯片#xff0c;而Xilinx的S6和7000系列一般使用DDR3作为存储数据的芯片。 从SDRAM芯片内部结构分析其原理#xff0c;从内部… 前几篇文章讲解了SDRAM到DDR3各自的变化本文讲解如何使用DDR3在Altera的Cyclone IV开发板上一般会使用SDRAM作为存储数据的芯片而Xilinx的S6和7000系列一般使用DDR3作为存储数据的芯片。 从SDRAM芯片内部结构分析其原理从内部结构讲解SDRAM与DDR的变化从内部结构讲解DDR到DDR2的变化从内部结构分析DDR2到DDR3的变化及DDR3原理图分析。 SDRAM的控制器还算比较简单一般可以通过Verilog HDL去实现也推荐初学者写一下SDRAM的驱动相比UART、IIC这些驱动难度还是会大一点能够强化状态机的代码能力另外也能充分理解SDRAM的控制流程。 对于DDR3控制器来说一般都是调用Altera或者Xilinx官方的MIG IP来完成设计DDR3控制器的难度偏大即使通过Verilog HDL写出来性能和稳定性也未必能得到保障。 Vivado通过调用MIG实现对DDR3的控制用户在使用时需要了解该IP的各个参数。Xilinx提供了ug586对该IP的功能和参数进行说明由于该IP的功能比较多导致手册有六百八十页。涉及到DDR3相关内容也只有一百多页内容本文结合手册对IP配置的各个参数进行讲解。
1、生成MIG IP 首先在vivado中创建一个工程然后添加MIG IP如下图所示。 图1 添加MIG IP 双击进入MIG配置界面后首先如下图所示该界面显示MIG的功能以及本工程选定的fpga器件型号我使用的是zynq7030器件直接进入下一步即可。 图2 向导界面 进入MIG Output Option页面该页有几个选项意思分别如下 1. Create Design创建DDR3 IP工程设计此处勾选。 2. 表示对已有工程引脚约束进行验证。 3. 这个IP生成后的模块名。 4. 由于这个IP支持多个控制器所以这里需要选择主控的数量FPGA使用的话一般只会存在一个。 5. 这个IP有两种接口默认使用的接口比较简单适合FPGA内部使用勾选5处会使用AXI4接口这个接口一般给ARM端控制DDR3会比较方便FPGA内部使用AXI4接口就是把简单的问题复杂化且浪费资源。 图3 MIG Output Option配置页面 点击Next到Pin Compatible FPGAs 配置页面如下图所示该界面可用于配置选择和当前所设定的唯一器件型号做引脚兼容的其它FPGA型号。对于可能升级器件型号的应用而言这个功能是很实用的。本设计保持默认不做配置。 图4 Pin Compatible FPGAs配置页面 点击Next进入到如下图所示的Memory Selection配置页面该IP可以控制DDR3、DDR、LPDDR2等多种器件所以这里需要选择这个IP具体控制哪种芯片开发板上板载的是DDR3这里选择“DDR3 SDRAM”即可。 图5 Memory Selection配置页面 点击Next进入到如下图所示的Controller Options配置页面该配置该界面是主要参数的配置界面之一涉及的内容比较多。 1、Clock Period设置DDR3的IO时钟频率根据开发板上实际DDR3支持的最大时钟频率进行设置MT41K256M16RE-125最大支持800MHz的接口时钟在加上ZYNQ 7030是K7架构DDR3运行在800MHz时钟频率下是没有问题的。但是本文只是对IP进行测试所以选用400MHz即可。 2、PHY to Controller Clock RatloFPGA给DDR3芯片提供的时钟频率为Clock Period但是FPGA内部其余模块的时钟一般是运行不到Clock Period这么高的时钟频率的所以需要给FPGA内部提供一个较低的时钟这个参数就是用来设置DDR3接口时钟与MIG IP提供给FPGA内部其他模块的时钟(ui_clk)频率比值。
如果fpga是A7系列的芯片那么在设置Clock Period为400MHz之后该选项应该会被锁定为4:1也就是说内部逻辑时钟只支持100MHz。 由于ui_clk与DDR3接口时钟频率比值为4:1且DDR3的数据在双沿传输导致用户每次读写MIG IP的数据位宽是DDR3芯片数据位宽的8倍DDR3如果数据位宽为16位那么用户每次读写IP的数据为128位这是不是与DDR3芯片内部的预取思路差不多通过位宽换取时钟频率。 3、Vccaux_io设置bank的供电电压一般都是锁死的会根据DDR3时钟频率变化而变化。 4、Memory Type一般选择Components即可其余几种与内存条有关吧。 5、Memory Part选择DDR3的型号芯片类型不同会涉及具体的DDR3时序参数不同以及地址线和数据线的位数不同。 6、Memory Voltage选择芯片引脚的电平标准DDR3一般只有1.5V和1.35V两种根据原理图选择支持的电平的类型即可。 7、Data WidthDDR3读写数据位宽根据原理图选择DDR3位宽。前文介绍过核心板上有两颗DDR3芯片采用数据线扩展方式连接支持32位读写数据。但是本文只使用其中一块DDR3作为存储体所有读写数据位宽为16。 图6 Controller Options配置页面 8、ECC数据线多余72为才能使用的功能。 9、Data Mask启用之后可以通过一个掩膜信号去控制DDR3写入数据本质就是去控制DDR3的DM引脚勾不勾选无所谓一般也不会使用此功能。 10、Number of Bank Machies选择bank数量DDR3虽然有8个bank但是如果不需要全部使用时可以只选择部分bank降低功耗节约资源默认使用4个bank。 11、ORDERINGDDR控制器调度命令的顺序的配置当选择strict时严格按照命令先后顺序执行选择normal时为了得到更高的效率可能对命令重排序。 点击Next进入到如下图所示的Memory Options配置页面下。 图7 Memory Options配置完成后页面 1. Input Clock Period这个时钟是提供给MIG IP的时钟sys_clk如下图所示为MIG IP内部时钟的结构图sys_clk进入IP之后会先经过一个锁相环PLL锁相环会根据这里的输入时钟产生MIG IP内部各种所需的时钟所以sys_clk的频率选择并没有限制下拉框中的各种频率值都可以选择。 但是下图中还需要给MIG IP提供一个200MHz的IDELAY参考时钟至于IDELAY的功能相比不用多说了吧前文讲解原语时详细讲过。那么是不是可以把这两个时钟进行合并那么FPGA就只需要给MIG IP提供一个200MHz的时钟就行了这个200MHz时钟既是IDELAY的参考时钟又作为该IP锁相环输入时钟。 图8 MIG时钟结构图 2.Read Burst Type and Length设置为顺序读写Sequential从SDRAM到DDR3都支持该功能该参数在模式寄存器中进行设置两种读写方式的区别在SDRAM的文章中详细分析过需要了解的可以查看。 3. Output Drive Impedance Control输出驱动阻抗控制选择RZQ/7。 4. On Die Termination片上终端电阻设置为R ZQ/4。 5. Controller Chip Select Pin片选信号设置为Enable如果开发板上DDR3的CS管脚未连接到FPGA设置为Disable。 6. Memory Address Mapping SelectionDDR和AXI总线之间的地址映射存储器地址映射选择。默认选择后者在调用IP时其实不会关心bank地址和行、列地址。 点击Next进入到如下图所示的FPGA Options配置页面中如下图所示。 图9 FPGA Options配置页面 1、System Clock设置系统时钟sys_clk的来源图7设置为200MHz。由FPGA内部提供不由管脚输入选择No Buffer。如果实际硬件管脚有提供200MHz时钟也可以选择Differential差分输入或Signal-Ended单端输入。 2、Reference Clock设置图8中IDELAY参考时钟200MHz的来源由于在图7中将系统时钟设置为200MHz可以选择Use System Clock将两个输入时钟合并一个共用的200MH输入。如果图7中系统时钟设置不是200MHz这里配置选项就没有“Use System Clock”只能由管脚端口输入时钟或者FPGA内部产生这个200MHz时钟。 3、System Reset Polarity系统复位极性设置为ACTIVE LOW低电平。 4、Debug Signal for Memory Controller关闭存储器控制器的调试信号如果选择ON就会在IP中添加ILA作为调试本文并不需要关闭即可。 5、Sample Data Depth只有4设为ON此处才能设置就是设置ILA采集数据的深度。 6、勾选internal Verf允许把参考引脚作为正常的IO引脚使用。 7、IO Power Reduction相当于不操作时进入休眠状态降低功耗这个一般关闭。 8、XADC Instantiation使能MIG IP通过XADC来获取温度实现温度补偿没有单独使用XADC时启用该功能。 点击Next进入到如下图所示的Extended FPGA Option 配置页面中其中1和2只有在HP Bank的FPGA中才会出现HR bank没有这两个设置内容一般默认即可。设定内部终端阻抗Internal Termination Impedance为50 Ohm。 图10 Extended FPGA Option配置页面 点击Next进入到如下图所示的IO Planning Option配置页面中如果当前IP仅用于仿真可以选择New Design。本次实例最终是要进行上板测试的则选择“Fixed Pin Out: Pre-existing pin out is known and fixed”。 图11 IO Planning Option配置页面 点击Next进入到如下图所示的Pin Selection配置页面中所有DDR3存储器相关的引脚定义引脚号以及IO电平标准的配置需要和原理图连接相一致。有2种配置方式其中一种配置方式是采用手动输入的方式另一种采用导入.ucf约束文件方式更加方便添加约束的步骤如下图所示。 图12 Pin Selection配置页面 点击OK后如下图所示Pin Selection页面中所有DDR3存储器相关的引脚都已经配置完成。点击按钮“Validate”做语法检查弹出如下图所示的DRC Validation Log message窗口表示引脚分配通过DRC检查点击OK。 图13 Pin Selection配置页面管脚分配验证 到此MIG IP的配置就基本完成了之后的界面均点击“Next”直到生成IP为止。 图14 生成MIG IP 2、总结 生成MIG IP需要特别关注的就是时钟的设置主要包括4个时钟信号。 图6中1处决定DDR3芯片工作时端口时钟频率也就是DDR3芯片的差分输入时钟频率。 图6的2处决定MIG IP输出给用户端口的相关信号的时钟频率与DDR3芯片差分输入时钟频率的比值。根据FPGA的架构不同该处能够设置的比值不同对于A7架构用户逻辑很难运行在200MHz时钟频率下所以当1处设置为400MHz时2处不支持设置成2:1只能设置为4:1。但是如果FPGA架构为K7当1处设置为400MHz那么2处可以设置为2:1即用户时钟接口信号的频率支持200MHz。 图6中两处设置分别决定DDR3芯片差分时钟频率MIG IP的用户接口信号ui_clk的频率。 然后MIG IP还需要输入两路时钟信号一路作为内部IDELAY延时的参考信号固定为200MHz。 另一路为MIG IP系统时钟通过内部锁相环生成需要的各种频率信号由于这一路时钟信号作为锁相环的输入所以对频率的具体数值没有要求。因此图7的1处可以设置为任意频率的时钟信号。 既然系统时钟信号频率可以是任意值那么就可以将频率与参考时钟的频率设为一致之后就可以只给MIG IP提供一路200MHz的时钟信号这一路时钟既作为IDELAY的参考时钟信号又作为MIG IP的系统时钟输入。这就是图7的1处和图9中部分设置。 其余很多设置都是默认的熟悉原理即可MIG用户读写数据位宽与图6中2的设置和数据位宽的设置有关最终要达到数据传输速率一致具体问题具体分析。 本文完成了对MIG IP的参数分析和设置生成了IP下文将讲解生成IP的各个信号的含义以及对该IP的仿真及上板验证。 如果对文章内容理解有疑惑或者对代码不理解可以在评论区或者后台留言看到后均会回复 如果本文对您有帮助还请多多点赞、评论和收藏⭐您的支持是我更新的最大动力将持续更新工程