[求助] ip 核生成RAM ,完美仿真,不过还有一点小细节想请教各位大神

调戏、和尚/   2015-7-29 20:38 楼主
悬赏 3 分 芯积分未解决
用 ip 核生成的单口RAM 1024*8的大小 仿真图已经出来,正确无误,只是还有一点小疑问 程序刚开始我是对RAM进行写操作,所以wren 置为了1 ,为什么这时候输出端q还有输出呢,并且是从第2个时钟(地址为2时)开始有的输出 以至于到了最后我把 RAM写满后 把wren 置为了0,进行读操作,输出是从 第2个时钟(地址为2时)才开始输出, 我写数据的时候是从地址1开始写入的啊,所以我的疑问是: 1. 我在写数据的时候不应该有输出啊 2 .我是从地址1开始写入的,输出时也应该是用地址已开始输出才对啊。。。 附仿真写开始的截图,和读开始的截图, 以及顶层文件的截图 和 控制程序的代码 还请各位大神给指点指点。。。
  1. 控制模块代码:

    module RAM_contral

  2. (
  3. input clk,
  4. input rst,
  5. output reg [9:0] address,
  6. output reg [7:0] data,
  7. output reg wren //读写控制线
  8. );
  9. /************************************/
  10. reg state; //状态寄存器
  11. /***************************************/
  12. always[url=home.php?mod=space&uid=496176]@[/url] (posedge clk or negedge rst)
  13. begin
  14. if (!rst)
  15. begin
  16. address <= 0;
  17. data <= 0;
  18. wren <= 0;
  19. state <= 0;
  20. end
  21. else
  22. begin
  23. case(state)
  24. 0: begin
  25. wren <= 1; //写使能打开
  26. if (address < 1023)
  27. begin
  28. address <= address + 1;
  29. data <= data + 1;
  30. end
  31. else
  32. begin
  33. address <= 0;
  34. data <= 0;
  35. wren <= 0;
  36. state <= 1; //数据写满跳到下一个状态
  37. end
  38. end
  39. 1: begin
  40. if(address < 1023)
  41. address <= address + 1;
  42. else
  43. address <= 0;
  44. end
  45. default:state <= 0;
  46. endcase
  47. end
  48. end
  49. endmodule
本帖最后由 调戏、和尚/ 于 2015-7-29 20:43 编辑
  • 顶层文件
  • 仿真开始
  • 仿真结束
  • 回复评论 (4)

    一次读写需要2个时钟周期。
    点赞  2015-7-29 22:05
    引用: xujiangyu0619 发表于 2015-7-29 22:05
    一次读写需要2个时钟周期。

                 哇塞。就这么简单啊。。。
    点赞  2015-7-29 23:37
    一般RAM读命令与输出数据有一个时钟的延迟
    点赞  2015-8-25 10:29
    能不能看一下楼主的测试激励代码  谢谢
    点赞  2015-8-28 09:47
    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
      写回复