对黑金AX301中sdram数据读取demo代码中的几个疑问的探索

新手入门,想尝试sdram数据的随机读取,怕工程量大就直接在代码上修改,尝试按照地址控制读写。从读开始~记录如下,可能认识有限~

大部分的探索方式是通过看代码,看Netlist viewers,看signaltap结果推敲出来的。

看了一会代码后发现sdram的读写数据按照burst方式的话,是一次读写n个字节,一次读写的数目按照burst的配置来完成。同时产生了几个疑问:

    1. burst读写的地址是自动累加的吗?

    burst读写的方式是只用初始地址,中间的地址没有逐步变化,可能是按照burst长度自动按顺序读写的。后面有验证。

    1. 由sys_wraddr[22:0]和sys_rdaddr[22:0]如何转变为sdram_addr[12:0]和sdram_ba[1:0]?

    sys_wraddr和sys_rdaddr根据读写状态选择其一形成系统的实际地址sys_addr,sys_addr的[22:21]是bank地址,[20:8]是行地址,[7:0]是列地址。sdram_addr会根据sdram的状态读取寄存器配置字、行地址或者列地址来配置sdram的状态。所以sdram_addr不只是地址线,也是配置字

    1. sdram_data[15:0]和sys_data_out[15:0]、sys_data_in[15:0]的区别和联系?

    由sdram_din生成sys_data_in;sdram_dout是wire定义,连接到sys_data_out上,所以在signaltap上看不到sdram_dout接口
    sdram_data是sdram内部的数据总线,输入输出都需要经过此总线。写入数据时sdram_data比sys_data_in慢一个时钟,读出数据时,sys_data_out比sdram_data慢一个时钟。

一切都是因为复用!!!!资源!!!!!

    1. 在黑金的demo代码中,定义的wr_addr和rd_addr这两个reg没有使用,实际的sdram_top程序中用的是sdram_wraddr和sdram_rdaddr
    将sdram_top的形参变为wr_add和rd_add编译后运行无问题;再将读的初始地址修改为23d2,读的长度修改为9d253(理论上前面从0003h开始读,最后只读到00feh),发现读信号没有了,原因应该为sdram_cmd的sdram burst配置方式仍然是读出256个,虽然在sdram_test中配置了rd_length是253,但是二者产生了冲突;尝试读初始地址改为23d2,读长度仍然为256,结果与预想的一致,结尾补充的是异常数。此处可以验证问题1,说明地址确实是自动累加了,只不过burst的一次读写中不会体现出来。

转载于:https://www.cnblogs.com/Osler/p/8203273.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值