PL端DDR4读写测试实验(未完成)

news2024/11/17 0:44:08

文章目录

  • DDR4介绍
  • 实验过程
    • 编写XDC
    • 使用IP核
    • 上板验证
    • TODO
  • 参考


DDR4介绍

开发板PL有一颗16bit的DDR4。
在这里插入图片描述
先说明硬件信号(按该芯片):

信号名说明
DQData input/output,双向数据线(这个芯片是x16的,使用DQ[15:0] ),可以看到这里芯片和ZYNQ的定义并不是一对一的,把数据线交换了,但是不会影响最终的使用
DQS_t,DQS_c,UDQS_t,UDQS_c,LDQS_t,LDQS_cData strobe,读数据时输出,写数据时输入,x16时,LDQS对应DQ[15:8],UDQS对应DQ[7:0]。差分数据选通信号:差分信号对,作输入时与写数据同时有效,作输出时与读数据同时有效
DM_n,UDM_n,LDM_nInput data mask,写数据时的掩码信号,也是分别对应DQ的低8位和高8位,DM:Data Mask,DBI:Data Bus Inversion数据总线反转
VSSGround,地
VSSQDQ ground,数据线的地
VDDPower supply: 1.2V ±0.060V,供电
VDDQDQ power supply: 1.2V ±0.060V,数据线供电
VPPDRAM activating power supply: 2.5V –0.125V/+0.250V,激活电压
VREFCAReference voltage for control, command, and address pins,参考电压
ZQReference ball for ZQ calibration,ZQ校准,接一个240欧姆的参考电阻,下拉到地
A[17:0]Address inputs,地址线,A17只用到16Gb上面,A14、A15、A16还复用其他功能
ACT_nCommand input
CS_nChip select
RAS_n/A16,CAS_n/A15,WE_n/A14Command inputs,一些命令设置,包含行地址、列地址有效什么的
BABank address inputs
BGBank group address inputs
CK_t,CK_cClock, Differential clock inputs,差分时钟输入
CKEClock enable,时钟使能信号
PARParity for command and address
ALERT_nAlert output
TENConnectivity test mode
ODTOn-die termination,片上终端电阻,把电阻做到了芯片内部
RESET_nActive LOW asynchronous reset,复位信号

芯片信号为为MT40A512M16LY-062E,是镁光(Micron)的。从手册上看,这个型号的容量是8Gb(1GB),命名含义如下:
在这里插入图片描述

这里面的Meg和Gig都是一个单位,512M16表示容量是512Megx16,后面的16bit是位宽度。

然后是一些参数,DDR4引入了bank group的概念,一个bank group包含多个bank。MT40A512M16LY有两个bank group,使用1根地址线BG0(BG:bank group)即可进行寻址,每个bank group包含4个bank,使用两根地址线BA[1:0](BA:bank address)即可进行寻址。除了bank的地址,DDR4还用有17根地址线A[16:0],设计时选择分两次使用定位一个地址的方案,行列公用这些地址线,第一次是行地址,第二次是列地址。MT40A512M16LY使用行寻址使用了A[15:0]的16根地址线,列寻址使用了A[9:0]的10根地址线。

在这里插入图片描述
下面是芯片的内部结构图,也要配合前面管脚定义去理解。左下角是地址寄存器,包含A[16:0],BA,BG,BA和BG用于控制选择到具体的哪一个bank,A[16:0]同时被连接到行地址和列地址选择寄存器,是复用,因为读取的时候是分两次的,一次行地址,一次列地址。
在这里插入图片描述

实验过程

编写XDC

对着原理图,使用图形界面或者代码的方式进行设置即可。要一个管脚一个管家的去设置。
DDR4的管脚。
系统时钟的管脚。

使用IP核

Vivado提供了操作了DDR的IP核,主要是创建工程和IP和的添加和使用。

  1. 在“IP Catalog”的搜索框搜索“mig”,快速找到“Memory Interface Generator”,选择DDR4 SDRAM。
  2. 设置DDR参考时钟、内存类型、位宽,主要是硬件决定的一些信息。Component Name 可以修改,Controller/PHY Mode 选择“Controller and physical layer”,参考时钟选择 200MHz,即 5003ps,Momory Part 选择”MT40A512M16HA-083E”,Data Width 选择 16,其他设置保持默认,点击 OK。

这个IP和相当于一个DDR4的控制器,经过设置之后的IP和接口如下。
在这里插入图片描述
官方文档的结构描述,右边是物理的接口,直接连接到DDR,左边接口是用户接口即读写ddr需要操作的接口:

在这里插入图片描述
wdf 是 write data fifo?写数据的时候,ip核内部先把数据放到FIFO里?

