EDA数字时钟课程设计.docx
课程设计报告学生姓名班 级专 业题 目指导教师学 号电子信息工程数字时钟设计2023年 11月课程设计报告一、任务和设计要求1. 生疏集成电路的引脚安排。2. 把握各芯片的规律功能及使用方法。3. 了解数字钟的组成及工作原理。4. 生疏数字钟的设计与制作。1. 设计指标(1) 时间以 24 小时为一个周期;(2) 显示时、分、秒;(3) 有校时功能,可以分别对时及分进展单独校时,使其校正到标准时间;(4) 计时过程具有报时功能,当时间到达整点前 5 秒进展蜂鸣报时。2. 设计要求(1) 画出电路原理图或仿真电路图;(2) 元器件及参数选择;(3) 电路仿真与调试二、设计原理设计思路依据系统设计要求,系统设计承受自顶向下设计方法,由时钟分频局部、计时局部、按键局部调时局部和显示局部五个局部组成。这些模块都放在一个顶层文件中。 1时钟计数:首先下载程序进展复位清零操作,电子钟从 00:00:00 计时开头。sethour 可以调整时钟的小时局部, setmin 可以调整分钟,步进为 1。由于电子钟的最小计时单位是 1s,因此供给应系统的内部的时钟频率应当大于 1Hz,这里取 100Hz。CLK 端连接外部 10Hz 的时钟输入信号 clk。对 clk 进展计数,当 clk=10 时,秒加 1,当秒加到 60 时,分加 1;当分加到 60 时,时加 1;当时加到 24 时,全部清 0,从计时。用 6 位数码管分别显示“时”、“分”、“秒”,通过 OUTPUT( 6 DOWNTO 0 ) 上的信号来点亮指定的 LED 七段显示数码管。2) 时间设置:手动调整分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过试验板上的键 7 和键 4 进展任意的调整,由于我们用的时钟信号均是1HZ 的,所以每 LED 灯变化一次就来一个脉冲,即计数一次。3) 清零功能:reset 为复位键,低电寻常实现清零功能,高电寻常正常计数。可以依据我们自己任意时间的复位。总体构造图1课程设计报告三、系统设计1) 时、分、秒计时器时计时器为一个 24 进制计数器,分、秒计时器均为60 进制计数器。当秒计时器承受到一个秒脉冲时,秒计数器开头从 1 计数到 60,此时秒显示器将显示 00、01、02、.、59、00;每当秒计数器数到 00 时,就会产生一个脉冲输出送至分计时器,此时分计数器数值在原有根底上加 1,其显示器将显示 00、01、02、.、59、00;每当分计数器数到 00 时, 就会产生一个脉冲输出送至时计时器,此时时计数器数值在原有根底上加 1,其显示器将显示 00、01、02、.、23、00。即当数字钟运行到 23 点 59 分 59 秒时,当秒计时器在承受一个秒脉冲,数字钟将自动显示 00 点 00 分 00 秒。2) 校时电路当开关拨至校时档时,电子钟秒计时工作,通过时、分校时开关分别对时、分进展校对,开关每按 1 次,与开关对应的时或分计数器加 1,当调至需要的时与分时,拨动 reset 开关,电子钟从设置的时间开头往后计时。四、参考程序Alert 模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY alert IS PORT(clk:IN STD_LOGIC;dain:IN STD_LOGIC_VECTOR(6 DOWNTO 0);2课程设计报告speak:OUT STD_LOGIC;lamp:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END alert;ARCHITECTURE fun OF alert ISSIGNAL count:STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL count1:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINspeaker:PROCESS(clk) BEGIN-speak<=count1(1);IF(clk”event and clk=”1”)THENIF(dain=“0000000“)THENspeak<=count1(1);IF(count1>=“10“)THENcount1<=“00“;-count1 为三进制加法计数器ELSEcount1<=count1+1;-speak<=count1(0); END IF ;END IF ; END IF ;END PROCESSspeaker; lamper:PROCESS(clk)BEGINIF(rising_edge(clk)THEN IF(count<=“10“)THEN IF(count=“00“)THENlamp<=“001“;-循环点亮三只灯ELSIF(count=“01“)THENlamp<=“010“; ELSIF(count=“10“)THENlamp<=“100“;END IF;count<=count+1;ELSEcount<=“00“;END IF;END IF;3课程设计报告END PROCESS lamper; END fun;Hour 模块LIBRARY IEEE;use IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY hour IS PORT(clk,reset:IN STD_LOGIC;daout:out STD_LOGIC_VECTOR(5 DOWNTO 0); END ENTITY hour;ARCHITECTURE fun OF hour ISSIGNAL count:STD_LOGIC_VECTOR(5 DOWNTO 0); BEGINdaout<=count;PROCESS(clk,reset)BEGINIF(reset=”0”)THENcount<=“000000“; -假设 reset=0,则异步清零ELSIF(clk”event and clk=”1”)THEN-否则,假设 clk 上升沿到IF(count(3 DOWNTO 0)=“1001“)THEN -假设个位计时恰好到“1001“即 9 IF(count<16#23#)THEN-23 进制count<=count+7;-假设到 23D 则elsecount<=“000000“;-复 0 END IF;ELSIF (count<16#23#)THEN-假设未到 23D,则 count 进 1 count<=count+1;ELSE-否则清零count<=“000000“;END IF;-END IFcount3 DOWNTO 0=“1001“ END IF;-END IFreset=”0”END PROCESS;END fun; Minute 模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY minute IS PORT(clk,clk1,reset,sethour:IN STD_LOGIC;enhour:OUT STD_LOGIC;4课程设计报告daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END ENTITY minute ;ARCHITECTURE fun OF minute ISSIGNAL count :STD_LOGIC_VECTOR (6 DOWNTO 0);SIGNAL enhour_1, enhour_2: STD_LOGIC; -enmin_1 为 59 分时的进位信号BEGIN-enmin_2 由 clk 调制后的手动调时脉冲信号串daout<=count;enhour_2<= (sethour and clk1); -sethour 为手动调时把握信号,高电平有效enhour<= (enhour_1 or enhour_2);PROCESS(clk,reset,sethour) BEGINIF(reset=”0”) THEN -假设 reset 为 0,则异步清零count<=“0000000“;ELSIF(clk”event and clk=”1”)THEN-否则,假设 clk 上升沿到IF(count (3 DOWNTO 0) =“1001“)THEN-假设个位计时恰好到“1001“即 9IF(count <16#60#) THEN-又假设 count 小于 16#60#,即 60 IF(count=“1011001“) THEN-又假设已到 59Denhour_1<=”1”; -则置进位为 1 count<=“0000000“; -count 复 0ELSEcount<=count+7; -假设 count 未到 59D,则加 7,即作“加 6 校正“ END IF; -使前面的 16#60#的个位转变为 8421BCD 的容量ELSEcount<=“0000000“;-count 复 0有此句,则对无效状态电路可自启动 END IF;-END IFcount<16#60#ELSIF (count <16#60#) THENcount<=count+1; -假设 count<16#60#则 count 加 1 enhour_1<=”0” after 100 ns; -没有发生进位ELSEcount<=“0000000“; -否则,假设 count 不小于 16#60# count 复 0 END IF; -END IFcount3 DOWNTO 0=“1001“END IF; -END IFreset=”0”END process; END fun; Second 模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;5课程设计报告ENTITY second ISPORT( clk,reset,setmin:STD_LOGIC;enmin:OUT STD_LOGIC;daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END ENTITY second; ARCHITECTURE fun OF second ISSIGNAL count:STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL enmin_1,enmin_2:STD_LOGIC;-enmin_1 为 59 秒时的进位信号BEGIN-enmin_2 由 clk 调制后的手动调分脉冲信号串daout<=count;enmin_2<=(setmin and clk); -setmin 为手动调分把握信号,高电平有效enmin<=(enmin_1 or enmin_2); -enmin 为向分进位信号PROCESS(clk,reset,setmin)BEGINIF(reset=”0”)THEN count<=“0000000“; -假设 reset 为 0,则异步清零ELSIF(clk ”event and clk=”1”)then-否则,假设 clk 上升沿到IF(count(3 downto 0)=“1001“)then-假设个位计时恰好到“1001“即 9 IF(count<16#60#)then-又假设 count 小于 16#60#,即 60HIF(count=“1011001“)then-又假设已到 59Denmin_1<=”1”;count<=“0000000“;-则置进位为 1 及 count 复 0 ELSE-未到 59Dcount<=count+7; -则加 7,而+7=+1+6,即作“加 6 校正“ END IF;ELSE-假设 count 不小于 16#60#即 count 等于或大于 16#60# count<=“0000000“;-count 复 0END IF;-END IFcount<16#60#ELSIF(count<16#60#)then-假设个位计数未到“1001“则转此句再判count<=count+1;-假设 count<16#60#则 count 加 1 enmin_1<=”0”after 100 ns; -没有发生进位ELSE-否则,假设 count 不小于 16#60# count<=“0000000“;-则 count 复 0END IF;-END IFcount3 DOWNTO 0=“1001“ END IF;-END IFreset=”0”END PROCESS;END fun;6课程设计报告五、系统调试与性能分析时基 T 产生电路数字钟以其显示时间的直观性、走时准确性作为一种计时工具,数字钟的根本组成局部别不开计数器,在把握规律电路的把握下完成预定的各项功能。由晶振产生的频率格外稳定的脉冲,经整形、稳定电路后,产生一个频率为 1Hz 的、格外稳定的计数时钟脉冲。调时、调分信号的产生由计数器的计数过程可知,正常计数时,当秒计数器60 进制计数到 59 时,再来一个脉冲,则秒计数器清零,重开头一轮的计数,而进位则作为分计数器的计数脉冲, 使分计数器计数加 1。现在我们把电路稍做变动:把秒计数器的进位脉冲和一个频率为 2Hz 的脉冲信号同时接到一个 2 选 1 数据选择器的两个数据输入端,而位选信号则接一个脉冲按键开关,当按键开关不按下去时即为0,则数据选择器将秒计数器的进位脉冲送到分计数器,此时,数字钟正常工作;当按键开关按下去时即为1,则数据选择器将另外一个 2Hz 的信号作为分计数器的计数脉冲,使其计数频率加快,当到达正确时间时,松开按键开关,从而到达调时的目的。调整小时的时间也一样的实现。计数显示电路由计数局部、数据选择器、译码器组成,是时钟的关键局部。7课程设计报告1、计数局部:由两个 60 进制计数器和一个 24 进制计数器组成,其中 60 进制计数器可用 6 进制计数器和 10 进制计数器构成;24 进制的小时计数同样可用 6 进制计数器和 10 进制计数器得到:当计数器计数到 24 时,“2”和“4”同时进展清零,则可实现24进制计数。2、数据选择器:84 输入 14 输出的多路数据选择器,由于本试验用到了 8 个数码管有两个用来产生隔离符号。3、译码器:七段译码器。译码器必需能译出,由试验二中译码器真值表可得:字母 F 的 8421BCD 码为“1111”,译码后为“1000111”,现在假设只译出,即字母 F的中间一横,则译码后应为“0000001”,这样,在数码管上显示的就为。仿真未曾编辑的仿真波形8课程设计报告试验结果仿真波形试验箱使用模式 7,键 8 为复位按键,键 8 为 1 时正常工作。键 4 设置小时,键 7 设置分钟。下载成功后,按下键8,及使六个LED 复位清零,显示数秒的自动计时,可以通过4 键设置小时数,7 键设置分钟数。当秒数满 60 则进一位,分钟数满 60 进一位,当显示为23:59:59 时,秒数在加一则显示 00:00:00,之后从计时。六、训练体会通过这次课程设计,我进一步加深了对电子设计自动化的了解。并进一步娴熟了对QuartusII 软件的操作。EDA 这门课程再也不像学习理论般那么空洞,有了更加贴切的了解及运用。在编写程序的过程中,遇到了很多问题,使我觉察自己以前学习上存在的缺乏。通过与同学探讨和请教教师,最终把问题都解决了,并加深了对数字时钟原理和设计思路的了解。同时我也把握了做课程设计的一般流程,为以后的电子设计这块积存了确定的阅历, 为以后从事相关工作一些帮助。做课程设计时,先查阅相关学问,把原理吃透,确定一个大的设计方向,在依据这个方向分模块的把要实现的功能用流程图的形式呈现。最终参照每个模块把输入和输出引脚设定,运用我们所学的 VHDL 语言进展编程。总之,通过这次的设计,进一步了解了 EDA 技术,收获很大,对软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的熬炼和提高。9