MIG IP核详解

news2024/11/14 20:04:02

1.MIG IP核简介

MIG(Memory Interface Generators) IP 核是Xilinx公司针对DDR存储器开发的 IP,里面集成存储器控制模块,实现DDR读写操作的控制流程,下图是7系列的 MIG IP 核结构框图。MIG IP 核对外分出了两组接口。左侧是用户接口,就是用户(FPGA)同 MIG 交互的接口,用户只有充分掌握了这些接口才能操作MIG。右侧为DDR物理芯片接口,负责产生具体的操作时序,并直接操作芯片管脚。这一侧用户只负责分配正确的管脚,其他不用关心。

 

通过MIG IP核,我们可以很容易的控制DDR3的读写操作,即只需要控制用户端的端口即可对DDR3进行操作。用户端各个端口的含义如下:

其中的输入/输出是相对于MIG IP核来说的,例如ui_clk就是output给用户侧的用户时钟。

下图是一张用户命令正确被IP核接收的时序图,可以看到,只有在app_en 和app_rdy均为有效的时候,命令才能正确得被接收到MIG IP核中

端口名称

I/O

位宽

备注

app_cmd

I

3

命令总线,3b000表示写命令,3b001表示读命令

app_addr

I

29

将要访问的DDR内存地址,具体位宽与用户生成IP核时的设置有关

app_rdy

I

 1

空闲信号,指示当前IP核的工作状态,只有该信号为高时,IP核才能正确的想用用户给出的命令

app_en

I

1

命令使能信号,该信号有效且app_rdy有效时,命令才能

下面的时序图显示了从MIG IP中读出数据的用户操作时序,当用户的读数据命令被IP核接收后,在几个时钟周期后会将读出的数据输出到数据总线上。

读时序比较简单,发出读命令后,用户只需等待数据有效信号(app_rd_data_valid)拉高,为高表明此时数据总线上的数据是有效的返回数据。需要注意的是,在发出读命令后,有效读数据要晚若干周期才出现在数据总线上 (延迟的时间不定)。

用户读操作相关端口的含义如下:

端口名称

I/O

位宽

备注

app_rd_data

O

256

DDR中读出得数据,一个时钟周期突发读出832bit数据(位宽根据IP核设置会有不同)

app_rd_data_valid

O

1

读出数据有效信号,该信号为高时表示从IP核中读出的数据有效

app_rd_data_end

O

1

指示当前数据时突发读写的最后一个周期的数据,这个信号与设置的用户时钟和DDR时钟的比例有关

用户写操作相关端口的含义如下:

端口名称

I/O

位宽

备注

app_wdf_wren

I

1

写数据有效信号,当app_wdf_rdy也为有效时,IP核才会接收到用户端发送的app_wdf_data

app_wdf_rdy

I

1

写空闲信号,IP核内部的写FIFO能够接收用户数据的标志

app_wdf_data

I

256

用户写入IP核的256bit数据

app_wdf_end

I

1

该信号有效时,表示当前是一次DDR写突发的最后一个数据

app_wdf_mask

I

32

32bit数据掩码,每一位对应app_wdf_data的一个8bit数据

写操作时序图如下所示:

 写数据的情况有3种:

  1. 写命令与写数据发生在同一时钟周期
  2. 写数据先于写命令发生(不一定是图上的一个时钟周期,因为数据是先写到了FIFO)发生在同一时钟周期
  3. 写数据落后于写命令发生,但不能超过两个时钟周期

结合上图,写时序总结如下:首先需要检查 app_wdf_rdy,该信号为高表明此时 IP 核数据接收处于准备完成状态,可以接收用户发过来的数据,在当前时钟拉高写使能(app_wdf_wren),给出写数据 app_wdf_data)。这样加上发起的写命令操作就可以成功向 IP 核写数据。

在了解了MIG控制器的相关用户端口的信号后,我们就可以着手来自己写一个控制器来简化用户操作,更加简单地对DDR进行操作。接下来我们首先根据开发板所有的资源生成一个对应MIG控制器的IP。

2.IP核配置

首先打开IP Catalog,输入MIG即可找到我们想要的IP,然后双击打开,进入如下页面。

点击next进入MIG Output Options配置页面,该页有几个选项:

1.Create Design:创建DDR3 IP工程设计,此处勾选。

2.表示对已有工程引脚约束进行验证

3. 这个IP生成后的模块名

4. 由于这个IP支持多个控制器,所以这里需要选择主控的数量,FPGA使用的话一般只会存在一个。

5. 这个IP有两种接口,默认使用的接口比较简单,适合FPGA内部使用,勾选5处会使用AXI4接口,这个接口一般给ARM端控制DDR3会比较方便,FPGA内部使用AXI4接口就是把简单的问题复杂化且浪费资源

点击Next到Pin Compatible FPGAs 配置页面,如下图所示该界面可用于配置选择和当前所设定的唯一器件型号做引脚兼容的其它FPGA型号。对于可能升级器件型号的应用而言,这个功能是很实用的。本设计保持默认不做配置。

点击Next进入到如下图所示的Memory Selection配置页面,该IP可以控制DDR3、DDR、LPDDR2等多种器件,所以这里需要选择这个IP具体控制哪种芯片,开发板上板载的是DDR3,这里选择“DDR3 SDRAM”即可。

点击Next进入到如下图所示的Controller Options配置页面该配置,该界面是主要参数的配置界面之一,涉及的内容比较多。

1、Clock Period:设置DDR3的IO时钟频率,根据开发板上实际DDR3支持的最大时钟频率进行设置,MT41K256M16TW-107IT最大支持933MHz的接口时钟,本次设计设置为800MHz的数据时钟。

2、PHY to Controller Clock Ratlo:FPGA给DDR3芯片提供的时钟频率为Clock Period,但是FPGA内部其余模块的时钟一般是运行不到Clock Period这么高的时钟频率的,所以需要给FPGA内部提供一个较低的时钟,这个参数就是用来设置DDR3接口时钟与MIG IP提供给FPGA内部其他模块的时钟(ui_clk)频率比值。本次设计的比值固定为4:1。由于ui_clkDDR3接口时钟频率比值为1:4,且DDR3的数据在双沿传输,导致用户每次读写MIG IP的数据位宽是DDR3芯片数据位宽的8倍,DDR3如果数据位宽为16位,那么用户每次读写IP的数据为128位,这与DDR3芯片内部的预取思路差不多,通过位宽换取时钟频率。

3、Vccaux_io:设置bank的供电电压,一般都是锁死的,会根据DDR3时钟频率变化而变化。

4、Memory Type:一般选择Components即可,其余几种可能与内存条有关。

5、Memory Part:选择DDR3的型号,芯片类型不同会涉及具体的DDR3时序参数不同以及地址线和数据线的位数不同。

6、Memory Voltage:选择芯片引脚的电平标准,DDR3一般只有1.5V和1.35V两种,根据原理图选择支持的电平的类型即可。本次设计选用1.35V。

7、Data Width:DDR3读写数据位宽,根据原理图选择DDR3位宽。本次设计将位宽设置为16。

8、ECC:数据线多余72为才能使用的功能。

9、Data Mask:启用之后,可以通过一个掩膜信号去控制DDR3写入数据,本质就是去控制DDR3的DM引脚,一般也不会使用此功能。

10、Number of Bank Machies:选择bank数量,DDR3虽然有8个bank,但是如果不需要全部使用时,可以只选择部分bank,降低功耗,节约资源,默认使用4个bank。

11、ORDERING:DDR控制器调度命令的顺序的配置,当选择strict时,严格按照命令先后顺序执行;选择normal时,为了得到更高的效率,可能对命令重排序。

点击Next进入到如下图所示的Memory Options配置页面下。

1.Input Clock Period:MIG IP 核的系统输入时钟周期,该输入时钟是由 FPGA 内部产生的,MIG内部有一个MMCM资源,用来生成用户时钟及DDR3时钟。这个时钟就是输入给MMCM用的,然后由MMCM生成MIG IP核各部各种所需要的时钟。

2.Read Burst Type and Length:突发类型选择,突发类型有顺序突发和交叉突发两种,选择顺序突发(Sequential),其突发长度固定为 8。

3.Output Driver Impdance Control:输出阻抗控制。选择 RZQ/7。

4.RTT:终结电阻,可进行动态控制。选择 RZQ/4。