信号描述
app_addr[APP_ADDR_WIDTH – 1:0]当前请求的地址
app_cmd[2:0]当前请求的命令
app_en使能信号,地址和命令有效
app_autoprechargeset the A10 autoprecharge bit on the DRAM
app_wdf_data[APP_DATA_WIDTH – 1:0]写命令的数据
app_wdf_end表示写入数据的结束
app_wdf_mask[APP_MASK_WIDTH – 1:0]app_wdf_data的掩码
app_wdf_wren写数据有效
app_rdy表示用户可口可以接收命令
app_rd_data[APP_DATA_WIDTH – 1:0]读命令读取数据
app_rd_data_end读出数据的结束
app_rd_data_validapp_rd_data有效
app_wdf_rdy写数据FIFO准备好接收数据,当使能信号和该信号一起有效时,数据被接收
app_ref_req用户刷新请求
app_ref_ack用户刷新请求完成
app_zq_reqUser ZQCS command request
app_zq_ackUser ZQCS command request completed
app_hi_prThis input is reserved and should be tied to 0 保留,下拉到0
ui_clkThis user interface clock must be one quarter of the DRAM clock
init_calib_completePHY asserts init_calib_complete when calibration is finished,校准完成后输出
ui_clk_sync_rstThis is the active-High user interface reset,复位
addn_ui_clkoutAdditional clock outputs provided based on user requirement
dbg_clkDebug Clock. Do not connect any signals to dbg_clk and keep the port open during instantiation,调试时钟

在这里插入图片描述

上板验证

代码的ila没设置成功,弹出来一个这个窗口。
在这里插入图片描述

TODO

看不下去了,等提升下能力后再来看。

  1. 读写时序没进行分析。
  2. ila为什么没设置成功。
  3. 再分析下代码。

参考

  1. DDR的型号问题
  2. DDR4 SDRAM基础介绍
  3. DDR4实战教学(一):DDR4寻址原理
  4. 地址\数据总线在走线时互换
  5. DDR4读写测试(一):MIG IP核配置
  6. DDR4读写测试(二):基本读写测试
  7. DDR一些引脚说明
  8. DR4读写测试实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

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

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

相关文章

SpringBoot初级开发--多环境配置的集成(9)

在Springboot的开发中,我们经常要切换各种各样的环境配置,比如现在是开发环境,然后又切换到生产环境,这个时候用多环境配置就是一个明智的选择。接下来我们沿用上一章的工程来配置多环境配置工程。 1.准备多环境配置文件 这里我…

时序预测 | MATLAB实现基于PSO-GRU、GRU时间序列预测对比

时序预测 | MATLAB实现基于PSO-GRU、GRU时间序列预测对比 目录 时序预测 | MATLAB实现基于PSO-GRU、GRU时间序列预测对比效果一览基本描述程序设计参考资料 效果一览 基本描述 MATLAB实现基于PSO-GRU、GRU时间序列预测对比。 1.MATLAB实现基于PSO-GRU、GRU时间序列预测对比&…

批量剪辑工具:轻松垂直翻转倒立视频画面

你是否曾经遇到这样的情况:拍摄的视频画面是倒立的,但你需要在正立的情况下观看。这时候,你需要一款视频批量剪辑工具来帮助你垂直翻转倒立的视频画面。 首先第一步,我们要打开【视频剪辑高手】,登录账号。 第二步&…

偏置曲柄滑块机构连杆上的双尖点轨迹

偏置曲柄滑块机构是一种常见的机械传动机构,由曲柄、偏置滑块和连杆组成。其中,偏置滑块具有急回特性,可以使机构在运动过程中产生快速的反向运动。 偏置曲柄滑块机构中,连杆上的双尖点轨迹指的是连杆在偏置曲柄滑块机构的运动过…

MOS的减速加速电路设计

引言:在开始讲解MOS的减速加速电路之前,我们还是先来回顾MOS开启与关闭的根本机制。以NMOS为例,开启NMOS本质是对G极进行充电,至Cgs电荷充满,G极才会达到控制端电平值或者开启阈值,关断NMOS时,G…

嵌入式开发之syslog和rsyslog构建日志记录

1.syslogd作客户端 BusyBox v1.20.2 (2022-04-06 16:19:14 CST) multi-call binary.Usage: syslogd [OPTIONS]System logging utility-n Run in foreground-O FILE Log to FILE (default:/var/log/messages)-l N Log only messages more urge…

QT DAY 2

window.cpp #include "window.h" #include<QDebug> #include<QIcon> Window::Window(QWidget *parent) //构造函数的定义: QWidget(parent) //显性调用父类的构造函数 {//this->resize(430,330);this->resize(QSize(800,600));// this…

音视频入门基础理论知识

