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


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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值