Verilog设计倒计时秒表

这篇具有很好参考价值的文章主要介绍了Verilog设计倒计时秒表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一.设计要求

二.模块总和

三.模块设计

     1.顶层模块

     2.分频模块

     3.计数模块

     4.倒计时模块

     5.数码显示模块

     6.管脚约束代码

四.引脚分配

五.演示视频

一、设计要求

①.用基于NEXY4 DDR开发板自带的时钟驱动电路,要求计时精确;

②.用开发板上的低 7 个开关(sw6-sw0),输入倒计时的初始秒数(最大 99);

③.用 2 个数码管以十进制显示当前的倒计时秒值;

④.用最高的开关(若开发板开关不够,可以用按键代替)实现 reset 功能;reset 后,能以 新的开关值进行倒计时。

⑤.当倒计时到 0 秒后,返回初始值继续倒计时。

二、模块总和

verilog倒计时器,fpga开发

 三、模块设计

1.顶层模块

module top(
	input clk,
	input rst_n,
	input [6:0]sw,
	output [7:0]sel,
	output [7:0]seg 
    );
wire clk_1s;
wire [6:0]cnt;
wire [3:0]en1;
wire [3:0]en2;

 div div(
	.clk(clk),
	.rst_n(rst_n),
	.clk_1s(clk_1s)
    );
	
 count count(
	.clk(clk_1s),
	.rst_n(rst_n),
	.sw(sw),
	.cnt(cnt) 
    );
	
 countdown countdown(
	.clk(clk),
	.rst_n(rst_n),
	.cnt(cnt),
	.en1(en1),
	.en2(en2)
    );

 digital digital(
	.clk(clk),
	.rst_n(rst_n),
	.en1(en1),
	.en2(en2),
	.seg(seg),
	.sel(sel)
    );
endmodule

2.分频模块

module div(
	input clk,
	input rst_n,
	output reg clk_1s
    );

reg [29:0]counter1;//计数器技术满0.5ms需要30位宽的计数器
always @(posedge clk or negedge rst_n)
	if(!rst_n)
		counter1 <= 0;
	else if(counter1 == 49999999)
		counter1 <= 0;
	else 
		counter1 <= counter1 + 1;

always @(posedge clk or negedge rst_n)
	if(!rst_n)
		clk_1s <= 0;
	else if(counter1 == 49999999)
		clk_1s <= ~clk_1s;
	else 
		clk_1s <= clk_1s;

endmodule

 3.计数模块

module count(
	input clk,
	input rst_n,
	input [6:0]sw,
	output reg [6:0]cnt //倒计时最大值99s
    );
	
