FPGA笔记(十)-正确初始化的重要性
在做上一个Rom的读取仿真过程中遇到一个问题,困扰了我俩三天,百思不得其解!很简单的一个例程,仿真了很久才找出问题,一看就是经验不足导致,毕竟积累得少。废话不多说,看我遇到这个奇葩的问题吧。我一开始写的代码如下:
module testrom(
input CLK,
input Rst,
output [7:0] data,
output reg [4:0] addr
);
Rom Rom_0(
.address(addr),
.clock(CLK),
.q(data));
//初始化
initial
begin
addr <= 5'd0;
end
always@(posedge CLK or negedge Rst)
begin
if(!Rst)
addr <= 5'd0;
else
if( addr == 5'd31 )
addr <= 5'd0;
else
addr <= addr + 5'd1;
end
endmodule
在我看来这里逻辑上没有任何问题啊,只不过是个计数器,从addr=0计数到31就从新开始计数,正好用来提供一个地址用来读取Rom
结果仿真出来的图是这样的:
data、addr全是红线,后来一步一步地排查才找到原来从地址这块就有问题。