前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Sdram控制器(二)

Sdram控制器(二)

作者头像
瓜大三哥
发布2018-06-11 14:46:42
1.4K0
发布2018-06-11 14:46:42
举报
文章被收录于专栏:瓜大三哥

经过几天的Sdram项目调试,小编想说简直了~,感触颇深,今天就分享给大家喽~

Sdram项目调试感悟:

1. 首先保证仿真正确,能够完全读写整个sdram model【难点二】

2. 保证板子上的sdram是正常工作的。

3. 时钟:sdram的输入时钟能在数据中间采样(做相移或者output delay)【难点一】

4. 约束:时序约束和物理约束

5. 其他

  • 复位或者VIO:Debug的时候会感受到这个神奇之处
  • Oddr2的使用,这里有两个坑:

(1)如果输出管脚不是时钟引脚,则需要加CLOCK_DEDICATED_ROUTE = FALSE;

(2)输出的时钟不能作为ila的采样时钟。

  • 初始化时序:两次自动刷新和预充电的先后顺序可以不用管(具体的可以看手册),其实这个很好理解,这里相当于一个刷新模块而已,然后进行模式寄存器配置。【难点三】
  • 刷新:刷新操作其实可以定义的间隔非常小,这样会一直发出请求,但是对于读写来说是独占的,只有等读写完成后才会进行刷新,这样就避免了读写操作被中断,存储行业里很少有指令的记录这个说法,不能读写一半的时候去做别的操作,然后再返回来进行读写,这个是很难实现的,因为后面的操作请求会将以前的“冲”掉。
  • Ras,Cas,We的时序:这个可以使用示波器观察是否跟波形一致,测试是否命令到达sdram芯片【难点四】
  • Addr:可以用示波器采最低位,这样就会是一个方波(作为验证地址是否到达sdram芯片的手段)
  • inout信号的控制,最好放在顶层进行处理

图Ⅰ 输出有错

接下来

跟着小编一起去攻破难点问题吧

难点一:Sdram的时钟问题

为了保证数据被时钟的上升沿采到,所以设计中使用了一个-150°的相移,示波器才采集到的时钟的确也没有问题。

(图1 黄色是pll产生的无相位偏移的时钟 蓝色是相位偏移-150°后结果)

难点二:仿真出错

当读写数据如果超过1024行,会有错误,这是因为在预充电的时候必须指定充电类型,如果A[10]为0,则需要在数据读写完成后加入一个预充电命令(关闭一行的作用);如果A[10]为1,则需要在数据读写完成后不予理会;

仿真在超过1024行出错(已解决)

难点三:上版调试

上板调试无结果这是因为inout信号最好在顶层进行处理,如果在内部处理,综合后可能会出错,反正我是入过“坑”了,搞了三天都没有数据读出。

上板调试的初始化时序

上板调试的刷新时序

上板调试的写时序

上板调试的写时序

难点四:控制信号的把握

We信号与时钟的关系

Ras与时钟的关系

Cas下降沿与时钟关系

Cas上升沿与时钟关系

因为sdram对于我们来说其实相当于是一个“黑盒子”,必须保证所有的操作都正确,才能读写。所以此处关键就是借助示波器来分析是否信号传送给sdram芯片,下面是一个几个信号的时序与时钟的相位关系。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 瓜大三哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档