• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于FPGA的清零计时器Verilog代码Quartus 实验箱

07/24 09:02
303
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240515201032253.doc

共1个文件

名称:基于FPGA的清零计时器Verilog代码Quartus??实验箱

软件:Quartus

语言:Verilog

代码功能:

清零计时器

要求:

(1)按下按键S1,则红灯亮,并且七段数码管显示14,然后每秒倒计时减1直至清零。

(2)若倒计时中途再次按下按键S1,则数码管立刻再次显示14,并每秒倒计时减1直至清零。清零后红灯熄灭,绿灯闪烁(频率为4Hz)。

(3)外部输入脉冲信号频率为50mHz。

(4)扩展不限,例如点阵显示“十四天无新增”,等自由发挥。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

本代码已在实验箱验证,实验箱如下,其他开发板可以修改管脚适配:

QQ图片20240515200601.png

演示视频:

设计文档:

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

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=754

  • 2-240515201032253.doc
    下载

相关推荐