赞
踩
本文记录关于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 Portaldocs.xilinx.com/v/u/en-US/ug586_7Series_MIS编辑
Documentation Portaldocs.xilinx.com/v/u/en-US/ds182_Kintex_7_Data_Sheet编辑
Documentation Portaldocs.xilinx.com/v/u/en-US/ug471_7Series_SelectIO编辑
本文设计所使用的背景为:
XC7K325TFFG900-1
MT41K256M16-125,两片级联,采用1.35V低压
IP 主要提供一个内存接口解决方案,使得我们不需要去进行具体的器件时序实现,通过提供的AXI接口来进行数据的读写控制,目前支持的存储器类型如下:
在【UG586】中有各种接口对应的解决方案。目前主要使用的应该是关于 DDR3 的接口,支持特性可以在【DS176】中查看,部分特性参数:
IP的功能 框图如下
以DDR3为背景进行相关配置
由FPGA产生作用于DDR的IO口时钟速率,即连接到DDR的CK,CK#的时钟。这个时钟的选择受限于FPGA与DDR两者自身的参数:
注意FPGA封装类型对支持速率也有影响,需要选对封装
在我的设计中需要DDR的IO速率为800Mb/s,对应所需IO时钟为 400MHz。
虽然DDR3和DDR3L本身支持最高800MHz,但是FPGA所能支持DDR的最高速率差距明显,在设计方案时需要考虑到,比如VCCAUX_IO是由外部供电,电路成型后就不好更改了。
另外在表中可以看到,DDR3L应用IO速率为800Mb/s的设计只能将接口布在HP bank上,由于FPGA的HP bank数量一般比较少,这也是设计之初需要考虑的。
这个决定DDR的IO时钟与用户时钟(ui_clk)的比例,比如采用4:1比例,IO时钟为 400MHz,那么ui_clk为100MHz
另外参数影响两个方面
可以在上表中看到2:1和4:1所支持的速率不同,当clock period 在400MHz及以下时会出现2:1选项
用于数据交互的AXI4接口的关联时钟为 ui_clk,实际用户端的数据带宽是以此为基准。
HP bank的供电电压选项,它将根据 clock period自动设置,影响板级硬件的供电设计。
指所选用内存类型,对于FPGA设计来说一般直接拿内存芯片使用,因此选择component。其他选项:
区别可以参考: http://blog.chinaaet.com/justlxy/p/5100051946
指所选用内存芯片型号,与硬件选型相关。在下方Memory Details可以看到具体参数:
指所选用内存芯片工作电压,例如MT41K256M16支持1.35V和1.5V,需要工作在低压模式则选择1.35V。这个参数会影响clock period的设置。
指所选用DDR的数据位宽,根据硬件实际设计情况设置。例如MT41K256M16是16-bit位宽,使用两片构成32-bit,因此这里选择32。
ECC相当于添加额外8-bit位宽用于校验64-bit数据的正确性,因此只有在72-bit时可以选。
这个功能需要内存本身支持,相关技术可以参考: https://blog.csdn.net/qq_24402247/article/details/120434743
DM功能在使用AXI接口时是默认开启的,除非是当Data Width为72-bit时。AXI接口中支持Read Modify Write (RMW)模式,需要DM功能启用。
RMW 是基于 ECC 的设计中的纠错过程。当从支持 ECC 的内存中读取数据时,首先读取数据并计算其 ECC 并与读取的 ECC 进行比较;如果匹配,则将读取的数据传递给用户,如果不匹配,则我们必须更正(如果可能)并将数据写回内存,同时将更正的数据提供给用户。
一个Bank Machines在一个时间内只能操作一个Bank,提高Bank Machines的数量有利于提升系统效率,但是会占用更多资源。
具体效果不明晰,这里采用默认值
用于设置MIG是否对内存命令重新排序:
通常我们选择正常模式以提高效率。
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。
AXI总线读写通道的仲裁方案,有如下选项:
读取和写入地址通道的优先级相同。总线对读取和写入地址通道的授予在每个时钟周期交替。AXI master的读取或写入请求不影响仲裁优先级。
读取和写入地址通道的优先级相同。总线对读取和写入通道的授予取决于 AXI master 授予的最后一次服务请求。
读取和写入地址通道的优先级相同。
当发生以下情况之一时,将处理来自写入地址通道的请求:
读取地址通道的请求以类似的方法处理。
读取地址通道始终具有优先级。当没有来自读取地址通道的挂起请求或达到 Read starve 限制时,将处理来自写入地址通道的请求。
写入地址通道始终具有优先级。当没有来自写入地址通道的挂起请求时,将处理来自读取地址通道的请求。仲裁输出以WRITE_PRIORITY_REG模式进行注册。
采用默认RD_PRI_REG,比较综合。
取消选择此选项允许 AXI4 接口移除逻辑以处理 AXI 窄脉冲串,从而节省资源并改善时序。XPS(Xilinx Platform Studio) 通常根据连接的 AXI master的已知行为自动计算是否可以禁用窄突发支持。
XPS 会自动设置地址宽度和 ID 宽度设置
MIG IP 核的系统输入时钟周期,作用于 IP 内部的MMCM,用来生成用户时钟及DDR3时钟。推荐使用 200MHz,这样后续参考时钟可以使用相同时钟源,减少时钟资源消耗。
内部的MMCM可提供最多5个额外的时钟输出,最高400MHz。
突发类型选择,突发类型有顺序突发和交错突发两种。
这个选择应该对应于DDR3的 burst order选项,即列地址的A[3]位。MIG IP中仅支持 BL = 8 的突发传输:
同时最好还与AXI的突发类型对应
通常选择顺序模式(sequential),并将A【2:0】设置为000,方便数据整理。
这个选项设置了对DRAM的输出驱动阻抗,具体应根据选用的DRAM类型进行选择,查看对应的DDR3手册:
从手册上可以看到默认选项为34欧姆,即RZQ/7
这个选项设置了端接电阻的阻值。ODT的作用是为了吸收信号到达终端时的反射,进而增强信号的完整性。
当数据速率大于1333 Mbps时,需要选择RZQ/6。
关于 ODT 的取值,还需要进一步研究,动态ODT参考: http://blog.chinaaet.com/justlxy/p/5100051985
只在使用单rank配置的内存时,可以通过禁用片选CS#来节约端口。默认情况片选是需要控制的。
这个选项决定了AXI地址线的构成方式,通常来说 BANK-ROW-COLUMN 使用的比较多。
选择 MIG IP 的系统时钟类型(即Memory Options中的input clock),由于我们选择使用FPGA的时钟管理器(CMT)产生的时钟作为 MIG 的输入时钟,这些时钟默认是添加了 buffer,因此这里选择“no buffer”。
选用无缓冲,那么IP在初始化过程中不会对 sys_clk 添加 IBUF 缓冲,此时 sys_clk 应来自FPGA内部时钟
外部单端时钟
外部差分时钟
选择参考时钟类型。这个参考时钟是用于输入延时控制(IDELAYCTRL的参考时钟),通常是200MHz。
所以当前面input clock选择200MHz时,这里可以选择 use system clock 选项。其他选项可以参考 system clock 说明。使用外部时钟后续需要配置端口位置:
选择系统复位的极性,推荐使用复位IP来产生同步复位给出,极性可以根据复位信号扇出选择小扇出复位,这里使用极性高。
当数据速率在 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
通过在DDR3的 WRITE 和不活动期间自动禁用 DQ/DQS IBUF 和内部端接,显著降低平均 IO 功耗。选择开启。
内存接口使用来自 XADC 模块的温度读数来执行温度补偿,并使读取的 DQS 在数据窗口中居中。每个FPGA只有一个XADC模块:
另外,如果 device_temp_i 未连接,那么XDAC已经初始化,否则未初始化。
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不具有该特性。
对于所有 DCI I/O 标准,VRP 管脚必须通过参考电阻 (RVRP)端接到 GND。根据UG471确定RVRP阻值
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_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。需遵循以下原则:
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,以空白为间隔。
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欧姆。
vivado有推荐的端口放置位置,我们使用这默认即可。放置的原则:地址/控制线必须在一列三个bank中间的bank,并且所有的地址/控制线必须被放置在一个bank中。
这三个信号可使用内部连接,保持 no connect即可
总结中关注下,动态ODT默认是关闭的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。