DDR学习之《MIG IP核配置选项理解》(非常详细) DDR学习之《MIG IP核配置选项理解》前言俗话说既要知其然还要知其所以然本文主要讲解在配置mig ip核遇到的疑问详细讲解每个配置选项的应用场景及方案。对于像我这类什么都要搞懂底层逻辑的人来讲非常友好第一步——搜索MIG IP核在IP核搜索输入框中输入MIG然后双击Memory Interface Generator弹出配置界面。第二步配置界面如下点击next。第三步——AXI4 Interface OR Native Interface可以在Component Name中修改IP核名称。如果勾选AXI4 Interface则MIG IP核是用户通过AXI4接口控制DDR读写。不勾选的话则是使用NATIVE接口读写DDR。配置完成后点击Next。第四步——是否选择其他兼容FPGA如果你现在使用的FPGA芯片与其他型号的芯片是PIN-TO-PIN的则可以勾选对应的型号以实现兼容。第五步——DDR芯片类型这里选择你的DDR芯片类型完成后点击Next。第六步——DDR3控制器配置选项Clock PeriodDDR物理芯片使用的时钟频率设置为支持的最大值即可与FPGA型号有关。PHY to Controller Clock RatioDDR物理时钟与MIG用户时钟的比值物理时钟是800M这里默认41所以用户时钟ui_clk就是200M。VCCAUX_IO这是FPGA高性能bankHigh Performance bank的供电电压Vccaux_io必须设置为2.0V以实现最高数据速率。在FPGA高范围bankHigh Range banks中无法使用Vccaux_io。因为本实验使用的是高范围bank所以未使用Vccaux_io。Memory TypeDDR3储存器类型选。Components (内存颗粒)是指DDR芯片。UDIMM (无缓冲内存条)即最常见的标准台式机内存条。地址/控制信号直接从内存控制器未经缓冲地传到DRAM颗粒。RDIMM (带寄存器内存条)主要用于服务器和工作站。它在内存条上加了一个寄存器Register 来缓冲地址/控制信号。SODIMM (笔记本内存条)即笔记本电脑等紧凑型设备中使用的小尺寸内存条。如何选择开发板板载了DDR芯片 → 选择Components开发板上有台式机内存插槽 (DIMM) → 选择 UDIMMs开发板上有服务器内存插槽 → 选择 RDIMMs开发板上有笔记本内存插槽 (SO-DIMM) → 选择 SODIMMs。Memory Part由于我的开发板上面用的是DDR3芯片这里就直接选择DDR3 芯片的具体型号其他三种存储器型号只能等用到了再说。开发板上面的DDR3芯片型号是NT5CC256M16ER-EKI这里没有完全一样的型号选择容量和位宽一样的即可也就是256M16类型的都行。这里我们选择MT41J256m16XX-107。Memory VoltageDDR3芯片的电压选择选1.5V。Data Width数据位宽选择这个参数设定了MIG IP核用户侧AXI接口的数据总线位宽。它的值由你使用的DDR颗粒的位宽和数量共同决定。例如若使用4片数据位宽为16bit的DDR颗粒通常就需要将 Data Width 设置为 16 * 4 64bit。理论带宽 DDR时钟频率 × Data Width × 2 (DDR双沿特性)800M x 64 x 2 12.8 GB/s。因为我们是有4片DDR3芯片每片位宽是16bit这里我们选择64bit。ECCECC 校验使能数据位宽为72位的时候才能使用。Data Mask启用后MIG IP核的用户接口UI会提供一个 app_wdf_mask 输入信号。它的核心作用是允许你在一次突发Burst写入中选择性地屏蔽即不写入某些数据字节。其实app_wdf_mask 也native 接口才会用到我们使用的是AXI4接口所以这里用不到。实际上AXI4接口中已经包含有类似的信号就是wstrb信号。Number of Bank MachinesMIG IP 核中一个用于在硬件资源消耗和内存访问效率之间做权衡的关键参数决定了 MIG 内部可以同时处理的不同 DRAM Bank存储库请求的数量。增加数量性能优先允许同时打开更多 DRAM Bank在执行访问不同 Bank 的突发、随机请求时减少等待Bank关闭的时间提升效率。减少数量资源优先节省 FPGA 的 Logic Cell 等资源降低时序收敛的难度适合 Bank 间访问不频繁或逻辑资源紧张的设计。增加Bank Machine的数量就是为了能并行处理发往不同Bank的请求从而充分发挥DDR3 Bank交错的潜力提升整体吞吐量。取值范围通常是 2 到 8对于有 8 个 Bank 的 DDR3 芯片MIG 默认值通常为 4平均一个 Bank Machine 管理两个 Bank。后期可以根据所使用的FPGA型号具有的资源和时序收敛情况以及项目所需数据传输带宽需求进行调整。ORDERING这个参数也是性能和资源的权衡可根据实际资源消耗进行设置通常保持NORM默认即可。NORM (Normal正常模式)这是默认选项启用命令重排序功能。控制器会分析等待队列中的命令并调整执行顺序以最大化数据吞吐量并降低延迟。该模式也适用于AXI接口。STRICT (Strict严格模式)禁用命令重排序功能。控制器严格按照用户逻辑提交命令的先后顺序执行。该模式会移除相关逻辑从而降低FPGA的资源利用率。配置完成后点击Next。第七步——AXI4参数选项Data WidthAXI DATA WIDTH 是MIG内部AXI接口的位宽而之前配置的DATA WIDTH是连接DDR芯片的物理接口位宽。在AXI模式下MIG的AXI DATA WIDTH被固定为DATA WIDTH的8倍。这是由DDR的 突发Burst长度为8 的特性决定的。为了保证一次DDR突发传输正好对应一次AXI突发传输实现最高效率两个位宽必须满足 AXI DATA WIDTH 8 × DATA WIDTH 的关系。Aribitration Scheme仲裁方案这里有6种方案可选分别是TDM、Round-Robin、RD_PRI_REG、RD_PRI_REG_STARVE_LIMIT、WRITE_PRIORITY和WRITE_PRIORITY_REG。TDM(时分复用)固定交替读写通道严格按时钟周期轮流获得访问权。即便某一侧没有请求预留给它的时间片也会被空耗掉。也就是说读写都分配有一段时间这一段时间读写下一段时间写即使没有读写请求也把这段时间空着。Round-Robin(轮询)动态交替读写通道交替优先。上次谁被服务了这次就优先服务另一个。若双方同时请求写通道会获得优先权。RD_PRI_REG(读优先寄存器)读通道默认优先。仅当读请求的等待时间达到预设阈值时写请求才能被处理。读优先级仅次于RD_PRI_REG_STARVE_LIMIT。RD_PRI_REG_STARVE_LIMIT(带饥饿限制的读优先)读通道绝对优先。仅当完全没有读请求或读请求已积累到一定数量时写请求才能被处理。读绝对优先。WRITE_PRIORITY_REG(写优先寄存器)写通道默认优先。工作逻辑与RD_PRI_REG相反仅当写请求等待超时后才处理读请求。写优先级仅次于WRITE_PRIORITY。WRITE_PRIORITY(写优先)写通道绝对优先。工作逻辑与RD_PRI_REG_STARVE_LIMIT相反仅当写请求耗尽后才处理读请求。写绝对优先。我现在是想做一个数据采集的功能需要把ADC数据写入DDR3芯片然后再读取出来。需要先保证写入DDR3数据的完整性所以选择WRITE_PRIORITY仲裁方式。如果后期测试发现写性能已经能完全满足可以降低一些写性能使用WRITE_PRIORITY_REG仲裁方式。Narrow Burst Support用于控制MIG IP核是否支持小于其原生数据总线宽度的AXI突发传输。简单来说它决定了MIG能否处理“窄突发”。所谓窄突发即AXI主设备在一次多拍的突发传输中每一拍的数据宽度由 AxSIZE 信号决定小于MIG的 AXI DATA WIDTH。如果AXI主设备数据位宽与MIG匹配建议设置为 0禁用。这样能节省资源、降低逻辑复杂度并有助于时序收敛。如果AXI主设备数据位宽小于MIG则需要启用。否则当AXI主设备发出小于MIG位宽的请求时数据可能会出错。Address Width地址位宽bank(3)row(15)col(10)列内偏移位宽(3) 31。这里的列内偏移位宽由DDR突发长度固定为8决定而不是由数据位宽决定。因为一次突发传输8拍所以需要3位来寻址这8个拍。ID WIDTHID Width 参数在 AXI 接口下是固定值无法修改。它用于设置 AXI ID 信号的位宽以区分不同的事务。固定值主要是为了在 AXI 接口的灵活性和 MIG 控制器的硬件资源之间取得平衡。如果 ID 位宽太大会过度消耗 FPGA 内部的 Bank Machine 等资源可能影响性能和时序收敛。配置完成后点击Next。第八步——存储器选项Input Clock Period MIG IP核的输入参考时钟周期从外部提供给MIG IP核的时钟周期。它通常由FPGA的系统时钟比如开发板上的晶振或PLL输出的时钟提供。这个时钟是MIG内部PLL的输入源。MIG内部的PLL会以此为基础通过倍频或分频来生成IP核正常工作所需的所有内部时钟如DDR芯片的时钟800M用户界面时钟200M。Select Additional Clocks让你决定是否要生成额外的用户时钟来驱动IP核外部的FPGA逻辑。因为MIG内部已经有一个强大的PLL能生成多个频率的时钟。直接使用MIG提供的这些时钟可以省去额外添加一个时钟管理IP如MMCM或PLL的资源开销。Read Burst Type and LengthMIG IP核在接收到AXI请求后实际去操作DDR内存芯片时使用的类型属于物理层。它决定了数据在DDR芯片物理内部的排列和访问顺序。Sequential (顺序模式)地址连续递增适合访问大块连续数据。Interleaved (交错模式)地址以特定方式交错可优化特定Cache Line访问在某些随机或短突发访问中效率更高。Output Driver Impedance Control输出驱动阻抗控制控制FPGA侧DQ/DQS等输出引脚的驱动阻抗。通过匹配PCB走线阻抗来减少信号反射保证信号完整性对高频DDR接口至关重要。外部240Ω参考电阻分频得到如 RZQ/7 (≈34Ω) 为默认值RZQ/6 (40Ω) 也较常用。RTT (On-Die Termination片上端接电阻在DDR芯片内部为DQ/DQS等信号提供终端匹配电阻吸收信号反射进一步改善信号质量。使能时通常由DDR芯片内部自动控制MIG 7系列不支持动态ODT。通常设置为 RZQ/6 (40Ω) 或 RZQ/4 (60Ω)具体需参考DDR芯片手册。Controller Chip Select Pin控制是否在物理接口上生成 CS_N (Chip Select, 片选) 信号。用于在多Rank系统中选通特定Rank。只有1个Rank时可选Disable会释放一个FPGA引脚并强制拉低多Rank系统必须保持Enable。BANK_ROW_COLUMN地址映射模式决定用户提供的地址如何被MIG控制器解析为DDR物理地址Bank、Row、Column。它不影响功能只影响性能。BANK_ROW_COLUMN: 地址高位为Bank地址。将连续的应用程序地址映射到不同的Bank利用Bank并行性提升随机访问性能。适合访问模式随机性强的场景。BANK_ROW_COLUMN符合我们理解的寻址方式先找BANK再找BANK对应的ROW最后再是COL。ROW_BANK_COLUMN: 地址高位为Row地址。将连续地址尽量保持在同一个Row减少Bank切换开销提升连续访问性能。适合访问模式连续性强的场景。配置完成后点击Next。第九步——FPGA OptionsSystem ClockMIG IP核输入时钟。本实验选择“No Buffer”因为IP核的输入系统时钟是单端时钟是由内部的MMCM产生的MMCM所产生的时钟默认添加了buffer。Reference ClockMIG IP核参考时钟。同样选择“No Buffer”将由时钟模块生成。也可以选择“Use System Clock”这个选项因为当前IP核参考时钟是200Mhz而MIG IP核的系统时钟刚好也是200Mhz。System Reset Polarity复位有效电平选择。一般选择“ACTIVE LOW”低电平有效。Internal Vref内部参考管脚表示将某些参考管脚当成普通的输入管脚来用。由于当前使用的开发板的IO资源较为紧张因此这里需要选择“ON”把参考管脚当做普通的输入管脚来用。IO Power Reduction MIG IP 核中用于降低 DDR 接口 I/O 功耗的选项开启后能让 FPGA 在 DDR 总线空闲时通过关闭 DQ 和 DQS 引脚的部分输入缓冲器来节省功耗。如果系统对功耗有要求可以尝试开启该功能以降低功耗DDR总线空闲时间较长的情况下。如果更看重稳定性尤其是在前期调试阶段可以保持默认的关闭状态排除掉一个潜在的变量。这是一个非关键功能不影响MIG的核心功能和性能。我的建议调试阶段可以保持关闭状态避免因为这个功能影响到核心功能的开发、测试调试完毕后可以开启。事实上应该也没有多少人会在意这点功耗。哈哈一直关闭也没啥大问题XADC InstantiationXADC 模块例化。使用MIG IP核运行的时候需要进行温度补偿可以直接选择XADC模块的温度数据引到MIG IP核来使用否则需要额外提供温度数据所以本实验选择“Enable”。配置完成后点击Next。第十步——Extended FPGA OptionsDCI Cascading Information 用来在FPGA内部建立一个“阻抗校准共享网络”。通过指定一个连接了参考电阻的Master Bank让其他Slave Bank共享其校准结果从而节省宝贵的FPGA引脚并简化PCB设计。它的配置与否完全由你的硬件原理图决定。Internal Termination for High Range Banks是用来配置FPGA内部High Range (HR) Bank的I/O接口片上终端电阻IN_TERM的。这个电阻是用于阻抗匹配的目的是在信号源和负载之间实现阻抗匹配减少高速信号在传输线上的反射保证信号完整性。简单来说就是让信号传得更稳、更准。最稳妥的做法是参考你所用FPGA开发板的原理图或参考设计看官方示例用的是哪个值。配置完成后点击Next。第十一步——Pin/Bank Selection ModeFixed Pin Out用于PCB已设计完成FPGA管脚已经固定的场景。New Design用于全新的项目PCB还未设计需要MIG帮助选择最优管脚的场景根据结果绘制PCB。配置完成后点击Next。第十二步——Pin Selection由于我使用的是开发板已经PIN脚选择“Read XDC/UCF”直接导入管脚分配文件。选择ddr3引脚约束文件点击OK。点击Validate弹出以下界面。点击OK。第十三步——剩余步骤点击Next。显示IP核配置情况点击Next。点击Accept然后点击Next。点击Next。点击“Generate至此MIG IP核配置完成。