前言:用计数器实现闪烁灯功能,硬件环境:正点原子的新起点开发板;熟悉FPGA项目工程的创建,仿真调试
一、工程创建
工程创建步骤可参考正点原子的新起点开发手册
二、代码编写
通过计数器每隔0.2s后改变IO口的输出电平变化,此处LED为高电平有效,晶振为50MHz,对应的时钟周期为20ns;
module blink_control(
input sys_clk,
input sys_rst,
output reg[3:0] blink_out
);
parameter CHANGETIME=1000_0000;
wire add_cnt;
wire end_cnt;
reg [23:0] cnt;
always @(posedge sys_clk or negedge sys_rst)begin
if(!sys_rst)
cnt <= 1'b0;
else if(add_cnt)begin
if(end_cnt)
cnt <= 1'b0;
else
cnt <= cnt + 1'b1;
end
end
assign add_cnt = 1'b1;
assign end_cnt = add_cnt && cnt==CHANGETIME-1'b1;
always @(posedge sys_clk or negedge sys_rst)begin
if(!sys_rst)
blink_out <= 4'b0000;
else if(end_cnt)
blink_out <= ~blink_out;
else
blink_out <= blink_out;
end
endmodule
将编写的代码文件生成模块元件后,在顶层blink_led.bdf顶层文件中添加该模块元件如下图
代码编译后,添加对应的输入输出引脚,电路综合没问题后,下一步进行仿真验证
三.仿真验证
打开tool菜单下的SignalTab II 添加采集引脚后点击运行如下图
仿真可以看到每隔0.2s后blink_out信号对应的电平会反转一次
四.实验结果