赞
踩
将数据和指令写入datamover,通过axistream总线将数据写入ddr的对应地址位置,同时通过STS反馈写入数据是否成功状态
S2MM_DATA | |
S_AXIS_S2MM_0_tdata | 传输的数据位宽,可设置成不同位宽 |
S_AXIS_S2MM_0_tkeep | 输入数据有几个BYTE就有几位置一如:data[31:0]则tkeep为4‘b1111;data15:0]则tkeep为2‘b11; |
S_AXIS_S2MM_0_tlast | 每一个帧产生一个tlast信号 每传送BTT个字节tlast拉高 |
S_AXIS_S2MM_0_tready | 表示可以写入数据 |
S_AXIS_S2MM_0_tvalid | 数据有效与tready没有因果关系,当tready和tvalid同时为1时数据输入有效 |
S2MM_CMD | |
S_AXIS_S2MM_CMD_0_tdata | 输入的控制指令每帧写入多少byte的数据 |
S_AXIS_S2MM_CMD_0_tready | 可以写入cmd |
S_AXIS_S2MM_CMD_0_tvalid | 与tready同时为一CMD有效 |
S2MM_STS | |
M_AXIS_S2MM_STS_0_tdata | 可根据表格观察传输结果是否正确 |
M_AXIS_S2MM_STS_0_tready | 正常直接拉高 |
1 | 与上右图中DDR的DATA_WITH一致,一般为 ddr的位宽 * 8 如使用的ddr位宽为16则为128 |
2 | 设置传输数据S_AXIS_S2MM_0_tdata的位宽 |
3 | Brust设置突发长度 AXI总线单次突发的长度 |
4 | 设置bbt的位宽一般为23bit |
1 | 连接到AXIS总线上与DDR相连 |
2 | 读出来的数据 |
3 | 读数据CMD |
其余与写数据类似
注意
MIG的复位和cmd的复位 要不一样,不然会影响上电时序
一般使用到RSVD
读命令格式:
BaseAddress | ddr写入的起始地址可不从0地址开始写 |
OffsetAddress | 数据多次写入,每次写入的开始地址 |
BTT | 单词写入的地址长度0-2^23Byte |
DDR_ADDR | Ddr可以写入的总地址大小 |
写命令格式
正常情况下
M_AXIS_S2MM_STS_0_tdata == 8'h80 && M_AXIS_S2MM_STS_0_tvalid
M_AXIS_MM2S_STS_0_tdata == 8'h80 && M_AXIS_MM2S_STS_0_tvalid
为0x80时且valid为1,表示传输数据成功
百度云文件链接晚点上传
VIVADO 2018.3
ddr3.tcl | BD的生产文件 |
top_325t_2.v | 顶层 |
datamover_device.v | 读写cmd控制命令 |
dma_create_data | 造数模块 |
原工程生成bd命令:
write_bd_tcl ddr3.tcl
新工程移植bd命令:
source d:/Dzz/tz_7k325t_2_120M_ddr/ddr3.tcl
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。