数电实验期末作业——基于FPGA的数字时钟设计
1. 概述
本系统主要完成数字电子钟的以下功能:
1.计时功能(24小时)
2.闹钟功能(设置闹钟以及到时播放音乐)
3.校时功能
4.其他简单功能(清零、输入频率选择(1hz、500hz、5khz)、补段、八位显示等)
系统顶层设计图如下:
顶层电路由多个模块组成,总体上可归纳为八个大模块,分别为分频模块、数字时钟模块、闹钟设定模块、比较模块、功能选择模块、演示模块、音乐发生模块以及触发器保持模块。每个大模块又由多个小模块组成,首先介绍大模块的设计思路,小模块稍后再进行叙述。
首先分频模块可将50Mhz的时钟信号分频成系统所需要的时钟信号供给其它模块使用,时钟模块实现24小时计时,通过DISPLAY模块显示在八位数码管上;闹钟设定模块设定闹钟时间,通过比较模块不断比较时钟模块的输出信号和闹钟的设定的信号,当信号相同时比较模块输出1S的高电平信号,作为闹钟铃声的驱动信号;音乐铃声的发生使用verilog编写,最后分装成模块进行使用。
2. 基本模块
2.1 分频模块
分频模块内部包含多个模值计数器(使用芯片均为74390),以模100计数器为例给1CLKA输入100hz的信号,经过简单线路连接,最后输出2QD的信号。因为是模100计数器,1CLKA每变化100次,2QD变化1次,所以实现了100分频。通过设计不同模值的计数器,可以得到不同频率的信号
2.2 计数器模块
(模60计数器原理图 图中的CLR端口为手动清零端口,接下来会使用到)
(模24计数器原理图 图中的CLR端口为手动清零端口,接下来会使用到)
设计计数器模块时,主要使用的是74390芯片,74390芯片是一种4位二进制异步可编程计数器。其工作原理是通过内部的四个触发器和逻辑门电路实现计数功能。当输入端的时钟脉冲来临时,计数器根据时钟的上升沿或下降沿改变输出状态,从而实现计数功能。
为方便后面使用7448译码器,故将74390的输出引脚全部引出,低四位组成个位(0—9)的8421码,高四位组成十位(0—5)的8421码。因74390是异步计数器,故模60计数器的清零信号要给为十位的(0110),模24同理。
2.3 数码管动态显示模块
2.3.1动态显示原理
将所有数码管的同名段选端连在一起,另外每个数码管的公共端增加位选通控制电路,位选通由当输出段码时,所有数码管都接收到相同的段码,但究竟是哪个数码管会显示出字形,取决于对位选端的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的位选端,就使各个数码管轮流受控显示,这就是动态驱动。
若这个轮流显示的速度够快,由于视觉暂留现象人的眼睛就会感觉到每位LED都在显示,这种在很短的时间周期内将LED各个显示单位分别点亮的方式称为动态显示。一般来说,只要以50Hz以上的轮流显示速度,也就是完成一次显示时间小于20ms,就感觉不到闪烁现象,看到的就是一组稳定的显示数据。
图中采用先译码再动态扫描显示的方式,这样可以利用原有的decoder译码模块进行电路的搭建,但是如果要八位显示的话,就需要对原有的六位扫描进行处理,要把LPM_MUX从原来的六位八位,宽度不变;然后扫描位的计数器也要改成八位的。
2.4 位选模块 dig_select
(1)模块功能:实现对八位数码管的亮灭控制。
(2)设计思路:要接收由扫描模块传来的3位地址信号,并将其转化为可控制八位数码管的控制信号,而我们的数码管是共阳数码管,要将需要亮的那位数码管给到低电平,因此可采用74138译码器,实现将三位二进制数信号转化为对应十进制位置上的低电平。
(3)设计结果:
2.5 数据选择模块 code_select
- 模块功能:可实现8通道、宽度7的信号输入,由地址位控制从8通道中选择一个通道输出信号。
- 设计思路:调用系统库中的LPM_MUX进行操作,设定为8个通道且通道宽度为7,将引脚全部引出,最后编译封装。
- 设计结果:
2.6 译码模块(有补段功能)decoder
- 模块功能:将4位8421码通过7448芯片转成数码管能显示的编码。
- 设计思路:计数器输出的秒、分、时的个位和十位的8421码输入到译码模块,通过7448芯片就可以将这些8421码编译为数码管显示对应数字的数码。
- 设计结果:
3. 其它拓展功能
3.1 闹钟设定(到设定的时间播放音乐闹铃)
- 模块功能:大模块内包含四个小模块,分别为闹钟时间设定模块、比较模块、音乐发生模块以及保持模块。
- 闹钟时间设定模块:可以通过SW1控制闹钟设定的开启和关闭,在开启状态下,可通过KEY3、KEY0、KEY1分别对闹钟的秒、分、时进行设定。
- 比较模块:不断比较闹钟设定的时间和数字时钟的当前时间信号,当信号相同时,输出一个高触发电平。
- 保持模块:接收比较模块产生的高触发电平信号,SW2可控制闹钟的开关,KEY2可控制闹钟铃声的暂停或开始。
- 音乐发生模块:按一定的顺序输出特定频率的信号(一首歌)。
- 设计思路:先分别封装好所需要的模块,将时钟模块和闹钟设定模块的输出接入到比较模块,然后将比较模块的输出接到保持模块,同时要将音乐模块的输出接到保持模块,那么接下来就可以通过操控按键和开关控制闹钟的开启、暂停。每个模块的具体设计思路如下:
- 闹钟时间设定模块:通过按键控制模60和模24计数器,再将输出接到演示模块上,就可以在数码管上观察自己设定的闹钟时间。因按键会存在抖动,因此需要用D触发器级联进行消抖操作。
- 比较模块:基本思想就是使用同或逻辑门,因比较模块需要对多组数据进行比较,且数据的宽度不为一,因此需要在内部集成多个同或门,实现对多组宽数据的比较。
- 保持模块:要首先考虑闹钟的暂停不是简单的关闭闹钟的开关,若只是关闭开关,并不能很好符合实际,若下次再次开启闹钟开关,闹铃会立即产生,不符合正常操作。因此另外设计了一个按键,可以实现暂停闹钟的功能。综合考虑以上因素,选择T触发器(遇1反转,遇0保持)进行设计。因为比较模块产生的触发信号会维持1秒,因此T触发器的时钟频率不能大于1hz(但最理想的应该是缩短触发信号的时长,这样T触发器的时钟频率才能更快,按键控制的效果才会更好)。再通过或门和与门连接开关和按键对闹铃进行具体控制。
- 音乐发生模块:使用verilog编写音乐发生模块的代码,首先定义一个时钟模块,用于控制音乐的节奏和节拍,创建一个存储音符频率的lookup表,根据不同的音符找到对应的频率值,使用计数器来控制音符的持续时间,使得每个音符能够按照给定的节拍持续一定时间。将频率值输出到声音发生器,通过调整音高和持续时间,编写出一段音乐代码。
- 设计结果:
闹钟时间设定模块原理图
保持模块原理图
比较模块原理图
COM_4 模块原理图
3.2 手动校时
简要说明:原理就是手动按键产生一个时钟脉冲使得计数器数值加一,要注意按键的消抖。
3.3 一键清零
简要说明:将原本的进位清零端通过一个或门将进位清零和按键输入一起接入模60计数器的清零端口,这样就可以实现按键控制清零。
3.4 时钟频率选择
简要说明:使用74151数据选择器,芯片输入不同频率的时钟信号,两个开关控制选通地址。
3.5 数码管“6”“9”补段显示
简要说明:在7448芯片输入端使用若干个与门检测6和9的8421码,当检测到6和9时与门输出高电平通过或门输出,这样就可以避免影响到其他数字,实现补段。
4. 提醒
本文主要是为了记录本次期末作业,受作者水平限制,可能存在一些问题,若要参考请谨慎。
相关文章:
数电实验期末作业——基于FPGA的数字时钟设计
1. 概述 本系统主要完成数字电子钟的以下功能: 1.计时功能(24小时) 2.闹钟功能(设置闹钟以及到时播放音乐) 3.校时功能 4.其他简单功能(清零、输入频率选择(1hz、500hz、5khz)、…...
hdfs命令(三)- hdfs 管理命令(三)- hdfs dfsadmin命令
文章目录 前言一、hdfs分布式文件系统管理命令1. 介绍2. 语法及解释3. 命令3.1 生成HDFS集群的状态报告3.1.1 语法及解释3.1.2 示例 3.2 重新加载配置文件并更新NameNode中的节点列表3.3 刷新指定DataNode上的NameNode信息3.3.1 语法 3.4 获取并显示指定DataNode的信息3.4.1 语…...
TCP off-path exploits(又一个弄巧成拙的例子)
承接前面几篇文章的观点,本文用一个安全攻击的例子说明为了解决一个伤害很低的低概率问题,会引入多么大的麻烦,这次是可怕的被攻击 (⊙o⊙)。 TCP 端口号只有 16bit,序列号只有 32bit,这意味着在强大攻击算力面前&…...
Docker【初识Docker】
目录 为什么会出现Docker这门技术喃? 应用开发和部署的困境 容器技术的先兆 Docker 的出现:简化容器化 Docker 技术的关键创新: Docker 的广泛应用和变革 什么是 Docker? Docker的历史 早期背景:容器化和虚拟化…...
开机存活脚本
vim datastadard_alive.sh #!/bin/bashPORT18086 # 替换为你想要检查的端口号 dt$(date %Y-%m-%d)# 使用netstat检查端口是否存在 if netstat -tuln | grep -q ":$PORT"; thenecho "$dt Port $PORT is in use" > /opt/datastadard/logs/alive.log# 如…...
【elementplus】中文模式
设置中文 <el-date-picker v-model“userAddKey” type“daterange” style“width: 240px” start-placeholder“Start Date” end-placeholder“End Date” change“handleUserAddChange” /> 引入: import zhCn from “element-plus/es/locale/lang/zh-cn”…...
【Docker命令】如何使用`docker exec`在容器内执行命令
大家好,今天我们来聊聊Docker容器管理中的一个非常有用的命令:docker exec。在日常工作中,我们经常需要在运行中的Docker容器内执行各种命令,docker exec正是帮助我们实现这一需求的利器。下面我将通过一个简单的例子,…...
FPGA的DMA应用——pcileech
硬件通过pcie总线,访存本机的内存,并进行修改,可以进行很多操作。 学习视频:乱讲DMA及TLP 1-pcileech项目简介和自定义模块介绍_哔哩哔哩_bilibili vivado2024.1的下载文章链接和地址:AMD-Xilinx Vivado™ 2024.1 现…...
前后端数据交互
一、后端部分 1.创建Spring Boot项目:在IDEA中创建一个Spring Boot项目,引入必要的依赖。 2.编写Controller层:在Spring Boot项目中创建Controller,用于处理前端的请求和响应数据。 RestController RequestMapping("/demo/s…...
将现有Web 网页封装为macOS应用
文章目录 方式一:Unite for macOS方式二:Web2Desk方式三:Nativefier方式四:Flutter Flutter WebView Plugin总结 方式一:Unite for macOS Unite 是一款专为 macOS 设计的工具,可以将任意 Web 页面快速封装…...
代码随想录Day52 101. 孤岛的总面积,102. 沉没孤岛,103. 水流问题,104.建造最大岛屿。
1.孤岛的总面积 卡码网:101. 孤岛的总面积(opens new window) 题目描述 给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格…...
Python毕业设计选题:基于Python的社区爱心养老管理系统设计与实现_django
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 身体健康界面 公共书籍界面 借阅信息界面 归还…...
逆袭之路(11)——python网络爬虫:原理、应用、风险与应对策略
困厄铸剑心,逆袭展锋芒。 寒苦凝壮志,腾跃绘华章。 我要逆袭。 目录 一、引言 二、网络爬虫的基本原理 (一)网络请求与响应 (二)网页解析 (三)爬行策略 三、网络爬虫的应用领…...
【Rust自学】7.3. 路径(Path)Pt.2:访问父级模块、pub关键字在结构体和枚举类型上的使用
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 7.3.1. super 我们可以通过在路径开头使用super来访问父级模块路径中的内容,就像使用..语法启动文件系统路径。例如ÿ…...
wangEditor富文本插件在vue项目中使用和媒体上传的实现
wangEditor是前端一个比较流行的简洁易用,功能强大的前端富文本编辑器,支持 JS Vue React,提供了很多丰富的功能,下面手把手教你实现wangWditor富文本插件在vue项目中配置,保存、图片上传等功能。无脑ctrlc即可 基本功…...
FFmpeg 的常用API
FFmpeg 的常用API 附录:FFmpeg库介绍 库介绍libavcodec音视频编解码核心库编码 (avcodec_send_frame, avcodec_receive_packet)。解码 (avcodec_send_packet, avcodec_receive_frame)。libavformat提供了音视频流的解析和封装功能,多种多媒体封装格式&…...
【软件】教务系统成绩提交工具使用步骤
【软件】教务系统成绩提交工具使用步骤 零、快速开始 安装 与大多数软件一样,安装步骤很简单,一直点击“下一步”即可快速完成安装,安装完成后,在桌面会有一个软件图标,双击即可打开软件主界面。 导入成绩到Excel中…...
es快速扫描
介绍 Elasticsearch简称es,一款开源的分布式全文检索引擎 可组建一套上百台的服务器集群,处理PB级别数据 可满足近实时的存储和检索 倒排索引 跟正排索引相对,正排索引是根据id进行索引,所以查询效率非常高,但是模糊…...
埃斯顿机器人程序模版案例,欢迎指点
埃斯顿机器人程序模版案例,欢迎指点...
解锁成长密码:探寻刻意练习之道
刻意练习,真有那么神? 在生活中,你是否有过这样的困惑:每天苦练英语口语,可一到交流时还是支支吾吾;埋头苦学吉他,却总是卡在几个和弦转换上;工作多年,业务能力却似乎陷入…...
对外发PDF设置打开次数
在线 Host PDF 文件并对链接进行限制——保障文件安全的最佳解决方案 在数字化办公和远程协作日益普及的今天,如何安全高效地分享 PDF 文件成为许多用户关注的重点。MaiPDF 作为一款功能强大的在线工具,不仅支持在线 host PDF 文件,还提供多…...
【Linux命令】su、sudo、sudo su、sudo -i、sudo -l的用法和区别
su 命令 su (Switch User 切换用户),允许用户切换到另一个用户的身份,默认情况下是切换到 root 用户。 默认行为:如果只运行 su,则系统会要求输入 root 用户的密码来切换到 root 用户,获取管理员权限。 切换到其他用…...
leetcode hot 100搜索回溯
39. 组合总和 已解答 中等 相关标签 相关企业 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candi…...
记录-->为2025添砖java的第二天
如何在java中创建自己的方法呢,我认为它和在C语言c里面写函数就没啥区别,(⊙﹏⊙),可能有一点点就是说public static int add(int a,int b){}就是得和main方法里面的状态一致。 import java.util.Scanner; public class Math3 {public stati…...
uniapp小程序实现弹幕不重叠
uniapp小程序实现弹幕不重叠 1、在父组件中引入弹幕组件 <template><!-- 弹幕 --><barrage ref"barrage" class"barrage-content" reloadDanmu"reloadDanmu"></barrage> </template> <script>import barr…...
拼多多纠偏,能否实现买卖平权?
科技新知 原创作者丨江蓠 编辑丨蕨影 当曾将仅退款、运费险作为标配的电商平台们开始听到商家诉求,有意优化营商环境,作为“仅退款”服务发起者的拼多多也坐不住了。 在推出一揽子减免计划讨好中小商家之后,拼多多近期被传正在内测精选用户…...
【Leetcode】3159. 查询数组中元素的出现位置
文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接🔗 给你一个整数数组 nums ,一个整数数组 queries 和一个整数 x 。 对于每个查询 q u e r i e s [ i ] queries[i] queries[i] ,你需要找到 n u m s nums nu…...
PHP语言laravel框架中基于Redis的异步队列使用实践与原理
在 Laravel 中,基于 Redis 的异步队列是通过 Laravel 的队列系统与 Redis 服务结合来实现的。这种队列机制允许你将任务推送到队列中,并由后台工作进程异步处理这些任务。这样,你就可以将耗时的操作(如发送邮件、处理视频、数据同…...
Element-plus自动导入
安装 npm i element-plus 自动引入 1. 安装两个插件 npm install -D unplugin-vue-components unplugin-auto-import2. 配置插件 vue3项目修改vite.config.js,把两个插件添加入即可,注意:不是覆盖原有配置 Vite // vite.config.js import { define…...
贪心算法(常见贪心模型)
常见贪心模型 简单排序模型 最小化战斗力差距 题目分析: #include <bits/stdc.h> using namespace std;const int N 1e5 10;int n; int a[N];int main() {// 请在此输入您的代码cin >> n;for (int i 1;i < n;i) cin >> a[i];sort(a1,a1n);…...
碰一碰发视频后端源码技术开发详解,支持OEM
一、引言 碰一碰发视频作为一种新颖的交互方式,在前端为用户带来便捷体验的同时,后端技术起着至关重要的支撑作用。后端负责管理视频资源、处理 NFC 标签信息与视频的关联逻辑、用户数据的存储与分析以及与前端的高效通信,确保整个系统稳定、…...
Python vs PHP:哪种语言更适合网页抓取
本文将比较 Python 和 PHP,以帮助读者确定哪种语言更适合他们的需求。文章将探讨两种语言的优点和缺点,并根据读者的经验水平分析哪种语言可能更容易上手。接下来,文章将深入探讨哪种语言在抓取网页数据方面更胜一筹。 简而言之,…...
SpringBoot 新特性
优质博文:IT-BLOG-CN 2.1.0新特性最低支持jdk8,支持tomcat9 对响应式编程的支持,spring-boot-starter-webflux starter POM可以快速开始使用Spring WebFlux,它由嵌入式Netty服务器支持 1.5.8 2.1.0/2.7.0/3.0.0 Configuration propertie…...
NAT 技术如何解决 IP 地址短缺问题?
NAT 技术如何解决 IP 地址短缺问题? 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 随着互联网的普及和发展,IP 地址的需求量迅速增加。尤其是 IPv4 地址&…...
微积分复习(微分方程)
1,一阶微分方程 可分离的微分方程: 可以把x和y分列等号两边,然后求积分可以解决 齐次方程和准齐次方程 要求是 :yf(y/x),也就是没有单独的x项,我们可以通过设ty/x来统一变量方便我们运算 准齐次方程就是常数项不统一,我们可以将Xxa,Yyb来消灭常数项进而转化为齐次形式…...
动态规划子序列问题系列一>等差序列划分II
题目: 解析: 1.状态表示: 2.状态转移方程: 这里注意有个优化 3.初始化: 4.填表顺序: 5.返回值: 返回dp表总和 代码: public int numberOfArithmeticSlices(int[] nums) {in…...
【连续学习之SSL算法】2018年论文Selfless sequential learning
1 介绍 年份:2018 期刊: arXiv preprint Aljundi R, Rohrbach M, Tuytelaars T. Selfless sequential learning[J]. arXiv preprint arXiv:1806.05421, 2018. 本文提出了一种名为SLNID(Sparse coding through Local Neural Inhibition and…...
【FastAPI】中间件
【FastAPI】中间件 一、概述二、作用2.1 日志记录与监控2.2 身份验证与授权2.3 CORS(跨域资源共享)2.4 Gzip压缩2.5 会话管理2.6 自定义功能2.7 执行顺序 三、 总结四、相关链接 一、概述 FastAPI的中间件提供了一种强大的机制,允许开发者在…...
文档大师:打造一站式 Word 报告解决方案1
前言 在政府、医院、银行、财务以及销售等领域,常常需要创建各种报告文件来展开工作汇报,譬如季度销售报告、年度总结报告、体检报告和保险合同等。在没有报表工具支持之前,这类报告主要通过 Word 制作,费时费力且难以维护&#…...
再谈c++线性关系求值
目的 线性关系是最简单的一种关系,在编程当中应用非常多,所以,再说一次线性关系。 线性关系的定义是这样的: 两个变量之间存在一次方函数关系,就称它们之间存在线性关系。正比例关系是线性关系中的特例,反…...
【ES6复习笔记】Class类(15)
介绍 ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。基本上,ES6 的 class 可以看作只是一个语法糖,它的绝大部分功能,…...
AppAgent 源码 (xml 解析)
1. 数据准备 adb shell uiautomator dump /sdcard/output.xml # 获取手机ui界面的xml文件 adb pull /sdcard/output.xml output.xml # 将手机上的xml文件拉取到电脑上具体的xml文件: <?xml version1.0 encodingUTF-8 standaloneyes ?> <hierarchy ro…...
Oracle 11G还有新BUG?ORACLE 表空间迷案!
前段时间遇到一个奇葩的问题,在开了SR和oracle support追踪两周以后才算是有了不算完美的结果,在这里整理出来给大家分享。 1.问题描述 12/13我司某基地MES全厂停线,系统卡死不可用,通知到我排查,查看alert log看到是…...
FreeSwitch中启用WebRTC
在FreeSwitch中启用WebRTC需要进行一系列配置。以下是详细的步骤: 1. 安装必要的依赖: 确保安装了支持WebRTC的依赖库,如libsrtp。 2. 配置SIP Profile: 编辑 conf/sip_profiles/internal.xml 文件,添加或修改以下内…...
力扣矩阵-算法模版总结
lc-73.矩阵置零-(时隔14天)-12.27 思路:(23min22s) 1.直接遍历遇0将行列设0肯定不行,会影响后续判断,题目又要求原地算法,那么进一步考虑是否可以将元素为0,其行列需要设为0的位置给存储下来,最后再遍历根据…...
服务端高并发分布式结构演进之路
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 服务端高并发分布式结构演进之路 收录于专栏[redis] 本专栏旨在分享学习Redis的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 概述 …...
虚拟机桥接模式
主机Win10,虚拟机xp 1.虚拟机设置中选择桥接模式 2.在虚拟机菜单:编辑>虚拟机网络编辑,点击“更改设置”,可以看到三个网卡,这三个网卡分别对应不同的网络共享模式。桥接模式须使用VMnet0,如果没看到这个网卡&…...
JVM调优实践篇
理论篇 1多功能养鱼塘-JVM内存 大鱼塘O(可分配内存): JVM可以调度使用的总的内存数,这个数量受操作系统进程寻址范围、系统虚拟内存总数、系统物理内存总数、其他系统运行所占用的内存资源等因素的制约。 小池塘A&a…...
SpeedTree学习笔记总结
SpeedTree是一款业界领先的三维树木植被建模软件,特别适用于游戏开发和影视制作。 一、基础操作 旋转:鼠标左键 平移:鼠标中键 缩放:鼠标中键滚动 Trunks树干节点 Branches树枝 Cap给树干封口 Frond创建大树叶 Decorations…...
【MuJoCo和PhysX】
MuJoCo 与 Unity 的 PhysX 引擎的主要区别 应用领域: MuJoCo:主要用于机器人学、强化学习、生物力学等领域,擅长处理多自由度、复杂动力学问题,尤其适合进行高精度的物理仿真。 Unity PhysX:主要用于游戏开发、虚拟现…...