[SugerTangYL] 简易电子时钟Verilog设计

Verilog设计数字时钟 通过NEXY4DDR设计数字时钟 阅读详情

目录

前言

一、简易电子时钟的功能要求

二、设计思路&整体框架

三、完整代码

四、仿真

总结


前言

来分享第一个案例了!简易电子时钟的Verilog设计,电子时钟应该算是走嵌入式和FPGA开发的敲门砖了叭(也可能是流水灯)。本次设计实现的平台是Altera的DE2开发板。


一、简易电子时钟的功能要求

        一个简易的电子时钟应该包含以下功能:

  • 正常显示时分秒
  • 可调节时间

        在此基础上也还可以继续扩展功能,本次由于刚入门,便只实现了基本功能。 

菜的安详(小企鹅表情包)_企鹅_安详表情

二、设计思路&整体框架

        要正常计时,我们需要一个1Hz的信号。在Verilog中采用分频器对基准时钟进行分频,使用这个1Hz信号进行计数,便可以产生时分秒。再将时分秒用数码管显示出来,第一个功能成功实现;在第一个基础上,设置一个拨码开关,用以区分正常模式和调时模式。当电子时钟处于调时模式时,最低位数码管闪烁,按下增1按键时数字加1;按下移位按键时闪烁位向高位移动。当模式调回正常模式时,从修改后的时间开始计时。

        综上,需要一个分频器、一个时间管理模块、需要六个数码管显示译码器。整体框图如下:

         对于分频器这一ip,之后会出文详述,此处使用的是占空比50%的偶分频。数码管显示译码模块属于较为简单的模块,读者在看其Verilog代码时很容易便理解。

三、完整代码

         开门见山!先上整个完整能编译的Verilog代码!

module simple_electronic_clock(clk,key_add,key_displace,switch_mode,hour_decode,min_decode,sec_decode);
input clk;//基准时钟50MHz
input key_add;//增一按键
input key_displace;//移位按键
input switch_mode;//模式开关
output [13:0] hour_decode;//小时译码
output [13:0] min_decode;//分钟译码
output [13:0] sec_decode;//秒译码

wire clk_1Hz,clk_2Hz;//分频后的1Hz、2Hz信号
wire [1:0] mode_cnt;//调时的闪烁位
wire [7:0] hour,min,sec;//时,分,秒

divider(clk_2Hz,clk_1Hz,clk);//分频器
time_management(clk_1Hz,switch_mode,key_add,key_displace,hour,min,sec,mode_cnt);//时间管理模块
digital_tube_decode(clk_2Hz,mode_cnt,hour,min,sec,hour_decode,min_decode,sec_decode);//数码管显示译码模块
endmodule

module divider(clk_2Hz,clk_1Hz,clk);//分频器	
output reg clk_1Hz,clk_2Hz;
input clk;
reg [24:0] count,count2;//内部计数单元


