VIVADO DDR3 IP核配置与使用

转载:【VIVADO IP】Memory Interface Generator - 知乎 (zhihu.com)

0 前言

本文记录关于VIVADO IP核【Memory Interface Generator 7 Series】的部分使用和配置方式,主要参考IP手册【UG586】和【DS176】中关于IP的介绍,以及【DS182】关于K7系列数据手册,【UG471】关于SelectIO资源介绍。IP内功能较为丰富,这里仅对使用到的部分进行记录,如果有错误的地方还请提醒。

ds176_7Series_MIS.pdf • 查看器 • 文档门户 (xilinx.com)​docs.xilinx.com/v/u/en-US/ds176_7Series_MIS

Documentation Portal​docs.xilinx.com/v/u/en-US/ug586_7Series_MIS​编辑

Documentation Portal​docs.xilinx.com/v/u/en-US/ds182_Kintex_7_Data_Sheet​编辑

Documentation Portal​docs.xilinx.com/v/u/en-US/ug471_7Series_SelectIO​编辑

本文设计所使用的背景为:

XC7K325TFFG900-1

MT41K256M16-125,两片级联,采用1.35V低压

1 IP主要功能

IP 主要提供一个内存接口解决方案,使得我们不需要去进行具体的器件时序实现,通过提供的AXI接口来进行数据的读写控制,目前支持的存储器类型如下:

在【UG586】中有各种接口对应的解决方案。目前主要使用的应该是关于 DDR3 的接口,支持特性可以在【DS176】中查看,部分特性参数:

  • 支持最高72位接口宽度
  • 支持DDR3 (1.5V) 和 DDR3L (1.35V)
  • 支持 8 bank 内存
  • 支持 8-word burst

IP的功能 框图如下

2 IP核配置

以DDR3为背景进行相关配置

Control options

Clock Period

由FPGA产生作用于DDR的IO口时钟速率,即连接到DDR的CK,CK#的时钟。这个时钟的选择受限于FPGA与DDR两者自身的参数:

  • 其中MT41K256M16-125根据速度等级-125可知,所支持最高时钟为 800MHz
  • 其中关于FPGA支持部分可参考【DS182】:

注意FPGA封装类型对支持速率也有影响,需要选对封装

在我的设计中需要DDR的IO速率为800Mb/s,对应所需IO时钟为 400MHz。

虽然DDR3和DDR3L本身支持最高800MHz,但是FPGA所能支持DDR的最高速率差距明显,在设计方案时需要考虑到,比如VCCAUX_IO是由外部供电,电路成型后就不好更改了。

另外在表中可以看到,DDR3L应用IO速率为800Mb/s的设计只能将接口布在HP bank上,由于FPGA的HP bank数量一般比较少,这也是设计之初需要考虑的。

PHY to Controller Clock Ratio

这个决定DDR的IO时钟与用户时钟(ui_clk)的比例,比如采用4:1比例,IO时钟为 400MHz,那么ui_clk为100MHz

另外参数影响两个方面

  • FPGA所支持DDR的最高速率

可以在上表中看到2:1和4:1所支持的速率不同,当clock period 在400MHz及以下时会出现2:1选项

  • AXI接口的时钟与用户带宽

用于数据交互的AXI4接口的关联时钟为 ui_clk,实际用户端的数据带宽是以此为基准。

Vccaux_io

HP bank的供电电压选项,它将根据 clock period自动设置,影响板级硬件的供电设计。


Memory Type

指所选用内存类型,对于FPGA设计来说一般直接拿内存芯片使用,因此选择component。其他选项:

  • UDIMM:定位桌面市场
  • RDIMM:定位工作站/服务器
  • SODIMM:定位笔记本
区别可以参考: http://blog.chinaaet.com/justlxy/p/5100051946

Memory Part

指所选用内存芯片型号,与硬件选型相关。在下方Memory Details可以看到具体参数:

Memory Voltage

指所选用内存芯片工作电压,例如MT41K256M16支持1.35V和1.5V,需要工作在低压模式则选择1.35V。这个参数会影响clock period的设置。

Data Width

指所选用DDR的数据位宽,根据硬件实际设计情况设置。例如MT41K256M16是16-bit位宽,使用两片构成32-bit,因此这里选择32。


ECC(Error Correcting Code)

ECC相当于添加额外8-bit位宽用于校验64-bit数据的正确性,因此只有在72-bit时可以选。

