网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61EDA中国电子网 >> 技术文库 >> HDL语言 >> 正文
  SDRAM模块IP核调试经验           ★★★ 【字体:
SDRAM模块IP核调试经验
作者:Free    文章来源:本站原创    点击数:    更新时间:2008-2-4    

首先说明资源使用:
1.硬件:

  •   基于HY57V561620CT-H的128M PC133内存条;
  •   ALTERA公司的EP1C6Q240C8芯片;

2.软件:

  •    lattice标准SDRAM模块;
  •    QUARTUS4.0;

    下面说明我的艰辛的调试之路,呵呵。
    我是从4月份开始学习verilog语言,然后从网上广泛搜集SDRAM模块,下载的有altera公司,有lattice的。经过对比,我选择了lattice公司的标准的sdram模块。理由如下:

  1. 模块划分比较合理:ctrl,sig,data;
  2. 文档描述清晰,易于使用;

   lattic公司的这个控制器,具体针对哪个器件我不晓得;但是我要用的是HY57V561620CT-H。因此,下载下来后,首先需要吃透源代码。看源代码当然要从顶层设计开始看,观察模块如何分工,信号如何流动等。由于lattic公司队文件组织的实在太好了,所以看懂不是太难的问题,看懂后针对自己的芯片修改,也不会太费力气,主要修改:

  1. 地址线、数据线宽度;
  2. 数据读写部分;
  3. 模式寄存器初始值;
  4. 时序参数定义;

   这些修改,基本上都属于偷梁换柱类型的。相信看过的人,都晓得。此外,我根据需要,添加了一个sdr_IDLE信号输出,以便方便使用。
   修改完毕,重新编译通过后,就着手编写与该模块接口的控制模块,如什么时候应该发出什么信号给这个控制器,针对这个控制器发出的某个信号,该如何回应等。由于lattic的这个控制器给出了关键性的指示信号,所以接口控制模块的编写也不是太大的问题了。
    接口控制模块编写完毕,就可以进行时序仿真了。如,通过某个外部信号触发接口控制模块启动一次写--等待---读操作,然后观察控制器模块输出的信号对不对。如,读的时候,应该有什么信号出现;写的时候,又该有什么信号出现。这一步很重要,决定了时序波形是否正确。从调试情况来看,这一步如果没有什么问题,这个sdram控制器基本上可以工作了。希望各位和我一样的初学者,要足够重视仿真功能,呵呵。
    时序仿真完毕,呵呵,就该下载到目标板开始硬件调试了。
    作为初学者,我还是愿意勇敢的说出自己的心得体会,希望对如我一样的初学者有所帮助。今天我将继续介绍我的调试SDRAM之路。
    时序仿真完成后,硬件调试相对轻松多了。我用到的核心设备就是一台60MHZ带宽的Tektronix示波器。在100MHZ的工作频率下边,很多信号看起来都是正弦波了。更有意思的是,单次触发方式观察sdram的WEn信号时,看到的压根儿就是一个有着严重过冲的正弦脉冲。但是这已经足够给出需要的信息了。
    如同时序仿真,要观察读写SDRAM时关键信号波形对不对一样,硬件调试时也需要如此。我的做法就是,从FPGA某一个管脚触发FPGA内部控制SDRAM读写的逻辑,反复向内存条的某一地址写入一个常数(如0x5555 5555 5555 5555),然后用示波器观看内存条上关键信号的状态:WEn,CASn,RASn,CSx。这么做的目的就是初步观察SDRAM控制器的流程走得对否。如果有逻辑分析仪,呵呵,这一步工作可能会更轻松了。像我只有示波器的,更多的依赖时序仿真了。
    反复写完某一个地址,接下来就要反复读这个地址,观察刚才写入的数据是否真的已经存到了sdram中去。这一步中,除了观察关键信号外,要特别在意SDRAM的内存条上的每一根数据信号。内存条上的数据线不输出数据时候是悬浮态。所以,将示波器的探头用电阻上拉到高后再用来观察内存条上的数据线,可以很容易区分悬浮态与接地状态。高电平的识别自然不是问题了。用这种方法,就可以看出读的时候内存条输出的数据到底是什么。如果采用双地址反复写与反复读的模式,观察起来会更容易:如一个地址数据为0x5555 5555 5555 5555,而另一个地址数据为0xaaaa aaaa aaaa aaaa,那么反复读的时候,如果sdram工作正常了 ,就应该在内存条的数据线上观察到规则的方波。
    一次性成功的可能性不大。所以,当观察到读出的数据与写入的数据不一致的时候,就要回过头来通过静态检查与时序仿真的波形分析,查找原因。从我的调试情况看,lattice公司的这个控制器,流程没有任何问题。我做的最大的改动就是:

  1. 初始化部分:多加了四五次刷新后才开始写模式寄存器;
  2. 增加了一个刷新模块,刷新周期约7.68us(100MHz下计数器768);
  3. 增加了sdr_IDLE信号,以方便读写;

    有空的时候,我会将全部程序整理一下发布出来,供感兴趣的网友参考。
    通过调试lattice公司的这个sdram模块,我的整体感受就是:

  1. 首先要从整体上把握其功能、接口定义。简单的说,就是它干什么的,应该怎么用。如用户接口,究竟该如何和它接驳。
  2. 然后,要通过功能仿真、时序仿真,深入观察其输出输出波形,看看和手册描述是否一致,有没有什么严重问题;
  3. 接下来,就要进行硬件调试,通过重复动作的方式,观察关键信号的有无以及波形;
  4. 先整体实验,如果不成功,再依据输入输出之间的信号流程,深入模块内部,逐渐观察特定特定信号的状态是否与预期的一致。例如,如果IP核含有内部功能寄存器,可以实验这个功能寄存器是否可以可*读写。这里可以直接引出观察,也可以使用SignalTap功能观察。

    世上无难事,只要肯登攀。光看不行,要找到切入点,步步为营,各个击破,呵呵。

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    SDRAM控制器软核的Verilog设…
    片上SDRAM控制器的设计与集成
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    湘ICP备08001332号 站长:61EDA