//count计满24999999时信号反向,产生1Hz信号
always@(posedge clk)	begin  
	if(count==25'd24999999)
		begin
			count<=25'b0;
			clk_1Hz<=~clk_1Hz;
	   end
	else
		count<=count+1'b1;
end


//count2计满12499999时信号反向,产生2Hz信号
always@(posedge clk)	begin 
	if(count==25'd12499999)
		begin
			count2<=25'b0;
			clk_2Hz<=~clk_2Hz;
	   end
	else
		count2<=count2+1'b1;
end
endmodule 


module time_management(clk_1Hz,switch_mode,key_add,key_displace,hour,min,sec,mode_cnt);//时间管理模块
input clk_1Hz,switch_mode,key_add,key_displace;
output reg [7:0] hour,min,sec;
output reg [1:0] mode_cnt;//调时的闪烁位标志

//时间计时&调时
always @(posedge clk_1Hz) begin
	case (switch_mode)
		1'b0:sec[3:0] <= sec[3:0] + 1'b1;//正常模式计时
		1'b1:begin                       //调时模式
			if(key_add) begin
				case (mode_cnt)
					2'b00:sec[3:0] <= sec[3:0] + 1'b1;//秒时间加一
					2'b01:min[3:0] <= min[3:0] + 1'b1;//分时间加一
					2'b10:hour[3:0] <= hour[3:0] + 1'b1;//时时间加一
					default:;
				endcase
			end
		end
		default:;
	endcase
    //以下为进位条件判断
	if(sec[3:0] == 4'd10) begin        
		sec[3:0] <= 4'b0;
		sec[7:4] <= sec[7:4] + 1'b1;
	end
	if(sec[7:4] == 4'd6) begin
		sec[7:4] <= 4'b0;
		min[3:0] <= min[3:0] + 1'b1;
	end
	
	if(min[3:0] == 4'd10) begin
		min[3:0] <= 4'b0;
		min[7:4] <= min[7:4] + 1'b1;
	end
	if(min[7:4] == 4'd6) begin
		min[7:4] <= 4'b0;
		hour[3:0] <= hour[3:0] + 1'b1;
	end
	
	if(hour[3:0] == 4'd10) begin
		hour[3:0] <= 4'b0;
		hour[7:4] <= hour[7:4] + 1'b1;
	end
	if(hour[3:0] == 4'd4  && hour[7:4] == 4'd2) begin
		hour[3:0] <= 4'b0;
		hour[7:4] <= 4'b0;
	end
end

//移位按键触发移位
always @(posedge key_displace) begin
	if(switch_mode)	begin
		if(mode_cnt == 2'b10) mode_cnt <= 2'b0;
		else mode_cnt <= mode_cnt + 1'b1;
	end
end

endmodule
			

module digital_tube_decode(clk_2Hz,mode_cnt,hour,min,sec,hour_decode,min_decode,sec_decode);
input clk_2Hz;
input [1:0] mode_cnt;
input [7:0] hour,min,sec;
output reg [13:0] hour_decode,min_decode,sec_decode;

reg flag;

//闪烁产生
always @(posedge clk_2Hz) begin
	flag <= ~flag;
end


//显示译码
always @(posedge clk_2Hz) begin
	case (mode_cnt)    //根据闪烁位标志,使得闪烁位数字闪烁
		2'b00:begin
			hour_decode[6:0] <= decode(hour[3:0]);
			hour_decode[13:7] <= decode(hour[7:4]);
			min_decode[6:0] <= decode(min[3:0]);
			min_decode[13:7] <= decode(min[3:0]);
			if(flag) begin
				sec_decode[6:0] <= decode(sec[3:0]);
				sec_decode[13:7] <= decode(sec[3:0]);
			end
			else begin  //7'b1111111为数码管全灭,下面同理
				sec_decode[6:0] <= 7'b1111111;
				sec_decode[13:7] <= 7'b1111111;
			end
		end
		2'b01:begin
			hour_decode[6:0] <= decode(hour[3:0]);
			hour_decode[13:7] <= decode(hour[7:4]);
			sec_decode[6:0] <= decode(sec[3:0]);
			sec_decode[13:7] <= decode(sec[7:4]);
			if(flag) begin
				min_decode[6:0] <= decode(min[3:0]);
				min_decode[13:7] <= decode(min[7:4]);
			end
			else begin
				min_decode[6:0] <= 7'b1111111;
				min_decode[13:7] <= 7'b1111111;
			end
		end
		2'b10:begin
			sec_decode[6:0] <= decode(sec[3:0]);
			sec_decode[13:7] <= decode(sec[7:4]);
			min_decode[6:0] <= decode(min[3:0]);
			min_decode[13:7] <= decode(min[7:4]);
			if(flag) begin
				hour_decode[6:0] <= decode(hour[3:0]);
				hour_decode[13:7] <= decode(hour[7:4]);
			end
			else begin
				hour_decode[6:0] <= 7'b1111111;
				hour_decode[13:7] <= 7'b1111111;
			end
		end
		default:;
	endcase
end
	

//译码函数,便于重复调用
function [6:0] decode;
input [3:0] num;

begin
	case (num)
			4'd0:decode=7'b1000000;
			4'd1:decode=7'b1111001;
			4'd2:decode=7'b0100100;
			4'd3:decode=7'b0110000;
			4'd4:decode=7'b0011001;
			4'd5:decode=7'b0010010;
			4'd6:decode=7'b0000010;
			4'd7:decode=7'b1111000;
			4'd8:decode=7'b0000000;
			4'd9:decode=7'b0010000;
			default: decode=7'b1111111;
	endcase
end
endfunction

endmodule 

四、仿真

仿真就等我之后有空再弄叭(dog)。


总结

这篇文是我第一个Verilog案例,主要讲解设计思路,当然还有更好的电子时钟例码,我这个算是无脑编写QaQ

基于51单片机的简易电子钟加闹钟设计 *单片机设计介绍,基于51单片机的简易电子钟加闹钟设计。 阅读详情

相关推荐

FPGA实现多功能数字钟(Verilog)

FPGA实现多功能数字钟(Verilog)介绍整体框架 介绍 本文设计的数字钟的功能包括:正常时钟、日期显示、调整时间(日期)、整点报时、闹钟(包括闹钟音乐)、秒表、数码管显示。使用的rtl语言为Verilog,参考了一些别人的设计,对一些模块进行了仿真,并对整个系统进行了仿真,功能基本正确。接下来我将详细介绍各个模块的功能以及设计。下图为设计的所有模块: 整体框架 顶层rtl视图(不知道看不看得清): ...

weixin_39520719的博客 2万+

用Verilog实现数字钟

数字钟实验基本指导书内容实验目的与要求实验基本原理与功能实验主要技术指标设计步骤实验报告要求各模块代码24进制计数器60进制计数器状态调节蜂鸣器显示驱动分频器顶层连接图引脚锁定图 实验基本指导书内容 实验目的与要求 实验目的:进一步掌握用VerilogHDL 语言编写任意进制计数器的方法,通过本次实验要充分认识到,顶层结构的设计和优化在综合设计中的重要性。 实验要求:利用前面实验所学知识,设计一数字钟并在GW48 实验箱上实现。具体要求如下: 1. 计时可选十二进制计时和二十四进制计时; 2. 可手动校时

m0_50877662的博客 2万+

Verilog电子时钟编程指南:代码与实践

本文还有配套的精品资源,点击获取 简介:本文介绍如何使用Verilog硬件描述语言设计和实现电子时钟的基本原理和代码示例。Verilog是数字电路设计中广泛使用的一种语言,尤其适用于集成电路和FPGA设计。电子时钟作为数字系统的基础组件,其设计涉及到模块化编程、进程、计数器、逻辑和赋值操作符、边界条件、复位逻辑、时钟门控和时序约束等关键概念。本文将通过一个简单的时钟分频器代...

weixin_36123300的博客 2100

Verilog实现的数字钟

Verilog实现的数字钟,采用动态扫描方式。

ly721115的博客 5125

基于Ultralytics RT-DETR的工业缺陷检测实战:从NEU-DET数据集准备到模型部署

本文详细介绍了基于Ultralytics框架和RT-DETR模型进行工业缺陷检测的完整实战流程。内容涵盖从NEU-DET数据集准备、YOLO格式转换、环境配置,到模型训练、关键参数调优、性能验证与可视化分析,最后提供了ONNX等格式的模型部署方案,为工业质检场景提供了一套高效、可落地的AI解决方案。

weixin_29168393的博客 339

Ubuntu桌面消失?可能是lightdm配置在捣鬼:详细解析/etc/lightdm.conf的优先级机制与实战修复

本文详细解析了Ubuntu系统因lightdm显示管理器配置错误导致桌面消失的问题。通过分析/etc/lightdm.conf的优先级加载机制,提供了从systemctl诊断、调试模式运行到实战修复配置语法错误(如缺失[Seat:*]组)的完整方案。文章还探讨了在系统无法启动时使用chroot或恢复模式进行高级救援,并对比了lightdm与gdm3在NVIDIA驱动环境下的不同表现,帮助用户高效恢复图形界面。

weixin_29313547的博客 420

电子数字钟设计Verilog代码Quartus仿真

代码功能: 要求 电子数字钟设计 1、可以按键切换正常计时和闹钟 2、可以通过按键修改时分秒 3、可以通过按键修改闹钟时间 4、数码管显示时间

xiakunpei123的博客 2107

【学习系列】SAP RAP 2:创建第一个RAP应用

本文介绍了从零开始创建基于SAP RAP(ABAP RESTful Application Programming Model)的Fiori应用的完整流程。首先说明了学习RAP需要结合官方文档和教程,并提供了相关资源链接。文章详细讲解了开发环境的准备要求,包括系统版本、开发工具和基本知识。重点演示了如何通过8个步骤创建支持CRUD操作和草稿功能的RAP应用:1)创建数据库表;2)定义CDS视图实体;3)创建投影视图;4)定义行为;5)创建行为投影;6)定义服务;7)绑定服务;8)添加UI注解。

