详解DDR3原理以及使用Xilinx MIG IP核(app 接口)实现DDR3读写测试

系列文章目录

(1)详解SDRAM基本原理以及FPGA实现读写控制


文章目录

  • 系列文章目录
  • 一、DDR简介
    • 1.1 什么是 SDRAM、DDR、DDR2、DDR3
    • 1.2 SDRAM、DDR、DDR2、DDR3核心频率、工作频率以及等效频率的计算
    • 1.3 DDR3带宽以及容量的计算
  • 二、MIG IP核的介绍
  • 三、MIG 用户接口信号介绍
  • 四、MIG 操作时序
    • 4.1 命令操作时序
    • 4.2 写数据时序
    • 4.3 读数据时序
  • 五、配置 MIG 步骤
  • 六、MIG 读写控制代码编写


一、DDR简介

  在前文《详解SDRAM基本原理以及FPGA实现读写控制》中我们学会了SDRAM的基本原理以及读写操作时序,本文讲解的DDR3全称为“Double Data Rate 3”(双倍数据速率第三代),它是一种用于计算机和其他设备的随机存取存储器(RAM)技术。

1.1 什么是 SDRAM、DDR、DDR2、DDR3

  SDRAM、DDR、DDR2和DDR3都是不同类型的动态随机存取存储器(DRAM)技术,它们在数据传输速率、功耗、电压和性能方面有所不同。以下是这几种内存的区别:

  1. SDRAM(Synchronous DRAM)

    • 同步动态随机存取存储器,是最早的一种同步内存技术,它与系统总线同步工作。
    • SDRAM 需要两个时钟周期来传输数据,因此数据传输速率相对较低。
  2. DDR SDRAM(Double Data Rate Synchronous DRAM)

    • 双倍数据速率同步动态随机存取存储器,简称DDR。
    • DDR 内存在每个时钟周期的上升沿和下降沿都能传输数据,因此数据传输速率是SDRAM的两倍。
    • DDR 内存的电压通常为 2.5V 或 3.3V。
  3. DDR2 SDRAM

    • DDR2 是 DDR 的后继产品,具有更高的数据传输速率和更低的电压。
    • DDR2 内存的电压为 1.8V,比 DDR 的 2.5V 或 3.3V 低,有助于降低功耗。
    • DDR2 内存的起始频率为 400 MHz,最高可达 1200 MHz。
  4. DDR3 SDRAM

    • DDR3 是 DDR2 的后继产品,进一步提高了数据传输速率和降低了电压。
    • DDR3 内存的电压为 1.5V,比 DDR2 的 1.8V 更低,进一步降低了功耗。
    • DDR3 内存的起始频率为 800 MHz,最高可达 2133 MHz 或更高。
  5. 主要区别

    • 数据传输速率:DDR3 > DDR2 > DDR > SDRAM。
    • 电压:DDR3 (1.5V) < DDR2 (1.8V) < DDR (2.5V/3.3V) < SDRAM。
    • 功耗:随着电压的降低和制造工艺的改进,DDR3 的功耗最低。
    • 性能:DDR3 提供了最高的性能,其次是 DDR2 和 DDR,SDRAM 性能最低。
    • 兼容性:新一代的内存技术通常不兼容旧一代的内存插槽,例如 DDR3 内存不能在只支持 DDR2 的主板上使用。

1.2 SDRAM、DDR、DDR2、DDR3核心频率、工作频率以及等效频率的计算

  从DDR1开始,后续迭代的DDR速度都越来越快,其速度提高的原因就是Prefetch(预读取)。什么是预读取? Prefetch是指内存在处理数据请求时,不仅读取请求的数据,还会预先读取额外的数据到缓存中。这种机制可以提高内存的效率和性能。
  我们知道DDR在时钟周期的上沿和下沿都能传输数据,所以传输率比SDRAM快了一倍,这就说DDR上升沿传输一位数据,下降沿传输一位数据,在一个时钟周期内一共传输2bit数据,这儿是2bit是指2倍芯片位宽的数据。
  DDR2一次性可以从存储单元预读取4bit的数据,然后在时钟上升沿和下降沿发送出去,因此DDR2需要2个时钟周期才能完成传输。
  DDR3一次性可以从存储单元预读取8bit的数据,然后在时钟上升沿和下降沿发送出去,因此DDR3需要4个时钟周期才能完成传输。
  核心频率是指DDR物理内部的运行时钟频率,因为是双沿传输,所以DDR的工作频率是2倍核心频率。再由上面可知,DDR2预读取4bit需要2个时钟,因此DDR2的等效频率也就是实际的数据传输速率就等于工作频率*2。常见的DDR频率表如下:

在这里插入图片描述
  例如DDR3-1333是指核心频率为166MHZ,工作频率=1662=333MHZ,因为DDR3预读取8bit数据需要4个周期,所以等效频率=3334约等于1333MHZ。

  在用户控制方面来看,如果我想让DDR3跑等效800M数据速率,这是双沿的速率,所以实际上DDR3 IO速率为400M,因为DDR3预读取8bit需要4个时钟周期,所以用户操作逻辑只需要400/4=100M的时钟来读写数据。

1.3 DDR3带宽以及容量的计算

  DDR带宽=等效频率 * 位宽。 例如:位宽64位的DDR3-800的带宽=800M * 64bit=51.2Gbit/s=6.4GB/s。对于用户操作读写的数据位宽=800M * 64bit/100M=512bit。因此用户只需要用100M的时钟操作512位的数据,即可让DDR3跑800M 64位的速率。

  以MT41K256M16TW-107为例计算DDR3容量,打开芯片手册如下:

在这里插入图片描述
  BANK的数据位宽位3位,因此BANK数量=2 ^ 3=8;行地址位宽为15位,因此一个BANK一行的存储单元数量 = 2 ^ 15=32768=32K;列地址位宽为10,因此一个BANK一列的存储单元数量=2 ^ 10 = 1024 =1K;数据位宽为16位,所以这片DDR3总的容量= 8 ✖ 32768 ✖ 1024 ✖ 16 = 4294967296 bit = 4096Mb = 512MB

二、MIG IP核的介绍

  前面我们介绍了DDR3的一些知识,对DDR3有了一个大致了解,那么我们怎么去使用DDR3呢?与SDRAM不同的是DDR3 的时序非常复杂,用户直接编写DDR3的控制代码是相当耗时以及性能得不到保证,那么绝大部分开发者都会使用芯片厂家提供的控制器来操作DDR3。
  MIG(Memory Interface Generators) IP 核是Xilinx提供给7系以及以上的用户来实现 DDR3 的读写控制器。MIG有AXI接口版本以及app接口的版本,本次我们讲解app接口的MIG,AXI接口的后续在讲。app接口的MIG系统框图如下所示:

在这里插入图片描述

  • 最右侧的DDR2/DDR3 SDRAM为物理上的DDR3存储器。
  • 中间的7 Series FPGAs Memory Interface Solution 就是上面所说的MIG IP核,它与DDR3控制器通过右边以ddr开头命名的信号相连接。
  • 最左侧是我们用户自己的逻辑,使用以app开头的信号与MIG IP核相连接。

  对于用户来说,只有正确的控制app这些信号才能操作MIG,还要负责分配正确的DDR3管脚,其他不用关心。。MIG内部负责产生具体的DDR3操作时序,并直接操作DDR3读写。

三、MIG 用户接口信号介绍

  从上面系统框图来看,MIG提供给用户的接口有很多,但是对于用户来说,不是所有信号都必须使用,我们先来看每个信号的意思,信号方向是相对于MIG来说的。具体如下表所示:

信号名称 信号方向信号说明
ui_clk 输出MIG输出的用户时钟,必须是DDR3 IO时钟的1/2或者1/4
ui_clk_sync_rst输出用户时钟复位信号,高电平有效
init_calib_complete输出DDR3初始化完成信号,高电平有效,
app_addr[ADDR_WIDTH – 1:0] 输入用户地址输入,地址的位宽ADDR_WIDTH等于RANK位宽+BANK位宽+ROW位宽+COL位宽
app_en输入MIG IP核命令写入使能,高电平有效。写命令时需要拉高该信号
app_cmd[2:0] 输入控制命令信号;读:001;写:000。其他值保留。
app_rdy 输出MIG IP核准备接收读写命令,高电平有效。
app_wdf_wren输入MIG IP核数据写使能,高电平有效
app_wdf_mask[APP_MASK_WIDTH – 1:0] 输入数据掩码信号,指示当前写数据那些位有效
app_wdf_rdy 输出MIG IP核准备接收数据信号,高电平有效。
app_wdf_end输入指示当前写入下是最后一个数据,高电平有效。
app_wdf_data [APP_DATA_WIDTH-1:0] 输入需要写入的数据
app_rd_data[APP_DATA_WIDTH – 1:0] 输出MIG从DDR3读出来的数据
app_rd_data_valid 输出读数据有效信号,高电平有效
app_rd_data_end 输出指示当前读出的数据是最后一个数据,高电平有效
app_sz 输入保留信号,置0
app_sr_req 输入保留信号,置0
app_sr_active 输出保留信号
app_ref_req 输入刷新请求信号
app_ref_ack 输出刷新请求响应信号
app_zq_req 输出请求校准阻抗匹配信号

