ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

DDR学习记录

DDR学习记录 DDR是什么太多的原理这里不介绍只需要知道DDR内存是一种双倍数据速率的同步动态随机存取内存通过时钟信号的上升沿与下降沿同时传输数据显著提升数据处理速度。DDR的型号有什么含义每一种DDR都不是随便命名的都有其含义。以三星的DDR4颗粒K4A4G165WF-BCTD为例。K三星品牌标识。4产品类别固定代表 DRAM 芯片。A产品代数A代表 DDR4。B为DDR5。4G单颗容量为 4Gb (Gigabit)换算成字节为 512MB (4Gb / 8 512MB)。16数据位宽为 x16即16位并行接口。5Bank数量DDR4中代码5通常对应16个Bank。W工作电压W代表标准的 1.2V (DDR4)。FDie修订版本代表工艺迭代版本。BCTD后缀综合定义了封装(B)、温度等级(C) 和速度(TD)。TD对应 DDR4-2666时序CL19。其实这些参数最关心的就是容量和数据位宽。DDR如何存储和读取数据DDR内存的核心是动态随机存取存储器DRAM技术。它存储数据的“细胞”被称为存储单元每个单元由极其微小的一个晶体管和一个电容组成。存储方式数据以电荷的形式存在电容里。电容充电代表逻辑“1”放电或未充电代表逻辑“0”。这个电容非常小容量仅有数十飞法拉fF。易失性与刷新电容会自然漏电所以数据无法长久保存断电即失。为了维持数据内存控制器必须周期性地读取并重写数据这个过程叫刷新Refresh。标准要求每64毫秒内完成一次全阵列刷新。DDR内部的数据并非杂乱堆放而是像一座精心设计的“数据图书馆”。逻辑Bank (Logical Bank)芯片内部被划分为多个逻辑Bank可以看作是图书馆里的不同“房间”。行 (Row) 与 列 (Column)每个Bank内部是一个存储阵列像一个“表格”。行地址Row Address 确定数据在哪一行列地址Column Address 确定数据在哪一列。行列交汇点就是存储单元即最小的可寻址单位。寻址流程读取数据时内存控制器会依次发送Bank地址 → 行地址 → 列地址。为了节省芯片引脚行地址和列地址是分时复用同一组地址线来传输的。IP核配置controller and physical layer: 一般都选择该模式集成了控制层和物理层physical layer only: 只包含物理层控制方面命令解析bank管理刷新等需要自己去写physical layer PingPong: 物理层的特殊模式有两个不同的控制体分时复用一块ddrAXI4 interface如果选择后是AXI4接口不选择是native接口memory device interface speed: 选择物理层的时钟周期单位是ps注意有周期的范围PHY to controller clock frequency ratio: 控制器用户侧的时钟和物理层时钟的比例4:1是比较常用的用户侧的时钟率 物理层时钟频率 / 4勾选specify MMCM M and D后续的时钟配置后可以自己设置倍频和分频参数来生成所需时钟Reference input clock speed(ps): 外部提供给DDR的时钟Controller Options (控制器选项 - 左侧)Enable Custom Parts Data File (启用自定义部件数据文件)当前未勾选。通常保持未勾选。Vivado 内部有庞大的内存条/芯片数据库。如果你使用的 DDR3 芯片不在 Xilinx 的默认列表中或者你想手动覆盖某些参数可以勾选此项并加载一个 CSV 文件。Configuration (配置方式)可选几种模式Components (组件/芯片)表示你直接在 PCB 上焊接了一颗或多颗 DDR3 芯片最常见的做法。DIMM表示你使用的是标准的台式机/服务器 内存条通常用于 VC709 等开发板或服务器加速卡。Memory Part (内存型号)根据自己的DDR型号选择Memory Details (内存细节)不同型号内存细节不一样和自己的DDR对应起来即可。当前显示的是 MIG 根据上面的型号自动解析出来的物理结构4Gb单颗芯片容量为 4 Gigabit即 512MB。x8单颗芯片的数据位宽是 8 bit。Row16, Column10, Bank3这是 DDR3 内部的寻址阵列结构行地址 16 位列地址 10 位8 个 Bank 需要 3 位地址线。Rank1单 Rank通常单颗芯片或单面内存条为单 Rank。Slot (插槽)Single (单个)。表示控制器只控制一组物理接口一个 Rank。如果是 DIMM 且双面可能会有 Dual 选项。IO Memory Voltage (IO 内存电压)标准 DDR3 的电压是 1.5V。DDR3L低电压版是 1.35V。必须与你的硬件设计一致。Data Width (数据位宽)极其重要这是 FPGA 与 DDR3 之间总的数据线宽度。前面显示单颗芯片是 x8。这里 Data Width 选了 16意味着你的硬件设计是将 2 颗 x8 的芯片并联在一起使用拼接成 16 bit 位宽。ECC (错误纠正码)灰色不可选。因为数据位宽是 16ECC 通常需要额外的 8 bit 校验位即 16824 或 32840。16 位宽不支持 ECC。Data Mask (数据掩码)DM 信号用于在写入时屏蔽特定的字节实现字节级写入例如只写 16 位中的低 8 位。通常都需要勾选。Memory Address Map (内存地址映射)决定控制器输出的地址线Address如何映射到物理芯片的行、列、Bank 地址上。通常保持默认ROW COLUMN BANK即可除非有特殊的地址交错需求。Ordering (排序)指命令的调度顺序。Normal 是最标准的顺序执行。Force Read and Write commands... (强制使用 AutoPrecharge)如果勾选当列地址 A3 为高时控制器会自动在读写后执行预充电关闭当前行。不勾选则按正常流程由控制器动态调度。通常保持不勾选。Memory Options (内存选项 - 右侧)这部分定义了 DDR3 芯片的时序参数通常由 MIG 自动计算不建议随意修改。Burst length (突发长度)DDR3 的标准突发长度是 8即一次读写命令连续传输 8 个数据。Cas Latency (CL, 读潜伏期)从发送读命令到数据线上出现有效数据之间的时钟周期数。这是 DDR3-2133 在特定频率下的标准值。Cas Write Latency (CWL, 写潜伏期)从发送写命令到数据写入芯片内部的时钟周期数。Enable Chip Select Pin (启用片选引脚)允许控制器输出 CS# 信号来控制芯片的使能。这两个都不建议勾选。Specify M and D: 如果前面勾选了自己配置倍频和分频系数这里就可以手动设置了。System Clock Option: 选择输入的时钟信号是差分的还是单端的。Additionnal Clock Outputs: 是否需要输出其他时钟如果需要按需设置即可。FPGA Options Internal Vref (内部参考电压)决定 DDR3 接口的参考电压VREF是由 FPGA 内部生成还是由外部 PCB 电路提供。推荐勾选。Debug Signals for controller (控制器调试信号)决定是否在 MIG 控制器内部插入 ILA (集成逻辑分析仪) 调试核。Disable不插入调试逻辑IP 核面积更小资源占用更少时序更容易收敛。Enable会生成一个带有 ILA 的调试版本。你可以通过 Vivado 的 Hardware Manager 实时抓取 DDR3 内部的读写命令、地址、数据等信号用于排查硬件问题。MicroBlaze MCS ECC option 如果你在 FPGA 内部使用了 MicroBlaze 微控制器软核并且它的 MCS (Microcontroller System) 需要用到 ECC 功能可以勾选此项。这与 DDR3 本身的 ECC 无关。建议如果你没有使用 MicroBlaze或者不需要 ECC保持不勾选。Simulation Options 建议保持 BFM用于快速功能验证。Example Design Options建议保持 SIMPLE TG。在第一次上板调试时强烈建议先生成 Example Design 并烧录看看 SIMPLE TG 能否跑通。如果能跑通说明硬件没问题然后再替换成你自己的用户逻辑。Advance Memory OptionsEnable Self Refresh (启用自刷新)允许 DDR3 在空闲时进入自刷新模式以降低功耗。如果你的系统对功耗有严格要求如电池供电可以勾选。否则保持不勾选因为自刷新模式退出时需要时间可能会影响突发性能。Enable Save-Restore (启用保存-恢复)用于 FPGA 的挂起/恢复功能。当 FPGA 进入低功耗挂起状态时将 DDR3 的状态保存下来恢复时再写回。除非你使用 Xilinx 的 Partial Reconfiguration 或电源管理功能否则保持不勾选。Disable OBUF on reset通常由 IP 核根据你的器件自动决定是否可用。
返回列表