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

Posted osler

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对黑金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的一次读写中不会体现出来。

以上是关于对黑金AX301中sdram数据读取demo代码中的几个疑问的探索的主要内容,如果未能解决你的问题,请参考以下文章

黑金AX310开发板 CP210x USB to UART Bridge Controller 驱动安装

黑金AX310开发板 CP210x USB to UART Bridge Controller 驱动安装

黑金AX310开发板 CP210x USB to UART Bridge Controller 驱动安装

黑金AX7Z100 FPGA开发板移植LWIP库PS端

黑金AX7Z100 FPGA开发板移植LWIP库PS端

黑金AX7Z100 FPGA开发板移植LWIP库PL端