找回密码
 注册
搜索
查看: 1228|回复: 2

[讨论] [求助]FPGA上SRAM控制器设计问题

[复制链接]
发表于 2009-12-5 14:51:02 | 显示全部楼层 |阅读模式
我的FPGA开发板在调试SRAM过程中,ModelSim仿真结果显示:写入时序正确,但是读时总是读了一次后,后面的读写控制信号就没有了(无效状态)。不知道是为什么?具体情况如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "system.h"
#include "sys/alt_flash.h"
#include "io.h"

int main()
{
    alt_u32 i=10;
    alt_u8 j=0,k=0;
    /*alt_u16 temp=0;*/
    printf("Hello from Nios II!\n");

    //sram test
    /*********note! : sram test must run in sdram??***/   
    for(i=0x00;i<0xF;i++)
    {
        k= i%256;
        IOWR_8DIRECT(SRAM_BASE, i,k);        
      
    }
   
    for(i=0;i<0xf;i++)
    {
        k= i%256;
        j=IORD_8DIRECT(SRAM_BASE, i);
        
        if(j != k)
        printf("Read-back data[%x]=[%x]\n",i,j);
    }
    printf("sram test finished!\n");
       
    return 0;
}

此时仿真时序显示,读一次后控制信号无效了。


    for(i=0;i<0xf;i++)
    {
        k= i%256;
        j=IORD_8DIRECT(SRAM_BASE, i);
        
        if(j != k)
        printf("Read-back data[%x]=[%x]\n",i,j);
    }
换成:
    for(i=0;i<0xf;i++)
    {
        IORD_8DIRECT(SRAM_BASE, i);
    }
其他代码不变,仿真时序正确。
这种情况可能是什么原因引起的呢?
[em12]
 楼主| 发表于 2009-12-5 23:46:56 | 显示全部楼层
回去又去实验了一下,问题主要由于下面这个赋值语句:
j=IORD_8DIRECT(SRAM_BASE, i);

在这个语句之后,再有使用J的地方就会报错,而且仿真发现写完成后,读一个数据后,地址的addr[4..10]进入无效状态。

而且,只要把这个语句移到写语句之后也不会发生这种情况。不知道什么原因,期待高手的指点。。。。[em12]
[em03]
[此贴子已经被作者于2009-12-6 18:27:28编辑过]
点评回复

使用道具 举报

 楼主| 发表于 2010-1-4 18:28:37 | 显示全部楼层
问题解决了.....[em02]
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-23 18:43 , Processed in 0.045485 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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