这个功能需要内存本身支持,相关技术可以参考: https://blog.csdn.net/qq_24402247/article/details/120434743

Data Mask(DM)

DM功能在使用AXI接口时是默认开启的,除非是当Data Width为72-bit时。AXI接口中支持Read Modify Write (RMW)模式,需要DM功能启用。

RMW 是基于 ECC 的设计中的纠错过程。当从支持 ECC 的内存中读取数据时,首先读取数据并计算其 ECC 并与读取的 ECC 进行比较;如果匹配,则将读取的数据传递给用户,如果不匹配,则我们必须更正(如果可能)并将数据写回内存,同时将更正的数据提供给用户。

Number of Bank Machines

一个Bank Machines在一个时间内只能操作一个Bank,提高Bank Machines的数量有利于提升系统效率,但是会占用更多资源。

具体效果不明晰,这里采用默认值

ORDERING

用于设置MIG是否对内存命令重新排序:

  • 正常模式允许内存控制器对内存的命令重新排序,以获得尽可能高的效率。
  • 严格模式强制控制器按接收的确切顺序执行命令。

通常我们选择正常模式以提高效率。


AXI Parameters

AXI DATA WIDTH

AXI 总线的数据位宽和前面设置的内存数据线宽(DATA WIDTH)以及用户时钟比例(PHY to Controller Clock Ratio)有关,其最大值满足如下关系:

��� ���� ����ℎ=2∗����� �����∗���� ����ℎ

例如,Clock Ratio=4:1,DATA WIDTH=32,那么一个ui_clk时钟过程中DDR传输了8组数据,对应数据量为2 * 4 * 32 =256,因此AXI总线的数据位宽最大256。


Arbitration Scheme

AXI总线读写通道的仲裁方案,有如下选项:

  • Time Division Multiplexing (TDM)

读取和写入地址通道的优先级相同。总线对读取和写入地址通道的授予在每个时钟周期交替。AXI master的读取或写入请求不影响仲裁优先级。

  • Round-Robin

读取和写入地址通道的优先级相同。总线对读取和写入通道的授予取决于 AXI master 授予的最后一次服务请求。

  • Read Priority (RD_PRI_REG)

读取和写入地址通道的优先级相同。

当发生以下情况之一时,将处理来自写入地址通道的请求:

  • 没有来自读取地址通道的挂起请求
  • Read starve 限制达到 256。仅在突发结束时检查它
  • Read wait 限制达到16
  • 写QOS为非零。仅在突发结束时检查它。

读取地址通道的请求以类似的方法处理。

  • Read Priority with Starve Limit (RD_PRI_REG_STARVE_LIMIT)

读取地址通道始终具有优先级。当没有来自读取地址通道的挂起请求或达到 Read starve 限制时,将处理来自写入地址通道的请求。

  • Write Priority (WRITE_PRIORITY, WRITE_PRIORITY_REG)

写入地址通道始终具有优先级。当没有来自写入地址通道的挂起请求时,将处理来自读取地址通道的请求。仲裁输出以WRITE_PRIORITY_REG模式进行注册。

采用默认RD_PRI_REG,比较综合。


Narrow Burst Support

取消选择此选项允许 AXI4 接口移除逻辑以处理 AXI 窄脉冲串,从而节省资源并改善时序。XPS(Xilinx Platform Studio) 通常根据连接的 AXI master的已知行为自动计算是否可以禁用窄突发支持。

Address Width and AXI ID Width

XPS 会自动设置地址宽度和 ID 宽度设置

Memory Options

Input Clock Period

MIG IP 核的系统输入时钟周期,作用于 IP 内部的MMCM,用来生成用户时钟及DDR3时钟。推荐使用 200MHz,这样后续参考时钟可以使用相同时钟源,减少时钟资源消耗。

Additional Clocks

内部的MMCM可提供最多5个额外的时钟输出,最高400MHz。


Read Burst Type

突发类型选择,突发类型有顺序突发和交错突发两种。

  • interleaved:交错突发,可以同时打开多个bank
  • sequential:顺序突发,一次只操作一个bank

这个选择应该对应于DDR3的 burst order选项,即列地址的A[3]位。MIG IP中仅支持 BL = 8 的突发传输:

同时最好还与AXI的突发类型对应

通常选择顺序模式(sequential),并将A【2:0】设置为000,方便数据整理。


Output Driver Impdance Control

这个选项设置了对DRAM的输出驱动阻抗,具体应根据选用的DRAM类型进行选择,查看对应的DDR3手册:

