在学习FPGA时烧录程序后发现程序一直不会执行,使用Modelism进行波形仿真时验证程序达到预期效果,但烧录程序后却发现程序并没有执行。
以以下代码为例:
module Counter#(parameter cnt_max = 25'd24_999_999)(input wire sys_clk,input wire sys_rst,output reg led );
reg [24:0] cnt;
// 系统时钟50MHZ=0.000_000_02s 0.5s翻转一次 需要计数25_000_000个时钟周期
always@(posedge sys_clk or negedge sys_rst)//低电平复位
begin if(sys_rst==1'b0)
cnt<=25'b0;
else if(cnt==cnt_max)
cnt<=25'b0;
else
cnt<=cnt+1'b1;
end
always@(posedge sys_clk or negedge sys_rst )
begin
if(sys_rst==1'b0)
led <= 1'b0;
else if(cnt==cnt_max)
led<=~led;
end
endmodule
此代码实现了LED的状态每0.5s翻转一次,烧录程序后发现程序并没有达到预期效果通过对FPGA
通过对FPGA开发板的原理图分析可知,硬件上已将FPGA的复位引脚设为低电平,因此需将程序程序中的always@(posedge sys_clk or negedge sys_rst )改为always@(posedge sys_clk or nposedge sys_rst ),同时还将if条件语句中的sys_rst==1'b0改为sys_rst==1'b1,即可解决此问题