logo资料库

数字钟实验报告数字钟实验报告数字钟实验报告数字钟实验报告.doc

第1页 / 共22页
第2页 / 共22页
第3页 / 共22页
第4页 / 共22页
第5页 / 共22页
第6页 / 共22页
第7页 / 共22页
第8页 / 共22页
资料共22页,剩余部分请下载后查看
数 字 电 子 技 术 课 程 设计报告 班级: 学号: 姓名: 指导老师: 2007 年 11 月 28 日
目录 一. 实验名称 二. 实验要求和目的 三. 实验环境 四. 功能说明 五. 设计方案 六. 设计实验图 七. 模块代码及试图 八. 局部功能解释与设计 九. 心得体会 十. .参考文献
一. 实验名称 简易数字钟. 二. 实验要求和目的 1. 要求: (1).能惊醒正常的时,分,秒计时功能,分别由 6 个数码管显示 24h,60min,60s (2).按下 sa 键时,计时器迅速增加,并按 24h 循环,计满 23h 后再回 00. (3).按下 sb 键时,计时器迅速增加,并按 60min 循环,计满 59min 后再回 00,但不响”时” 进位. (4).利用实验装置上的蜂鸣器作整点报时,当计时到达 59’50”时开始报时,在 59 分钟 的第“50”、“52”、“54”、“56”,”58”秒报时,报时频率选 500Hz;在 59 分钟的第“60” 秒,整点报时,报时频率选 1KHz。 2.目的:掌握各类计数器以及它们相连的设计方法;掌握多个数码管显示的原理与方法; 掌握 FPGA 计时的层次化设计方法;掌握使用 VHDL 语言的设计思想;对整个系统的设计有一个 了解.. 三 、实验环境: 1. 软件环境:Quartus II 4.2 2. 硬件环境:硬件平台 LP-2900,FPGA 芯片为 EPF10K10TC144-4 3. 本实验除时钟源、按键、扬声器和显示器(数码管)之外的所有数字电路功 能都是用 VHDL 语言实现的。这样设计具有体积小、设计周期短(设计过程 中即可实现时序仿真)、调试方便、故障率低、修改升级容易等特点。本设计
采用自顶向下、混合输入方式(原理图输入——顶层文件连接和 VHDL 语言输 入——各模块程序设计)实现数字钟的设计、下载和调试. 四、功能说明: 1. 完成秒/分/时的依次显示并正确计数; 2. 定时闹钟:实现整点报时,由蜂鸣器发出报时声音; 3. 设置时间:可以通过按键分别对分/时钟进行调整,通过 PS1 对秒进行清 零。 五、设计方案: 1. 数字钟顶层设计 1. 外部输入要求:输入信号有 10mHz 时钟信号, 低电平有效的秒清零信号 CLR、 高电平有效的调分信号 sa、高电平有效的调时信号 sb; 2. 外部输出要求:整点报时信号 bbb(59 分”50”,”54”,”56”,”58”秒时未 500Hz 低频声, 59 分 60 秒时为 1kHz 高频声)、时十位显示信号 t1(a,b,c,d,e,f,g)、时个位显示信号 t0(a ,b,c,d,e,f,g)、分十位显示信号 m1 及分个位 m0、秒十位 s1 及秒个位 s0;数码管 显示位选信号 SEL0/1/2 等三个信号。 设计概要图:
模块: 1. mian: 该模块为 60 进制计数器,计时输出为秒的数值.在计时 到 59 时送到进位信号 CO,因为硬件有延时,所以模块 MINA 在此模块变为 00 时加 1,符合实际. 2. MINA: 该模块为 60 进制计数器,计时输出为分的数值.在 EN 信号有效时数钟到来时,计数器加 1.在 sb 按下时,EN 信号有效,计数值快速增加,从而实现对分钟的设置.
3. HOUR: 该模块为 24 禁止计数器,计时输出小时的数值. 4. SST:此模块为整点报时提供控制信号. 5. BBB:该模块对应不同的片选信号送出不同的要显示的数 据 6. Sel:该模块提供数码管片选信 7. FEN10:这个模块时实现十分频 8. DISP:它是七段译码器. 9. CCC:输入为 10MHz 方波,输出为 500Hz 和 1KHz 的方波. 六.实验设计图:
七.模块及模块功能: 1. 模块 mian. 该模块为 60 进制计数器,计时输出为秒的数值.在计时 到 59 时送到进位信号 CO,因为硬件有延时,所以模块 MINA 在此模 块变为 00 时加 1,符合实际.
模块代码: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity mian is port(clk,clr:in std_logic; sec1,sec0:out std_logic_vector(3 downto 0); co:out std_logic); end mian; architecture mian_arc of mian is begin process(clk,clr) variable cnt1,cnt0:std_logic_vector(3 downto 0); begin if clr='1'then cnt1:="0000"; cnt0:="0000"; elsif clk'event and clk='1'then if cnt1="0101" and cnt0="1000"then co<='1'; cnt0:="1001"; elsif cnt0<"1001"then cnt0:=cnt0+1; else cnt0:="0000"; if cnt1<"0101"then cnt1:=cnt1+1; else cnt1:="0000"; co<='0'; end if; end if; end if; sec1<=cnt1; sec0<=cnt0; end process; end mian_arc;
分享到:
收藏