DeveloperMrMeng的博客 1496

【verilog】多功能数字钟的设计

Verilog多功能数字钟的设计

qq_53869058的博客 1万+

uniapp(安卓苹果APP端):解决video组件播放视频卡顿,视频一直加载非常缓慢或加载不出来解决方案,解决多个video组件视频播放很卡一直加载非常慢怎么办(无论真机调试还是本地测试都完美搞定)

uni-app APP端video组件播放视频卡顿,uniapp video app 加载不出来解决方案,uniapp app使用video视频播放卡顿,uni-app APP端video组件播放视频卡顿_uniapp video老是加载,uniapp开发app视频在真机上卡顿,安卓app播放视频很卡,苹果ios真机运行播放视频加载很慢怎么办,解决UniApp中MP4视频播放卡顿问题,解决m3u8视频播放很卡的问题,uniapp 使用video组件,部分视频加载非常慢,uniapp视频播放卡顿,安卓视频播放

✅ 精选推荐文章 7914

分布式训练中All-Reduce、All-Gather、Reduce-Scatter原理

Reduce-Scatter = 先对所有进程的数据做 Reduce(如 sum / mean),再把结果“切分”分发给各进程。(是 Reduce + Scatter 的融合操作。

comli_cn的博客 339

数字电子时钟设计Verilog代码Quartus仿真

代码功能: 数字电子时钟设计 1、12小时和24小时切换 2、可以切换正常计时和闹钟 3、可以修改时间(包括闹钟时间)

xiakunpei123的博客 3674

YOLO26改进105:全网首发--使用BiFPN改进特征金字塔网络

YOLOv6 v3.0在目标检测领域实现重大突破,通过改进网络架构和训练方案显著提升性能。该版本在COCO数据集上展现出优越表现:YOLOv6-N达到37.5% AP/1187 FPS,YOLOv6-S实现45.0% AP/484 FPS,均超越同类检测器。大模型YOLOv6-M/L分别达到50.0%/52.8% AP,L6版本更创下实时检测新纪录。关键技术包括RepVGGBlock、BiFusion等新型模块,通过多分支融合和高效重参数化设计提升性能。研究团队已验证各改进模块有效性,代码已开源。

AIcurator的博客 95

EDA技术Verilog HDL语言完成数字钟设计

数字钟单元电路设计 主要内容: 1.数字钟系统具有时钟、清零和校准输入信号; 2.在系统时钟信号(1Hz)作用下,能显示时、分、秒; 3.时/分/秒计数器为24进制/60进制/60进制; 4.系统可以对时、分校准。校准信号有两个,一为校准时钟输入,一为校准控制输入; 5.系统具有整点报时功能。当时间为59’58’’、59’59’'时,系统报时各响一声(低音),持续

qq_45784099的博客 5243

YOLO11改进|YOLO11中引入注意力和卷积融合模块CAFMAttention

YOLO11改进|YOLO11中引入注意力和卷积融合模块CAFMAttention

A1983Z的博客 1218

基于STM32+华为云IOT设计的云平台监控系统_102

本次设计结合现代生活的具体需求,设计出一套基于华为云IOT设计的云平台监控系统,可以远程实时查看家里光照强度、温湿度等信息,支持在云端控制家里的电器设备,实现远程控制。

7640

Verilog设计实例(7)基于Verilog的数字电子钟设计

基于模块化的设计思想, 采用 Verilog HDL 语言设计一个能进行时、分、秒计时的二十四小时制的数字电子钟, 并具有整点报时功能。 采用数码管进行时间显示,要求显示格式为:小时-分钟-秒钟。

Reborn Lee 4万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

数字钟设计Verilog代码远程云端平台Quartus

名称:数字钟设计Verilog代码远程云端平台Quartus软件:Quartus语言:Verilog代码功能:数字钟设计要求:1.由100MHZ的系统时钟分频得到秒时基2.对秒时基计数,在数码管上显示小时,分钟和秒的计时信息。3.可对分和时进行校准使用BTN1和BTN0两个按键完成校准。其中BTN1用于切换三种模式:正常计时,分校准,时校准、在校准时或分模式时,相应的地位数码管要闪烁BTN0案件用于在校准时,调整具体的计数值。

diaojiangxue的博客 1357

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

基于串口校时的数字钟设计(verilog实现)(附代码)

基于串口校时的数字钟设计(verilog实现)

qq_44366923的博客 2518

verilog 设计一个电子钟

Verilog hdl 语言设计电子时钟 基于 Verilog hdl 语言设计电子时钟,实现计时、调整时间、重新清零功能。 时,分,秒 reg [3:0] dout1,dout2;//秒的个位与十位,0-9,0-6; reg [3:0] dout3,dout4;//分的个位与十位,0-9,0-6; reg [3:0] dout5,dout6;//时的个位与十位,0-4,0-2; //进位 reg co_1; reg co_2; reg co_3; reg co_4; reg co_5; 一秒计时产生 re

weixin_46085748的博客 1万+

Verilog语言fpga小脚丫数字时钟(整点报时,调时,显示秒钟等功能)

同时,分钟的计时和时钟的计时实现思路与秒钟计时类似,但需要额外进行判断,比如说分钟进位要在秒钟均为0时才产生进位,时钟进位要在分钟秒钟全为0时才进位。首先只有在秒钟分钟均为0时才算作整点,在这个条件下我又用到了两个计数器cnt、cnt1与加减法的计数器功能一致,cnt为当前整点数的两倍(因为一亮一灭需要灯光反转两次),cnt1为匹配计数器,当cnt1不等于cnt1时灯光反转一次,并且cnt1+1。我在写代码的时候是将调时模块整合在计时模块中的,时钟调时与分钟调时的原理是相同的。最后便是整点报时的实现。

qq_40195133的博客 1万+

m基于FPGA的电子钟verilog实现,可设置闹钟,包含testbench测试文件

基于FPGA的电子钟设计不仅具有灵活的可定制性,还能通过集成其他功能(如闹钟)来增强实用性。Verilog作为一种广泛使用的硬件描述语言,为FPGA设计提供了强大的描述和仿真能力。计数器则根据分频后的信号进行累加,实现时间的计量。闹钟功能的实现需要额外的存储器和比较器。存储器用于保存用户设置的闹钟时间,比较器则不断比较当前时间和闹钟时间。在实际设计中,由于时间信号是连续变化的,而闹钟设置是静态的,因此需要使用边缘触发或定时检查的方式来检测时间匹配条件。其中,(A) 是当前时间,(B) 是设置的闹钟时间。

fpga/matlab/simulink算法仿真工程 1946

年轻人的第一个数字钟!适用于FPGA的数字钟Verilog实现

一份面向本科数电实验课的,完整的,可用于 fpga 的数字闹钟 verilog 实现

sinat_32804865的博客 1782

FPGA _Verilog HDL_计数器实现数字钟60秒计数设计实验

一、题目 计数器实现数字钟60秒计数设计实验 二、源代码 说明:本实验实现了数字钟60秒计数设计;可以输出定时时间eg:11.22s,即11s、22ms,两个参数通过COUTS、COUTMS输出;同时,可以输出溢出位,当60s定时到达时,OV输出1,反之,OV输出0。本实验的时钟频率为50MHz。 顶层文件: //---------------------------------------------------------------------------------------- // File n

Jasmine-Lily的博客 6519

数电实验Verilog-数字钟

数字钟 数字钟是数电实验最后一个用verilog写的实验,稍微有些难度,现在再回来看之前写的代码还是有很多不足和问题,但在当时并没有注意到。 计数模块 1.60进制计数 在计数模块中就考虑到修改时间时的计数修改,便于修改时间 60进制需要考虑到进位,为了能保证同时进位,需要在计数58时就将下一个计数器的计数使能开启,计数59时计数使能关闭 module count60(input clk,input jinwei,input changen,input reset,input [1:0]button,out

Chalatu6的博客 5894

FPGA基于VerilogHDL的电子时钟----开发平台Quartus II

FPGA基于VerilogHDL的电子时钟----开发平台Quartus II整体框架分频模块时钟计时模块时间设置模块防抖模块显示扫描模块秒表模块视频展示代码资源 整体框架 本次电子时钟功能:时钟计时功能,时间设置功能(设置的时间是时钟的功能),秒表计时功能三种功能。由于verilog的模块(module)概念,因此设计顺序是自顶而下,首先设计电子时钟的顶层文件,确定每个模块之间的联系。 上图是电子时钟的原理图。 分频模块向秒表计时模块和时钟计时模块输入100Hz(0.01s)和1Hz(1 s)的频率用来

weixin_43165086的博客 6031
上一篇: [SugerTangYL] Verilog 语言入门(零基础视角)
下一篇: [SugerTangYL] 时钟管理(分频器、倍频器、锁相环)Verilog
SugerTangYL
博客等级 码龄5年 460粉丝 10原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值