FPGA基于VerilogHDL的电子时钟----开发平台Quartus II_weixin_43165086的博客-程序员信息网_verilog电子时钟

技术标签: FGPA  fpga  Verilog  verilog  单片机  

整体框架

本次电子时钟功能:时钟计时功能,时间设置功能(设置的时间是时钟的功能),秒表计时功能三种功能。由于verilog的模块(module)概念,因此设计顺序是自顶而下,首先设计电子时钟的顶层文件,确定每个模块之间的联系。
在这里插入图片描述
上图是电子时钟的原理图。 分频模块向秒表计时模块和时钟计时模块输入100Hz(0.01s)和1Hz(1
s)的频率用来计时。其次秒表模块和时钟计时模块将4个4bit的数字输入有到扫描显示模块显示。Key Fliter是按键防抖模块。

分频模块

在实验中,FPGA开发板有24KHz,27Khz,50KHz三种固定的系统频率,我选择是50KHz的频率。
分频模块的原理就是always模块以clk(系统频率)为敏感事件,在always模块中进行计数,50Khz=50_000_000Hz。那么声明一个integer变量 count1,count1在always模块中进行计数(+1),当计数到25_000_000的时候,让clk_100Hz=1,当计数到49_999_999的时候,让clk_100Hz
=0, 因此就形成了一个1Hz的脉冲信号。

时钟计时模块

时钟计时模块的原理就是在1HZ的脉冲信号下,进行计数,本次实验中数码管只有四个,因此显示的就是分和秒。 首先对秒的个位计数,当个位满10清零,并且让秒的十位+1,这段文字不好描述,因此代码表示。

	秒的个位 - sec_L
	秒的十位 - sec_H
	分的个位 - min_L
	分的十位 - min_H
[email protected](posedge clk_1HZ)
begin
	//每次检测到1Hz脉冲信号频率的 上沿的时候 秒的个位+1
	sec_L <= sec_L +1; 
	//当秒的个位满十
	if(sec_L == 10)
	begin
		sec_L =0;
		sec_H = sec_H + 1;
	end
	//当秒为60的时候
	if(sec_H == 5 && sec_L ==10)
	begin
		min_L <= min_L +1 ;
		sec_H <= 0;
		sec_L <= 0;
	end
	//当分的个位为10
	if(min_L == 10)
	begin
		min_L <= 0;
		min_H <= min_H +1;
	end
	//当分和秒为 60:00
	if(  (min_H == 5 && min_L == 10)  &&(sec_H == 5 && sec_L ==10))
	begin
			min_H <= 0;
			min_L <= 0;
			sec_H <= 0;
			sec_L <= 0;
	end
end

上面的代码只是一个样例,方便理解,并不能运行。整体代码我会上传到GitHub和CSDN库中。

时间设置模块

在这次实验中,我把时间设置功能和时间计时功能现在了同一个模块,有一说一,这样对代码的可拓展性、移植性都是不好的。
具体功能:
首先拨动开关SW1进入时间设置模块,之后可以选择设置时间的位置(key1),默认位置是秒的个位,被选中的位置会以2Hz的频率在 当前数字 和 数码管全灭 两种模式之间不停切换闪烁;按key2对当前位置的时间数字进行add,按key3对当前位置的时间数字进行reduce。
原理:
首先定义四个temp值,在时间计时always模块中让把时钟的分秒的四个值赋给temp。
之后再另外的always模块也就是时间设置模块,把四个temp值赋给 设置时间的四个变量(sec_L_set min_L_set, sec_H_set, min_H_set)。之后声明一个变量pos_set表示设置时间的位置。 之后就是围绕这五个变量进行操作。
!!!下面的代码只是为了便于理解,并不能运行。

//首先初始化pos_set
pos_set <= 0;
//如果检测到key1触发,设置时间的位置发生变化
if(key1)
begin
	if(pos_set == 3)
	begin
		pos_set <= 0;
	end
	else
		pos_set = pos_set + 1;
end
//之后开始实现时间的加减功能
//首先确定设置时间的位置,if和其他else if中的代码j基本相同。只不过是sec_L_set这个变量不同,在其他else if中
// 这个变量分别是 sec_H_set, min_L_set, min_H_set.
if(pos_set == 0 )
begin
	//检测到key2触发 , add
	if(key2)
	begin
		if(sec_L_set == 9)
		begin
			sec_L_set <= 0;
		end
		else
		sec_L_set <= sec_L_set + 1;
		
	end
	
	if(key3)
	begin
		if(sec_L_set == 0)
		begin
			sec_L_set <= 9;
		end
		else
		sec_L_set <= sec_L_set - 1;
	end
	
end

else if(pos_set == 1)
begin
...
end

else if(pos_set == 2)
begin
...
end

else if(pos_set == 3)
begin
...
end


防抖模块

这个模块之前设计中没有写,是因为将程序载入开发板中的时候发现需要按键消抖,因为有时候会发生按一次键触发很多次程序的情况。
原理很简单,就是当检测到按键触发之后,等待20ms之后检测按键是否还是处于触发状态,如果是那么输出 按键触发的信号(高电平),否则输出 按键没有触发的信号(低电平)。

显示扫描模块

显示模块网络上很多资料,所以大致说一下原理。
在1khz的频率下,按顺序 循环四个数字。因此1秒之内 这四个数字会循环250次。因此每个数字闪烁的频率是250Hz,人的肉眼看不出这几个数字的循环。

秒表模块

秒表模块的原理和时钟计时模块基本相似。只不过秒表模块进入的是100Hz的频率,并且 第三、第四位的数字 都是满10进1。

视频展示

FPGA 数字时钟 基于verilog (Quartus II)

代码资源

