EDA课程设计--带有整点报时的数字钟设计与制作
- 格式:doc
- 大小:83.00 KB
- 文档页数:17
EDA课程设计数字钟(综合课程设计)一、设计要求(数字钟的功能)1、具有时、分显示功能(用数码管显示)。
以二十四小时循环计时。
2、具有清零,调节小时,分钟的功能。
3、具有整点(正小时)报时同时用多颗LED灯花样显示秒的功能。
4、运用多层次化设计方式,底层元件用VHDL编写,顶(最高)层元件用原理图法连线。
5、写出课程设计报告,包括设计源程序代码、顶层原理图及必要的文字说明。
二、目的1、掌握多位计数器相连的设计方法。
2、掌握十进制,六进制,二十四进制计数器的设计方法。
3、掌握扬声器的驱动及报时的设计。
4、LED灯的花样显示。
5、掌握CPLD技术的层次化设计方法。
三、硬件要求1、主芯片Altera EPF10K10LC84-4。
2、8个LED灯。
3、扬声器。
4、4位数码显示管。
5、8个按键开关(清零,调小时,调分钟)。
四、实验原理在同一CPLD芯片上集成了如下电路模块:1、时钟计数:秒……60进制BCD码计数。
分……60进制BCD码计数。
时……24进制BCD码计数。
同时整个计数器有清零、调时、调分功能。
在接近整数时能提供报时信号。
2、扬声器在整点时有报时驱动信号产生(响声持续多长时间?)。
3、LED灯按个人口味在整点时有花样显示信号产生。
五、实验内容及步骤1、根据电路特点,运用层次设计概念设计。
将此设计任务分成若干模块,规定每一模块的功能和各模块之间的接口。
加深层次化设计概念。
2、了解软件的元件管理深层含义,以及模块元件之间的连接概念,对于不同目录下的同一设计,如何熔合。
六、顶层原理图参考下图所示(模块化设计)。
EDA课程设计报告电子钟EDA课程设计报告——数字钟设计班级:学号:姓名:一、设计任务设计一台能显示时、分、秒的数字钟。
具体要求如下:(1)由实验箱上的时钟信号经分频产生秒脉冲;(2)计时计数器用24进制计时电路;(3)可手动校时, 能分别进行时、分的校正;(4)整点报时;选做: 可设置闹时功能, 当计时计到预定时间时, 扬声器发出闹铃信号, 闹铃时间为4s, 并可提前终止闹铃。
二、试验目的(1)掌握时十进制、六进制和二十四进制计数器的设计方法。
(2)掌握多位计数器相连的设计方法。
(3)掌握多位共阴极扫描显示数码管的驱动及编码。
三、总体设计方案本数字系统实现数字钟的基本的计时功能, 输入8Hz的时钟, 经过分频产生1Hz的时钟信号, 采用24/12小时制计时, 能显示时、分、秒。
本系统还具有校正功能, 能够进行时分的校时, 当计时器运行到59分59秒开始报时, 另外还能够设定闹钟, 当按下闹铃开关时, 可在规定时间闹铃, 当开关复位时, 闹铃停止。
本数字钟实际上是一个对频率(1Hz)进行计数的计数电路。
由于计数的起始时间不可能与标准时间一致, 故需要在电路上加一个校时电路, 同时分频后的1Hz时间信号必须做到准确稳定。
一般使用石英晶体振荡器电路构成数字钟。
数字钟的基本组成本数字钟的实现可分为以下几个模块:(1) 秒计数模块: 秒计数, 在频率为1Hz的时钟下以60次为循环计数, 并产生进位信号影响分计数;(2) 分计数模块: 分计数, 在秒进位信号为高电平时, 计数一次, 同样以60次为一个循环计数, 同时产生分进位信号影响时计数;(3) 时计数模块: 时计数, 在分进位信号为高电平时, 计数一次, 以24/12次为一个循环计数;(4) 频率产生模块: 产生8Hz的计数频率, 经过分频得到1Hz 频率;(5) 时间显示模块: 数码管经过动态显示, 同时进行一定频率的扫描显示时, 分, 秒。
(6) 时间设置模块: 设置调试使能端, 能够调时, 分, 秒。
EDA技术应用课程设计报告题目名称:多功能数字钟专业班级:姓名:学号:小组成员:指导教师:设计时间: 15-12-01~15-12-25 一、设计目的1.使得更加了解EDA的应用2.熟悉VHDL的编程。
3.对于编程语句的编辑与纠错有较大的提升4.提升对于设计方面的能力二、设计要求1.数字钟具有“时”、“分”、“秒”显示功能,其中时功能为24小时制。
2.数字钟具有校时和校分功能。
3.数字钟具有整点报时功能。
三、设计方案通过分别作出秒模块、分钟模块、小时模块、整点报时模块,导入动态扫描模块,再由其输出到数码管输出。
四、模块设计1.秒程序模块①有3输入3输出②reset为异步清零当没有信号时清零秒模块的计数③setmin为校分当有信号时想分模块进一位④daout_a与daout_b为输出的信号分别为秒的高位与低位⑤enmin 负责向下一个模块进位⑥clk为时钟信号2.分钟程序模块②3输入3输出②reset为异步清零当没有信号时清零分模块的计数③sethour为校分当有信号时向时模块进一位④daout_ma 分daout_mb 为输出的信号分别为分的高位与低位⑦enhour 负责向下一个模块进位⑧clk为时钟信号3.小时程序模块有2输入2输出②reset为异步清零当没有信号时清零时模块的计数③clk为时钟信号⑤daout_ha daout_hb 为输出的信号分别为时的高位与低位4.动态扫描模块①有八个输入端,两个输出端②reset为异步清零当没有信号时清零时模块的计数③daout为高位5.七段译码管模块①有1输入8输出②S为用来接收秒分时模块输出的信号③A~H 为转化后的信号用来接数码管6.整点报时模块①有5输入2输出②Clkspk为时钟信号③Miao_h Miao_lfen_hfen_h为从秒模块时模块接收的信号④Speak 接蜂鸣器,⑤Lamp 接LED作为报时时的闪烁灯五、模块程序1.秒模块设计(60计时制)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shijian isport(reset,clk,setmin:in std_logic;daout_a:out std_logic_vector(7 downto 4);————输出高位daout_adaout_b:out std_logic_vector(3 downto 0); ————输出低位daou_benmin:out std_logic);————enmin是向分位进位信号end shijian;architecture behav of shijian issignal count:std_logic_vector(3 downto 0);signal counter:std_logic_vector(3 downto 0);signal carry_out1:std_logic;————59秒时的进位信号signal carry_out2:std_logic;beginp1:process(reset,clk)beginif reset='0'then——59秒时的进位信号count<="0000";counter<="0000";——若reset为0时,则高、低位异步清零elsif(clk'event and clk='1')then——否则clk为上升沿时if(counter<5)thenif(count=9)thencount<="0000"counter<=counter+1;elsecount<=count+1;end if;carry_out1<='0';——若高位counter<5,低位count=9,则低位清零,高位进一,否则低位进一,59秒时的进位信号carry_out1为0。
eda整点报时程序课程设计一、课程目标知识目标:1. 学生能理解EDA(电子设计自动化)的基本概念,掌握整点报时程序的设计原理;2. 学生能够运用所学知识,设计并实现一个简单的整点报时程序;3. 学生了解时钟信号的产生与处理方法,理解程序中的时间计算方法。
技能目标:1. 学生能够运用EDA软件进行电路设计和程序编写,具备实际操作能力;2. 学生通过课程实践,提高问题分析、程序调试和优化能力;3. 学生能够运用所学技能,解决实际生活中的时间显示问题。
情感态度价值观目标:1. 学生培养对电子设计自动化技术的兴趣,激发创新意识;2. 学生在课程实践中,培养团队合作精神和沟通能力,增强自信心;3. 学生认识到科技对生活的改变,增强社会责任感和使命感。
课程性质:本课程为电子信息类课程,旨在让学生掌握EDA技术的基本原理和应用,培养实际操作能力。
学生特点:学生具备一定的电子技术基础知识,对编程和设计有一定了解,但可能缺乏实际操作经验。
教学要求:结合学生特点,课程注重实践操作,让学生在动手过程中掌握知识,提高技能,培养正确的情感态度价值观。
通过分解课程目标为具体学习成果,为教学设计和评估提供依据。
二、教学内容1. EDA技术概述:介绍EDA技术的定义、发展历程和应用领域,使学生了解EDA技术的重要性。
教材章节:第一章 电子设计自动化概述内容列举:EDA技术定义、发展历程、应用领域2. 整点报时程序设计原理:讲解时钟信号产生、处理方法,以及程序中的时间计算方法。
教材章节:第三章 时序逻辑电路设计内容列举:时钟信号产生、处理方法;时间计算方法;整点报时程序设计原理3. EDA软件操作:教授EDA软件的使用方法,包括电路设计、程序编写和仿真调试。
教材章节:第二章 EDA软件及其操作内容列举:EDA软件安装与界面;电路设计;程序编写与仿真调试4. 实践操作:指导学生进行整点报时程序的电路设计和程序编写,进行实际操作。
课程设计任务书设计题目1:数码管显示数字钟设计院(系)分管领导:教研室主任:指导教师:2017年6月23日目录第1章引言 0第2章电路原理 0第3章程序设计 (1)顶层模块设计 (2)时钟分频模块设计 (2)按键驱动模块设计 (2)时钟计数模块设计 (3)整点报时模块 (4)LED灯花腔显示模块 (5)数码管显示模块设计 (6)第4章调试、测试分析及结果 (7)调试 (7)测试分析 (8)结果 (9)第5章小结 (10)参考文献 (11)附录电路图及程序 (12)第1章引言EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从运算机辅助设计(CAD)、运算机辅助制造(CAM)、运算机辅助测试(CAT)和运算机辅助工程(CAE)的概念进展而来的。
EDA技术确实是以运算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL或Verilog HDL完成设计文件,然后由运算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直相当于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的显现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
Verilog HDL是一种描述语言,以来描述硬件的结构和行为的语言,用它能够表示逻辑电路图、,还能够表示数字逻辑系统所完成的逻辑功能。
这次课程设计咱们运用QuartusⅡ那个软件,利用Verilog HDL语言进行编程。
数字钟是一种用数字电路技术实现时、分、秒计时的钟表。
与机械钟相较具有更高的准确性和直观性,具有更长的利用寿命,已取得普遍的利用。
数字钟的设计方式有许多种,例如可用中小规模集成电路组成电子钟,也能够利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还能够利用单片机来实现电子钟等等。
这些方式都各有其特点,其中利用单片机实现的电子钟具有编程灵活,以便于功能的扩展。
EDA整点报时课程设计一、课程目标知识目标:1. 学生能理解EDA(电子设计自动化)的基本概念,掌握整点报时的原理。
2. 学生能运用所学知识,设计并实现一个简单的整点报时电路。
3. 学生了解时钟信号的基本特性,理解晶振在时钟电路中的作用。
技能目标:1. 学生通过本课程的学习,具备使用EDA软件进行电路设计和仿真的能力。
2. 学生能够运用电子元件搭建整点报时电路,并解决实际操作过程中遇到的问题。
3. 学生能够进行简单的电路调试和优化,提高电路的稳定性和准确性。
情感态度价值观目标:1. 培养学生对电子工程领域的兴趣,激发他们探索未知、勇于创新的科学精神。
2. 学生通过团队协作完成课程任务,培养合作意识,提高沟通能力。
3. 学生在课程实践中,体验到学以致用的成就感,增强自信心。
课程性质:本课程为实践性较强的课程,结合理论教学和实际操作,旨在培养学生运用EDA技术解决实际问题的能力。
学生特点:学生具备一定的电子基础知识,对新鲜事物充满好奇心,喜欢动手实践。
教学要求:教师需注重理论与实践相结合,引导学生主动参与,关注学生的个体差异,提供有针对性的指导。
通过课程学习,使学生在知识、技能和情感态度价值观方面均有所提升。
二、教学内容本课程以《电子技术》教材中关于EDA技术和时钟电路的相关章节为基础,结合以下教学内容:1. EDA技术简介:介绍EDA技术的发展、基本概念及其在电子设计中的应用。
2. 时钟信号原理:讲解时钟信号的基本特性、晶振的工作原理及其在时钟电路中的作用。
3. 整点报时电路设计:分析整点报时电路的原理,介绍常见电路元件的选用和连接方法。
4. EDA软件操作:教授EDA软件的基本操作,包括原理图绘制、电路仿真和PCB布线等。
5. 电路搭建与调试:指导学生使用电子元件搭建整点报时电路,并进行调试和优化。
教学内容安排和进度如下:1. 第1课时:介绍EDA技术及其在电子设计中的应用。
2. 第2课时:学习时钟信号原理,了解晶振的作用。
数字钟一、【课题要求】1.设计一个能显示1/10秒、秒、分、时的12小时数字钟。
2.熟练掌握各种计数器的使用。
3.能用计数器构成十进制、六十进制、十二进制等所需进制的计数器。
4.能用低位的进位输出构成高位的计数脉冲。
<注意>1、时钟源使用频率为0.1HZ的连续脉冲。
2、设置两个按钮,一个供“开始”及“停止”使用,一个供系统“复位”用。
3、时钟显示使用数码管显示。
4、“时显示”部分注意12点后显示1点。
5、注意各部分的关系,由低位到高位逐级设计、调试。
二、【分析与设计】数字钟是计数器的综合应用,数字钟由十分之一秒、秒钟、分钟、时钟组成,十分之一秒由十进制计数器74160组成,秒钟由六十进制计数器构成,分钟由六十进制计数器,时钟由十二进制计数器构成。
该数字钟程序的底层文件主要有六进制计数器模块、六十进制计数器模块和十二进制模块,对各模块进行封装,供顶层文件调用,各模块有VHDL文本设计及原理图设计。
输入端clk是连续脉冲,clrn是高电平系统复位,en是高电平使能端,输出端是十分之一秒位、秒钟个位、秒钟十位、分钟个位、分钟十位、时钟个位、时钟十位,最后由7个数码管显示各位的值。
该数字钟程序的底层文件主要有六进制计数器模块、六十进制计数器模块和十二进制模块,对各模块进行封装,供顶层文件调用,各模块有VHDL 文本设计及原理图设计。
程序框图:十分之一秒 秒钟 分钟 小时三、【程序代码及原理图】 1、六进制计数器VHDL 代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cout6 ISPORT(clk,en,clrn,load:IN STD_LOGIC;date:IN STD_LOGIC_VECTOR(2 DOWNTO 0); cnt:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); co:OUT STD_LOGIC ); END cout6;ARCHITECTURE behave OF cout6 ISSIGNAL q:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGINco<='1' WHEN((q="101")AND(en='1'))ELSE'0'; PROCESS(en,clk) BEGINIF clrn='0' THEN q<="000";ELSIF(clk'event and clk='1') THENIF load='0' THEN q<=date;ELSIF en='1' THEN q<=q+1;IF(q="101")THEN q<="000";END IF;END IF;END IF;END PROCESS;cnt<=q;END behave;波形仿真:2、六十进制计数器原理图:波形仿真:3、十二进制计数器VHDL代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cout12 ISPORT(clk,clrn,ldn,en:IN STD_LOGIC;ha:IN STD_LOGIC_VECTOR(3 DOWNTO 0); hb:IN STD_LOGIC;qa:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); qb:out STD_LOGIC);END cout12;ARCHITECTURE behav OF cout12 ISSIGNAL q:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL b:STD_LOGIC;SIGNAL a:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESS(en,clk)BEGINIF clrn='0' THENq<="0000";ELSIF(clk'event and clk='1') THEN IF ldn='0' THENb<=hb;a<=ha;ELSIF en='1' THENq<=q+1;IF(q="1011")THENq<="0000"; END IF;END IF;END IF;CASE q ISWHEN"0000"=>b<='1';a<="0010"; WHEN"0001"=>b<='0';a<="0001"; WHEN"0010"=>b<='0';a<="0010"; WHEN"0011"=>b<='0';a<="0011"; WHEN"0100"=>b<='0';a<="0100"; WHEN"0101"=>b<='0';a<="0101"; WHEN"0110"=>b<='0';a<="0110"; WHEN"0111"=>b<='0';a<="0111"; WHEN"1000"=>b<='0';a<="1000"; WHEN"1001"=>b<='0';a<="1001"; WHEN"1010"=>b<='1';a<="0000"; WHEN"1011"=>b<='1';a<="0001"; WHEN OTHERS =>NULL;END CASE;END PROCESS;qa<=a;qb<=b;END ARCHITECTURE behav;波形仿真:4、数字钟原理图:波形仿真:四、【结果与测试】根据六进制的波形图判断出六进制的设计正确,实现了0~5的计数,并且在5处产生进位,将六进制进行封装与十进制74160根据原理图设计成六十进制计数器,然后将它进行封装,根据六十进的波仿真图可以看出实现了0~59的计数,并且在59处产生进位,然后将它进行封装。
多功能数字时钟设计说明:1.系统顶层框图:各模块电路功能如下:1.秒计数器、分计数器、时计数器组成最基本的数字钟,其计数输出送7段译码电路由数码管显示.2.基准频率分频器可分频出标准的1HZ频率信号,用于秒计数的时钟信号;分频出4HZ频率信号,用于校时、校分的快速递增信号;分频出64HZ频率信号,用于对按动“校时”,“校分”按键的消除抖动.2.多功能数字钟结构框图:一、系统功能概述已完成功能1.完成时/分/秒的依次显示并正确计数,利用六位数码管显示;2.时/分/秒各段个位满10正确进位,秒/分能做到满60向前进位,有系统时间清零功能;3.定时器:实现整点报时,通过扬声器发出高低报时声音;4.时间设置,也就是手动调时功能:当认为时钟不准确时,可以分别对分/时钟进行调整;5.闹钟:实现分/时闹钟设置,在时钟到达设定时间时通过扬声器响铃.有静音模式.待改进功能:1. 系统没有万年历功能,正在思考设计方法.2. 应添加秒表功能.二、系统组成以及系统各部分的设计1.时计数模块时计数模块就是一个2位10进制计数器,记数到23清零.VHDL的RTL描述如下:----cnt_h.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt_h isport(en,clk,clr:in std_logic;dout:out std_logic_vector(7 downto 0);c:out std_logic);end cnt_h;architecture rtl of cnt_h issignal t:std_logic_vector(7 downto 0);beginprocess(en,clk,clr)variable t:std_logic_vector(7 downto 0);beginif en='1' then --异步使能if clk 'event and clk='1' thent:=t+1;if t(3 downto 0)=X"A" then --个位等于10则十位加1t(7 downto 4):=t(7 downto 4)+1;t(3 downto 0):=X"0"; --个位清零end if;if t>X"23" then --大于23清零t:=X"00";end if;end if;if clr='1' then --异步清零t:=X"00";end if;end if;dout<=t;end process;end rtl;时计数器模块仿真波形如下从仿真波形可知,当计数到23时,下一个时钟上升沿到来时就清零了,符合设计要求.时计数模块框图如下2.分及秒计数模块分及秒计数模块也是一个2位10进制计数器,记数到59清零.VHDL的RTL描述如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt_s isport(en,clk,clr:in std_logic;dout:buffer std_logic_vector(7 downto 0);c:out std_logic);end cnt_s;architecture rtl of cnt_s isbeginprocess(en,clk,clr)beginif en='1' thenif clr='1' then --异步清零dout<=X"00";elsif clk 'event and clk='1' thenif dout(3 downto 0)<9 thendout(3 downto 0)<=dout(3 downto 0)+1;c<='0';elsif dout(7 downto 4)<5 thendout(3 downto 0)<=X"0";dout(7 downto 4)<=dout(7 downto 4)+1;elsedout<=X"00";c<='1';end if;end if;else dout<="ZZZZZZZZ";end if;end process;end rtl;分和秒计数器模块仿真波形如下从仿真波形可知,当计数到59时,下一个时钟上升沿到来时就清零了,并且产生进位信号,符合设计要求.分和秒计数模块框图如下3.按键消抖动模块按键消抖动有很多方案,这里选择的是计数消抖,即只当有效电平到来后开始计数,当计数值大于一定值后再输出该有效电平,否则不输出,从而达到消抖目的. VHDL的RTL描述如下:library ieee;use ieee.std_logic_1164.all;entity haoin isport(din,clk:in std_logic;dout:out std_logic); end haoin;architecture rtl of haoin isbeginprocess(din)variable t: integer range 0 to 63:=0;beginif din='1' thenif clk 'event and clk='1'thent:=t+1;if t>10 thendout<='1';t:=t-1;else dout<='0';end if;end if;else dout<='0';t:=0;end if;end process;end rtl;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ring isport(clk: in std_logic;clk500: in std_logic;clk1k:in std_logic;beep:out std_logic);end ring;architecture rtl of ring isbeginprocess(clk)variable t: std_logic;variable n: integer range 0 to 15:=0;beginif clk 'event and clk='1' thent:=not t;n:=n+1;end if;if t='1' and n<11 thenbeep<=clk500;elsif n=11 thenbeep<=clk1k;else beep<='Z';end if;end process;end rtl;library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;entity clock isport(SA: in std_logic;SB: in std_logic;SC: in std_logic;SD: in std_logic;clk1: in std_logic;dout: buffer std_logic_vector(23 downto 0);--seg_data:out std_logic_vector(7 downto 0);--seg_co米:out std_logic_vector(3 downto 0);beep: out std_logic--led:out std_logic_vector(3 downto 0));end entity clock;architecture rtl of clock isco米ponent cnt_s isport(en,clk,clr:in std_logic;dout:buffer std_logic_vector(7 downto 0);c:out std_logic);end co米ponent;co米ponent cnt_h isport(en,clk,clr:in std_logic;dout:buffer std_logic_vector(7 downto 0));end co米ponent;--co米ponent seg米ain is--port(clk,reset_n:in std_logic;--datain:in std_logic_vector(15 downto 0);--seg_data:out std_logic_vector(7 downto 0);--seg_co米:out std_logic_vector(3 downto 0));--end co米ponent;--co米ponent ring is--port( en: in std_logic;-- clk: in std_logic;--clk500: in std_logic;--clk1k:in std_logic;--beep:out std_logic);--end co米ponent;co米ponent haoin isport(din,clk:in std_logic;dout:out std_logic);end co米ponent;co米ponent naoling isport (h,米:in std_logic_vector(7 downto 0);clk4hzh,clk4hz米:in std_logic;sys_en,sys_rst:in std_logic;h_o,米_o: out std_logic_vector(7 downto 0);beep:out std_logic);end co米ponent;signal reg_h:std_logic_vector(7 downto 0);signal reg_米:std_logic_vector(7 downto 0);signal reg_s:std_logic_vector(7 downto 0);signal reg_米_s:std_logic_vector(7 downto 0):=X"59"; signal reg_米_米:std_logic_vector(7 downto 0):=X"59";signal reg_米_h:std_logic_vector(7 downto 0):=X"59";signal clk_h:std_logic;signal clk_米:std_logic;signal clk_s:std_logic;signal c_s :std_logic;signal c_米:std_logic;signal c_h :std_logic;signal sys_clk1:std_logic;signal sys_clk4:std_logic;signal sys_clk64:std_logic;signal sys_clk500:std_logic;signal sys_clk1k:std_logic;signal clki:integer:=750000;signal sys_rst:std_logic:='0';signal sys_en:std_logic:='1';signal clk_ring,米h:std_logic;signal SAc,SBc,SCc,SDc:std_logic;signal en_r:std_logic;signal NL_reg_h,NL_reg_米:std_logic_vector(7 downto 0);signal NL_ring:std_logic;signal sys_clk4_NL_h,sys_clk4_NL_米:std_logic;beginh:cnt_h port 米ap(en=>sys_en,clk=>clk_h,clr=>sys_rst,dout=>reg_h);米:cnt_s port 米ap(en=>sys_en,clk=>clk_米,clr=>sys_rst,dout=>reg_米,c=>c_米);s:cnt_s port 米ap(en=>sys_en,clk=>sys_clk1,clr=>SCc,dout=>reg_s,c=>c_s);--sled:seg米ain port 米ap(clk=>clk1,reset_n=>SCc,seg_data=>seg_data,seg_co 米=>seg_co米,datain=>dout(15 downto 0));--ring0:ring port 米ap(en=>en_r,clk=>clk_ring,clk500=>sys_clk500,clk1k=>sys_clk1k,beep=>beep); haoin1:haoin port 米ap( SA,sys_clk64,SAc);haoin2:haoin port 米ap( SB,sys_clk64,SBc);haoin3:haoin port 米ap( SC,sys_clk64,SCc);haoin4:haoin port 米ap( SD,sys_clk64,SDc);NL:naoling port 米ap(beep=>NL_ring,h=>reg_h,米=>reg_米,clk4hzh=>sys_clk4_NL_h,clk4hz米=>sys_clk4_NL_米,sys_en=>sys_en,sys_rst=>sys_rst,h_o=>NL_reg_h,米_o=>NL_reg_米);beep<=clk_ring and 米h;--led<=reg_s(3 downto 0);p_sys_clk:process(clk1)variable t1,t4,t64,t500,t1k:integer range 0 to 50000000;beginif clk1 'event and clk1='1' thent1:=t1+1;t4:=t4+1;t64:=t64+1;t500:=t500+1;t1k:=t1k+1;if t1=clki/2 thent1:=0;sys_clk1<=not sys_clk1;end if;if t4=clki/8 thent4:=0;sys_clk4<=not sys_clk4;end if;if t64=clki/128 thent64:=0;sys_clk64<=not sys_clk64;end if;if t500=clki/1000 thent500:=0;sys_clk500<=not sys_clk500;end if;if t1k=clki/2000 thent1k:=0;sys_clk1k<=not sys_clk1k;end if;end if;end process p_sys_clk;p_c:process(SAc,SBc,SCc,SDc)beginif SAc='1' and SDc='0' thenclk_h<=sys_clk4;elseclk_h<=c_米;end if;if SAc='1' and SDc='1' thensys_clk4_NL_h<=sys_clk4;elsesys_clk4_NL_h<='0';end if;if SBc='1' and SDc='0'thenclk_米<=sys_clk4;elseclk_米<=c_s;end if;if SBc='1' and SDc='1'thensys_clk4_NL_米<=sys_clk4;elsesys_clk4_NL_米<='0';end if;if SDc='0' thendout(7 downto 0)<=reg_s;dout(15 downto 8)<=reg_米;dout(23 downto 16)<=reg_h;elsedout(7 downto 0)<="ZZZZZZZZ";dout(15 downto 8)<=NL_reg_米;dout(23 downto 16)<=NL_reg_h;end if;end process p_c;P_ring:process(reg_米,reg_s,sys_clk1k)variable clk_ring_t:std_logic;variable t:std_logic_vector(3 downto 0);beginif reg_米=X"59" and (reg_s=X"50" or reg_s=X"52" or reg_s=X"54" or reg_s=X"56" or reg_s=X"58") thenclk_ring_t:=sys_clk500;elsif reg_米=X"00" and reg_s=X"00" thenclk_ring_t:=sys_clk1k;else clk_ring_t:='Z';end if;if NL_ring='1' thenclk_ring_t:=sys_clk1k;end if;if sys_clk1k 'event and sys_clk1k='1' thent:=t+1;end if;if t>1 then 米h<='1';end if;clk_ring<=clk_ring_t;end process p_ring;end rtl;。
eda整点报时程序课程设计一、课程目标知识目标:1. 让学生掌握EDA(电子设计自动化)软件的使用,理解整点报时程序的原理;2. 使学生了解数字时钟的工作机制,掌握时、分、秒的计时方法;3. 帮助学生理解程序设计的基本思路,学会编写简单的Verilog代码。
技能目标:1. 培养学生运用EDA软件进行数字电路设计和仿真实验的能力;2. 培养学生具备分析问题、解决问题的能力,能够根据实际需求编写合适的程序;3. 提高学生的团队协作和沟通能力,通过合作完成课程设计任务。
情感态度价值观目标:1. 培养学生热爱科学,对电子技术产生浓厚的兴趣;2. 培养学生具备创新意识,敢于挑战新问题,勇于尝试;3. 培养学生严谨、务实的学术态度,注重实践操作,养成良好的学习习惯。
分析课程性质、学生特点和教学要求,本课程目标具体、可衡量,旨在让学生通过本章节的学习,掌握EDA整点报时程序的设计方法,培养其编程能力和实际操作技能。
同时,注重学生的团队协作和情感态度的培养,使他们在学习过程中形成积极向上的学习氛围,为未来的电子技术学习打下坚实基础。
二、教学内容本章节教学内容依据课程目标,结合课本相关章节,组织以下内容:1. EDA软件介绍与操作:使学生熟悉EDA软件的基本功能,掌握软件的操作方法,包括新建项目、添加文件、编译和仿真等。
参考教材章节:第一章 电子设计自动化概述2. 数字时钟原理:讲解数字时钟的基本原理,分析时、分、秒的计数规律,为编写整点报时程序打下基础。
参考教材章节:第二章 数字电路基础3. Verilog编程语言:介绍Verilog的基本语法,通过实例讲解,使学生掌握编写简单程序的方法。
参考教材章节:第三章 Verilog硬件描述语言4. 整点报时程序设计:分析整点报时程序的需求,指导学生编写、调试和优化程序。
参考教材章节:第四章 数字系统设计实例5. 仿真实验与验证:指导学生进行仿真实验,验证整点报时程序的准确性,并对程序进行优化。
电子学课程设计报告带有整点报时的数字钟设计与制作目录一、课程设计的性质、目的和任务 (3)二、课程设计基本要求 (3)三、设计课题要求 (3)四、课程设计所需要仪器 (4)五、设计步骤 (4)1、整体设计框图 (4)2、各个模块的设计与仿真 (4)2.1分频模块 (4)2.2计数器模块 (6)2.3控制模块 (10)2.4数码管分配 (13)2.5显示模块 (14)2.6报时模块 (16)六、调试中遇到的问题及解决的方法 (18)七、心得体会 (18)一、课程设计的性质、目的和任务创新精神和实践能力二者之中,实践能力是基础和根本。
这是由于创新基于实践、源于实践,实践出真知,实践检验真理。
实践活动是创新的源泉,也是人才成长的必由之路。
通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,培养学生的创新精神。
二、课程设计基本要求掌握现代大规模集成数字逻辑电路的应用设计方法,进一步掌握电子仪器的正确使用方法,以及掌握利用计算机进行电子设计自动化(EDA)的基本方法。
三、设计课题要求(1)构造一个24小时制的数字钟。
要求能显示时、分、秒。
(2)要求时、分、秒能各自独立的进行调整。
(3)能利用喇叭作整点报时。
从59分50秒时开始报时,每隔一秒报时一秒,到达00分00秒时,整点报时。
整点报时声的频率应与其它的报时声频有明显区别。
#设计提示(仅供参考):(1)对频率输入的考虑数字钟内所需的时钟频率有:基准时钟应为周期一秒的标准信号。
报时频率可选用1KHz和2KHz左右(两种频率相差八度音,即频率相差一倍)。
另外,为防止按键反跳、抖动,微动开关输入应采用寄存器输入形式,其时钟应为几十赫兹。
(2)计时部分计数器设计的考虑分、秒计数器均为模60计数器。
小时计数为模24计数器,同理可建一个24进制计数器的模块。
(3)校时设计的考虑数字钟校准有3个控制键:时校准、分校准和秒校准。
微动开关不工作,计数器正常工作。
按下微动开关后,计数器以8Hz频率连续计数(若只按一下,则计数器增加一位),可调用元件库中的逻辑门建一个控制按键的模块,即建立开关去抖动电路(见书70页)。
(4)报时设计的考虑可以将高频时钟分频得到约2KHz和1KHz的音频,作为数字钟的报时频率。
当电子钟显示XX:59:50时,数字钟开始报时“DO",持续一秒,而且每隔一秒报一下,直至显示XX:00:00时报“DI",持续一秒后停止。
最后输出至喇叭。
应调用元件库中的逻辑门建一个控制报时的模块。
(5)建一个七段译码的模块因在系统可编程器件实验箱上的数码管没有经过译码,故要用AHDL语言写一个七段译码的模块,且应考虑数码管为共阳极。
数码管上的点(D2、D4、D6)应置Vcc。
四、课程设计所需要仪器1、计算机一台2、quartusⅡ软件3、FPGA开发板五、设计步骤1、模块介绍(1)分频模块:产生1Hz、1KHz、2KHz频率(2)计数器模块:生成60进制、24进制计数器(3)控制模块:按键控制、按键消抖(4)显示模块:7段数码管显示器,分别显示小时、分钟、秒(5)报时模块:进行整点报时2、各个模块的设计与仿真2.1分频模块CLK晶振频率50MHZ,分成2KHZ,1KHZ,1HZ的信号。
基准1HZ信号作为时钟计时的秒计数时钟信号;分频的1KHZ,2KHZ信号用于报时电路的不同声讯。
程序代码:library ieee;use ieee.std_logic_1164.all;entity fre isport(clk ,sel: in std_logic;clk1hz,clk1khz,clk2khz:out std_logic);end fre;architecture beh of fre issignal data1khz,data2khz,data1hz : std_logic := '0';beginclk1hz <= data1hz;clk1khz <= data1khz;clk2khz <= data2khz;clk1khz_pro : process(clk) --产生1khz信号 variable cnt : integer range 0 to 24999;beginif clk'event and clk='1' thenif cnt = 24999 thencnt := 0 ; data1khz <= not data1khz;elsecnt := cnt + 1;end if;end if;end process clk1khz_pro;clk2khz_pro : process(clk) --产生2khz信号 variable cnt : integer range 0 to 12499;beginif clk'event and clk='1' thenif cnt = 12499 thencnt := 0 ; data2khz <= not data2khz;elsecnt := cnt + 1;end if;end if;end process clk2khz_pro;clk1hz_pro : process(data1khz) --产生1hz 信号 variable cnt : integer range 0 to 499;beginif data1khz'event and data1khz='1' thenif sel='0' then cnt:=0;else if cnt = 499 thencnt := 0 ;data1hz <= not data1hz ;elsecnt := cnt + 1;end if;end if;end if;end process clk1hz_pro;end beh;输入模块电路图:f reinst clk sel clk1hzclk1khzclk2khz2.2计数器模块由秒计数器,分计数器,时计数器组成了最基本的数字钟计时电路,两个六十进制计数器与二十四进制计数器组合构成。
程序代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use IEEE.STD_LOGIC_ARITH.ALL;entity shuzizhong isport(clk_change : in std_logic;s_en,m_en,h_en:in std_logic;sel:in std_logic;secout,minout,hourout :out std_logic;sl,sh,ml,mh,hl,hh:out std_logic_vector(3 downto 0);a:out std_logic_vector(15downto 0));end shuzizhong;architecture behav of shuzizhong issignallow_rega,high_rega,low_regb,high_regb,low_regc,high_regc :std_log ic_vector(3 downto 0):="0000";signal sout,mout,hout :std_logic :='0';begin--秒的60进制进制 counter_sec_l : process(clk_change,s_en)beginsl<=low_rega;sh<=high_rega;ml<=low_regb;mh<=high_regb;hl<=low_reg c;hh<=high_regc;if clk_change'event and clk_change='1' thenif s_en='1' thenif low_rega="1001" thenlow_rega <= "0000";elselow_rega <= low_rega+'1';end if;end if;end if;end process counter_sec_l;counter_sec_h : process(clk_change,s_en,low_rega)beginif clk_change'event and clk_change='1' thenif s_en='1' thenif low_rega="1001" thenif high_rega ="0101"thenhigh_rega <= "0000";elsehigh_rega <= high_rega+'1'; end if;end if;end if;end if;end process counter_sec_h;sout <= '1' when low_rega="1001" and high_rega="0101" else '0';----分钟的60进制设置counter_min_l : process(clk_change,m_en)beginif clk_change'event and clk_change='1' thenif m_en='1' thenif sout='1'or sel='0' thenif low_regb="1001" thenlow_regb <= "0000";elselow_regb <= low_regb+'1';end if;end if;end if;end if;end process counter_min_l;counter_min_h : process(clk_change,m_en,low_regb)beginif clk_change'event and clk_change='1' thenif sout='1'or sel='0' thenif m_en='1' thenif low_regb="1001" thenif high_regb ="0101"thenhigh_regb <= "0000";elsehigh_regb <= high_regb+'1'; end if;end if;end if;end if;end if;end process counter_min_h;mout <= '1' when low_regb="1001" and high_regb="0101"and sout='1' else '0';--小时的24进制设置counter_hour_l : process(clk_change,h_en)beginif clk_change'event and clk_change='1' thenif h_en='1' thenif mout='1'or sel='0' thenif low_regc="1001"or hout='1' thenlow_regc <= "0000";elselow_regc <= low_regc+'1';end if;end if;end if;end if;end process counter_hour_l;counter_hour_h : process(clk_change,h_en,hout)beginif clk_change'event and clk_change='1' then if mout='1'or sel='0' thenif h_en='1' thenif hout='1' thenhigh_regc<="0000";else if low_regc="1001" thenhigh_regc <= high_regc+'1'; end if;end if;end if;end if;end if;end process counter_hour_h;hout <= '1' when low_regc="0011" and high_regc="0010" else '0'; secout<=sout;minout<=mout;hourout<=hout;a<=high_regb&low_regb&high_rega&low_rega ;end behav;输入模块电路图:shuzizhonginst clk_changes_enm_enh_ensel secout minout hourout sl[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]hh[3..0]a[15..0]2.3控制模块分五个状态0状态正常计时,按下按键进入下一状态开始调时模式1,按下按键进入调秒模式2,按下按键进入调分模式3,按下按键进入调小时模式4.按下按键恢复正常计时模式。