5.Controller Chip Select Pin:片选管脚引出使能。选择 enable,表示把片选信号 cs#引出来,由外部控制

6.BANK_ROW_COLUMN:寻址方式选择。选择第二种,即 BANK-ROW-COLUMN的形式

1.System Clock:MIG IP 核输入时钟。选择“No Buffer”,因为 IP 核的输入系统时钟是由内部的 MMCM 产生的,MMCM 所产生的时钟默认添加了 buffer。

2.Reference Clock:MIG IP 核参考时钟。同样选择“No Buffer”,将由时钟模块生成。这个时钟是给MIG IP核的IDELAY模块用来调节IO口延迟的,它固定为200MHz,来源可以是外部的单端时钟、差分时钟或者来自MMCM等,如果前面设置系统时钟System Clock也是设置的200MHz,那么可以选择“Use System Clock”,将两个输入时钟合并一个共用的200MHz输入。

3.System Reset Polarity:复位有效电平选择。选择“ACTIVE LOW”低电平有效。

4.Debug Signals Control:该选项用于控制 MIG IP 核是否把一些调试信号引出来,它会自动添加到 ILA,这些信号包括一些 DDR3 芯片的校准状态信息。选择 “OFF”,不需要让 IP 核生产各种调试信号。

5.Sample Data Depth:采样深度选择。当 “Debug Signals Control” 选择 “OFF” 时,所 有采样深度是不可选的。

6.Internal Vref:内部参考管脚,表示将某些参考管脚当成普通的输入管脚来用。不勾选。

7.IO Power Reduction:IO 管脚节省功耗设置。选择“ON”。

8.XADC Instantiation:XADC补偿使能,使能MIG IP通过XADC来获取温度,实现温度补偿,没有单独使用XADC时启用该功能。

点击Next进入到如下图所示的Extended FPGA Option 配置页面中,其中1和2只有在HP Bank的FPGA中才会出现,HR bank没有这两个设置内容,一般默认即可。设定内部终端阻抗(Internal Termination Impedance)为50 Ohm。

点击Next进入到如下图所示的IO Planning Option配置页面中,如果当前IP仅用于仿真,可以选择New Design。本次实例最终是要进行上板测试的,则选择“Fixed Pin Out: Pre-existing pin out is known and fixed”。

选择“Read XDC/UCF”,直接导入管脚分配文件。如下图所示,这里软件默认设置,直接点击“Next”

3.MIG IP核的时钟什么含义以及如何正确的设置时钟

通过前面对ip核的配置我们发现MIG ip核有好几个时钟,那么这些时钟到底是是啥意思?还有就是如何对这些时钟进行配置呢?

首先我们要先知道MIG ip核的时钟架构,如下图所示

从上面的时钟架构中,可以看出,MIG ip核有以下几种时钟:

reference clock:输入,供idelay ctrl使用,通常需要200MHz,可以外部提供(single-end,differential),也可以内部提供(no buffer,use system clock)。

对DDR频率>667MHz时,参考时钟需要300/400MHz(也可从内部产生)

system clock:输入,mig的系统时钟(主时钟),可以外部提供(single-end,differential),也可以内部提供(no buffer)。

ui_clk:输出,供用户接口端使用,对应图中的internal (FPGA) logic clock,具体时钟频率,由PHY to Controller Clock Ratio决定(4:1 or 2:1)

ICLK/ICLKDIV:输出+供MIG内部使用,Read Path (Input) I/O Logic Clock,由PHASER_IN根据外部DQS产生,供内部采样输入的iserdes数据使用

OCLK/OCLKDIV:输出+供MIG内部使用,Write Path (Output) I/O Logic Clock,由PHASER_OUT产生,供产生输出地址/控制+数据的时钟,以及外部的CK和DQS

下面我们再结合ip核配置来进行说明。

首先是Clock Period设置的是MIG输出给DDR3的时钟,也可以理解为DDR3的运行时钟,比如我设置的时钟频率为800MHz,那么根据DDR3双沿传输的特性,我们可以知道DDR3读写数据的速率为1600Mb/s,这个时钟是由内部的MMCM产生的,我们只需要设置它的大小。

