suxilong 发表于 2013-5-27 22:20:31

SDRAM 中几个时序延时参数的意义

大家都知道SDRAM 时序中有几个重要的延时参数,比如 预充电有效时间,行选通周期,和CAS 潜伏期
最近在学习特权的代码,发现一大堆奇怪的延时参数,比如自动预刷新周期 ...

请问 大家知道它们的意义吗?SDRAM 手册里怎么没有这些东西呢?


        // SDRAM时序延时参数
parameter                        TRP_CLK                = 9'd4,//1,        //TRP=18ns预充电有效周期
                              TRCD_CLK        = 9'd2,//1,        //TRCD=18ns行选通周期
                                TCL_CLK                = 9'd3,                //潜伏期TCL_CLK=3个CLK,在初始化模式寄存器中可设置

                                TRFC_CLK                = 9'd6,//3,        //TRC=60ns自动预刷新周期
                                TMRD_CLK        = 9'd6,//2,        //模式寄存器设置等待时钟周期
                               
                                TREAD_CLK        = 9'd8,        //突发读数据周期256CLK
                                TWRITE_CLK        = 9'd8,        //突发写数据256CLK
                                TDAL_CLK                = 9'd3;        //写入等待

NJ8888 发表于 2013-5-27 22:31:21

应当有,比如美光的数据手册有,倒是HY的手册简陋的很

suxilong 发表于 2013-5-27 22:36:55

NJ8888 发表于 2013-5-27 22:31 static/image/common/back.gif
应当有,比如美光的数据手册有,倒是HY的手册简陋的很

N 元老,你看到特权的SDRAM 代码吗?
明明上面定义了TRP_CLK 是个常量, 为什么状态机里面还进行判断是否为零?这个到底有什么意图? 直接转到下个状态不就行吗》?感觉好像多此一举~~~~

always @ (posedge clk or negedge rst_n)
        if(!rst_n) init_state_r <= `I_NOP;
        else
                case (init_state_r)
                                `I_NOP:         init_state_r <= done_200us ? `I_PRE:`I_NOP;                //上电复位后200us结束则进入下一状态
                                `I_PRE:         init_state_r <= (TRP_CLK == 0) ? `I_AR1:`I_TRP;        //预充电状态
                                `I_TRP:         init_state_r <= (`end_trp) ? `I_AR1:`I_TRP;                        //预充电等待TRP_CLK个时钟周期
                                `I_AR1:         init_state_r <= (TRFC_CLK == 0) ? `I_AR2:`I_TRF1;        //第1次自刷新
                                `I_TRF1:        init_state_r <= (`end_trfc) ? `I_AR2:`I_TRF1;                        //等待第1次自刷新结束,TRFC_CLK个时钟周期
                                `I_AR2:         init_state_r <= (TRFC_CLK == 0) ? `I_AR3:`I_TRF2; //第2次自刷新       
                                `I_TRF2:        init_state_r <= (`end_trfc) ? `I_AR3:`I_TRF2;                 //等待第2次自刷新结束,TRFC_CLK个时钟周期
                                `I_AR3:         init_state_r <= (TRFC_CLK == 0) ? `I_AR4:`I_TRF3; //第3次自刷新       
                                `I_TRF3:        init_state_r <= (`end_trfc) ? `I_AR4:`I_TRF3;                        //等待第3次自刷新结束,TRFC_CLK个时钟周期
                                `I_AR4:         init_state_r <= (TRFC_CLK == 0) ? `I_AR5:`I_TRF4; //第4次自刷新
                                `I_TRF4:        init_state_r <= (`end_trfc) ? `I_AR5:`I_TRF4;                 //等待第4次自刷新结束,TRFC_CLK个时钟周期
                                `I_AR5:         init_state_r <= (TRFC_CLK == 0) ? `I_AR6:`I_TRF5; //第5次自刷新
                                `I_TRF5:        init_state_r <= (`end_trfc) ? `I_AR6:`I_TRF5;                        //等待第5次自刷新结束,TRFC_CLK个时钟周期
                                `I_AR6:         init_state_r <= (TRFC_CLK == 0) ? `I_AR7:`I_TRF6; //第6次自刷新
                                `I_TRF6:        init_state_r <= (`end_trfc) ? `I_AR7:`I_TRF6;                        //等待第6次自刷新结束,TRFC_CLK个时钟周期
                                `I_AR7:         init_state_r <= (TRFC_CLK == 0) ? `I_AR8:`I_TRF7; //第7次自刷新       
                                `I_TRF7:         init_state_r <= (`end_trfc) ? `I_AR8:`I_TRF7;                        //等待第7次自刷新结束,TRFC_CLK个时钟周期
                                `I_AR8:         init_state_r <= (TRFC_CLK == 0) ? `I_MRS:`I_TRF8;        //第8次自刷新
                                `I_TRF8:        init_state_r <= (`end_trfc) ? `I_MRS:`I_TRF8;                        //等待第8次自刷新结束,TRFC_CLK个时钟周期
                                `I_MRS:                init_state_r <= (TMRD_CLK == 0) ? `I_DONE:`I_TMRD;//模式寄存器设置(MRS)       
                                `I_TMRD:        init_state_r <= (`end_tmrd) ? `I_DONE:`I_TMRD;                //等待模式寄存器设置完成,TMRD_CLK个时钟周期
                                `I_DONE:        init_state_r <= `I_DONE;                // SDRAM的初始化设置完成标志
                                default: init_state_r <= `I_NOP;
                                endcase

NJ8888 发表于 2013-5-27 22:38:35

本帖最后由 NJ8888 于 2013-5-27 22:39 编辑

没看,因为我用VHDL,verilog的代码能看懂思路,不过总不如用verilog的人

suxilong 发表于 2013-5-27 22:43:40

NJ8888 发表于 2013-5-27 22:31 static/image/common/back.gif
应当有,比如美光的数据手册有,倒是HY的手册简陋的很

是不是所有的SDRAM 都是一样的呢? 三星的datasheet 找不到什么自动刷新周期 ,模式寄存器设置等待时钟周期....

NJ8888 发表于 2013-5-27 22:45:08

不确定完全一样,我看过美光 HY,对于我所关心参数,能通用。有的是4096刷新,有的是8192刷新

suxilong 发表于 2013-5-27 22:55:29

NJ8888 发表于 2013-5-27 22:38 static/image/common/back.gif
没看,因为我用VHDL,verilog的代码能看懂思路,不过总不如用verilog的人

( ⊙ o ⊙ )啊! 救星啊,我也是用VHDL !!!{:lol:} 能否让我拜读拜读~~~qq812331053
页: [1]
查看完整版本: SDRAM 中几个时序延时参数的意义