搜索
bottom↓
回复: 8

sdram如何猝发读出数据?

[复制链接]

出0入0汤圆

发表于 2014-5-2 09:19:54 | 显示全部楼层 |阅读模式
时序上应该怎么控制猝发读?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2014-5-2 09:46:16 | 显示全部楼层
这是我找到的一个资料。但不知道该怎么用啊。

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2014-5-2 09:52:24 | 显示全部楼层
        always @ ( posedge CLK or negedge RSTn )
            if( !RSTn )
                     begin
                            i <= 3'd6;          // Initial SDRam at first
                            C1 <= 11'd0;
                            C2 <= 5'd0;
                            Used <= 5'd0;
                            rStart <= 3'b000;
                                        isStart <= 3'b000;
                                        isInit <= 1'b0;
                                        isBusy <= 1'b1;
                                        isDone <= 1'b0;
                          end
                 else
                     case( i )
                          
                                        0: // IDLE state
                                        if( C1 >= T15US ) begin C1 <= 11'd0; Used <= 5'd9; rStart <= 3'b100; i <= 3'd1; end
                                    else if( RdEN_Sig ) begin C1 <= C1 + 1'b1; Used <= 5'd8; rStart <= 3'b010;i <= 3'd3; end
                                        else if( WrEN_Sig ) begin C1 <= C1 + 1'b1; Used <= 5'd9; rStart <= 3'b001;i <= 3'd3; end
                    else begin C1 <= C1 + 1'b1; end

                    /***************************/

                                        1: // Auto Refresh Done , 9 clock on this step
                                        if( C2 == Used -1 ) begin C2 <= 5'd0; i <= i + 1'b1; end
                                    else begin isStart <= rStart; C2 <= C2 + 1'b1; end
                                    
                                    2: // 1 clock one this step                       
                                    begin isStart <= 3'd0; C1 <= C1 + 1'b1; i <= 3'd0; end
                                    
                                    /***************************/
                                    
                                    3: // Read and Write Done
                                        if( C2 == Used -1) begin C2 <= 5'd0; C1 <= C1 + Used; i <= i + 1'b1; end
                                        else begin isStart <= rStart; C2 <= C2 + 1'b1; end
                                       
                                        /***************************************/
                                       
                                        4: // Generate Done Signal
                                        begin isStart <= 3'd0; isDone <= 1'b1; C1 <= C1 + 1'b1; i <= i + 1'b1; end
                                       
                                        5:
                                        begin isDone <= 1'b0; C1 <= C1 + 1'b1; i <= 3'd0; end
                                       
                                        /******************************************/
                                       
                                        6: // Initial SDRam using 21 clock
                                        if( Init_Done_Sig ) begin isBusy <= 1'b0; isInit <= 1'b0; C1 <= C1 + 1'b1; i <= 3'd0; end
                                    else begin isBusy <= 1'b1; isInit <= 1'b1; end
                                       
                                        /******************************************/
                                       
                          endcase
        assign Func_Start_Sig = isStart;
/******************************************/

always @ ( posedge CLK or negedge RSTn )
        if( !RSTn )
            begin
                i <= 4'd0;
                rCMD <= _NOP;
                rBA <= 14'h3fff;
                rDQM <= 2'b11;
                rData <= 16'd0;
                isOut <= 1'b1;
            end
        else if( Func_Start_Sig[2] )
            case( i )

                /*********************************/
               
                0: // Send Auto Refresh Command
                begin rCMD <= _AR; i <= i + 1'b1; end
               
                1,2,3,4,5,6,7: // Send 7 nop Clk for tRFC-63
                begin rCMD <= _NOP; i <= i + 1'b1; end
               
                /*********************************/
               
                8:  // return i to 0
                begin i <= 4'd0; end
               
                /*************************************/

            endcase
        else if( Func_Start_Sig[1] )
            case( i )

                0: // Set IO to input state
                begin isOut <= 1'b0; rData <= 16'd0; i <= i + 1'b1; end

                1: // Send Active command with Bank and Row address
                begin rCMD <= _ACT; rBA <= BRC_Addr[21:8]; i <= i + 1'b1; end
               
                2: // Send 1 nop Clk for tRCD-20ns
                begin rCMD <= _NOP; i <= i + 1'b1; end
            
                /***************************************/
               
                3: // Send Read command and column address, pull down DQM clock and pull up A10 to auto precharge.
                begin rCMD <= _RD; rBA <= { BRC_Addr[21:20], 4'b0100, BRC_Addr[7:0]}; rDQM <= 2'b00; i <= i + 1'b1; end
               
                4,5: // Send 2 nop Clk for CAS Latency
                begin rCMD <= _NOP; rDQM <= 2'b11; i <= i + 1'b1; end
                                   
                /******************************************/
               
                6: // Read Data
                begin rData <= SDRAM_DATA; i <= i + 1'b1; end
               
                /******************************************/
               
                7: // return i to 0
                begin i <= 4'd0; end
               
                /*******************************************/

            endcase
        else if( Func_Start_Sig[0] )
            case( i )
               
                /***************************************/
               
                0: // Set IO to output State
                begin isOut <= 1'b1; i <= i + 1'b1; end
                  
                1: // Send Active Command with Bank and Row address
                begin rCMD <= _ACT; rBA <= BRC_Addr[21:8]; i <= i + 1'b1; end
               
                2: // Send 1 nop Clk for tRCD-20ns
                begin rCMD <= _NOP; i <= i + 1'b1; end               
               
                /*********************************************/
               
                3: // Send Write command with row address, pull down DQM 1 clk and pull up A10 1 clk to Auto Precharge
                begin rCMD <= _WR; rBA <= { BRC_Addr[21:20], 4'b0100, BRC_Addr[7:0] }; rDQM <= 2'b00; i <= i + 1'b1; end
               
                4,5,6,7: // Send 4 nop clk for tDPL/tWR and tRP
                begin rCMD <= _NOP; rDQM <= 2'b11; i <= i + 1'b1; end            
               
                /**********************************************/
               
                8: // return i to 0
                begin i <= 4'd0; end
               
                /*********************************************/
               
            endcase

这是我的程序。我从sdram读出来的图像如下图所示。频率大约才20mhz左右。但我的输入时钟s_clk有150Mhz。我想用猝发读让输出频率大些,怎么弄好

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2014-5-2 15:33:54 | 显示全部楼层
顶下

出0入0汤圆

发表于 2014-5-2 19:15:55 | 显示全部楼层
应该是突发读出数据吧!!

出0入0汤圆

 楼主| 发表于 2014-5-2 20:24:43 | 显示全部楼层
郭俊文 发表于 2014-5-2 19:15
应该是突发读出数据吧!!

对啊 怎么读出来

出0入0汤圆

 楼主| 发表于 2014-5-2 21:54:52 | 显示全部楼层
我知道哪里有问题了。。要使得数据不中断地读出的话,要保证两个条件:a.不要用预充电去中断它 b.dqm要调成低电平
但是我不知道什么时候读完整页给它再来个预充电啊。。。

出0入0汤圆

发表于 2014-5-2 22:17:05 | 显示全部楼层
一页时钟数是给定的啊,发完就可以

出0入0汤圆

发表于 2014-5-4 10:55:31 | 显示全部楼层
计数,够整页了就中断它
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 01:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表