PHY to Controller Clock Ratio其实就是ui_clk,也就是MIG ip核输出给用户的时钟,用户按照这个时钟频率给数据或者读数据即可,DDR3的工作频率与其的比值通常可以设置为2:1或者4:1,当DRR3芯片运行频率超过350MHz时只能设置为4:1。我的DDR3运行频率为800MHz,那么MIG ip核输出给用户的时钟频率就是200MHz,用户按这个频率对DDR3进行读写。

Input Clock Period:它是输入给MIG ip核的时钟,为什么要输入一个时钟给MIG ip核呢?因为MIG ip核是一个比较复杂的东西,工作时需要例化一个MMCM来产生各种时钟,而我们都知道MMCM的工作需要一个输入时钟,因此就产生了nput Clock Period,我们一般将其设置为200MHz。由于这个时钟是输入时钟,因此设计时我们需要产生这个时钟,可以通过锁相环来产生这个时钟。

System Clock:其实就是Input Clock Period,只不过这里是设置时钟来源,包括三种方式:Differential(来源是外部的差分时钟)、Single Ended:(来源是外部的单端时钟)和NO Buffer(来源是MMCM或者PLL,因为MMCM的输出会自带BUFG),一般的FPGA开发板的时钟频率都达不到200MHz,因此大多选择NO Buffer

Reference Clock是给IDELAY模块的参考时钟,用来对IO口进行延迟调节,这个可以直接选择Use System Clock即可。

Xilinx DDR3 MIG IP核设计(2)--IP核的这几个时钟到底如何设计?_mig核时钟-CSDN博客

详细讲解Xilinx DDR3 的MIG IP生成步骤及参数含义_xilinx ddr3 phy dfi接口转换-CSDN博客

Xilinx DDR3 MIG IP核设计(1)--MIG IP核是什么?如何配置MIG IP核?(Native接口)-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2093998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自制实战吃鸡手柄原理

在前面的讨论中,通过类似物理点击的方式来实现了声控触发射击键的点击 【Arduino】自制声控点击器(吼叫吃鸡助手)_辅助机械臂物理物理键盘点击器神器-CSDN博客 为了更有实战效果,我们可以把玩具枪改造为一个手柄,这样…

2024年Java最新面试题总结(三年经验)

目录 第一章、基础技术栈1.1)集合,string等基础问题1、arraylist ,linkedlist的区别,为啥集合有的快有的慢2、字符串倒叙输出2.1、字符串常用方法2.2、字符串号拼接的底层原理3、讲一下Java的集合框架4、定义线程安全的map&#x…

进制数基础知识 与 位运算(基础版)

