SDRAM需要初始化也许很多人都不知道,在其SDRAM芯片内部有一个逻辑控制单元,并且有一个模式寄存器(MR,mode register)为其提供控制参数。如图1所示。
图1
因此,需要对SDRAM进行初始化。如图2所示。
图2
有幸看到特权同学写关于SDRAM的时序控制模块的代码,在此感谢特权同学这个模块的启发。通过阅读,用自己理解的方法,分享一下初始化SDRAM其中的细节部分。一是如何输入稳定期200US,二是所有L-Bank预充电,三是8个刷新周期,四是模块寄存器设置。
上图是用状态机写的初始化阶段。通过观察可以知道,当done_200us这个标志到来时,即等于1。(注意:·I_NOP以及往下,是由1-21)状态机中case语句往下执行,到第二句。为什么TRP_CLK=0呢?其他不行吗?(这是我一直纠结的事情),答案是可以的,随你设置,关键要找好关系,这里设置等于0,是有他的便利之处。据我的分析,它是永远都不等于0的,(除非cnt_rst_n复位有效,清零,如下图计数模块所示)言下之意,就是只能执行第三句,无法跳到第四句。(说到这里,你们能明白我的意思吗?)因为里面有一个计数模块。如图所示
//-------------------------------------------------------------------------------------------------------
这里插一下设置的延时时钟参数和延时参数,待会要分析用到的。
接着上面所说,计数器不断加1,当加到TRP_CLK=4的时候,cnt_clk_r==TRP_CLK,然后状态机执行下一个语句,即第四个语句。如此类推,直到结束跳出。
下图是有一个状态机,是为了让cnt_rst_n复位有效,清零。这里需要慢慢琢磨。
用户377235 2015-7-15 16:09
用户1726050 2015-7-2 17:26
用户1726050 2015-7-2 17:15
用户95599 2014-1-16 17:28