在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2510|回复: 0

[原创] 【xilinx DDR3 初探1】用户接口刷新问题

[复制链接]
发表于 2020-2-24 15:40:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 南竹轩 于 2020-2-24 17:55 编辑

【背景】一年多没有写FPGA代码了,最近开始搞DDR项目,想深入研究一下DDR IP核的三个刷新接口
【平台】A7 + DDR3
【结论】结果发现这三个接口刷新与否没有本质区别,不用主动刷新此接口;IP核自己刷新就行;

【步骤】将黑金A7101的代码移植到另一块开发板上,在DDR读写结束的时候,手动将app_ref_reqapp_zq_reqapp_sr_req等信号拉高一拍,观察刷新效果。
本来以为刷新的话可以控制app_rdy等信号被拉低的位置的,进而简化读写过程,减小数据输入输出时间,结果发现手动刷新只是徒然增加app_rdy拉低的几率o(╥﹏╥)o


调试记录如下:
1. DDR初探
1.1官方说明
见图片1

1

1
1.2 尝试自动刷新操作

刷新信号
现象
结论
1
app_ref_req,app_zq_req,app_sr_req
刷新后app_rdy等信号短时拉高,读写基本要长时间等待

2
app_ref_req,app_zq_req
IP核可用,app_rdy持续拉低的时间变多

3
app_ref_req
IP核可用,app_rdy拉低间隔不等

4
不刷新









刷新代码修改如下:
                        READ_END:
                        begin
            //    state <= IDLE; MEN_REF_TEST  
                state <= MEN_REF_TEST;
                app_ref_req <= 1'b1;
                app_zq_req <= 1'b1;   
                app_sr_req <= 1'b0;
                app_ack_cnt <= 3'd0;
                app_ack_timeout <= 10'd0;
            end
            /////////////////////////////////////////
            //add by leo,test ref_req, zq_req

                        MEN_REF_TEST:
                        begin
                    //state <= IDLE;
                    app_ref_req <= 1'b0;
                    app_zq_req <= 1'b0;   
                    app_sr_req <= 1'b0;
                    app_ack_cnt <= app_ack_cnt + app_sr_active + app_ref_ack + app_zq_ack;
                    app_ack_timeout <= app_ack_timeout + 1;
                    if(app_ack_cnt == 2 || app_ack_timeout >= 100)
                    begin
                        state <= MEN_REF_TEST_END;
                        app_ack_cnt <= 0;
                        app_ack_timeout <= 0;
                    end     
            end
            MEN_REF_TEST_END:
                state <= IDLE;
            //add by leo end


也就是同时刷新3个信号,结果如下
0217初探刷新问题)


【操作1】示例,specsr_req需要接地,这里刷新了,IP核出问题


2

2

【操作2】 停止手动刷新app_sr_req新号,IP核工作正常,但是在23333057这两个时刻,app_rdy拉低似乎比不刷新的时候拉低的频率更高。


3

3

3只刷新ref_req信号,app_rdy长时间拉低的情况仍然存在。

4

4

操作4 不刷新
【空闲地方】往往在读数据的时候出现,他的间隔反倒为1480的整数倍,非常标准;1480,2960,4440!!
app_wdf_rdy】偶尔拉低一拍,数据要等一下;

5

5
App_wdf_rdy偶尔拉低一拍的时间间隔也是1480Tclk,和app_rdy偶尔出现的拉低间隔是一致的,这里是巧合吗?

6

6


1.3 app_rdy拉低时间分析
读取时间拉低前面4Tclk后面14Tclk。数据读出时间为段1+17Tclk ;也就是读取数据经过FIFO至少需要缓存18+1(后面也会顿一拍)个数据。

7

7


8

8
【重要】
【读取数据分析】
写数据,一开始,地址比数据提前1Tclk-1)数据中断了1Tclk-1),地址由于app_rdy中断了10Tclk+10
也就是数据写完了后10-1-1=8Tclk后,地址写完了。这个地址不提前,试一下看行不行。。。
【重要】
【读取数据分析】
从读指令发起APP_CMD=1开始,读取数据有效延时了13Tclk,数据中断19Tclk,如果用FIFO缓冲,读取延时取3Tclk
总延时为35Tclk = 13+19+3Tclk
保险起见,提前40Tclk发起读数命令,保证数据可达性;
写数据的话,中间断断续续大概10Tclk,数据写完,但是地址没有写完,等8Tclk写完
0218提出3个问题)



另外,黑金A7101开发板的程序写的真的很不错,接口加一个fifo就可以搞定了,赞一个!

下一次写一写黑金代码解读吧。


FPGA菜鸟的求学之路。。。。。。。。



您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-23 16:14 , Processed in 0.216072 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表