首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]写sram,we始终为高,奇怪

[求助]写sram,we始终为高,奇怪

我想用51单片机通过fpga和sram通信,向里连读,连写数据。下面是我写的部分程序与仿真图,其中ok为写一次的标志,

if((mcu_wr_ns^mcu_rd_ns)&ok)
    case(wr_rd_nums)
    default:begin
        sram_addr_temp_m<=mcu_io;
        wr_rd_nums<=two;
        ok<=0;
          end
    two:begin
           sram_addr_temp_l<=mcu_io;
           wr_rd_nums<=three;
            ok<=0;
            end
    three:begin
      if(!mcu_rd_ns)
         mcu_data_temp<=sram_io[15:8];
      else
           sram_data_temp_m<=mcu_io;
          sram_addr<={sram_addr_temp_m,sram_addr_temp_l};
          wr_rd_nums<=four;
         ok<=0;
         end
    four:begin
       if(!mcu_rd_ns)
         begin
              mcu_data_temp<=sram_io[7:0];
             wr_rd_nums<=one;
           end
          else
            begin
              sram_we_ns<=0;
              sram_data_temp_l<=mcu_io;
               wr_rd_nums<=wr_rd_nums+2'b01; ok<=0;
           end

问题是其中的sram_we_ns始终为高,还有sram_add的值也不对,但是four:状态下的ok是好而we却不对。

amDbqDYB.bmp

这就需要你的调试技巧了,我给你提几点建议:

1,在每个状态前面加一个时钟同步信号,可以减小竞争与冒险。

2.像你这样的程序,在状态机的调试的时候,输出一个状态机量,在仿真的时候看看状态机的状态有没有问题。

3.多看一些有代表性的程序,这样写的程序读起来,写起来稳定性好。

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm
在每个状态前面加一个时钟同步信号?是用同步来控制状态么,受教了。谢谢
返回列表