资源正在上传中。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43165086/article/details/121402458

智能推荐

点云数据分割——单层栅格映射_Hit_HSW的博客-程序员信息网

1. 参考文献: Lidar-based Methods for Tracking and Identification下载链接: http://publications.lib.chalmers.se/records/fulltext/241972/241972.pdf2. 分割方法原理为了能够分离地面和障碍物, 假设地面相对平坦,即地面扫描点的 z 轴方向的波动较小,通过将扫描区域进行栅格划分...

python保存数据框_Python 保存数据的方法:_weixin_39611937的博客-程序员信息网

open函数保存使用with open()新建对象写入数据(这里使用的是爬取豆瓣读书中一本书的豆瓣短评作为例子)123456789101112131415161718import requestsfrom lxmlimport etree#发送Request请求url= 'https://book.douban.com/subject/1054917/comments/'head= {'User-...

如何查看我正在使用哪个版本的Swift?_CHCH998的博客-程序员信息网_查看swift版本

I just created a new Swift project within Xcode. 我刚刚在Xcode中创建了一个新的Swift项目。 I am wondering which ver

oauth jwt认证集成问题集合_点击抽奖的博客-程序员信息网

Field authenticationManager in com.spring.cloud.authentic.config.JwtAuthorizationConfig required a bean of type 'org.springframework.security.authentication.AuthenticationManager' that could not be fo...

2022-2028全球与中国语音遥控器市场现状及未来发展趋势_168行业报告的博客-程序员信息网

2021年全球语音遥控器市场销售额达到了 亿美元,预计2028年将达到 亿美元,年复合增长率(CAGR)为 %(2022-2028)。地区层面来看,中国市场在过去几年变化较快,2021年市场规模为 百万美元,约占全球的 %,预计2028年将达到 百万美元,届时全球占比将达到 %。语音遥控器是通过语音识别的方式对智能家电进行控制,使用便利;同时该遥控器可以大范围的采集语音信号,采集范围广,信息全。而且语音处理模块对采集的语音信号可以进行降噪处理,使得微控制器的识别度更高,避免出现误动作,控制精确度高。在.

【ZZULIOJ】1122: 小明的调查作业_ 江海寄余生 的博客-程序员信息网

ZZULIOJ题解1122: 小明的调查作业题目描述小明的老师布置了一份调查作业,小明想在学校中随机找N个同学一起做一项问卷调查,聪明的小明为了实验的客观性,他先随机写下了N个1到1000之间的整数(0&lt;N≤1000),不同的数对应着不同的学生的学号。但他写下的数字难免会有重复数字,小明希望能把其余重复的数去掉,然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。输入输入有2行,第1行为1个正整数,表示整数的个数:N.第2行有N个用空格

随便推点

一个计算机专业学生几年的编程经验汇总(转)(二)_小小IT墨鱼的博客-程序员信息网

Java杂谈(四)         不知不觉已经写到第四篇了,论坛里面不断的有朋友鼓励我写下去。坚持自己的作风,把一切迷惑不容易理清楚的知识讲出来,讲到大家都能听懂,那么自己就真的懂了。最近在公司实习的时候Trainer跟我讲了很多经典事迹,对还未毕业的我来说是笔不小的财富,我自己的信念是:人在逆境中成长的速度要远远快过顺境中,这样来看一切都能欣然接受了。        好了,闲话不说了,第三篇讲

pytorch中Linear类中weight的形状问题源码探讨_墨氲的博客-程序员信息网_ptorch linear指定weigh和bais

import torchfrom torch import nnm = nn.Linear(20, 30)input = torch.randn(128, 20)output = m(input)print(output.size())print(m.weight.shape)来看一下输出:out:torch.Size([128, 30])torch.Size([30,...

《用 Python 处理 Excel 数据之正则表达式视频教程》 曾贤志_打开第1234676289次的博客-程序员信息网_python正则匹配excel

第1章 正则表达式常用函数与方法使用 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查 一个串是否含有某种子串。对匹配成功的字符串进行提取、拆分、替换等对应的数据处理。 几乎所有的编程语言都支持正则表达式。总体规则相同,但不同编程语言正则的处理方式却 略有不同。在整理零乱的数据时非常有用,比如做抓取网页数据、做数据验证等就经常用到。 1.01 正则表达式的两种使用方法 2. 直接使用 re 模块做正则表达式的匹配。 i.

Android View视图系统分析和Scroller和OverScroller分析_E-Jeason的博客-程序员信息网

Android  View视图系统分析和Scroller和OverScroller分析View  视图分析        首先,我们知道,在Android中所有的视图资源(不管是Layout还是View),最终的父类都是View类。各式各样的Layout只是对ViewGroup的一中特别的实现,各种View也只是View的特别实现。而ViewGroup也是对于View的一种实现。所以说

Android Launcher分析和修改3——Launcher启动和初始化_申庆胜的博客-程序员信息网

前面两篇文章都是写有关Launcher配置文件的修改,代码方面涉及不多,今天开始进入Launcher代码分析。我们开机启动Launcher,Launcher是由Activity Manager启动的,而Activity Manager是由system server启动。原创博文,转载请标明出处:http://www.cnblogs.com/mythou/p/3157452.html 1

Oracle出现“TNS: 监听程序无法分发客户机连接”解决方法_kkvveeerer的博客-程序员信息网

1、问题描述:打开sqlplus后用system角色登陆然后切换成scott用户,再切换成sysD:/>sqlplus sys/[email protected] as sysdba然后接下去操作出现 “TNS: 监听程序无法分发客户机连接”2、解决过程用lsnrctl service查看监听状态D:/Documents and Settings>lsnrctl servic

推荐文章

热门文章

相关标签