四、MIG 操作时序

4.1 命令操作时序

  当用户逻辑app_en信号被断言且app_rdy信号从MIG被断言时,MIG接受命令。每当app_rdy被取消断言时,MIG将忽略该命令。用户逻辑需要将app_en与有效命令和地址值沿着保持为高电平,直到app_rdy被断言,如下图所示:

在这里插入图片描述
  只有当app_rdy 与 app_en同时为高时,命令和地址才会被写入到MIG,如图红色的位置,这类似于AXI里的握手信号。

4.2 写数据时序

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

在这里插入图片描述
  如上图所示,写数据有三种情形均可以正确写入:

  1. 写数据时序和写命令时序发生在同一拍
  2. 写数据时序比写命令时序提前一拍
  3. 写数据时序比写命令时序至多延迟两拍

4.3 读数据时序

  用户发出读命令后,用户只需等待数据有效信号(app_rd_data_valid)拉高,为高表明此时数据总线上的数据是有效的返回数据,有效读数据要晚若干周期才出现在数据总线上。如下图所示:

在这里插入图片描述

五、配置 MIG 步骤

  打开IP库搜索MIG,然后打开,第一个界面是MIG的一些简要说明,直接点NEXT就行。

在这里插入图片描述

  第二个界面主要就是自定义MIG名称,以及MIG核数量和是否用AXI接口的MIG,本次实验先用默认的app接口,所以不选AXI4。

在这里插入图片描述
  第三个界面选择兼容的FPGA器件,这里不用就不选择

在这里插入图片描述
  第四个界面选择控制什么类型的DDR,这里选择DDR3
在这里插入图片描述
  第五个界面选择DDR3具体的物理参数

在这里插入图片描述

  1. Clock Period:MIG输出给DDR3物理运行的时钟频率,DDR3基于此时钟双沿采样,因此DDR3的实际传输数据速率为800M。
  2. PHY to Controller Clock Ratio:DDR3物理芯片运行时钟和MIG IP核的用户端(FPGA)的时钟之比;一般有 4:1 和 2:1 两个选项,本次实验选 4:1。由于 DDR 芯片的运行时钟是 400MHz,因此 MIG IP 核的用户时钟(ui_clk)就是100MHz。
  3. Memory Type:DDR3 储存器类型选择。默认选择 Component,即贴片式的DDR。SODIMM为笔记本的DDR,RDIMM为服务器的DDR,UDIMM是台式机用的DDR。
  4. Memory Part:DDR3具体型号,这里选择开发板上的MT41J12816-125,如果没有找到自己开发板的型号,可以选择相近的芯片型号或者点击Create Custom Part来自定义芯片内部参数。
  5. Memory Voltage:DDR电压,上文可知DDR3的电压为1.5V,所以这里固定1.5V。
  6. Data Width:数据位宽选择,因为是开发板上有2块ddr3,所以这里位宽选择32。
  7. ECC:校验使能,数据位宽为 72 位的时候才能使用。
  8. Data Mask:数据屏蔽管脚使能
  9. Number of Bank Machines:是用来对具体的BANK使用几个Bank Machine来单独控制的,选择多了控制效率就会高,相应的占用的资源也多,本次芯片内部有8个bank,这里就选择4,每一个Bank Machine来控制2个BANK
  10. ORDERING: 该信号用来决定MIG控制器是否可以对它收到的指令进行重新排序,选择Normal则允许,Strict则禁止。本次选择Normal,从而获得更高效率。

  第六个界面选择MIG的设置