从手册上可以看到默认选项为34欧姆,即RZQ/7

RRT-ODT

这个选项设置了端接电阻的阻值。ODT的作用是为了吸收信号到达终端时的反射,进而增强信号的完整性。

当数据速率大于1333 Mbps时,需要选择RZQ/6。

关于 ODT 的取值,还需要进一步研究,动态ODT参考: http://blog.chinaaet.com/justlxy/p/5100051985

Chip Select Pin

只在使用单rank配置的内存时,可以通过禁用片选CS#来节约端口。默认情况片选是需要控制的。


Memory Address Mapping

这个选项决定了AXI地址线的构成方式,通常来说 BANK-ROW-COLUMN 使用的比较多。


FPGA Options

System Clock

选择 MIG IP 的系统时钟类型(即Memory Options中的input clock),由于我们选择使用FPGA的时钟管理器(CMT)产生的时钟作为 MIG 的输入时钟,这些时钟默认是添加了 buffer,因此这里选择“no buffer”。

  • no buffer

选用无缓冲,那么IP在初始化过程中不会对 sys_clk 添加 IBUF 缓冲,此时 sys_clk 应来自FPGA内部时钟

  • single ended

外部单端时钟

  • differential

外部差分时钟

Reference Clock

选择参考时钟类型。这个参考时钟是用于输入延时控制(IDELAYCTRL的参考时钟),通常是200MHz。

所以当前面input clock选择200MHz时,这里可以选择 use system clock 选项。其他选项可以参考 system clock 说明。使用外部时钟后续需要配置端口位置:

System Reset Polarity

选择系统复位的极性,推荐使用复位IP来产生同步复位给出,极性可以根据复位信号扇出选择小扇出复位,这里使用极性高。


Internal Vref

当数据速率在 800 Mbps及以下时,可以选择内部参考电压来释放Vref管脚作为通用I/O使用(每个bank2个)。以bank35为例:

一般情况,VREF需要接到外部参考电压,例如DDR3L为1.35V。如果端口不够用,可以使用内部参考电压,那么端口 E3和N3 就可以当输入来用。

在Device Constraints窗口中选择“Internal VREF”,列出了该芯片支持的内部参考电压,NONE文件夹中的I/O bank表示没有设置INTERNAL_VREF约束。

创建INTERNAL_VREF约束,只需要将I/O bank拖到对应参考电压的文件夹中即可;拖到NONE中表示撤销参考电压设置。

该设置对应着约束命令,需要保存到XDC约束文件中,示例如下:

set_property INTERNAL_VREF 0.900 [get_iobanks 12]   # set
reset_property INTERNAL_VREF [get_iobanks 12]       # unset
https://blog.csdn.net/FPGADesigner/article/details/81813240

IO Power Reduction

通过在DDR3的 WRITE 和不活动期间自动禁用 DQ/DQS IBUF 和内部端接,显著降低平均 IO 功耗。选择开启。

XADC Instantiation

内存接口使用来自 XADC 模块的温度读数来执行温度补偿,并使读取的 DQS 在数据窗口中居中。每个FPGA只有一个XADC模块:

  • 如果在其他地方没有使用到,那么可以在DDR3中使能XDC初始化,有利于数据采集的准确性
  • 如果在其他地方使用了,那么需要禁用XDC初始化,并且在MIG IP的顶层device_temp_i
    接口周期性输入检测到的温度值

另外,如果 device_temp_i 未连接,那么XDAC已经初始化,否则未初始化。


Extended FPGA Options

DCI

DCI(数字控制阻抗)I/O 标准适用于高性能存储体。DQ 和 DQS/DQS# 信号使用 DCI 标准(DQ SSTL15_T_DCI,DQS 和 DQS# DIFF_SSTL15_T_DCI)。DCI 不用于地址/控制输出信号。使用 IBIS 仿真来确定最佳端接策略。

基于I/O标准,DCI可以控制输出驱动阻抗,或者在接收器处添加并联终端,最终的目标都是精确匹配传输线的特性阻抗,保证信号传输完整性。DCI主动调整I/O内部的阻抗,以校准VRN和VRP引脚上的外部精密参考电阻。它可以补偿因逻辑处理、温度和电压变化而引起的I/O阻抗变化。

DCI特性只能在HP bank中应用,HR bank不具有该特性。

参考电阻 (RVRP)

