原创 sdram的测试

2010-10-12 16:45 3252 5 6 分类: FPGA/CPLD

        已经做了好久的sdram了。搞得很崩溃啊,千奇百怪的问题!


< 一 >:建立一xps project,片内微处理器用MicroBlaze,定制一ip mpmc sdram。 用plb46 或者 xcl 总线 访问外部sdram。软件调试。


< 二 >:自己根据lattice 的sdram ip 写了一个sdram controller ,chipscope调试。


< 三 >:1)按照<.一>的方法测试sdram。


                2)按照<二>的方法测试sdram。


                3)按照<二>的方法向sdram写数据,通过<一>读。


<四>:调试过程中,发现的问题:


             按照自己写的代码调试,突发长度为4,读写都正确了。


             调用mpmc ip核。


   代码如下:


 
    Xuint32 startAdr = MEM_BASEADDR;
    Xuint32 myAdr;
    Xuint32 range =  MEM_SIZE;
    Xuint32 DataRead[32]; 
    Xuint32 error ;
    Xuint32 total_errors = 0;


// ---------------------------------------
//  TEST1 - DATA == ADDR test
// ---------------------------------------
   error = 0;
    for(myAdr = startAdr; myAdr < startAdr+1000; myAdr = myAdr + 4)
    {    
      WR_WORD(myAdr, myAdr);
    }  
    for(myAdr = startAdr; myAdr < startAdr+1000; myAdr = myAdr + 4)
    {
      RD_WORD(myAdr, DataRead[0]);
      if (DataRead[0] != myAdr)
      {
        error++;      
      }
    total_errors += error;
    }
 得到结果:       0x80000000(startAdr) : 0x00000000;


                             0x80000004(startAdr) : 0x80000004;


                             0x80000008(startAdr) : 0x00000000;


                             0x8000000c(startAdr) : 0x8000000c;        


                               ……


     for(myAdr = startAdr; myAdr < startAdr+range; myAdr=myAdr+4)
     {
      WR_WORD(myAdr, 0x55555555);
     }  
     for(myAdr = startAdr; myAdr < startAdr+range; myAdr=myAdr+4)
     {
      RD_WORD(myAdr, DataRead[0]);
     
      if (DataRead[0] != 0x55555555)
      {
        error++; 
      }
        total_errors += error;
     }         


得到结果:       0x80000000(startAdr) : 0x00000000;


                             0x80000004(startAdr) : 0x55555555;


                             0x80000008(startAdr) : 0x00000000;


                             0x8000000c(startAdr) : 0x55555555;        


                               ……


btw : SDRAM 芯片为: MT48LC32M16A2,DQ宽16bit   行地址:13bit    列地址 10bit  Bank 地址   2bit.        


    另一种做法是,自己写的控制器,往sdram写好数据,用mpmc ip核读。


    读到的数据和写入的一致!


    实在不知道问题出在啥地方?有人懂么?

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户292641 2010-10-14 15:48

我最近在弄DDR2。有很多跟你同样的问题。 加下我QQ 317169526 有空一起讨论!
相关推荐阅读
用户281801 2010-12-15 15:29
NPI中遇到的一个问题
    ERROR:EDK:1599 - IPNAME:my_npi INSTANCE:my_npi_0 -   E:\FFT\fft_ddr2\DDR2_v2\system.mhs line 216...
用户281801 2010-11-23 17:02
快速傅立叶变换(FFT)
      先占位...
用户281801 2010-11-23 16:59
Xilinx IOBUF原语
     IOBUF原语:是单端双向缓冲器,其I/O接口必须和指定的电平标准相对应,支持LVTTL、LVCMOS15、LVCOMS18、LVCMOS25以及LVCOMS33等信号标准,同时还可通过DR...
用户281801 2010-11-10 15:00
在xps中使用XMD调试的一个问题
       在调试时launch XMD,结果打开XMD后一直连接不到处理器,总是提示:invaid XMD target。又是怀疑杀毒软件,又是重装ISE,结果依然不对。而下载以前的程序却可以。 ...
用户281801 2010-10-29 13:07
终于把SDRAM的问题解决了。
         无比开心ing!困扰了我好久好久。原来问题出现在DQM上。我自己写的SDRAM控制器,直接赋给DQM低电平。它可以正常读写。但是在MPMC中却不行。我想可能和MPMC的时序有关吧。...
用户281801 2010-10-15 12:05
数据缓存操作的一些问题
Data Cache Operation             The caching policy used by the MicroBlaze data cache, write-back or...
我要评论
1
5
关闭 站长推荐上一条 /3 下一条