006---Xilinx Vivado DDR3 (一)---MIG IP核生成与配置


摘要

文章为学习记录。以配置AXI4协议接口MIG IP为例,介绍配置过程中各个选项卡的参数。


一、简要说明

使用的开发板搭载 4 片镁光(Micron)DDR3L 内存。
2 片与 ZYNQ 的 PS 内存接口相连;2 片与 ZYNQ的PL 内存接口连接。
文章通过 配置MIG 访问 PL 部分的DDR3L内存,DDR3L 的型号为MT41K256M16 RE-125

二、MIG IP的配置

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.Pin Compatible FPGAs Bar

默认不勾选,即不需要兼容其他的 FPGA 芯片。
在这里插入图片描述

2.Memory Selection Bar

根据实际板子硬件进行选择,开发板板载的是 DDR3,选择“DDR3 SDRAM”。
在这里插入图片描述

3.Memory Selection Bar

(1)Clock Period:这个时钟是 MIGIP 核产生,并输出给 DDR3 芯片,作为驱动DDR3 芯片的时钟周期。这个参数的范围和 FPGA 的芯片类型以及具体类型的速度等级有关。
(2)PHY to Controller Clock Ratio:DDR3 物理芯片运行时钟和 MIG IP 核的用户端(FPGA)的时钟(ui_clk)之比。
(3)VCCAUX_IO:FPGA 高性能 bank(High Performance bank)的供电电压。
(4)Memory Type:DDR3 存储器芯片类型。
(5)Memory Part:DDR3 芯片的具体型号,选择 MT41K256M16XX-125。如果没有兼容( DDR3 芯片容量和位宽一致)的器件,点击
“Create Custom Part(创建自定义器件)”按钮创建一个器件。
(6)Memory Voltage: DDR3 芯片的电压选择,选 1.5V(1.35V向后兼容,若选择1.35V后面工程implementation会报错:IO BANK冲突)。
(7)Data Width: DDR 芯片每个地址对应的数据位宽(32位,2 片镁光 DDR3L 拼接而成)。但是,用户端每个地址对应 8 位数据,mig 会以字节为单位进行读写。
(8)ECC:ECC 校验使能,数据位宽为 72 位的时候才能使用。
(9)Data Mask:数据屏蔽管脚使能。勾选它才会产生屏蔽信号。
(10)Number of Bank Machines:Bank Machine 的数量是用来对具体的某个或某几个Bank单独控制的,选择多
了控制效率就会高,相应的占用的资源也多。
(11)ORDERING:该信号用来决定 MIG 控制器是否可以对它收到的指令进行重新排序。
在这里插入图片描述
在这里插入图片描述

4.AXI Parameter Bar

(1)Data Width:AXI 接口的数据位宽。最大值:2 * Clock Ratio* DATA WIDTH =2 * 4 * 32 =256。
(2)Arbitration Scheme:DDR 控制器的仲裁机制,由于 AXI 接口读写通道是独立的,读写各有自己的地址通道,而储存器控制器只有一个地址总线,同一时刻只能进行读或写,这样就存在读/写优先级的问题。
(3)Narrow Burst Support:窄突发支持。
(4)Address Width :AXI 接口的地址位宽。AXI 地址对应的数据是以 1 字节进行计算的。板载 DDR3 存储器存储容量8Gbit(两片)(8Gbit = 1GByte = 2^30 Byte,所以 AXI 的地址位宽为 30)。
(5)ID Width:AXI 读/写通道的 ID 宽度。
在这里插入图片描述

4.Memory Options Bar

(1)Input Clock Period:MIG IP 核的系统输入时钟周期,由 FPGA 内部产生。考虑到 MIG IP 输入还需要一个 200M 的 IDELAY Reference Clock 时钟,为了将两个时钟共用一个输入时钟,将这里的系统时钟周期(Input Clock Period)配置选择为 5000ps(200MHz)。
(2)Read Burst Type and Length:突发类型选择,突发类型有顺序突发和交叉突发两种,选择顺序
突发(Sequential),其突发长度固定为 8。
(3)Output Driver Impdance Control:输出阻抗控制。
(4)RTT:端接电阻。
(5)Controller Chip Select Pin:片选管脚引出使能。开发板的DDR3 的 CS 信号有连接到 FPGA 管脚,所以这里需要使用该引脚。
(6)BANK_ROW_COLUMN:寻址方式选择。即要指定某个地址,先指定 bank,再指定行,最后指定列。
在这里插入图片描述

