本帖最后由 调戏、和尚/ 于 2015-7-29 20:43 编辑
用 ip 核生成的单口RAM 1024*8的大小
仿真图已经出来,正确无误,只是还有一点小疑问
程序刚开始我是对
RAM进行写操作,所以
wren 置为了1 ,为什么这时候输出端q还有输出呢,并且是从第
2个时钟(地址为2时)开始有的输出
以至于到了最后我把
RAM写满后 把wren 置为了0,进行读操作,输出是从 第
2个时钟(地址为2时)才开始输出,
我写数据的时候是从地址1开始写入的啊,所以我的疑问是:
1. 我在写数据的时候不应该有输出啊
2 .我是从地址1开始写入的,输出时也应该是用地址已开始输出才对啊。。。
附仿真写开始的截图,和读开始的截图,
以及顶层文件的截图
和 控制程序的代码
还请各位大神给指点指点。。。
- 控制模块代码:module RAM_contral
- (
- input clk,
- input rst,
- output reg [9:0] address,
- output reg [7:0] data,
- output reg wren //读写控制线
- );
- /************************************/
- reg state; //状态寄存器
- /***************************************/
- always[url=home.php?mod=space&uid=496176]@[/url] (posedge clk or negedge rst)
- begin
- if (!rst)
- begin
- address <= 0;
- data <= 0;
- wren <= 0;
- state <= 0;
- end
- else
- begin
- case(state)
- 0: begin
- wren <= 1; //写使能打开
- if (address < 1023)
- begin
- address <= address + 1;
- data <= data + 1;
- end
- else
- begin
- address <= 0;
- data <= 0;
- wren <= 0;
- state <= 1; //数据写满跳到下一个状态
- end
- end
- 1: begin
- if(address < 1023)
- address <= address + 1;
- else
- address <= 0;
- end
- default:state <= 0;
- endcase
- end
- end
- endmodule
-
复制代码
一周热门 更多>