在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3846|回复: 9

[求助] xinlinx 片上RAM的读写

[复制链接]
发表于 2011-6-10 14:17:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
由IP核生成的RAM模块为eeram(addr,clk,din,dout,we);

其中,地址和数据都是8bit。

现在的问题是,我已经把32byte的数据分别写入该RAM的0-31地址中。

我想连续读出对应地址处的数据,可是总也读的不对。

但是,读单个地址处的数据没有问题。

请各位大侠指点一下。

单个地址处的数据我是这么读的。

always @(posedge clk40m)
begin
    if(!rstn)
    begin
    czl<=0;
    addr<=0;
    s<=s0;
    end
    else
    begin
    case(s)
    s0:
        begin
            addr<=0;
            s<=s1;
        end
    s1:
        begin
            addr<=addr;
            czl<=dout;
            s<=s1;
        end
    endcase
    end
end
发表于 2011-6-10 14:35:29 | 显示全部楼层
以你的設計, 當rstn = 1之後

s會馬上由s0變成s1, 之後停留在s1不動
addr則永遠都是0, addr不動, 當然就沒辦法連續讀
 楼主| 发表于 2011-6-10 14:47:42 | 显示全部楼层
回复 2# eatman3380


    你好,这个程序不是连续读的程序,是只读其中一个地址的程序。
 楼主| 发表于 2011-6-10 14:51:06 | 显示全部楼层
以下程序是我连续读的程序。但是读到的czl和czh都是0。
always @(posedge clk40m)
begin
    if(!rstn)
    begin
    czl<=0;
    addr<=0;
    s<=s0;
    end
    else
    begin
    case(s)
    s0:
        begin
            addr<=0;
            s<=s1;
        end
    s1:
        begin
            addr<=addr;
            czl<=dout;
            s<=s2;
        end
    s2:
        begin
            addr<=addr+1;
            czl<=czl;
            s<=s3;
        end
     s3:
        begin
            addr<=addr;
            czh<=dout;
            s<=s4;
        end
     s4:
        begin
            addr<=addr;
            czl<=czl;
            czh<=czh;
            s<=s4;
        end
    endcase
    end
end
发表于 2011-6-10 19:53:54 | 显示全部楼层
可能是写错了,写时序和读时序都要符合data sheet的规定
 楼主| 发表于 2011-6-13 11:17:27 | 显示全部楼层
回复 5# jjftt


    谢谢。不过我可以保证我的写没有错误。

因为我用IO写地址,然后读出对应地址的数据,这个是没有问题的。连续读也没有问题。

现在是要实现硬件连续读。
 楼主| 发表于 2011-6-14 16:25:26 | 显示全部楼层
always @(posedge clk40m or posedge rram)
begin
        if(rram)
        begin
                cz0<=0;
                cz1<=0;
                rradr<=0;
                s<=s0;
        end
        else
        begin
                case(s)
                s0:
                        begin
                                rradr<=0;
                                s<=s1;
                        end
                s1:
                        begin
                                rradr<=rradr;
                                cz0<=dout;
                                s<=s2;
                        end
                s2:
                        begin
                                cz0<=cz0;
                                s<=s3;
                        end
                s3:
                        begin
                                rradr<=rradr+1;
                                s<=s4;
                        end
                s4:
                        begin
                                rradr<=rradr;
                                cz1<=dout;
                                s<=s4;
                        end
                s5:
                        begin
                                cz1<=cz1;
                                s<=s5;
                        end
                endcase
        end
end

这个是连续读两个地址处的数据,发现,程序执行到S4时,cz0和cz1的输出均没有问题。但是,将s=s4改为s=s5时,cz1的值就不对了,而且这个值和cz0的值一样了。

求助。
 楼主| 发表于 2011-6-15 15:10:05 | 显示全部楼层
问题终于解决了,感谢各位的帮忙。
 楼主| 发表于 2011-6-23 15:06:40 | 显示全部楼层
有一个新的问题,想请教高手。

问一下,xilinx ise 10.1中能不能添加两个分布式RAM,然后在主模块中调用。

我添加了两个分布式RAM后,出现了一个错误,说是找不到第二个RAM模块。
发表于 2011-6-23 17:24:51 | 显示全部楼层
回复 9# wangxia6112


只要不超过FPGA的资源,添加几个ram都是可以的,看下例化名称什么的是否正确
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-14 15:46 , Processed in 0.030977 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表