手中有一块FPGA板卡,MCU一直给FPGA复位引脚高电平,也就是FPGA只上电时复位一次。
那此时有问题了,我重新下程序时,对于靠复位信号初始化为1的信号怎么办呢?
always@(posedge clk)
begin
if(nreset==1'b0)
signal <=1'b1;
else
signal <=1'b0;
end
类似于这种的,怎么办?实验证明,这种情况也能初始化signal <=1'b1成功!
之后,我做了实验,得出以下结论:
1、如果只有rst信号,rst是外部输入复位信号reset_n延迟两拍,rst可初始化
always@(posedge clk)
begin
if(rst==1'b0)
signal <=1'b1;
end
2、如果有rst,rst1,rst是外部输入复位信号reset_n延迟两拍,rst1是always块中直接赋值为1,rst可初始化
always@(posedge clk)
begin
if(rst==1'b0)
signal <=1'b1;
else if(rst1==1'b0)
signal <=1'b0;
end
3、如果有rst,rst1,rst是外部输入复位信号reset_n延迟两拍,rst1是rst延迟一拍,rst不可初始化
4、如果有rst,rst1,rst是外部输入复位信号reset_n延迟两拍,assign rst1 = rst,两者都可初始化
根据实验猜想:即使FPGA没有复位,下程序后一段时间内,外部输入高电平没到达内部,此时reset_n是低电平,过了这段时间后,外部输入到达,reset_n拉高,FPGA正好利用reset_n是低电平这段时间初始化!
欢迎各位同学大胆猜想,一起讨论!
|