文章目录 前言一、视频1、视频的概念2、常见的视频格式3、视频帧4、帧率5、色彩空间6、采用 YUV 的优势7、RGB 和 YUV 的换算 二、音频1、音频的概念2、采样率和采样位数①、采样率②、采样位数 3、音频编码4、声道数5、码率6、音频格式 三、编码1、为什么要编码2、视频编码①、…

无涯教程-Android - CheckBox函数

CheckBox是可以由用户切换的on/off开关。为用户提供一组互不排斥的可选选项时,应使用复选框。 CheckBox 复选框属性 以下是与CheckBox控件相关的重要属性。您可以查看Android官方文档以获取属性的完整列表以及可以在运行时更改这些属性的相关方法。 继承自 android.widget.T…

探索IPv6:未来互联的新时代

文章目录 一、IPv4的问题二、IPv6的优势三、地址格式与地址书写压缩四、网段划分五、地址分类六、IPv6邻居发现协议七、常用命令 首先可以看下思维导图&#xff0c;以便更好的理解接下来的内容。 一、IPv4的问题 地址资源枯竭&#xff1a; 由于IPv4地址长度有限&#xff0c;可用…

导致事物失效的场景有哪些 ?

目录 1. 导致事物失效的场景有哪些 &#xff1f; 1.1 为什么 Transaction 修饰非 public 方法会导致事物失效 &#xff1f; 1.2 代码中使用 try/catch 处理了异常为什么会导致事物失效 &#xff1f; 1.3 为什么在类内部调用 Transaction 修饰的方法会导致事务失效 ? 1.4 …

一图胜千言!数据可视化多维讲解(Python)

数据聚合、汇总和可视化是支撑数据分析领域的三大支柱。长久以来&#xff0c;数据可视化都是一个强有力的工具&#xff0c;被业界广泛使用&#xff0c;却受限于 2 维。在本文中&#xff0c;作者将探索一些有效的多维数据可视化策略&#xff08;范围从 1 维到 6 维&#xff09;。…

批处理启动程序

&#x1f495;批处理启动程序 新建一个txt&#xff0c;把后缀改成bat&#xff0c;编辑脚本&#xff1a;start exe路径即可&#xff1a;

$nextTick使用

在Vue中&#xff0c;$nextTick是一个实例方法&#xff0c;用于在DOM更新之后执行回调函数。它可以用于在更新视图后执行一些操作&#xff0c;例如访问更新后的DOM元素或执行其他异步任务。 以下是$nextTick的使用方法&#xff1a; this.$nextTick(() > {// 在DOM更新后执行…

【若依框架RuoYi-Vue-Plus 图片回显不显示问题,OSS文件上传或者本地上传】

一、问题 1.设计表 product&#xff08;商品表&#xff09; 有 id &#xff08;id&#xff09; name&#xff08;商品名&#xff09;icon&#xff08;图标&#xff09; 2.使用若依代码生成功能&#xff0c;导入product表&#xff0c;代码生成。 3.将生成的代码导入到项目中得到…

Vue-Router 一篇搞定 Vue3

前言 在 Web 前端开发中&#xff0c;路由是非常重要的一环&#xff0c;但是路由到底是什么呢&#xff1f; 从路由的用途上讲 路由是指随着浏览器地址栏的变化&#xff0c;展示给用户不同的页面。 从路由的实现原理上讲 路由是URL到函数的映射。它将 URL 和应用程序的不同部分…

PXE 装机(五十)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、PXE是什么 二、PXE的组件 三、配置vsftpd 四、配置tftp 五、准备pxelinx.0文件、引导文件、内核文件 ​六、配置dhcp 七、创建default文件 八、配置pxe无人值守…

C语言圣经KR笔记 1.10外部变量和作用域

1.10外部变量和作用域 上一节main中的变量&#xff0c;如line、longest等等&#xff0c;对main来说是私有的或者说是局部的。因为它们是在main中定义的&#xff0c;其他函数不能直接访问它们。其他函数中的变量也是如此&#xff0c;例如&#xff0c;getline中的变量 i 与copy中…

C语言:static关键字的使用

1.static修饰局部变量 这是static关键字使用最多的情况。我们知道局部变量是在程序运行阶段在栈上创建的&#xff0c;但是static修饰的局部变量是在程序编译阶段在代码段&#xff08;静态区&#xff09;创建的。所以在static修饰的变量所在函数执行结束后该变量依然存在。 //…

C++(17):标准库特殊设施

tuple 类型 tuple是类似pair的模板。 每个pair的成员类型都不相同&#xff0c;但每个 pair都恰好有两个成员。不同tuple类型的成员类型也不相同&#xff0c;但一个tuple可以有任意数量的成员。 每个确定的tuple类型的成员数目是固定的&#xff0c;但一个tuple类型的成员数目可…