对于所有 DCI I/O 标准,VRP 管脚必须通过参考电阻 (RVRP)端接到 GND。根据UG471确定RVRP阻值

  • 首先确定DCI标准,例如 SSTL135_T_DCI
  • 查看该标准支持的DCI端接电阻连接方式

UG471:To achieve the Thevenin equivalent parallel-termination circuit of 50Ω to VCCO/2, would require 100Ω external precision resistors at the VRN and VRP pins.

SSTL135_T_DCI,外部参考电阻选择100欧姆

DCI Cascading

DCI_CASCADE约束可以将多个相邻的I/O bank级联在一起,共享DCI参考电压。使用DCI级联,一个I/O bank(主bank)必须将VRN/VRP管脚连接到外部参考电阻。其他和主bank在同一列的I/O bank(Slave banks)可以使用DCI标准,并且阻抗值和主bank阻抗相同。

包含DCI参考电压的称作主bank;级联的其它I/O bank称作从bank,这些从bank无需将VRN/VRP管脚连接外部电阻,级联的DCI阻抗控制来自I/O主bank。需遵循以下原则:

  • 主从 I/O bank 的 VCCO 和 VREF (如适用)电压必须相同
  • 主从 SelectIO 技术 bank 必须全部位于器件上的同一 HP I/O 列上,并且可以跨越整个列,除非存在中介层边界。
UG571 ultrascale-selectio

使用DCI级联必须手动更新约束文件以选择主/从存储。

在Device Constraints窗口中,选择DCI Cascade

Unused文件夹中显示了未添加到DCI级联链中的I/O bank,选择需要添加的所有bank,右键->Add DCI Cascade创建级联链,弹出如下窗口:

选择主bank,点击OK则创建好级联链,显示在窗口中:

或者直接将某一bank拖动到另一bank上也可以完成相应操作。设置DCI_CASCADE约束对应的XDC命令如下:

set_property dci_cascade {34} [get_iobanks 33]

get_iobanks选择的为主bank,{}中的是添加到级联链中的从bank,以空白为间隔。


Internal termination (IN_TERM)

HP I/O bank 具有可选的未经校准的输入片上拆分终端功能 (用于 HSTL 和 SSTL 标准),以及用于 POD 和 HSUL 标准的单终端功能 (类似于 DCI 功能)。

此未校准功能选项与 DCI 之间的重要区别在于,不同于使 用 DCI 时校准到 VRP 管脚上的外部参考电阻,未校准输入终端功能会调用由 ODT 属性确定的内部电阻,这些内部电阻 没有校准例程来补偿温度、工艺或电压变化。

UG471:Uncalibrated Split Termination in High-Range I/O Banks (IN_TERM)

选择和DCI一样的推荐值50欧姆。


Bank Selection

vivado有推荐的端口放置位置,我们使用这默认即可。放置的原则:地址/控制线必须在一列三个bank中间的bank,并且所有的地址/控制线必须被放置在一个bank中。


System Signals Selection

这三个信号可使用内部连接,保持 no connect即可


Summary

总结中关注下,动态ODT默认是关闭的。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Xilinx Vivado DDR3 IP核可以用于处理DDR3存储器的读写操作。该IP核提供了一个接口,用户可以通过该接口与DDR3存储器进行通信。 使用VivadoIP核生成器,可以轻松地将DDR3 IP核添加到设计中。首先,打开Vivado并创建一个新的项目。接下来,进入IP核库,选择DDR3 IP核并添加到设计中。 在IP核配置界面,用户可以设置一些参数,如存储器的大小、数据位宽、时钟频率等。根据实际需求进行配置后,生成IP核。 生成的IP核将提供读写接口。用户可以通过设置地址和数据来进行读取和写入操作。例如,使用写使能信号和写数据信号来进行写入操作,使用读使能信号来进行读取操作。同时,根据接口参数,选择相关的时序控制信号和使能信号。 为了测试读写接口,可以编写一段简单的测试代码。通过地址和数据输入,模拟写入操作,然后通过读使能信号读取相应位置的数据进行验证。在编写测试代码时,需要确保正确设置时序和使能信号,以保证与DDR3存储器的正常通信。 测试阶段,可以使用硬件测量工具来检查时序和信号的正确性。确保时钟频率、写和读操作的时序满足DDR3存储器的要求。 总结起来,使用Xilinx Vivado DDR3 IP核可以实现与DDR3存储器的读写接口。通过设置参数、编写测试代码和使用硬件测量工具,可以有效测试和验证读写接口的功能和正确性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值