微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 做过DDR控制的大虾请看过来......

做过DDR控制的大虾请看过来......

时间:10-02 整理:3721RD 点击:
我现在做一个简化的DDR控制器,仅支持读/写(均带auto precharge)/AUTO REFRESH/LOAD MODE REGISTER命令,不支持BURST TERMINATE和SELF REFRESH命令。在设计DDR状态机DDR_FSM时碰到问题,请帮忙解答。
DDR_FSM的设计思路是这样的:
(1)DDR状态机DDR_FSM在clkn_ddr上升沿翻转;
(2)Trcd计数器和Tcaslat计数器分别用于控制Trcd时间和CAS Lat,也采用clkn_ddr上升沿控制。
(3)发送读请求rd_req时,DDR_FSM进入RD_ACT状态,发送ACTIVE命令,并转入TRCD_WAIT状态,同时装载Trcd计数器的初值并开始计数,计数器到规定值时trcd_end信号有效,DDR_FSM从RCD_WAIT状态进入RD_COM状态,发送READ COMMMAND命令,并转入CASLT_WAIT状态,同时装载Tcaslt计数器的初值并开始计数,计数器到规定值时tcaslt_end信号有效,DDR_FSM进入RD_BRST状态,同时装载brst_cnt计数器的初值(突发长度)并开始计数,计数器到规定值时brst_end信号有效,DDR_FSM进入IDLE状态,等待后续读/写/刷新请求。
问题是在突发读操作时,DDR_FSM的状态由读请求信号rd_req、Trcd计数器、Tcaslat计数器以及brst_cnt计数器的trcd_end、tcaslt_end以及brst_end信号控制,要想无缝突发读,读请求信号rd_req必须间隔突发长度/2个时钟周期(以突发长度为8计算为4个时钟周期),Trcd一般1~3个时钟周期、Tcaslt一般2、2.5或3个时钟周期,加起来大约3~6个时钟周期,这样在发送下一个rd_req时,DDR_FSM的状态可能处于CASLT_WAIT状态甚至RCD_WAIT状态,如果响应后续读请求rd_req,则进入RD_ACT状态,发送ACTIVE命令,还没有来得及发送送READ COMMMAND命令,这样第一个读请求乃至后续读请求就无法得到正确的响应。
请问各位大虾是如何处理的?在线等待回复,谢了先!

做过DDR控制的大虾请看过来......
你这种方法不能实现无缝读写
“仅支持读/写(均带auto precharge)”
当DDR完成读写操作后,自动进行precharge,这时需要经过tRP时间

做过DDR控制的大虾请看过来......
不要把Tcaslat状态机的转移有关

做过DDR控制的大虾请看过来......
我的地址策略是不同的rd_req对应不同的bank,写操作也是这样,因此应该可以无缝操作,
SDRAM的控制我就是这样做的,但是DDR的状态机的状态转移似乎不太好做,因为数据传送周期减半了。

做过DDR控制的大虾请看过来......
(3)发送读请求rd_req时,DDR_FSM进入RD_ACT状态,发送ACTIVE命令,并转入TRCD_WAIT状态,同时装载Trcd计数器的初值并开始计数,计数器到规定值时trcd_end信号有效,DDR_FSM从RCD_WAIT状态进入RD_COM状态,发送READ COMMMAND命令,并转入CASLT_WAIT状态,同时装载Tcaslt计数器的初值并开始计数,计数器到规定值时tcaslt_end信号有效,DDR_FSM进入RD_BRST状态,同时装载brst_cnt计数器的初值(突发长度)并开始计数,计数器到规定值时brst_end信号有效,DDR_FSM进入IDLE状态,等待后续读/写/刷新请求。
发送READ COMMMAND命令后,经过BL/2就可以进行下一次读操作了

做过DDR控制的大虾请看过来......
可以无缝写了吗

做过DDR控制的大虾请看过来......
不好意思,刚才吃饭去了,现在试试,多谢!不过你的建议是不是应该将RD_BRST状态去掉(caslt_end有效后状态由CASLT_WAIT转移到RD_BRST)?

做过DDR控制的大虾请看过来......
我觉得应该去掉
反正时间到了,就可以进行下一次读了

做过DDR控制的大虾请看过来......
多谢!可以了!但是好象不规范,通用的DDR控制器要支持无缝读写不知是怎么作的?

做过DDR控制的大虾请看过来......
你的仿真模型是什么
能给我一个吗

MICRON的MT46V16M16,怎么发给你呢?对了,Micron网上有下载的。

做过DDR控制的大虾请看过来......
压缩一下上传吧
我现在用的模型,当BL=2时,仿真时会报错
但是写入和读回的数据是一致的
不知道是怎么回事,换个模型看看

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top