数电实验期末作业——基于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
  1. 模块功能:可实现8通道、宽度7的信号输入,由地址位控制从8通道中选择一个通道输出信号。
  2. 设计思路:调用系统库中的LPM_MUX进行操作,设定为8个通道且通道宽度为7,将引脚全部引出,最后编译封装。
  3. 设计结果:
2.6 译码模块(有补段功能)decoder 
  1. 模块功能:将4位8421码通过7448芯片转成数码管能显示的编码。
  2. 设计思路:计数器输出的秒、分、时的个位和十位的8421码输入到译码模块,通过7448芯片就可以将这些8421码编译为数码管显示对应数字的数码。
  3. 设计结果:

                         

 3. 其它拓展功能

3.1 闹钟设定(到设定的时间播放音乐闹铃)
  • 模块功能:大模块内包含四个小模块,分别为闹钟时间设定模块、比较模块、音乐发生模块以及保持模块。
  1. 闹钟时间设定模块:可以通过SW1控制闹钟设定的开启和关闭,在开启状态下,可通过KEY3、KEY0、KEY1分别对闹钟的秒、分、时进行设定。
  2. 比较模块:不断比较闹钟设定的时间和数字时钟的当前时间信号,当信号相同时,输出一个高触发电平。
  3. 保持模块:接收比较模块产生的高触发电平信号,SW2可控制闹钟的开关,KEY2可控制闹钟铃声的暂停或开始。
  4. 音乐发生模块:按一定的顺序输出特定频率的信号(一首歌)。
  • 设计思路:先分别封装好所需要的模块,将时钟模块和闹钟设定模块的输出接入到比较模块,然后将比较模块的输出接到保持模块,同时要将音乐模块的输出接到保持模块,那么接下来就可以通过操控按键和开关控制闹钟的开启、暂停。每个模块的具体设计思路如下:
  1. 闹钟时间设定模块:通过按键控制模60和模24计数器,再将输出接到演示模块上,就可以在数码管上观察自己设定的闹钟时间。因按键会存在抖动,因此需要用D触发器级联进行消抖操作。
  2. 比较模块:基本思想就是使用同或逻辑门,因比较模块需要对多组数据进行比较,且数据的宽度不为一,因此需要在内部集成多个同或门,实现对多组宽数据的比较。
  3. 保持模块:要首先考虑闹钟的暂停不是简单的关闭闹钟的开关,若只是关闭开关,并不能很好符合实际,若下次再次开启闹钟开关,闹铃会立即产生,不符合正常操作。因此另外设计了一个按键,可以实现暂停闹钟的功能。综合考虑以上因素,选择T触发器(遇1反转,遇0保持)进行设计。因为比较模块产生的触发信号会维持1秒,因此T触发器的时钟频率不能大于1hz(但最理想的应该是缩短触发信号的时长,这样T触发器的时钟频率才能更快,按键控制的效果才会更好)。再通过或门和与门连接开关和按键对闹铃进行具体控制。
  4. 音乐发生模块:使用verilog编写音乐发生模块的代码,首先定义一个时钟模块,用于控制音乐的节奏和节拍,创建一个存储音符频率的lookup表,根据不同的音符找到对应的频率值,使用计数器来控制音符的持续时间,使得每个音符能够按照给定的节拍持续一定时间。将频率值输出到声音发生器,通过调整音高和持续时间,编写出一段音乐代码。
  •  设计结果:

                                                 闹钟时间设定模块原理图

                                                 保持模块原理图

                                                比较模块原理图 

                                                 COM_4 模块原理图

3.2 手动校时

简要说明:原理就是手动按键产生一个时钟脉冲使得计数器数值加一,要注意按键的消抖。

3.3 一键清零

 简要说明:将原本的进位清零端通过一个或门将进位清零和按键输入一起接入模60计数器的清零端口,这样就可以实现按键控制清零。

3.4 时钟频率选择

简要说明:使用74151数据选择器,芯片输入不同频率的时钟信号,两个开关控制选通地址。

3.5 数码管“6”“9”补段显示

 简要说明:在7448芯片输入端使用若干个与门检测6和9的8421码,当检测到6和9时与门输出高电平通过或门输出,这样就可以避免影响到其他数字,实现补段。

4. 提醒

本文主要是为了记录本次期末作业,受作者水平限制,可能存在一些问题,若要参考请谨慎。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值