本帖最后由 harborn 于 2012-8-10 13:56 编辑
刚才帖子被删了,重发一遍,别再删了啊。
ML605 MIG的问题。
各位大虾,我在用ML605的MIG操作DDR3时出现了一个问题,困扰我很久了,希望能有高手出来解答,万分感谢!
我对DDR3的操作是按照burst模式来的,所以一次读写的数据是512bit(64B),
现在的情况是write是正常的,而read不正常;
1. read的操作规范是:在 app_rdy == 1 时,将 app_cmd 、app_addr同时使能 app_en,写入read的地址信息。
2. read的错误现象是:app_en使能写入 app_cmd 及 app_addr后,在开始的一两个周期,app_rd_data_valid是有出现为高的(也就是说ddr3有数据出来);而在几次之后,app_rd_data_valid却始终没有有效信号,而这时当我再次写入app_en、app_addr、app_cmd时,app_rdy就始终无效了。
这个问题
http://forums.xilinx.com/t5/MIG- ... -problem/m-p/111088也有人出现过,似乎没有解决方案,我被这个问题困扰了一个多月了,希望高人出来指点一下啊!
附我的read代码,状态机的一部分
- APP_READ_PRE: begin app_en <= 0; app_addr <= 32'h0000_0000; //ddr3_get_addr; app_cmd <= APP_CMD_IDLE;
- app_addr_count <= 32'd0;
- if(ddr3_get_size >= 32'd64) app_state <= APP_READ; else app_state <= APP_IDLE;endAPP_READ: begin if(app_rdy && (DDR3_GET_FIFO_DEPTH_DIV2 >= fifo_wr_data_count)) begin app_en <= 1; app_addr <= ddr3_get_addr + app_addr_count; // app_addr; app_cmd <= APP_CMD_READ;
- app_addr_count <= app_addr_count + 32'd64; app_state <= APP_READ_WAIT; end else begin app_state <= APP_READ; endendAPP_READ_WAIT: begin if(app_rdy) begin app_en <= 0; app_addr <= app_addr; //app_addr + 32'd64; app_cmd <= APP_CMD_READ;
- if(app_addr_count >= ddr3_get_size) app_state <= APP_IDLE; else app_state <= APP_READ; end else begin app_state <= APP_READ_WAIT; endend
复制代码
不过我觉得可以用chipscope看看读操作的一些状态信号分析一下。
一周热门 更多>