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

2019-03-25 07:44发布

本帖最后由 调戏、和尚/ 于 2015-7-29 20:43 编辑
用 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
复制代码

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。