目录 1. 计算机常用进制类别 2. 10进制转各种进制(取余倒置法) 3. 二进制转8进制、16进制 3.1 二进制转8进制 3.2 二进制转16进制 4. 原码、反码、补码 5. 整型提升 与 算术转换 5.1 整型提升 5.2 算术转换 6. 移位操作符 6.1 左移操作符( &l…

【spring】学习笔记2:sample、boot功能和组件设计

Spring自带了一个强大的Web框架,名为Spring MVC。Spring MVC的核心 是控制器(controller)的理念。控制器是处理请求并以某种方式进行信息 响应的类。在面向浏览器的应用中,控制器会填充可选的数据模型并将请求 传递给一个视图,以便于生成返回给浏览器的HTML。在pom.xml文件…

前端开发——熟悉WebSocket(包含示例)

最近在开发中需要调用第三方API,现在大家的API基本上都是使用WebSocket来进行的,前端也必须来学一手了 什么是WebSocket 参考:https://blog.csdn.net/L2043524156/article/details/139271715 有如下四个好处: 双向通信&#x…

C# .Net 条码批量自动打印框架 基于Bartender 10.1 V1.0

调用Bartender打印模板,批量打印条码。 需要有一定的C#开发能力。 非常适合工厂中从ERP拿取信息后,批量打印出货条码。 提供全部源代码,毫无保留。 Winform程序,使用了依赖注入(微软DI),数据库访问的ORM为Dapper。…

位图 —— 哈希思想的产物

目录 1.学习位图的前置知识 计算机中数据存储的单位 C中数据类型的大小 2.位图的讲解 位图的引出 位图的使用 位图的实现 位图完整代码 3.位图的总结 位图的优缺点 优点 缺点 1.学习位图的前置知识 计算机中数据存储的单位 想要学习位图,首先要明白什…

在Windows10系统快速启用telnet功能

打开Windows控制面板 → 程序 → 启用或关闭Windows功能 勾选Telnet客户端 然后确定 启用后windowR 打开运行,输入cmd回车 使用telnet命令回车 可以直接使用telnet命令(如果提示telnet是外部命令需要重启电脑) 输入 ?/help 可查看帮助 到…

排序算法:

冒泡排序: 从列表的第一个数字开始进行比较,判断该数和下一个数之间的大小关系,如果该数比右边的数大,则交换位置;否则不变。一般一轮可以确定最大的数字,在列表的最后一位。 代码: 注意&…

开源 AI 智能名片 S2B2C 商城小程序在现代商业中的创新与启示

摘要:本文通过分析一种以 9.9 元裙子为代表的独特商业模式,探讨了其背后的现金流、产品和渠道组合策略,以及开源 AI 智能名片 S2B2C 商城小程序在其中可能发挥的作用和带来的启示。 一、引言 在当今竞争激烈的商业环境中,企业不断…

Redis数据结构与连接

1 基本的数据结构 1.1 string string的实现有多种 int:字符串长度小于等于20且能转成整数raw:字符串长度大于44embstr:字符串长度小于等于44 字符串长度小于1M 时,加倍扩容;超过 1M 每次只多扩1M;字符串…

【如何在Mac电脑和示波器之间共享文件】

如何在Mac电脑和示波器(Tektronix OSC)之间共享文件 Tektronix Lan: Mac Lan: 按下Utility,開始設定; 按下Utility Page,選至I/O; Network Configuration選至Manual,再Set IP Adresses Manually&am…

tailwindcss

什么是Tailwind CSS Tailwind CSS 是一个可定制化的 CSS 框架,最大的特点是功能类优先,和我们知道的bootstrap,element ui,antd,veui等框架一样。将一些CSS样式封装好,用来加速我们开发的一个工具。 简单…

精选算法编程题

一、有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后&am…

JAVAEE初阶第二节——多线程基础(中)

系列文章目录 JAVAEE初阶第二节——多线程基础(中) 多线程基础(中) 多线程带来的的风险-线程安全 (重点)synchronized 关键字volatile 关键字wait 和 notify 文章目录 系列文章目录JAVAEE初阶第二节——多线程基础(中) 多线程基础(中)一.多线程带来的的风险-线程安全 (重点)1…

CSDN字体、颜色设置

目录标题 一、字体设置二、字体颜色设置 一、字体设置 设置文字字体的基本语法如下&#xff1a; <font face"字体名称">显示内容</font>在字体名称部分写入字体的名称&#xff0c;比如常见的&#xff1a;宋体、微软雅黑、黑体、华文行楷、方正姚体、楷…

C++奇迹之旅:深度解析list的模拟实现

文章目录 &#x1f4dd;前言&#x1f320;list节点&#x1f309;list &#x1f320;迭代器的创建&#x1f309;const迭代器 &#x1f320;代码&#x1f6a9;总结 &#x1f4dd;前言 &#x1f320;list节点 我们先建立一个列表里的节点类listnode&#xff0c;用来构造list的节…

【知识】对比Share mem/Pin mem/GPU mem之间的传输速度

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 参考代码 运行结果 参考代码 import torch import time import matplotlib.pyplot as plt# 初始化设备和张量 device torch.device(cuda) dat…

float 或 double 运算的时候会有精度丢失的风险?

《阿里巴巴 Java 开发手册》中提到&#xff1a;“浮点数之间的等值判断&#xff0c;基本数据类型不能用 来比较&#xff0c;包装数据类型不能用 equals 来判断”。“为了避免精度丢失&#xff0c;可以使用 BigDecimal 来进行浮点数的运算”。 浮点数的运算竟然还会有精度丢失…

当AI遇上制药:加速跑向未来的快车道,还是布满荆棘的征途?

01 在全球科技领域&#xff0c;AI的崛起无疑掀起了一场变革的风暴&#xff0c;其影响力已渗透至各行各业&#xff0c;促使各领域积极寻求与AI技术的深度融合&#xff0c;以提升效率、创新产品及优化服务。在医疗健康领域&#xff0c;AI与制药的结合自2007年起航&#xff0c;历…