复位对于FPGA设计很重要,一些很奇怪而找不到原因的问题很有可能是由于复位造成的,本人就因为没理解好复位情况而受困扰几天。
复位信号可以是高电平也可以是低电平复位。并且电路分外部信号的硬件电路复位和内部信号的软件复位。
外部硬件复位:
若用到外部信号复位,最好留一个全局时钟的引脚,当IO口够时不管用不用到外部复位,最好是预留一个外部复位端口。
内部软件复位:
一般内部软件复位不是必须有的,这个主要看你程序运行情况,及外围电路的需要,若外围电路有需要上电一段时间后才正常运行的,那就最好加入一个内部的软件复位,主要在一段延时前复位后才正常运行程序。
Eg:上电后延时多少才复位就看你自己的需要,可以修改
reg [15:0]clkcnt=16'd0;
always@(posedge CLKL)
begin
if(clkcnt==16'hFFFF)
begin
clkcnt <= 16'hFFFB;
end
else
begin
clkcnt <= clkcnt + 1'b1;
end
end
always@(negedge CLKL)
begin
if(clkcnt<16'hFFFA)
begin
RST_n <= 1'b1;
end
else
begin
RST_n <= 1'b0; // icon_control0
end
End
若不用复位: 不用复位可能会引起的一个问题是仿真时出现一堆的X。这个问题可以通过在HDL文件中为寄存器赋初值解决。