数字时钟设计实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
院系:物理与电子工程学院专业:电子信息工程
班级:2008级3班
指导老师:***
*名:**
学号:************ 实验时间:2010年12月10日
前言
本设计为一个多功能的数字钟,具有时、分、秒计数显示功能,以24小时循环计数;具有校对功能及整点报时功能。
本设计采用EDA技术,以硬件描述语言VHDL为系统逻辑描述手段设计文件,在MAXPLUSⅡ工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的数字钟。
系统主芯片采用EP1K3QC208-3,由时钟模块、控制模块、计时模块、数据译码模块、显示及报时模块组成。经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成时、分、秒的分别显示,由按键输入进行数字钟的校对、清零、启停功能。
数字时钟实验设计
一、实验目的
1.掌握十进制,六进制,二十四进制计数器以及译码器的设计方法。
2.掌握多位计数器相连的设计方法。
3. 掌握多位数码管扫描显示驱动的设计方法。
4. 掌握EDA技术的层次化设计方法。
5、了解数字时钟的组成及工作原理。
6、熟悉数字时钟的设计与制作。
二、实验内容
1. 设计具有时,分,秒,计数显示功能,以24小时循环计时的电子钟。
2. 设计电子钟复位清零功能。
3. 设计调节小时、分钟、秒功能。
三、实验仪器
1. EDA实验箱
2. 导线若干
3.max+plu2软件
四、设计思路
1.要完成秒/分/时的各阶段的正确进位,就要设计两个60进制和一个24进制,为了更加给数字钟一个完善的功能,还设置了一个清零功能和校时、校分。
2. 要依次显示秒/分/时,就要连接数码管,共六个数码管一个数码管要七根输入线,故六个数码管共要42根输出线,不紧接线复杂而且浪费本钱,故我们采用动态扫描驱动显示秒/分/时。
3.总体结构图如图所示(1-1)。
五.数字钟的工作原理
振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数。计数满后各计数器清零,重新计数。计数器的输出分别经译码器送数码管显示。计时出现误差时,可以用校时电路校时、校分。控制信号由1×5矩形键盘输入。时基电路可以由石英晶体振荡电路构成,假设晶振频率1MHz,经过6次十分频就可以得到秒脉冲信号。译码显示电路由八段译码器完成。
用counter6无进位六进制计数器选择数码管的亮灭以及对应的数,循环扫描显示,用dout六选一选择器选择给定的信号输出对应的数送到七段码译码器。由按键输入清零/校时、分信号经按键消抖动模块,再输入到秒计时器、时计时器,最后输入到显示译码控制模块。
六.单元模块设计部分
单元模块分别由五个模块组成。译码器的设计、六进制的设计、十进制的设计、二十四进制的设计和时钟扫描控制端的输出共五个模块组成。
1.译码器模块的设计
显示译码控制器的输入均为8421BCD码,分别是秒计数器的输出秒十位、秒个位;分计数器的输出分十位、分个位;时计数器的输出时十位、时个位;还有一个分频器输出的512Hz的时钟信号作为扫描的时钟,显示译码控制器的输出为8位段码信号及6位的数码管选择信号。具体实现的程序如下:library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity decoder is
Port (din:in std_logic_vector(3 downto 0 ); --四位二进制码输入dout:out std_logic_vector(6 downto 0) ); --输出LED七段码
end decoder;
architecture Behavioral of decoder is
begin
process(din)
begin
case din is
when "0000" => dout<="0111111";--0
when "0001" => dout<="0000110";--1
when "0010" => dout<="1011011";--2
when "0011" => dout<="1001111";--3
when "0100" => dout<="1100110"; --4
when "0101" => dout<="1101101";--5
when "0110" => dout<="1111101";--6
when "0111" => dout<="0000111";--7
when "1000" => dout<="1111111";--8
when "1001" => dout<="1101111";--9
when others => dout<="1110111";
end case;
end process;
end Behavioral;
2.六进制模块的设计
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity counter6 is
Port ( clk : in std_logic;
reset : in std_logic;
dout : out std_logic_vector(3 downto 0);
c:out std_logic);
end counter6;
architecture Behavioral of counter6 is
signal count : std_logic_vector(3 downto 0);
begin
dout <= count;
process(clk,reset)
begin
if reset= '0' then
count <= "0000";