always @(negedge clk or negedge rst_n)
	if(!rst_n)
		begin
			if(sw == 7'b000_0001)
				cnt <= 7'd1;
			else if(sw == 7'b000_0010)
				cnt <= 7'd5;
			else if(sw == 7'b000_0100)
				cnt <= 7'd10;
			else if(sw == 7'b000_1000)
				cnt <= 7'd20;
			else if(sw == 7'b001_0000)
				cnt <= 7'd25;
			else if(sw == 7'b010_0000)
				cnt <= 7'd30;
			else if(sw == 7'b100_0000)
				cnt <= 7'd35;
			else 
				cnt <= 0;
		end
	else if(cnt == 7'd99)
		cnt <= 0;
	else 
		cnt <= cnt + 1;
endmodule

4.倒计时模块

module countdown(
	input clk,
	input rst_n,
	input [6:0]cnt,
	output reg [3:0]en1,//个位
	output reg [3:0]en2//十位
    );

always @(posedge clk or negedge rst_n)
	if(!rst_n)
		begin 
			en1 <= 0;
			en2 <= 0;
		end 
	else if(cnt <= 7'd99)
		begin 
			en1 <= (99-cnt)%10;
			en2 <= ((99-cnt)-en1)/10;
		end

endmodule

5.数码显示模块

module digital(
	input clk,
	input rst_n,
	input [3:0]en1,
	input [3:0]en2,
	output reg [7:0]seg,
	output reg [7:0]sel
    );
//计数1ms
reg [16:0]counter2;//计数1ms 1000000/10= 100000
always @(posedge clk or negedge rst_n)
	if(!rst_n)
		counter2 <= 0;
	else if(counter2 == 99999)
		counter2 <= 0;
	else
		counter2 <= counter2 + 1;
//1ms时钟使能
reg clk_1ms_en;
always @(posedge clk or negedge rst_n)
	if(!rst_n)
		clk_1ms_en <= 0;
	else if(counter2 == 99999)
		clk_1ms_en <= 1;
	else 
		clk_1ms_en <= 0;
//8位数码管计数器
reg [2:0]counter3;
always @(posedge clk or negedge rst_n)
	if(!rst_n)
		counter3 <= 0;
	else if(clk_1ms_en)
		counter3 <= counter3 + 1;
	else 	
		counter3 <= counter3;
//8位数码管选择
always @(posedge clk)
		case(counter3)
			0:sel <= 8'b1111_1110;
			1:sel <= 8'b1111_1101;
			2:sel <= 8'b1111_1111;
			3:sel <= 8'b1111_1111;
			4:sel <= 8'b1111_1111;
			5:sel <= 8'b1111_1111;
			6:sel <= 8'b1111_1111;
			7:sel <= 8'b1111_1111;
		endcase
	
wire[31:0]data;
assign data[3:0] = en1;
assign data[7:4] = en2;

reg [3:0]dsp_data;
always @(posedge clk)
		case(counter3)
			0:dsp_data <= data[3:0];
			1:dsp_data <= data[7:4];
			2:dsp_data <= data[11:8];
			3:dsp_data <= data[15:12];
			4:dsp_data <= data[19:16];
			5:dsp_data <= data[23:20];
			6:dsp_data <= data[27:24];
			7:dsp_data <= data[31:28];
		endcase

always @(posedge clk)
		case(dsp_data)
			4'd0:seg <= 8'b1100_0000;
			4'd1:seg <= 8'b1111_1001;
			4'd2:seg <= 8'b1010_0100;
			4'd3:seg <= 8'b1011_0000;
			4'd4:seg <= 8'b1001_1001;
			4'd5:seg <= 8'b1001_0010;
	        4'd6:seg <= 8'b1000_0010;
			4'd7:seg <= 8'b1111_1000;
			4'd8:seg <= 8'b1000_0000;
			4'd9:seg <= 8'b1001_0000;
		endcase 
	
endmodule

6.管脚约束代码

set_property IOSTANDARD LVCMOS33 [get_ports {seg[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sel[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sel[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sel[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sel[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sel[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sel[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sel[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sel[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
set_property PACKAGE_PIN C12 [get_ports rst_n]
set_property PACKAGE_PIN E3 [get_ports clk]
set_property PACKAGE_PIN J15 [get_ports {sw[0]}]
set_property PACKAGE_PIN L16 [get_ports {sw[1]}]
set_property PACKAGE_PIN M13 [get_ports {sw[2]}]
set_property PACKAGE_PIN R15 [get_ports {sw[3]}]
set_property PACKAGE_PIN R17 [get_ports {sw[4]}]
set_property PACKAGE_PIN T18 [get_ports {sw[5]}]
set_property PACKAGE_PIN U18 [get_ports {sw[6]}]
set_property PACKAGE_PIN U13 [get_ports {sel[7]}]
set_property PACKAGE_PIN K2 [get_ports {sel[6]}]
set_property PACKAGE_PIN T14 [get_ports {sel[5]}]
set_property PACKAGE_PIN P14 [get_ports {sel[4]}]
set_property PACKAGE_PIN J14 [get_ports {sel[3]}]
set_property PACKAGE_PIN T9 [get_ports {sel[2]}]
set_property PACKAGE_PIN J18 [get_ports {sel[1]}]
set_property PACKAGE_PIN J17 [get_ports {sel[0]}]
set_property PACKAGE_PIN H15 [get_ports {seg[7]}]
set_property PACKAGE_PIN L18 [get_ports {seg[6]}]
set_property PACKAGE_PIN T11 [get_ports {seg[5]}]
set_property PACKAGE_PIN P15 [get_ports {seg[4]}]
set_property PACKAGE_PIN K13 [get_ports {seg[3]}]
set_property PACKAGE_PIN K16 [get_ports {seg[2]}]
set_property PACKAGE_PIN R10 [get_ports {seg[1]}]
set_property PACKAGE_PIN T10 [get_ports {seg[0]}]

四、引脚分配

verilog倒计时器,fpga开发

verilog倒计时器,fpga开发

verilog倒计时器,fpga开发

verilog倒计时器,fpga开发

 五、演示视频

IMG_2222文章来源地址https://www.toymoban.com/news/detail-752133.html

到了这里,关于Verilog设计倒计时秒表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Verilog秒表计时器设计

    Verilog秒表计时器设计 设计一个基于Verilog的秒表计时器,该计时器可以在嵌入式系统中使用。下面是详细的设计说明和相应的源代码。 设计说明: 秒表计时器是一种常见的计时工具,可以用于测量时间间隔。在嵌入式系统中,我们可以使用Verilog语言来实现一个简单的秒表计

    2024年02月02日
    浏览(49)
  • 北邮22级信通院数电:Verilog-FPGA(11)第十一周实验(2)设计一个24秒倒计时器

    北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 1.1  counter_24.v 1.2  divide.v 1.3  debounce.v 二.管脚分配 三

    2024年02月04日
    浏览(45)
  • Vivado设计秒表计时器实现00分00.00秒到59分59.99秒的计时(verilog语言)

    目录 0.写在最前 一、课程设计要求: 三、名词说明解释 四、Vivado代码实现部分 五、仿真测试程序 六、约束文件 七、开发板结果展示 八、关于改进/扩展 ① 增加秒与 0.1s 之间的分隔符“.”号的点亮: ② 取消 0.1s,0.01s 显示,增加小时形成“时分.秒”的显示方式 ③ 其它改

    2024年02月06日
    浏览(57)
  • 基于FPGA的交通灯设计(加强版,涵盖倒计时)

    ##一、实验任务要求   1)实现一交通十字路口处红绿灯的基本定时控制功能,要求东西方向灯色循环为绿灯45秒,黄灯5秒,左拐灯15秒,黄灯5秒,红灯40秒,黄灯5秒;南北方向灯色循环为红灯65秒,黄灯5秒,绿灯20秒,黄灯5秒,左拐灯15秒,黄灯5秒。 2)实现东西方向和南北方

    2024年02月04日
    浏览(42)
  • 时序逻辑电路的设计(二) -- 篮球比赛24秒倒计时电路(附Multisim)

    1. 设计要求         篮球比赛中,进攻一方取得球权后双方开始比赛,若24秒到,该进攻一方仍然没有投球时,需要交换发球权。本实验要求设计一个24秒违例计时器(倒计时方式),当计时24秒时间到,用一个红色指示灯亮表示,指示灯持续点亮5秒。         要求电

    2024年02月08日
    浏览(55)
  • FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真

            本次做的题目是:基于FPGA的倒计时显示电路设计,         题目要求如下:         详细要求如下:         本次设计的代码通过了仿真。(用的是quartus自带的仿真器)         这次设计分为两个模块,一个是倒计时的控制模块,另一个是数码管

    2024年02月11日
    浏览(31)
  • 蓝桥杯倒计时 | 倒计时4天

    作者🕵️‍♂️:让机器理解语言か 专栏🎇:蓝桥杯倒计时冲刺 描述🎨:蓝桥杯冲刺阶段,一定要沉住气,一步一个脚印,胜利就在前方! 寄语💓:🐾没有白走的路,每一步都算数!🐾 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数 n): 先输入一个自

    2023年04月09日
    浏览(51)
  • 51单片机的简易篮球计分器倒计时仿真设计( proteus仿真+程序+原理图+报告+讲解视频)

    51单片机的简易篮球计分器倒计时仿真设计( proteus仿真+程序+原理图+报告+讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0048 本设计旨在设计一个基于51单片机的篮球比赛计分器仿真设计,下面是设计的功能要求 1.可以在比赛期间随时更

    2024年02月09日
    浏览(50)
  • 51单片机实现倒计时,按键控制倒计时

    基于AT89C52的答辩倒计时。四个按键分别控制倒计时开始,暂停,时间加和减。剩下30S时蜂鸣器响,倒计时结束蜂鸣器响。  

    2024年02月07日
    浏览(58)
  • Flutter实现倒计时功能,秒数转时分秒,然后倒计时

    Flutter实现倒计时功能 发布时间:2023/05/12 本文实例为大家分享了Flutter实现倒计时功能的具体代码,供大家参考,具体内容如下 有一个需求,需要在页面进行显示倒计时,倒计时结束后,做相应的逻辑处理。 实现思路:在Flutter中,Timer.periodic提供了循环功能,查看函数定义:

    2024年02月13日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包