个人笔记。
本实验是利用时钟来实现任意时间的定时器,本实验的FPGA的晶振是50MHz,50MHz = 50_000_000Hz = 1/50_000_000s = 20ns,也就是说一个时钟周期为20ns,如果要实现100微秒的定时则需要20ns*1000*5=100微秒。
又因为2^26 = 67_108_864 > 50_000_000,所以可以设置二进制长度2^26。(即宽26)
下面代码是如何实现100微秒循环并在100微秒内实现任意时刻定时,完成led闪烁。
reg led;
reg [26:0] cnt; //计数器
always @(posedge sys_clk or negedge nrst)begin
if(!nrst)
begin
cnt<=26'd0;
end
else
begin
if(cnt>1000*5) // 100微秒
begin
cnt<=0;
end
else
begin
cnt<=cnt+1;
end
end
end
always @(posedge sys_clk)begin
if(cnt=1000) //20微秒
begin led <= ~led;
end
end