在这里插入图片描述

  1. Input Clock Period:输入给MIG核的时钟,MIG通过此时钟分频或者倍频出其它时钟,这里选择200M
  2. Read Burst Type and Length:突发类型选择顺序突发,且突发长度只支持8
  3. Output Driver Impdance Control:输出阻抗控制,这里选择默认的RZQ/7即可
  4. RTT:终端电阻,选择默认的RZQ/4即可
  5. Controller Chip Select Pin:片选引脚使能
  6. BANK_ROW_COLUMN:寻址方式选择第二种

  选择MIG参考时钟以及复位
在这里插入图片描述

  1. System Clock:选择上一个界面选择的时钟来源,如果是外部单端晶振进来,就选择Single-Ended;如果是外部差分晶振进来,就选择Differential;如果是内部锁相环产生,就选择No Buffer,这里我们是内部PLL产生,所以选择No Buffer。

  2. Reference Clock:MIG IP 核参考时钟。IP 核参考时钟要求是200Mhz,而MIG IP 核的系统时钟刚好也使用了200Mhz的系统时钟,所以可以选择Use System Clock这个选项

  3. System Reset Polarity:复位信号电平选择,这里选择低有效

  下一个界面是配置阻抗匹配,默认50Ohms即可

在这里插入图片描述
  下一个界面是选择DDR管脚,如果只是单纯仿真,选上面就好,如果是下板验证,就要选择下面这个根据实际开发板管脚选择
在这里插入图片描述
  下一个界面是选择一些信号引脚,这里全都选择No connect即可,后续没有配置了,一路点next就完成了MIG核的配置
在这里插入图片描述

六、MIG 读写控制代码编写

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习 第8章-集成学习

机器学习 第8章-集成学习 8.1 个体与集成 集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务&#xff0c;有时也被称为多分类器系统(multi-classifersystem)、基于委员会的学习(committee-based learning)等。 图8.1显示出集成学习的一般结构:先产生一组“…

【附安装包】CentOS7(Linux)详细安装教程(手把手图文详解版)

目前流行的虚拟机软件有VMware、Virtual Box和Virtual PC等等&#xff0c;其中最常用的就是VMware。 而centos是Linux使用最广泛的版本之一。 教程开始教程有许多不完备之处&#xff0c;大佬请忽略。。。 1.安装VMware 首先需要准备VMware的安装包以及Ubuntu的ISO镜像&#…

鸿蒙系统开发【设备安全服务-应用设备状态检测】安全

设备安全服务-应用设备状态检测 介绍 本示例向您介绍如何在应用中获取DeviceToken用于对应用的设备状态进行检测。 需要使用设备安全服务接口 kit.DeviceSecurityKit。 效果预览 Sample工程的配置与使用 在DevEco中配置Sample工程的步骤如下 [创建项目]及[应用]。打开Sam…

数据结构与算法 - 递归

一、递归 1. 概述 定义&#xff1a;在计算机科学中&#xff0c;递归是一种解决计算问题的方法&#xff0c;其中解决方案取决于同一类问题的更小子集。 比如单链表递归遍历的例子&#xff1a; void f(Node node) {if(node null) {return;}println("before:" node…

Animate软件基础:在时间轴中添加或插入帧

FlashASer&#xff1a;AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084 FlashASer&#xff1a;实用的各种Adobe Animate软件教程https://zhuanlan.zhihu.com/p/675680471 FlashASer&#xff1a;Animate教程及作品源文件https://zhuanlan.zhihu.co…

软件测试--python基础

一、python基础 (1)第一个python (2)python解释器 (3)基础语法 ①字面量 什么是字面量 常用的值类型 字符串 ②注释 ③变量 什么是变量 变量的特征 变量的目的是存储运行过程的数据 存储的目的是为了&#xff1a;重复使用 ④数据类型 type()语句 变量有类型吗&#xff1f;…

在欧拉系统中安装数据库

在欧拉系统中的安装 &#xff08;禁止超级用户root登录&#xff09; yum install mariadb-server -y #下载命令 systemctl enable --now mariadb #设置为开机自启&#xff0c;并立即启动该服务 mysql_secure_installation #安全设置&#xff0c;初始化 修…

C语言数据在内存中的存储超详解

文章目录 1. 整数在内存中的存储2. 大小端字节序和字节序判断2. 1 什么是大小端&#xff1f;2. 2 为什么会有大小端&#xff1f;2. 3 练习 3. 浮点数在内存中的存储3. 1 一个代码3. 2 浮点数的存储3. 2. 1 浮点数存的过程3. 2. 2 浮点数取的过程3. 3 题目解析 1. 整数在内存中的…

