MyFPGA Forum

 找回密码
 注册
搜索
查看: 6060|回复: 8
打印 上一主题 下一主题

关于DE2板子 Sdram_Control_4Port 的问题

[复制链接]
跳转到指定楼层
1#
发表于 2011-6-13 23:55:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我最近在看Sdram_Control_4Port代码,发现参数文件中parameter  SC_PM = 1; 即SDRAM工作在full page模式,并且读写SDRAM的地址也是以128递增的,所以也说明SDRAM工作在full page模式。(不知是否正确?)
如果确实为full page模式,则出现一个问题。Altera官方SDR SDRAM Controller的PDF说明文档中说,“如果工作在full page模式的话,则需要用户进行预充电和刷新操作”
        在SDR SDRAM Controller pdf文档中关于full page读写部分的时序,也说明了要在读结束前在CMD上给出PRECHARGE命令,但是我并没有在4port程序中读写sdram的部分发现PRECHARGE指令,这是什么原因呢?
2#
发表于 2011-6-14 15:29:49 | 只看该作者
“如果工作在full page模式的话,则需要用户进行预充电和刷新操作”这个的理解还不是很全面,A10还是要看的。
       另外,code里面的几个注释和程序不是对应的很好,可能是当初写的人没有改好,不要完全相信注释。相信自己对signal的追踪。
3#
发表于 2011-6-14 15:59:22 | 只看该作者
“如果工作在full page模式的话,则需要用户进行预充电和刷新操作”这个的理解还不是很全面,A10还是要看的 ...
tingtang 发表于 14-6-2011 15:29



同感!
4#
 楼主| 发表于 2011-6-14 21:48:32 | 只看该作者
本帖最后由 kexinqiji 于 2011-6-14 21:56 编辑

我今天又看了一下,这是我在SDRAM手册中看到的,



A10为低时,BA0、BA1决定预充电的BANK;A10为高时,所有BANK都预充电

然后我读了一下Altera的SDRAM controller 手册,它关于Full page模式的描述是这样的



然后它给出了full page READ Burst 的时序如下图



以上这些都说明了,在full page模式下,读写数据后,需要用户从CMD上给出PRECHARGE命令来结束本次读写,但是Sdram_Control_4Port的代码只有在上电后给出一次PRECHARGE命令,SDRAM的正常工作过程中,并没有再给出过PRECHARGE信号,这是为什么呢?
5#
发表于 2011-6-14 22:03:23 | 只看该作者
本帖最后由 tingtang 于 2011-6-14 22:05 编辑

回复 4# kexinqiji

在control_interface.v里,有以下code:

                if (init_timer < (INIT_PER+201))
                                        init_timer         <= init_timer+1;
                                       
                                if (init_timer < INIT_PER)
                                begin
                                        REFRESH                <=0;
                                        PRECHARGE        <=0;
                                        LOAD_MODE        <=0;
                                        INIT_REQ        <=1;
                                end
                                else if(init_timer == (INIT_PER+20))
                                begin
                                        REFRESH                <=0;
                                        PRECHARGE        <=1;                                        LOAD_MODE        <=0;
                                        INIT_REQ        <=0;
                                end
   
init_timer 这个register可是循环的,所以PRECHARGE        <=1;也是每隔一段时间就“高电平”
一下(整个code我也没有完全理解,不过这部分我是这么想的
     所以后面有的要求precharge command的时候,就在这触发了,所以看不到(是我理解的)。
其实我觉得这种写法不好,就应该是每种模式写到一起,这样好查找,还便于初学者对着spec学习。
     真巧,我就随便回来看看,就看见你回了,才两分钟。
     有问题可要交流啊,我也学习,学习。我大部分都逛这个论坛。
6#
 楼主| 发表于 2011-6-14 22:19:16 | 只看该作者
谢谢两位的回复,我看过这个init_timer的代码,它只是上电的时候被清零了一次,之后就
if (init_timer < (INIT_PER+201))                 
                                        init_timer         <= init_timer+1;
就是小于(INIT_PER+201)就加1,但是当它 等于(INIT_PER+201)的时候就不再加1了,并且也没有被清零,所以就停在(INIT_PER+201)了,所以precharge只变高一次,所以precharge之有在上电时执行一次
应该是这样的吧?
常交流啊
7#
发表于 2011-6-15 12:03:51 | 只看该作者
回复 6# kexinqiji


    哦,好想是啊。我这段时间忙着毕业答辩,也没有理解透彻。
8#
发表于 2011-7-21 17:55:57 | 只看该作者
帮顶,同问,代码中我看到只是用PM_STOP这个信号来指示页模式下已经写入或者读取128个数据,然后它只是把OE输出使能关闭了,可是没发现代码中有产生页模式下precharge或者burst terminate的部分。
始终没看明白,这究竟是代码本身有问题吗?
9#
发表于 2011-11-22 13:53:30 | 只看该作者
学习了。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-5-7 13:25 , Processed in 0.043247 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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