5.FPGA Options Bar

(1)System Clock:MIG IP 核输入时钟。因为 IP 核的输入系统时钟是单端时钟,是由内部的 MMCM 产生的,MMCM 所产生的时钟默认添加了 buffer。
(2)Reference Clock:MIG IP 核参考时钟。由于在前面配置中将系统时钟设置为 200MHz,所以可以选择 Use System Clock。
(3)System Reset Polarity:复位有效电平选择。
(4)Debug Signals Control:该选项用于控制 MIG IP 核是否把一些调试信号引出来,它会自动添加到 ILA,这些信号包括一些 DDR3 芯片的校准状态信息。
(5)Sample Data Depth:采样深度选择。当“Debug Signals Control”选择“OFF”时,所有采样深度是不可选的。
(6)Internal Vref:内部参考管脚。将某些参考管脚当成普通的输入管脚来用,仅限 800Mbps 以下速率使用。
(7)IO Power Reduction:IO 管脚节省功耗设置。
(8)XADC Instantiation:XADC 模块例化。使用 MIG IP 核运行的时候需要进行温度补偿,可以直接选择XADC 模块的温度数据引到 MIG IP 核来使用,否则需要额外提供温度数据。
在这里插入图片描述
在这里插入图片描述

6.Extended FPGA Option Bar

在这里插入图片描述

7.IO Planning Option Bar

在这里插入图片描述

8.Pin Selection Bar

在这里插入图片描述

9.System Signals Selection Bar

在这里插入图片描述

10.Summary Bar

在这里插入图片描述

11.Simulation Options Bar

在这里插入图片描述

12.PCB Information Bar

在这里插入图片描述

13.Design Notes Bar

在这里插入图片描述

### 配置DDR3 IP的方法 在FPGA开发过程中,配置DDR3 IP个重要的环节。以下是关于如何配置DDR3 IP以及其具体设置的相关说明。 #### 1. 使用Memory Interface Generator (MIG)工具 为了实现FPGA逻辑外部DDR3存储器之间的连接,可以利用Xilinx提供的`Memory Interface Generator (MIG)`工具来完成DDR3控制器的配置[^3]。该工具允许开发者针对特定硬件平台定制化生成适合的DDR3接口。 #### 2. 启动并进入MIG界面 启动Vivado软件后,在IP Catalog中找到并打开`Memory Interface Generator`选项。这步骤会引导用户至图形化的配置向导页面,其中包含了多种内存类型的选项,包括但不限于DDR3 SDRAM。 #### 3. 参数设定阶段 在参数设定期间,需注意以下几个方面: - **目标板卡的选择**:依据实际使用的开发套件型号选定对应的Board部分。 - **时钟频率定义**:输入期望的工作时钟速率,通常此数值由系统需求决定。 - **地址映射范围指定**:明确分配给DDR3模块的有效物理地址区间。 - **数据宽度调整**:按照项目要求设置总线的数据位宽,常见的有8bit, 16bit 或者更宽带宽的情况。 这些基础参数直接影响到后续生成文件的功能特性及其性能表现。 #### 4. 完成初始化校验流程 当所有必要参数都被正确填写完毕之后,执行必要的初始化验证操作以确保所选组件能够正常运作于既定条件下。这过程可能涉及模拟环境下的功能测试或者真实硬件上的初步调试工作[^4]。 #### 5. 整合进整体设计框架内 最后步就是把经过充分检验后的DDR3子系统无缝嵌入整个SoC架构之中去,并其他外设协同配合达成最终产品形态的目标[^1]。 ```python # 示例代码展示如何实例化个简单的DDR3读写函数(伪代码性质) def ddr3_read(address): data = read_from_ddr3(address) return data def ddr3_write(address, value): write_to_ddr3(address,value) if __name__ == "__main__": test_address = 0x00AABBCC written_value = 0xDEADBEEF ddr3_write(test_address,written_value ) result = ddr3_read(test_address ) print(f"Read back {result} from address {test_address}. Expected:{written_value}") ``` 上述脚本仅作为概念演示用途,展示了基本存取动作模式;而真正应用于工业场景中的解决方案往往更加复杂精细。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值