搜索
bottom↓
回复: 3

求助! 上电后SRAM只第一次写有效?!

[复制链接]

出0入0汤圆

发表于 2013-7-25 11:20:52 | 显示全部楼层 |阅读模式
最近在做SRAM方面的测试,本想fpga采集数据通过接口传给单片机进行处理,可是现在fpga控制SRAM读写好像出了些问题。每次fpga刚上电时,先写再读,显示的数是正确的。可是,我把输入的数据调了,换了个数,再写SRAM,读出的数据就不正确了,还是第一次写的数。查了些资料,没有说SRAM写过后还要擦除的,所以可能还是我控制的方法有问题。我用的SRAM 是IS61LV2568,以下是我的程序,主要是参考了DE2开发板的程序,然后修改了一下。希望各位能帮我看看,到底程序有没有问题,问题在哪?如能回复,十分感谢!
module simple_exram(

    input clk,

    input wr,
    input rd,
    input[7:0] adc_data_in,
    input[17:0]wr_end_addr,
   
   
    output MEM_WE_N,
    output reg MEM_OE_N,
    output[17:0] MEM_A,
    inout[7:0] MEM_DATA,
   
    input[17:0] addr_to_read,
    output reg[7:0] data_read

    );
     
     

     /*************** extern_ram *****************/


    reg[17:0] wr_addr18 = 18'd0;
    reg[17:0] rd_addr18 = 18'd0;

//读数据
     reg[7:0] Data_out_r = 8'h00;

     always @(posedge clk)
     begin
        if(rd==1'b1)
            begin
                MEM_OE_N <= 1'b0;
                rd_addr18 <= addr_to_read;
                Data_out_r <= MEM_DATA;
                data_read <= Data_out_r;
            end
        else
            begin
                MEM_OE_N <= 1'b1;
                rd_addr18 <= 18'd0;
                Data_out_r <= 8'h00;
            end
     end



        //写数据   
    reg flag = 1'b0;
    reg we_r = 1'b0;
    reg[7:0] bufdata = 8'd0;
    reg[17:0] wr_addr18_reg = 18'd0;


   
     always @(posedge clk)
     begin
       if(wr == 1'b1)
            begin
                if(wr_addr18 <= wr_end_addr)
                    begin
                        if(!flag)
                            begin
                                we_r <= 1'b1;
                                wr_addr18 <= wr_addr18_reg;
                                wr_addr18_reg <= wr_addr18_reg + 18'd1;
                                bufdata <= adc_data_in;
                                flag <= 1'b1;
                            end
                        else
                            begin
                                we_r <= 1'b0;
                                wr_addr18 <= wr_addr18;
                                bufdata <= bufdata;
                                flag <= 1'b0;
                            end
                    end
                else
                    begin
                        we_r <= 1'b0;
                        flag <= 1'b0;
                        wr_addr18 <= wr_addr18;
                        bufdata <= bufdata;
                    end
            end
        else
            begin
                we_r <= 1'b0;
                wr_addr18_reg <=18'd0;
                wr_addr18 <= 18'd0;
                bufdata <= 8'd0;
                flag <= 1'b0;
            end
     end
   



     assign MEM_A = wr?wr_addr18:rd_addr18;
     assign MEM_WE_N = (~we_r)?1'b1:1'b0;
     assign MEM_DATA = we_r? bufdata:8'hzz;


endmodule

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2013-7-25 11:21:13 | 显示全部楼层
自己先顶一下!谢谢

出0入0汤圆

发表于 2013-7-26 17:07:54 | 显示全部楼层
读和写之间没有握手信号,不知wr和rd如何控制

出0入0汤圆

发表于 2013-7-26 17:28:23 | 显示全部楼层
代码风格异常混乱
建议你改成状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!状态机!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 03:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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