基于FPGA的新冠病毒阳性清零计时器Verilog代码Quartus 实验箱
名称:基于FPGA的新冠病毒阳性清零计时器Verilog代码Quartus 实验箱
软件:Quartus
语言:Verilog
代码功能:
新冠病毒阳性清零计时器
要求
(1)按下按键S1,则红灯亮,并且七段数码管显示14,然后每秒倒计时减1直至清零。
(2)若倒计时中途再次按下按键S1,则数码管立刻再次显示14,并每秒倒计时减1直至清零。清零后红灯熄灭,绿灯闪烁(频率为4hz)
(3)外部输入脉冲信号频率为50mhz;
(4)扩展不限,例如点阵显示“十四天无新增”,等自由发挥。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在实验箱验证,实验箱如下,其他开发板可以修改管脚适配:
演示视频:
设计文档:
1. 工程文件

2. 程序文件




3. 程序编译

4. 管脚分配

5. RTL图

6. Testbench

7. 仿真图
整体仿真图



分频模块


控制模块


显示模块


部分代码展示:
//控制模块
module control(
input clk_1KHz,//时钟1KHz
input clk_4Hz,//4Hz(绿灯闪烁频率)
input clk_1Hz, //1Hz
input s1,//按键
output reg led_red,//红灯
output reg led_green,//绿灯
output [7:0] led_water,//流水灯
output [3:0] data_one,//个位
output [3:0] data_ten//十位
);
reg s1_bu0;
reg s1_bu1;
always@(posedge clk_1KHz)
begin
s1_bu0<=s1;
s1_bu1<=s1_bu0;
end
wire s1_p;//按键上升沿
assign s1_p=s1_bu0 & !s1_bu1;//按键上升沿
reg [3:0] cnt_one=4'd0;//个位
reg [3:0] cnt_ten=4'd0;//十位
reg [2:0] state=3'd0;
parameter s_idle=3'd0;
parameter s_start=3'd1;
parameter s_downcnt=3'd2;
parameter s_end=3'd3;
always@(posedge clk_1KHz)
begin
case(state)
s_idle:
if(s1_p)//S1按键
state<=s_start;//开始
else
state<=s_idle;
s_start:
state<=s_downcnt;//倒计时
s_downcnt:
if(s1_p)//S1按键
state<=s_start;//开始
else if(cnt_ten==4'd0 && cnt_one==4'd0)//计数清零
state<=s_end;//结束
s_end:
if(s1_p)//S1按键
state<=s_start;//开始
default:state<=s_idle;
endcase
end
//红灯
always@(posedge clk_1KHz)
begin
if(state==s_downcnt)//倒计时状态
led_red<=1;//红灯亮
else
led_red<=0;//红灯灭
end
//绿灯
always@(posedge clk_1KHz)
begin
if(state==s_end)//倒计时结束
led_green<=clk_4Hz;//绿灯闪烁
else
led_green<=0;//绿灯灭
end
//倒计时
always@(posedge clk_1KHz)
begin
if(state==s_start)//倒计时开始--14
begin
cnt_ten<=4'd1;
cnt_one<=4'd4;
end
else if(state==s_downcnt)begin//倒计时
if(clk_1Hz)//秒脉冲
if(cnt_ten==4'd0 && cnt_one==4'd0)
begin
cnt_ten<=4'd0;
cnt_one<=4'd0;
end
else if(cnt_one==4'd0)
begin
cnt_ten<=cnt_ten-4'd1;//十位倒计时
cnt_one<=4'd9;
end
else
cnt_one<=cnt_one-4'd1;//个位倒计时
end
end
assign data_one=cnt_one;//个位
assign data_ten=cnt_ten;//十位
//倒计时结束流水灯显示led_water
reg [7:0] shift_led=8'b0000_0001;
always@(posedge clk_4Hz)
begin
if(state==s_idle)//开始
shift_led<=8'b0000_0001;
else if(state==s_end)//倒计时结束
shift_led<={shift_led[6:0],shift_led[7]};//循环移位
end
assign led_water=shift_led;
endmodule代码文件(付费下载):
![]()
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 基于FPGA的新冠病毒阳性清零计时器Verilog代码Quartus 实验箱
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 基于FPGA的新冠病毒阳性清零计时器Verilog代码Quartus 实验箱
发表评论
模板文件不存在: ./template/plugins/comment/pc/index.htm