ctfshow-web入门-sql注入(web171-web175)

目录 1、web171 2、web172 3、web173 4、web174 5、web175 1、web171 单引号测一下&#xff0c;报错 -- 闭合后回显正常 也可以用 # &#xff0c;不过需要 URL 编码 成功闭合之后&#xff0c;先判断下字段数&#xff1a; 1 order by 3-- 3 的时候正常 4 的时候报错&am…

C++必修:STL之vector的了解与使用

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 1. C/C中的数组 1.1. C语言中的数组 在 C 语言中&#xff0c;数组是一组相同类型…

泰迪智能科技AI大模型某医院合作案例介绍

泰迪智能科技AI大模型支持以ChatGLM2-6B、Baichuan-13B、Qwen14B和文心一言等多种大语言模型为底座&#xff0c;实现基于特定领域数据、面向智能客服、问答系统、自动摘要、智能打标、内容创作、信息抽取等应用场景的模型微调、评估和推理&#xff0c;为业务智能升级和价值挖掘…

【C++从小白到大牛】类和对象

目录 一、面向过程和面向对象初步认识 二、类的引入 三、类的定义 类的成员函数两种定义方式&#xff1a; 1. 声明和定义全部放在类体中 2. 类声明放在.h文件中&#xff0c;成员函数定义放在.cpp文件中 成员变量命名规则的建议&#xff1a; 四、类的访问限定符 【访问限…

本地部署持续集成工具Jenkins并配置公网地址实现远程自动化构建

文章目录 前言1. 安装Jenkins2. 局域网访问Jenkins3. 安装 cpolar内网穿透软件4. 配置Jenkins公网访问地址5. 公网远程访问Jenkins6. 固定公网地址 前言 本文主要介绍如何在Linux CentOS 7中安装Jenkins并结合cpolar内网穿透工具实现远程访问管理本地部署的Jenkins服务. Jenk…

大模型算法面试题(十八)

本系列收纳各种大模型面试题及答案。 1、P-tuning v2 思路、优缺点是什么 P-tuning v2是清华大学自然语言处理实验室&#xff08;THUDM&#xff09;等研究机构提出的一种新的预训练模型优化方法&#xff0c;主要关注如何通过动态构建任务相关的提示序列来引导预训练模型进行更…

【数据结构进阶】手撕红黑树

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; C || 数据结构 目录 &#x1f308;前言&#x1f525;红黑树的概念&#x1f525;手撕红黑树红黑树结点的定义红黑树主体需要实现的成员函数红黑树的插入findEmpty和Size拷贝构造析构函数和…

Redis和Mysql如何保持数据一致性

一般情况下&#xff0c;Redis是用来实现应用和数据库之间读操作得缓存层&#xff0c;主要目的是减少数据库IO&#xff0c;还可以提升数据的IO性能。 当应用程序需要去读取某个数据时&#xff0c;会首先尝试去Redis里面加载&#xff0c;如果命中就直接返回&#xff0c;如果没有…

C++ 操作Git仓库

代码 #include "common.h" #include "args.c" #include "common.c"enum index_mode {INDEX_NONE,INDEX_ADD };struct index_options {int dry_run;int verbose;git_repository* repo;enum index_mode mode;int add_update; };/* Forward declar…

vue项目Nginx部署启动

1.vue打包 &#xff08;1&#xff09;package.json增加打包命令 "scripts": {"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js --host 10.16.14.110","start": "npm run dev","un…

Halcon 边缘提取(亚像素)

Halcon提供多种边缘提取算法。像素提取方法有常用的边缘提取算子或深度学习分割模型等。考虑到精度问题可能需要提取亚像素边缘。当然也可以提取轮廓&#xff1a;线、圆、椭圆等。本文只讨论提取轮廓。 1 基本概念 正常情况下&#xff0c;无需特殊操作即可提取边缘轮廓。 1…

Linux-4:Shell编程——基础语法(50%-100%)

目录 前言 一、数组 1.数组定义 2.关联数组 3.数组长度 二、运算符 1.算术运算符 2.关系运算符 3.布尔运算符 4.逻辑运算符 5.字符串运算符 6.文件测试运算符 三、read命令 1.接收用户输入 2.开启转义 3. -p 输入提示 4. -s 静默模式 -t 设置超时时间 5.读取…