基于eda的数字钟程序设计

合集下载

(2023)EDA课程数字钟设计报告(一)

(2023)EDA课程数字钟设计报告(一)

(2023)EDA课程数字钟设计报告(一)EDA课程数字钟设计报告设计目的本次设计的目的是通过使用EDA software,设计一个能够正常运行的数字钟,使其能够满足一定的时间显示功能。

设计思路本设计主要使用Verilog HDL编程语言,利用EDA software提供的仿真功能,模拟数字钟的运行过程。

具体实现过程如下:1.首先,设置时钟频率,并利用counter计数器进行计数,产生时间基准信号。

2.利用BCD编码对时间进行编码,分别将时、分、秒的数据传至显示器。

3.设计逻辑电路计算秒钟、分针、时钟转动角度。

4.在EDA software上进行仿真,观察数字钟是否正常工作。

设计图样以下为数字钟方案的部分设计图样。

image textimage text实现结果通过复杂的编程训练和模拟,数字钟设计的功能已经被确认。

数字钟电路能够准确地显示当前时间。

同时,数字钟的设计也具有较高的可靠性、稳定性和精度。

并且,数字钟的主板设计紧凑、易于集成。

这些优点使得本次设计非常适合应用于智能仪器、家庭用品和其他数字显示电子设备中。

总结数字钟设计是一项有挑战性的工程,需要设计人员具有充分的编程功底和深入的EDA工具熟练度。

本设计的成功,体现了设计团队的技术实力和团队协作能力,为未来的科技产品发展提供了有力的技术支撑。

改进方案虽然本设计实现了数字钟正常工作的功能,但是我们仍然可以从以下几个方面进行改进:1.在原有电路基础上增加闹钟功能,方便用户定时提醒。

2.增加显示背光,使数字钟更方便在夜间环境下使用。

3.将数字钟设计进行微小的改动使其更小巧便携,方便携带和使用。

参考文献1.微机原理与接口技术(第四版) 教材2.EDA Software (Xilinx ISE) 许可证书致谢在本次数字钟的设计过程中,我们向来自各地的优秀工程师团队表示感谢,感谢他们在繁忙的工作中,准确地指导我们的设计工作。

同时也感谢电子设计自动化(EDA) company提供的软件支持,使得我们能够顺利完成该设计。

EDA课程设计数字闹钟

EDA课程设计数字闹钟

EDA课程设计数字闹钟一、教学目标本课程旨在通过数字闹钟的设计与实现,让学生掌握EDA(电子设计自动化)的基本原理和方法,培养学生的实践能力和创新精神。

具体目标如下:知识目标:使学生了解数字闹钟的原理和结构,理解时钟芯片的工作原理,掌握EDA工具的使用方法。

技能目标:培养学生使用EDA工具进行数字电路设计的能力,提升学生的编程和调试技能,训练学生的团队协作和沟通能力。

情感态度价值观目标:培养学生对电子科技的兴趣和热情,增强学生解决实际问题的信心和勇气,培养学生负责任的工作态度和良好的团队合作精神。

二、教学内容本课程的教学内容主要包括数字闹钟的原理与设计、时钟芯片的工作原理、EDA工具的使用等。

1.数字闹钟的原理与设计:介绍数字闹钟的工作原理,包括时钟发生器、分频器、计数器等基本组成部分,以及如何实现闹钟功能。

2.时钟芯片的工作原理:讲解时钟芯片的内部结构和工作原理,使学生了解时钟芯片在数字电路中的应用。

3.EDA工具的使用:介绍常用的EDA工具,如Cadence、Altera等,讲解如何使用这些工具进行数字电路设计。

三、教学方法为了提高教学效果,本课程将采用多种教学方法,包括讲授法、案例分析法、实验法等。

1.讲授法:通过讲解数字闹钟的原理、时钟芯片的工作原理以及EDA工具的使用方法,使学生掌握相关知识。

2.案例分析法:分析实际案例,让学生了解数字闹钟设计的过程和注意事项。

3.实验法:让学生动手实践,使用EDA工具设计数字闹钟,提高学生的实践能力。

四、教学资源为了支持教学内容的实施,我们将准备以下教学资源:1.教材:选择合适的教材,如《数字电路与EDA技术》等,为学生提供理论支持。

2.多媒体资料:制作课件、视频等多媒体资料,丰富教学手段,提高学生的学习兴趣。

3.实验设备:准备实验设备,如计算机、EDA工具软件、开发板等,为学生提供实践平台。

4.网络资源:利用网络资源,为学生提供更多的学习资料和实践案例,拓宽学生的视野。

EDA课程设计报告电子钟

EDA课程设计报告电子钟

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数字钟设计

eda数字钟设计

1、计时模块的源程序如下:1)秒计数VHDL源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second60 isport( clk,rst,en: in std_logic; --rst为复位控制信号,en为时钟开关s1: out std_logic_vector(3 downto 0); --秒十位s0: out std_logic_vector(3 downto 0); --秒个位co: out std_logic); --进位输出end second60;architecture rtl of second60 issignal s0_0,s1_1:std_logic_vector(3 downto 0);begins1<=s1_1;s0<=s0_0;process(clk,rst) --该进程处理秒的个位beginif(rst='0') then --异步复位s0_0<="0000";elsif(clk'event and clk='1') thenif(en='1') thenif(s0_0="1001") then --当秒个位为9时,个位清零s0_0<="0000";elses0_0<=s0_0+1; --秒个位加1end if;end if;end if;end process;process(clk,rst) --该进程处理秒的十位beginif(rst='0') then --异步复位s1_1<="0000";elsif(clk'event and clk='1') thenif(en='1' and s0_0="1001") then --如果秒的个位等于9if(s1_1="0101") then --且秒的十位等于5s1_1<="0000"; --秒十位清零elses1_1<=s1_1+1; --秒十位加1end if;end if;end if;end process;--------------------------------------------------------------------------------process(s0_0,s1_1,en) --该进程处理秒的进位beginif(en='1' and s0_0="1001" and s1_1="0101") then --当秒的个位等于9,十位等于5时,产生进位co<='1';elseco<='0';end if;end process;end rtl;2)分计数VHDL源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity minute60 isport( clk,en,rst: in std_logic; --rst为复位控制信号,en为时钟开关m1: out std_logic_vector(3 downto 0); --分十位m0: out std_logic_vector(3 downto 0); --分个位co: out std_logic); --进位输出end minute60;architecture rtl of minute60 issignal m0_0,m1_1:std_logic_vector(3 downto 0);beginm1<=m1_1;m0<=m0_0;process(clk,rst) --该进程处理分的个位beginif(rst='0') then --异步复位m0_0<="0000";elsif(clk'event and clk='1') thenif(en='1') thenif(m0_0="1001") then --当分个位为9时,个位清零m0_0<="0000";elsem0_0<=m0_0+1; --分个位加1end if;end if;end if;end process;process(clk,rst) --该进程处理分的十位beginif(rst='0') then --异步复位m1_1<="0000";elsif(clk'event and clk='1') thenif(en='1' and m0_0="1001") then --如果分的个位等于9 if(m1_1="0101") then --且分的十位等于5m1_1<="0000"; --分十位清零elsem1_1<=m1_1+1; --分十位加1end if;end if;end if;end process;process(m0_0,m1_1,en) --该进程处理分的进位beginif(en='1' and m0_0="1001" and m1_1="0101") thenco<='1';elseco<='0';end if;end process;end rtl;3)小时计数器的VHDL源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour24 isport( clk,en,rst: in std_logic; --rst清零控制,en启动控制h1: out std_logic_vector(3 downto 0); --小时的十位h0: out std_logic_vector(3 downto 0)); --小时的个位end hour24;architecture rtl of hour24 issignal h0_0,h1_1:std_logic_vector(3 downto 0);beginh1<=h1_1;h0<=h0_0;------------------------------------------------------------------------ process(clk,rst) --该进程处理小时的个位beginif(rst='0') then --异步复位h0_0<="0000";elsif(clk'event and clk='1') thenif(en='1') thenif(h0_0="1001" or(h1_1="0010" and h0_0="0011")) thenh0_0<="0000";elseh0_0<=h0_0+1;end if;end if;end if;end process;------------------------------------------------------------------------------- process(clk,rst) --该进程处理小时的十位beginif(rst='0') then --异步复位h1_1<="0000";elsif(clk'event and clk='1') thenif(en='1' and h1_1="0010" and h0_0="0011") thenh1_1<="0000";elsif(h0_0="1001") then --当个位等于9时十位加1h1_1<=h1_1+1;end if;end if;end process;end rtl;/view/0f97c880e53a580216fcfe89.html。

基于eda的数字钟程序设计

基于eda的数字钟程序设计

基于e d a的数字钟程序设计文件编码(GHTU-UITID-GGBKT-POIU-WUUI-8968)一、课题要求:(1)技术要求:1、掌握多功能数字钟的工作原理。

2、应用EDA技术,VHDL语言编写程序。

3、层次化设计,设计原理框图。

4,、硬件设计及排版。

(2)功能要求:1、基本功能:能进行正常的时、分、秒计时功能,分别由6个数码管显示24小时、60分钟、60秒的计数器显示。

2、扩展功能:(1)能够利用按键实现“校时”“校分”“清零”功能。

(2)能利用扬声器做整点报时,整点前五秒短声,整点长声。

(3)本人工作:负责软件部分,,编写各部分模块的VHDL程序,并且锁定引脚,将程序下载到芯片中。

二、设计方案:原理框图:数字钟原理框图一共有11个小模块:分频,片选,按键,小时,分,秒,显示模块,七段显示译码器,报时,扬声,36译码器。

左边第一个是时钟信号输入端,50Mhz到分频模块。

第二个为清零按键,第三个为校分按键,第四个为校时按键。

右边第一个为七段显示译码器输出端,第二个为扬声器输出端,第三个为6个数码管输出端。

中间模块为数字钟的核心,有计时,报时,校时功能。

三、单元模块设计1、分频模块2、秒模块仿真图为秒的数值,在计时到59时进位1到co端。

当按下s3时,秒清零。

3.、分模块仿真图该模块也为60进制计数器,计时输出为分的数值。

在EN信号有效且时钟来时,计数器加1、在s2按下时,EN使能端有效,实现校分功能。

4、时模块仿真图该模块为24进制计数器,计时输出为小时的数值,在EN信号到来时,计数器加1,在S1按下时,EN信号有效,实现校时功能。

5、片选模块仿真图该模块提供数码管片选信号。

6、按键模块仿真图该模块是有几个门电路组成,把它编写成一个模块,到时写程序方便。

该模块连接几个按键,由按键控制。

7、报时模块仿真图该模块为整点报时提供控制信号,当59分时,秒为50,52,54,56,58时,Q500输出“1”;秒为00时,Q1000输出“1”。

基于EDA的数字时钟课程设计报告

基于EDA的数字时钟课程设计报告

EDA课程设计报告目录一、设计内容简介 (2)二、设计要求 (2)基本要求 (2)提高部分要求 (3)三、方案论证(整体电路设计原理) (3)四、各个模块设计原理 (4)4.1 分频电路模块设计 (5)4.2 秒计时器模块设计 (7)4.3 分计时器模块设计 (9)4.4 小时计时器模块设计 (11)4.5 报时模块设计 (13)五、实验中遇到问题及解决方法 (20)六、结论 (20)七、实验心得 (21)八、参考文献 (22)一、设计内容简介设计一个数字钟,可以完成00:00:00到23:59:59的计时功能,并在控制电路的作用下具有保持、清零、快速校时、快速校分、整点报时等功能。

我设计的电路在具有基本功能的基础上,增加了下列功能:改变分频比、不同整点不同报时等;二、设计要求基本要求1、能进行正常的时、分、秒计时功能;2、分别由六个数码管显示时分秒的计时;3、K1是系统的使能开关(K1=0正常工作,K1=1时钟保持不变);4、K2是系统的校分开关;5、K3是系统的校时开关;提高部分要求1、使时钟具有整点报时功能(当时钟计到59’50”时开始报时,四个不同整点发出不同声音);2、分频比可变;三、方案论证(整体电路设计原理)本实验在实现实验基本功能的基础上,加入了整点报时等功能;图1为实验功能方框图:图1 实验方框图数字计时器基本功能是计时,因此首先需要获得具有精确振荡时间的脉振信号,以此作为计时电路的时序基础,实验中可以使用的振荡频率源为4KHZ,通过分频获得所需脉冲频率(1Hz,1KHz,500Hz)。

为产生秒位,设计一个模60计数器,对1HZ的脉冲进行秒计数,产生秒位;为产生分位,通过秒位的进位产生分计数脉冲,分位也由模60计数器构成;为产生时位,用一个模24计数器对分位的进位脉冲进行计数。

整个数字计时器的计数部分共包括六位:时十位、时个位、分十位、分个位、秒十位和秒个位。

显示功能是通过数选器、译码器、码转换器和7段显示管实现的。

EDA课程设计报告之数字时钟设计(免费哦~)

EDA课程设计报告之数字时钟设计(免费哦~)

计算机科学与技术学院EDA课程设计报告设计题目:数字时钟的设计班级:姓名:学号:日期:2011年6月20日一、系统设计要求1、具有时、分、秒的计数显示功能,24小时循环显示。

2、具有异步清零、预置初值功能,实现LED动态显示,整点报时采用声音报时,几点报几下。

3、采用元件例化方式实现各模块间的连接。

二、系统设计方案1、整个模块采用两个时钟,一个时钟的频率为一秒,用于程序秒的输入。

另一个时钟频率较高,用于七段显示器的选择端口三八译码器的输入时钟。

2、时分秒皆采用两个位的计数,一位代表十位,一位代表个位。

分秒为60进制,时为24进制。

个位逢九向十位进一,秒逢59向分进一,分逢59向时进一。

3、在小时的子程序里把两位小时数转换成一位数作为报时程序的输入。

三、主要VHDL源程序秒—底层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY SECOND ISPORT (CLK1,R:IN STD_LOGIC;CO1:OUT STD_LOGIC;S0,S1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END ;ARCHITECTURE XIA OF SECOND ISBEGINPROCESS(CLK1,R,SS0,SS1)VARIABLE SSS0,SSS1:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF R='1' THEN SSS0:="00000000";SSS1:="00000000";ELSIF CLK1'EVENT AND CLK1='1' THENIF SSS1="00000101" AND SSS0="00001001"THEN CO1<='1';SSS0:="00000000"; SSS1:="00000000";ELSIF SSS0="00001001" THEN SSS0:="00000000";SSS1:=SSS1+1;ELSE SSS0:=SSS0+1;CO1<='0';END IF;END IF;S0<=SSS0;S1<=SSS1;END PROCESS;END ;分—底层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY MINUTE ISPORT (CLK2,R,S:IN STD_LOGIC;MM0,MM1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);CO2:OUT STD_LOGIC;M0,M1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ;ARCHITECTURE XIA OF MINUTE ISBEGINPROCESS(CLK2,R,S,MM0,MM1)VARIABLE MMM0,MMM1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF R='1' THEN MMM0:="0000";MMM1:="0000";ELSIF S='1' THEN MMM0:=MM0;MMM1:=MM1;ELSIF CLK2'EVENT AND CLK2='1' THENIF MMM1="0101" AND MMM0="1001"THEN CO2<='1';MMM0:="0000"; MMM1:="0000";ELSIF MMM0="1001" THEN MMM0:="0000";MMM1:=MMM1+1;CO2<='0'; ELSE MMM0:=MMM0+1;CO2<='0';END IF;END IF;M0<=MMM0;M1<=MMM1;END PROCESS;END ;时—底层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.std_logic_unsigned.all;ENTITY HOUR ISPORT (CLK3,R,S:IN STD_LOGIC;HH0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);HH1:IN STD_LOGIC_VECTOR(1 DOWNTO 0);H0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);H1:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);NUMBER2:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END ;ARCHITECTURE XIA OF HOUR ISBEGINPROCESS(CLK3,R,S,HH0,HH1)VARIABLE HHH0:STD_LOGIC_VECTOR(3 DOWNTO 0);VARIABLE HHH1:STD_LOGIC_VECTOR(1 DOWNTO 0);VARIABLE NUMBER1,NUMBER0:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF R='1' THEN HHH0:="0000";HHH1:="00";ELSIF S='1' THEN HHH0:=HH0;HHH1:=HH1;ELSIF CLK3'EVENT AND CLK3='1' THENIF HHH0="0011" AND HHH1="10"THEN HHH0:="0000";HHH1:="00";ELSIF HHH0="1001" THEN HHH1:=HHH1+1;HHH0:="0000";ELSE HHH0:=HHH0+1;END IF;END IF;H0<=HHH0;H1<=HHH1;IF HHH1="00" THEN NUMBER0:="00000000";ELSIF HHH1="01" THEN NUMBER0:="00001010";ELSIF HHH1="10" THEN NUMBER0:="00010100";END IF;NUMBER1:=NUMBER0+HHH0;IF NUMBER1="00000000" THEN NUMBER2<="00001100";ELSIF NUMBER1>"000001100" THEN NUMBER2<=NUMBER1-"00001100"; ELSE NUMBER2<=NUMBER1;END IF;END PROCESS;END ;报时—底层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY RING ISPORT(CLK4,CLK5:IN STD_LOGIC;NUMBER:IN STD_LOGIC_VECTOR(7 DOWNTO 0);P:OUT STD_LOGIC);END;ARCHITECTURE ONE OF RING ISBEGINPROCESS(CLK4,CLK5,NUMBER)VARIABLE R:STD_LOGIC;VARIABLE TEX:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF CLK4='1' THENIF (NUMBER/="0000000"AND TEX<NUMBER) THEN R:=CLK5;ELSE R:='0';END IF;IF CLK5'EVENT AND CLK5='1' THENIF TEX<NUMBER THENTEX:=TEX+1;END IF;END IF;ELSE TEX:="00000000";END IF;P<=R;END PROCESS;END;显示—底层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dec7s ISPORT(a1,a2:IN STD_LOGIC_VECTOR(7 DOWNTO 0);a3,a4,a5:IN STD_LOGIC_VECTOR(3 DOWNTO 0); a6:IN STD_LOGIC_VECTOR(1 DOWNTO 0);led7s1,led7s2,led7s3,led7s4,led7s5,led7s6 :OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END;ARCHITECTURE one OF dec7s ISBEGINPROCESS(a1,a2,a3,a4,a5,a6)BEGINCASE a1 ISWHEN "00000000"=>led7s1<="00111111";WHEN "00000001"=>led7s1<="00000110";WHEN "00000010"=>led7s1<="01011011";WHEN "00000011"=>led7s1<="01001111";WHEN "00000100"=>led7s1<="01100110";WHEN "00000101"=>led7s1<="01101101";WHEN "00000110"=>led7s1<="01111101";WHEN "00000111"=>led7s1<="00000111";WHEN "00001000"=>led7s1<="01111111";WHEN "00001001"=>led7s1<="01101111";WHEN OTHERS=>led7s1<="11111111";END CASE;CASE a2 ISWHEN "00000000"=>led7s2<="00111111";WHEN "00000001"=>led7s2<="00000110";WHEN "00000010"=>led7s2<="01011011";WHEN "00000011"=>led7s2<="01001111";WHEN "00000100"=>led7s2<="01100110";WHEN "00000101"=>led7s2<="01101101";WHEN "00000110"=>led7s2<="01111101";WHEN "00000111"=>led7s2<="00000111";WHEN "00001000"=>led7s2<="01111111";WHEN "00001001"=>led7s2<="01101111";WHEN OTHERS=>led7s2<="11111111"; END CASE;CASE a3 ISWHEN "0000"=>led7s3<="00111111";WHEN "0001"=>led7s3<="00000110";WHEN "0010"=>led7s3<="01011011";WHEN "0011"=>led7s3<="01001111";WHEN "0100"=>led7s3<="01100110";WHEN "0101"=>led7s3<="01101101";WHEN "0110"=>led7s3<="01111101";WHEN "0111"=>led7s3<="00000111";WHEN "1000"=>led7s3<="01111111";WHEN "1001"=>led7s3<="01101111";WHEN OTHERS=>led7s3<="11111111"; END CASE;CASE a4 ISWHEN "0000"=>led7s4<="00111111";WHEN "0001"=>led7s4<="00000110";WHEN "0010"=>led7s4<="01011011";WHEN "0011"=>led7s4<="01001111";WHEN "0100"=>led7s4<="01100110";WHEN "0101"=>led7s4<="01101101";WHEN "0110"=>led7s4<="01111101";WHEN "0111"=>led7s4<="00000111";WHEN "1000"=>led7s4<="01111111";WHEN "1001"=>led7s4<="01101111";WHEN OTHERS=>led7s4<="11111111"; END CASE;CASE a5 ISWHEN "0000"=>led7s5<="00111111";WHEN "0001"=>led7s5<="00000110";WHEN "0010"=>led7s5<="01011011";WHEN "0011"=>led7s5<="01001111";WHEN "0100"=>led7s5<="01100110";WHEN "0101"=>led7s5<="01101101";WHEN "0110"=>led7s5<="01111101";WHEN "0111"=>led7s5<="00000111";WHEN "1000"=>led7s5<="01111111";WHEN "1001"=>led7s5<="01101111";WHEN OTHERS=>led7s5<="11111111"; END CASE;CASE a6 ISWHEN "00"=>led7s6<="00111111";WHEN "01"=>led7s6<="00000110";WHEN "10"=>led7s6<="01011011";WHEN OTHERS=>led7s6<="11111111"; END CASE;END PROCESS;END one;顶层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY TOP ISPORT (CP,CLK,R0,S0:IN STD_LOGIC;SM0,SM1,SH0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);SH1:IN STD_LOGIC_VECTOR(1 DOWNTO 0);SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);Y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);PP:OUT STD_LOGIC);END;ARCHITECTURE XIA OF TOP ISSIGNAL Y0,Y1:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL Y2,Y3,Y4:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL Y5:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL YY6,YY1,YY2,YY3,YY4,YY5,YY7,PNUMBER:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL CO11,CO22:STD_LOGIC;component SECONDPORT (CLK1,R:IN STD_LOGIC;CO1:OUT STD_LOGIC;S0,S1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));end component;component MINUTEPORT (CLK2,R,S:IN STD_LOGIC;MM0,MM1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);CO2:OUT STD_LOGIC;M0,M1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));end component;component HOURPORT (CLK3,R,S:IN STD_LOGIC;HH0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);HH1:IN STD_LOGIC_VECTOR(1 DOWNTO 0);H0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);H1:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);NUMBER2:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));end component;component RINGPORT(CLK4,CLK5:IN STD_LOGIC;NUMBER:IN STD_LOGIC_VECTOR(7 DOWNTO 0);P:OUT STD_LOGIC);end component;component dec7sPORT(a1,a2:IN STD_LOGIC_VECTOR(7 DOWNTO 0);a3,a4,a5:IN STD_LOGIC_VECTOR(3 DOWNTO 0);a6:IN STD_LOGIC_VECTOR(1 DOWNTO 0);led7s1,led7s2,led7s3,led7s4,led7s5,led7s6:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));end component;BEGINYY7<="00000000";U1:SECOND PORT MAP(CLK1=>CLK,R=>R0,S0=>Y0,S1=>Y1,CO1=>CO11); U2:MINUTE PORT MAP(CLK2=>CO11,R=>R0,S=>S0,M0=>Y2,M1=>Y3,CO2=>CO22,MM0=>SM0,MM1=>SM1);U3:HOUR PORT MAP(CLK3=>CO22,R=>R0,S=>S0,H0=>Y4,H1=>Y5,HH0=>SH0,HH1=>SH1,NUMBER2=>PNUMBER);U4:RING PORT MAP(CLK4=>CO22,CLK5=>CLK,NUMBER=>PNUMBER,P=>PP); U5:dec7s PORT MAP(a1=>Y0,led7s1=>YY1,a2=>Y1,led7s2=>YY2,a3=>Y2,led7s3=>YY3,a4=>Y3,led7s4=>YY4,a5=>Y4,led7s5=>YY5,a6=>Y5,led7s6=>YY6);PROCESS(CP)VARIABLE SELL:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINIF CP'EVENT AND CP='1' THENIF SELL="111" THEN SELL:="000" ;ELSE SELL:=SELL+1;END IF;END IF;CASE SELL ISWHEN "000"=>Y<=YY1;WHEN "001"=>Y<=YY2;WHEN "010"=>Y<=YY3;WHEN "011"=>Y<=YY4;WHEN "100"=>Y<=YY5;WHEN "101"=>Y<=YY6;WHEN OTHERS=>Y<=YY7;END CASE;SEL<=SELL;END PROCESS;END;四、系统仿真/硬件验证五、设计中遇到的问题与体会自己想了哈。

基于EDA的数字式时钟毕业设计

基于EDA的数字式时钟毕业设计

摘要本设计为一个数字时钟万年历,具有年、月、日、时、分、秒计数显示功能,以24小时循环计数,具有校对功能。

本设计采用EDA技术,以硬件描述语言VHDL为系统逻辑描述手段设计文件,在Quartu sⅡ工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的万年历。

EDA是电子设计自动化(Electronic Design Automation)的缩写,EDA技术是现代电子工程领域的一门新技术,它提供了基于计数机和信息技术的电路系统设计方法。

随着EDA技术的发展,硬件电子电路的设计几乎全部可以依靠计算机来完成,这样就大大缩短了硬件电子电路设计的周期,从而使制造商可以快速开发出品种多,批量小的产品,以满足市场的众多需求。

系统主芯片采用EP2C35F484C8,由时钟模块、控制模块、计时模块、数据译码模块、显示模块组成。

经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成年、月、日和时、分、秒的分别显示,由按键输入进行数字钟的校时、清零、启停功能。

关键词数字时钟万年历;VHDL;FPGAAbstractThe design for a multi-functional digital clock calendar, with a year, month, day, hours, minutes and seconds count display to a 24-hour cycle count; have proof functions.The use of EDA design technology, hardware-description language VHDL description logic means for the system design documents, in Quartu s Ⅱtools environment, a top-down design, by the various modules together build a FPGA-based digital clock.Electronic design automation EDA (Electronic Design Automation) acronym, EDA technology of modern electrical engineering is a field of new technology, which provides information technology based on counting machine and the circuit design. With the development of EDA technology, hardware design of electronic circuits can rely on almost all computers to be completed, thus greatly reducing the hardware electronic circuit design cycle, enabling manufacturers to quickly develop varieties, small batch of products to meet the the many needs of the market.The main system chips used EP2C35F484C8,make up of the clock module, control module, time module, data decoding module, display and broadcast module. After compiling the design and simulation procedures, the programmable logic device to download verification, the system can complete the year, month, day and the hours, minutes and seconds respectively, using keys to modify, cleared , start and stop the digital clock.Keywords digital clock calendar; VHDL; FPGA目录摘要 (I)1 绪论 (1)1.1 选题背景 (1)1.1.1 课题相关技术的发展 (2)1.1.2 课题研究的必要性 (2)1.2 课题研究的内容 (3)2 FPGA简介 (4)2.1 FPGA概述 (4)2.2 FPGA基本结构 (4)2.3 FPGA系统设计流程 (7)2.4 FPGA开发编程原理 (9)3数字钟总体设计方案 (10)3.1 数字钟的构成 (10)3.2 数字钟的工作原理 (11)4 单元电路设计 (13)4.1 分频模块电路设计与实现 (13)4.2 校时控制模块电路设计与实现 (14)4.2.1 键盘接口电路原理 (14)4.2.2 键盘接口的VHDL描述 (15)4.3 计数模块设计与实现 (23)4.3.1 秒计数模块 (23)4.3.2 日计数模块 (26)4.3.3 月计数和年计数模块 (29)4.4 动态扫描及显示电路设计与实现 (31)4.4.1 动态扫描模块 (31)4.4.2 显示模块 (32)5 实验结论 (33)致谢 (34)参考文献 (36)附录1程序 (36)附录2英文资料及中文翻译 (35)附录3万年历整体框图 (35)1绪论现代社会的标志之一就是信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。

EDA数字时钟设计程序报告

EDA数字时钟设计程序报告

EDA实验报告EDA多功能数字时钟设计摘要:本实验中我们运用EDA课程中所学的知识,设计了一个拥有时间校正和闹钟功能的24小时制多功能数字时钟。

通过本实验,我们初步了解EDA的设计过程;初步掌握用VHDL语言的设计方法和设计思想;初步熟悉Max+Plus II软件平台的编程和仿真,并通过AEDK-EDA实验板下载模拟实现初步了解了硬件实现的方法。

关键词:数字时钟、VHDL、FPGA、Max+Plus II一、设计方案1.功能描述本次设计的多功能数字钟具有基本的计时功能和时间校正功能,同时可以进行定时闹铃。

计时功能采用24小时计时,显示时、分、秒。

其中分钟和秒模块采用60进制实现;小时设计了24进制的计数器.时间校正部分,分为时校时和分校时,分别通过控制时校正按钮和分校正按钮来实现.闹铃部分,先通过模式切换按钮进入闹钟定时,然后通过与时间校正相同的方法来进行闹铃时间的预置,当预置到达时间时,时钟将通过蜂鸣器进行闹铃。

2.硬件使用模块:EPF10K20TC144-4,模块10(蜂鸣器),模块17(脉冲源),模块21(开关设置),模块22(设置跳接模块), 模块23(键盘显示模块)3.VHDL程序设计框图二、 VHDL 源程序library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity clock isport(clk:in std_logic;----------------------时钟脉冲clk1:in std_logic;---------------------数码管选通时钟脉冲md1:in std_logic;----------------------模式选择:0为计时,1为闹钟 md2:in std_logic_vector(1 downto 0);---10为时校正(定时),01为分校正(定时) speak:out std_logic;-------------------闹钟 0dout:out std_logic_vector(6 downto 0);--数码管七段码输出 selout:out std_logic_vector(2 downto 0));---数码管选通输出 end clock;architecture one of clock issignal sel:std_logic_vector(2 downto 0);--------模6计数信号(数码管选通输入) signal hou1:std_logic_vector(3 downto 0);-------小时十位 signal hou2:std_logic_vector(3 downto 0);-------小时个位 signal min1:std_logic_vector(3 downto 0);-------分钟十位 signal min2:std_logic_vector(3 downto 0);-------分钟个位 signal seth1:std_logic_vector(3 downto 0);------定时小时十位 signal seth2:std_logic_vector(3 downto 0);------定时小时个位 signal setm1:std_logic_vector(3 downto 0);------定时分钟十位 signal setm2:std_logic_vector(3 downto 0);------定时分钟个位 signal sec1:std_logic_vector(3 downto 0);-------秒十位 signal sec2:std_logic_vector(3 downto 0);-------秒个位 signal h1:std_logic_vector(3 downto 0); ------输出小时十位 signal h2:std_logic_vector(3 downto 0); ------输出小时个位 signal m1:std_logic_vector(3 downto 0); ------输出分钟十位 signal m2:std_logic_vector(3 downto 0); ------输出分钟个位signal s1:std_logic_vector(3 downto 0); ------输出秒十位signal s2:std_logic_vector(3 downto 0); ------输出秒个位-------------------------------------------------begin----------------------------------------------模6计数(数码管选通)choice:process(clk1)beginif clk1'event and clk1='1' thenif sel="101" thensel<="000";elsesel<=sel+1;end if;end if;end process choice;selout<=sel;-----------------------------------------------小时十位h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2)beginif clk'event and clk='1' thenif (hou1="0010" and hou2="0011")and(min1="0101" and min2="1001") and(sec1="0101" and sec2="1001") thenhou1<="0000";elsif hou1="0010"and hou2="0011"and md1='0' and md2="10" then hou1<="0000";elsif (hou2="1001"and(min1="0101" and min2="1001") and (sec1="0101" and sec2="1001"))or (hou2="1001"and md1='0' and md2="10") thenhou1<=hou1+1;end if;end if;end process h110;-----------------------------------------------小时个位h220:process(clk,min1,min2,sec1,sec2,md1,md2,hou1)beginif clk'event and clk='1' thenif (hou1="0010" and hou2="0011")and(min1="0101" and min2="1001") and(sec1="0101" and sec2="1001") thenhou2<="0000";elsif hou2="1001"and(min1="0101" and min2="1001") and (sec1="0101" andsec2="1001") thenhou2<="0000";elsif (hou2="1001"and md1='0' and md2="10")or (hou1="0010"andhou2="0011"and md1='0' and md2="10") thenhou2<="0000";elsif ((min1="0101" and min2="1001") and (sec1="0101" and sec2="1001"))or (md1='0' and md2="10") thenhou2<=hou2+1;end if;end if;end process h220;-----------------------------------------------分钟十位m110:process(clk,min2,sec1,sec2,md1,md2)beginif clk'event and clk='1' thenif (min1="0101" and min2="1001") and (sec1="0101" and sec2="1001") then min1<="0000";elsif min1="0101"and min2="1001"and (md1='0' and md2="01")thenmin1<="0000";elsif (min2="1001"and (sec1="0101" and sec2="1001")) or (min2="1001"and md1='0' and md2="01")thenmin1<=min1+1;end if;end if;end process m110;----------------------------------------------分钟个位m220:process(clk,sec1,sec2,md1,md2)beginif clk'event and clk='1' thenif min2="1001"and (sec1="0101" and sec2="1001")thenmin2<="0000";elsif min2="1001"and (md1='0' and md2="01")thenmin2<="0000";elsif (sec1="0101" and sec2="1001") or(md1='0' and md2="01")thenmin2<=min2+1;end if;end if;end process m220;---------------------------------------------秒十位s110:process(clk,sec1,sec2)beginif clk'event and clk='1' thenif (sec1="0101" and sec2="1001")thensec1<="0000";elsif sec2="1001"thensec1<=sec1+1;end if;end if;end process s110;--------------------------------------------秒个位s220:process(clk,sec2)beginif clk'event and clk='1' thenif sec2="1001" thensec2<="0000";else sec2<=sec2+1;end if;end if;end process s220;-------------------------------------------时间设置小时部分sethour1:process(clk,seth2)beginif clk'event and clk='1' thenif seth1="0010"and seth2="0011" thenseth1<="0000";elsif seth2="1001" thenseth1<=seth1+1;end if;end if;end process sethour1;-------------------------------------------sethour2:process(clk,md1,md2,seth1)beginif clk'event and clk='1' thenif (seth1="0010"and seth2="0011")or seth2="1001"then seth2<="0000";elsif md1='1' and md2="10" theneth2<=seth2+1;end if;end if;end process sethour2;-------------------------------------------时间设置分钟部分setmin1:process(clk,setm1,setm2)beginif clk'event and clk='1' thenif setm1="0101"and setm2="1001"thensetm1<="0000";elsif setm2="1001"thensetm1<=setm1+1;end if;end if;end process setmin1;----------------------------------------------setmin2:process(clk,md1,md2,setm2)beginif clk'event and clk='1'thenif setm2="1001"thensetm2<="0000";elsif md1='1' and md2="01"thensetm2<=setm2+1;end if;end if;end process setmin2;--------------------------------------------闹铃speaker:process(clk1,hou1,hou2,min1,min2)beginif clk1'event and clk1='1'thenif seth1=hou1 and seth2=hou2 and setm1=min1 and setm2=min2 thenif(sec2="0000"or sec2="0010" or sec2="0100" or sec2="0110" or sec2="1000" )thenspeak<='1';else speak<='0';end if;end if;end if;end process speaker;-------------------------------------------数码管显示disp:process(sel,md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1,setm2) beginif sel="101" thencase h1 iswhen "0000"=>dout<="0111111";when "0001"=>dout<="0000110";when "0010"=>dout<="1011011";when others =>dout<="1000000";end case;elsif sel="100" thencase h2 iswhen "0000"=>dout<="0111111";when "0001"=>dout<="0000110";when "0010"=>dout<="1011011";when "0011"=>dout<="1001111";when "0100"=>dout<="1100110";when "0101"=>dout<="1101101";when "0110"=>dout<="1111101";when "0111"=>dout<="0000111";when "1000"=>dout<="1111111";when "1001"=>dout<="1101111";when others=>dout<="1000000";end case;elsif sel="011" thencase m1 iswhen "0000"=>dout<="0111111";when "0001"=>dout<="0000110";when "0010"=>dout<="1011011";when "0011"=>dout<="1001111";when "0100"=>dout<="1100110";when "0101"=>dout<="1101101";when others=>dout<="1000000";end case;elsif sel="010" thencase m2 iswhen "0000"=>dout<="0111111"; when "0001"=>dout<="0000110"; when "0010"=>dout<="1011011"; when "0011"=>dout<="1001111"; when "0100"=>dout<="1100110"; when "0101"=>dout<="1101101"; when "0110"=>dout<="1111101"; when "0111"=>dout<="0000111"; when "1000"=>dout<="1111111"; when "1001"=>dout<="1101111"; when others=>dout<="1000000"; end case;elsif sel="001" thencase s1 iswhen "0000"=>dout<="0111111"; when "0001"=>dout<="0000110"; when "0010"=>dout<="1011011"; when "0011"=>dout<="1001111"; when "0100"=>dout<="1100110"; when "0101"=>dout<="1101101"; when others=>dout<="1000000"; end case;elsif sel="000" thencase s2 iswhen "0000"=>dout<="0111111"; when "0001"=>dout<="0000110"; when "0010"=>dout<="1011011"; when "0011"=>dout<="1001111"; when "0100"=>dout<="1100110";when "0101"=>dout<="1101101";when "0110"=>dout<="1111101";when "0111"=>dout<="0000111";when "1000"=>dout<="1111111";when "1001"=>dout<="1101111";when others=>dout<="1000000";end case;end if;if md1='0' then---------------计时时间显示和设置模式h1<=hou1;h2<=hou2;m1<=min1;m2<=min2;s1<=sec1;s2<=sec2;else -------------闹铃时间显示和设置模式h1<=seth1;h2<=seth2;m1<=setm1;m2<=setm2;s1<="1111";s2<="1111";end if;end process disp;------------------------------------------end;三、仿真结果我们将上述VHDL程序通过Max+Plus II进行编译仿真,仿真结果符合我们设计所预想的功能。

EDA课程设计_数字时钟(闹钟)

EDA课程设计_数字时钟(闹钟)

课程设计说明书题目:闹钟学院(系):年级专业:学号:学生姓名:指导教师:教师职称:目录第1章摘要 (1)第2章设计方案……………………………………………………………………………2.1 VHDL简介……………………………………………………………………………2.2 设计思路……………………………………………………………………………第3章模块介绍……………………………………………………………………………第4章 Verilog HDL设计源程序…………………………………………………………第5章波形仿真图…………………………………………………………………………第6章管脚锁定及硬件连线………………………………………………………………心得体会 (17)参考文献 (18)第一章摘要在当今社会,数字电路产品的应用在我们的实际生活中显得越来越重要,与我们的生活联系愈加紧密,例如计算机、仪表、电子钟等等,使我们的生活工作较以前的方式更加方便、完善,带来了很多的益处。

在此次EDA课程,我的设计课题是闹钟,使用VHDL语言进行编程完成。

报告书主要由设计方案、模块介绍、设计源程序、仿真波形图和管脚锁定及硬件连线四部分组成。

设计方案主要介绍了我对于设计课题的大致设计思路,之后各个部分将会详细介绍设计组成及程序。

第二章设计方案§2.1 VHDL简介数字电路主要是基于两个信号(我们可以简单的说是有电压和无电压),用数字信号完成对数字量进行算术运算和逻辑运算的电路我们称之为数字电路,它具有逻辑运算和逻辑处理等功能,数字电路可分为组合逻辑电路和时序逻辑电路。

EDA技术,就是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门新技术。

EDA课程设计报告数字电子钟

EDA课程设计报告数字电子钟

数字钟一、【课题要求】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处产生进位,然后将它进行封装。

EDA电子钟多功能数字时钟课程设计(含代码)[优秀]

EDA电子钟多功能数字时钟课程设计(含代码)[优秀]

多功能数字时钟设计说明: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设计(II)实验报告数字电子钟

EDA设计(II)实验报告数字电子钟

EDA设计(II)实验报告-数字电子钟实验报告:数字电子钟一、实验目的本实验旨在通过使用EDA设计软件,设计并实现一个具有时、分、秒功能的数字电子钟。

通过学习使用EDA工具,掌握数字电路设计的基本步骤和技巧,培养实践能力和创新思维。

二、实验原理数字电子钟是一种以数字形式显示时间的装置,它利用了时、分、秒的计时原理。

核心部分包括一个时钟发生器,用于产生标准时间信号,以及一个计数器,用于对时间进行计数并显示。

此外,还需要一些控制逻辑来控制时、分、秒的进位和显示。

三、实验步骤1.设计准备:在开始设计之前,首先明确设计要求和功能。

考虑到实验的复杂性和可实现性,我们采用最简单的电路结构,即基于计数器和译码器的数字电子钟。

2.绘制电路图:使用EDA设计软件(如Quartus II)绘制电路图。

首先创建新项目,然后添加必要的元件(如74LS192计数器、74LS248译码器等),并根据设计要求连接元件。

3.编写程序:使用硬件描述语言(如VHDL或Verilog)编写计数器和译码器的程序。

确保程序能够实现所需的功能,并进行仿真测试。

4.编译和下载:将程序编译成可下载的配置文件,然后下载到FPGA开发板上。

5.硬件测试:连接开发板到PC,启动程序,观察数字电子钟的显示情况。

检查时间是否准确,各部分功能是否正常。

6.性能评估:对数字电子钟的性能进行评估,包括计时精度、稳定性等指标。

根据评估结果对设计进行优化。

四、实验结果与分析1.设计结果:经过上述步骤,我们成功地设计并实现了一个基于FPGA的数字电子钟。

通过EDA软件和硬件描述语言,我们实现了计数器和译码器的功能,并完成了程序的编写和下载。

2.性能分析:经过测试,我们的数字电子钟具有较高的计时精度和稳定性。

时间显示准确,各部分功能正常。

这表明我们的设计是成功的。

3.优化方向:虽然我们的数字电子钟已经具有较好的性能,但仍有一些方面可以优化。

例如,可以考虑添加更多的功能,如闹钟、温度显示等;也可以进一步优化电路结构,降低成本和提高性能。

EDA课程数字钟设计报告(1)

EDA课程数字钟设计报告(1)

EDA课程数字钟设计报告(1)EDA课程数字钟设计报告一、设计目标:本次设计要求设计一款数字钟,要求具有如下功能:1.计时功能:能够以时、分、秒的形式显示时间,每经过一秒钟就自动更新时间。

2.报时功能:能够在每个整点或半个小时时报时,并具有报时器关闭功能。

3.闹钟功能:设定闹钟时间后,在设定时间到达时自动响铃。

4.指示功能:能够以数字形式指示时间,并能在背景板上对时间进行显示。

二、方案设计:1.硬件设计:本次设计所需器材包括Cyclone IV E FPGA,七段数码管以及电路底板。

Cyclone IV E是英特尔公司推出的第四代Cyclone系列FPGA器件,具有可编程的逻辑元件、存储器单元和DSP功能单元等特点,足以满足本项目所需的复杂性。

七段数码管是一种显示器件,可以用来显示数字和一些字母。

本设计采用了常见的共阳极七段数码管。

电路底板是一个电路板,用于连接各种测试设备并测试控制电路。

2.软件设计:本设计的软件应该被分为以下几个部分来实现:1.时钟模块:该模块负责自动更新钟表,更新范围应该包括时、分、秒的更新。

2.闹钟模块:该模块负责实现闹钟功能,比较当前时间和设定时间,如果相同,则自动响铃。

3.报时模块:该模块负责在每个整点或半个小时时报时,并可自动关闭报时器。

4.数字显示模块:该模块主要用于以数字形式指示时间,并能在背景板上显示时间。

5.用户交互模块:该模块负责接受用户输入,开关闹钟、报时器,并显示设置的时间和状态信息。

三、实现:1. 外部电路该设计采用七段数码管显示时间,其中每个数码管都有8个引脚,分别对应7条段和一个共阳极。

在数字显示时,需要依次将每个数码管复位,并发送相应的数据信号,以显示所需的数字。

数字与LED的亮度控制采用PWM宽度调制技术,可实现手动调节亮暗。

2. 操作流程本设计操作流程为:用户首先输入设定的闹钟时间、关闭报时器的时间间隔及报时器、闹钟等的开启与关闭状态。

系统开始计时并根据所设定的时间执行相应操作。

EDA课程设计数字电子钟

EDA课程设计数字电子钟

一、设计任务及要求1、设计内容选用合适的可编程逻辑器件及外围电子元器件,设计一个数字电子钟,利用EDA 软件(QUARTUS Ⅱ)进行编译及仿真,设计输入采用Verilog HDL硬件描述语言输入法,并下载到EDA实验箱系统,连接外围电路,完成实际测试。

2、设计要求(1)具有时、分、秒计数显示功能,该电子钟正常显示小时、分钟、秒,各用2位数码管(共6位数码管),显示范围为0—23时59分59秒。

(2)具有复位清零的功能,且能够对计时系统的小时、分钟进行调整。

(3)定时响铃功能,设计计时到01分10秒后蜂鸣器开始响,持续时间10秒。

二、设计思想对于数字钟来说首先是时分秒的计数功能,然后能显示,附带功能是清零、调整时分,拟定如下方案:计时校正模块中,用1Hz时钟送入秒脉冲信号,“秒计数器”采用60进制,每累计60秒,发出一个“分脉冲”信号,该信号将被送到“分计数器”。

“分计数器”采用60进制计数器,每累计60分,发出一个“分脉冲”信号,该信号被送到“时计数器”。

“时计数器”采用24进制,可实现24小时的累计计数,时钟使用三个输入按键K1、K2、K3,分别控制数字钟的校时、校分、清零,每次分别按下K1、K2按键,对应的时、分计数就加1,按下K3,时间清零。

显示模块中,分别用六个八位数码管显示时钟的时十位、时个位、分十位、分个位、秒十位、秒个位,设置一个时钟脉冲用于扫描数码管显示。

最后的定时响铃功能,本报告设计为计时到01分10秒开始驱动蜂鸣器响,持续十秒。

三、程序清单Verilog HDL源程序:module clock(clk1,clk2,dx,wei,k1,k2,rst,led);input clk1,clk2,k1,k2,rst;output [2:0] wei;output [7:0] dx;output led;reg led;reg [2:0] wei;reg [7:0] dx;reg [7:0] as,ts,am,tm,ah,th,xs;reg [7:0] q;always @(posedge clk1 or posedge rst)beginif(rst){as,ts,xs,am,tm,xs,ah,th}<=8'b00000000; else if(k1)beginif(ah==8'b00001001)beginah=8'b00000000;th=th+8'b00000001;endelse if(ah==8'b00000011&&th==8'b00000010) beginth=8'b00000000;ah=8'b00000000;endelse ah=ah+8'b00000001;endelse if(k2)beginif(am==8'b00001001)beginam=8'b00000000;if(tm==8'b00000101)tm=8'b00000000;else tm=tm+8'b00000001;endelse am=am+8'b00000001;endelse if(as==8'b00001001)beginas=8'b00000000;if (ts==8'b00000101) begints=8'b00000000;if(am==8'b00001001)beginam=8'b00000000;if(tm==8'b00000101)begintm=8'b00000000;if(ah==8'b00001001)beginah=8'b00000000;th=th+8'b00000001;endelseif(ah==8'b00000011&&th==8'b00000010)beginth=8'b00000000;ah=8'b00000000;endelse ah=ah+8'b00000001;endelse tm=tm+8'b00000001;endelse am=am+8'b00000001;end else ts=ts+8'b00000001; endelse as=as+8'b00000001;endalways @(posedge clk2)beginif(wei==3'b111)wei<=3'b000;else wei<=wei+3'b001;endalways @(q or wei or k1)beginif(wei==3'b000)q<=as;else if(wei==3'b001)q<=ts;else if(wei==3'b010)q<=8'b11111111;else if(wei==3'b011)q<=am;else if(wei==3'b100)q<=tm;else if(wei==3'b101)q<=8'b11111111;else if(wei==3'b110)q<=ah;else if(wei==3'b111)q<=th;case(q)0:dx<=8'b11111100;1:dx<=8'b01100000;2:dx<=8'b11011010;3:dx<=8'b11110010;4:dx<=8'b01100110;5:dx<=8'b10110110;6:dx<=8'b10111110;7:dx<=8'b11100000;8:dx<=8'b11111110;9:dx<=8'b11110110;default dx<=8'b00000010;endcaseendalways @(posedge clk1)beginled=1;if(ts==8'b00000001&&am==8'b00000001&&tm==8'b00000000&&ah= =8'b00000000&&th==8'b00000000)led=~led;elseif(as==8'b00000000&&ts==8'b00000010&&am==8'b00000001&&tm= =8'b00000000&&ah==8'b00000000&&th==8'b00000000) led=0;endendmodule四、调试及总结1.仿真波形图2.总结通过此次课程设计,让我对EDA这门技术有了更深的体会,并更好的学会了使用QuartusⅡ软件进行硬件设计。

本科毕业设计论文--eda课程设计报告多功能数字钟设计

本科毕业设计论文--eda课程设计报告多功能数字钟设计

湖北大学物电学院EDA课程设计报告(论文)题目:多功能数字钟设计专业班级: 14微电子科学与工程*名:**时间:2016年12月20日指导教师:万美琳卢仕完成日期:2015年12月20日多功能数字钟设计任务书1.设计目的与要求了解多功能数字钟的工作原理,加深利用EDA技术实现数字系统的理解2.设计内容1,能正常走时,时分秒各占2个数码管,时分秒之间用小时个位和分钟个位所在数码管的小数点隔开;2,能用按键调时调分;3,能整点报时,到达整点时,蜂鸣器响一秒;4,拓展功能:秒表,闹钟,闹钟可调3.编写设计报告写出设计的全过程,附上有关资料和图纸,有心得体会。

4.答辩在规定时间内,完成叙述并回答问题。

目录(四号仿宋_GB2312加粗居中)(空一行)1 引言 (1)2 总体设计方案 (1)2.1 设计思路 (1)2.2总体设计框图 (2)3设计原理分析 (3)3.1分频器 (4)3.2计时器和时间调节 (4)3.3秒表模块 (5)3.4状态机模块 (6)3.5数码管显示模块 (7)3.6顶层模块 (8)3.7管脚绑定和顶层原理图 (9)4 总结与体会 (11)多功能电子表摘要:本EDA课程主要利用QuartusII软件Verilog语言的基本运用设计一个多功能数字钟,进行试验设计和软件仿真调试,分别实现时分秒计时,闹钟闹铃,时分手动较时,时分秒清零,时间保持和整点报时等多种基本功能关键词:Verilog语言,多功能数字钟,数码管显示;1 引言QuartusII是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL 以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程,解决了传统硬件电路连线麻烦,出错率高且不易修改,很难控制成本的缺点。

利用软件电路设计连线方便,修改容易;电路结构清楚,功能一目了然2 总体设计方案2.1 设计思路根据系统设计的要求,系统设计采用自顶层向下的设计方法,由时钟分频部分,计时部分,按键调时部分,数码管显示部分,蜂鸣器四部分组成。

eda数字闹钟课程设计

eda数字闹钟课程设计

eda数字闹钟课程设计一、课程目标知识目标:1. 学生能够理解数字闹钟的基本原理,掌握EDA(电子设计自动化)软件的使用方法;2. 学生能够运用所学的数字电路知识,设计并实现一个具有基本功能的数字闹钟;3. 学生了解数字闹钟中各个模块的功能和相互关系,如时钟模块、闹钟设置模块、显示模块等。

技能目标:1. 学生能够运用EDA软件进行电路设计,提高动手实践能力;2. 学生能够通过小组合作,培养团队协作能力和沟通能力;3. 学生掌握基本的调试方法,能够分析和解决数字闹钟设计过程中出现的问题。

情感态度价值观目标:1. 学生培养对电子设计制作的兴趣,激发创新精神和实践欲望;2. 学生认识到电子技术在日常生活中的重要作用,增强学以致用的意识;3. 学生通过课程学习,培养严谨、细致的学习态度,提高克服困难的勇气和自信心。

分析课程性质、学生特点和教学要求,本课程以实践操作为主,注重培养学生的动手能力和实际应用能力。

针对初中年级学生的认知水平,课程内容以基本原理和实际操作相结合的方式进行,使学生在学习过程中能够将理论知识与实际应用紧密结合,提高学生的学习兴趣和积极性。

通过本课程的学习,学生能够将所学知识运用到实际项目中,实现学以致用,提升自身的综合素质。

二、教学内容本课程教学内容主要包括以下三个方面:1. 数字闹钟原理学习:- 时钟基础知识:时钟信号、晶振、分频器等;- 数字电路基础:逻辑门、触发器、计数器等;- 闹钟功能模块:时钟模块、闹钟设置模块、显示模块等。

2. EDA软件操作与应用:- EDA软件安装与界面认识;- 原理图绘制:学习如何使用软件绘制数字电路原理图;- PCB布线:学习如何将原理图转化为PCB布线图。

3. 数字闹钟设计与制作:- 教学大纲制定:明确教学内容、进度安排和教学目标;- 实践操作:学生分组进行数字闹钟设计、制作和调试;- 评价与反馈:对学生的设计作品进行评价,及时给予反馈。

教学内容与教材关联性:本课程教学内容紧密结合教材中关于数字电路和EDA软件的相关章节,确保学生能够将所学理论知识应用于实际项目中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、课题要求:
(1)技术要求:1、掌握多功能数字钟的工作原理。

2、应用EDA技术,VHDL语言编写程序。

3、层次化设计,设计原理框图。

4,、硬件设计及排版。

(2)功能要求:1、基本功能:能进行正常的时、分、秒计时功能,分别
由6个数码管显示24小时、60分钟、60秒的计数器
显示。

2、扩展功能:(1)能够利用按键实现“校时”“校分”
“清零”功能。

(2)能利用扬声器做整点报时,整点前
五秒短声,整点长声。

(3)本人工作:负责软件部分,,编写各部分模块的VHDL程序,并且锁定
引脚,将程序下载到芯片中。

二、设计方案:
原理框图:
数字钟原理框图
一共有11个小模块:分频,片选,按键,小时,分,秒,显示模块,七段显示译码器,报时,扬声,36译码器。

左边第一个是时钟信号输入端,50Mhz到分频模块。

第二个为清零按键,第三个为校分按键,第四个为校时按键。

右边第一个为七段显示译码器输出端,第二个为扬声器输出端,第三个为6个数码管输出端。

中间模块为数字钟的核心,有计时,报时,校时功能。

三、单元模块设计
1、分频模块
该模块是将时钟脉冲50Mhz分频到1000、500和1,分别给报时模块和及时模块。

2、秒模块仿真图
该模块为60进制计数器,有分频模块得到的1hz进行计时,计时输出为秒的数值,在计时到59时进位1到co端。

当按下s3时,秒清零。

3.、分模块
仿真图
该模块也为60进制计数器,计时输出为分的数值。

在EN信号有效且时钟来时,计数器加1、在s2按下时,EN使能端有效,实现校分功能。

4、时模块
仿真图
该模块为24进制计数器,计时输出为小时的数值,在EN信号到来时,计数器
加1,在S1按下时,EN信号有效,实现校时功能。

5、片选模块
仿真图
该模块提供数码管片选信号。

6、按键模块
仿真图
该模块是有几个门电路组成,把它编写成一个模块,到时写程序方便。

该模块连接几个按键,由按键控制。

7、报时模块
仿真图
该模块为整点报时提供控制信号,当59分时,秒为50,52,54,56,58时,Q500输出“1”;秒为00时,Q1000输出“1”。

这两个信号经过逻辑门实现报时
功能。

8、BBB模块仿真图
该模块对应不同的片选信号送出不同的要显示的数据。

9、36译码器模块
仿真图
该模块为36译码器,为输出到数码管对应功能。

10、七段译码器模块仿真图
该模块为七段译码器,输出到数码管的每一个引脚,可以正确的点亮每一个数码管。

11、扬声模块
仿真图
该模块也为几个门电路组合,控制着对扬声器的输入,当时间到达某一点时,输出不同的脉冲信号到扬声器,给予扬声器信号。

四、顶层模块设计程序图:
总体框图
顶层文件将上面11个小模块集合到一起构成了总的程序,最终也是将这个顶层文件写到FPGA芯片中。

五、硬件电路设计
由另一位同学负责,收集好器件,将器件排版在电路板上,并将其焊接成成品。

六、硬件电路安装及调试
在EDA中,将顶层文件各个输入与输出端口锁定引脚。

锁定好引脚后将整个顶层文件下载到FPGA芯片中。

注:在下载时,要注意先安装USB程序,再设置IDE环境设置,然后再programmer 中选择自己要的文件,下载时必须先安装好芯片再接电源,下载成功后,先拔电源,再拔下USB。

下载好以后,用杜邦线将硬件和芯片的引脚连接好,检查无误后进行测试。

七、调试结果
为了每个模块的正确性,将一一对每个模块进行测试。

将芯片与硬件连接好,检查无误后,打开电源,此时硬件上的数码管开始计时,等到秒为59时,下一秒,分为1,秒为00。

然后用校时功能按键将分校分到59分,此时当秒为50时,扬声器开始响,并且到整点时,扬声器持续响一段时间。

按下S3,秒清零。

调试结束,基本功能能够计时,并且进位到分和时,扩展功能,按下S2和S3后能够进行分和时的校时,并且到整点时开始报时。

八、设计中遇到的问题及解决方案
我负责软件部分,开始在编写程序时根本无从下手,再找了一些资料后终于对数字钟有些了解。

用EDA设计每一个模块,都需要一个一个的去仿真,看程序对不对,经常在一些小程序上出现问题。

本来有好多门电路,发现放在顶层文件中比较麻烦,所以将这些门电路组成两个模块,按键模块和扬声模块,这样方便顶层文件的编写。

分频模块,由于要将50MHz的脉冲分到1000Hz,500Hz,和1Hz,分频量比较大,不能仿真,只能先改小一下数据,验证程序是否正确。

36译码器部分,本来使用的是38译码器,发现多了2个输入,有6个数码管,但是38译码器并不影响输出。

在下载过程,锁定引脚,发现芯片上的引脚与硬件上的引脚是反的,数码管显示的是乱码。

当数字钟的时分秒顺序错了以后,不需要重新锁定引脚,只要将对应的杜邦线对调一下就行了。

我们校时用的按键是自锁开关,其实只要改成下拉电阻就可以了。

九、收获与体会
经过两个星期的数电课程设计,收获很大,让我们自己设计了数电模型,从软件和硬件上学到了很多知识。

两个同学一个设计软件,一个设计硬件,不仅提高了学习能力,还培养了团队合作能力。

我负责的是软件部分,这学期正好学习了EDA技术,把它应用到了软件的程序编写中来。

我们设计的是数字钟,虽然数字钟看起来很简单,但是要把每个模块全部搞在一起还是有点难度的。

开始经过上网及图书馆借书来了解数字钟的结构与工作原理,把它每一部分的模块摸透清楚后,在开始编程,写入芯片。

同时还要把软件与硬件结合起来,在各自做各自的工作时还要紧密结合自己组员的工作,只有两个人的东西做完后,组合起来才算真正的完成。

首先明确好数字钟的功能,基本功能:能进行正常的时、分、秒计时功能,分别由6个数码管显示24小时、60分钟、60秒的计数器显示。

扩展功能:(1)能够利用按键实现“校时”“校分”“清零”功能。

(2)能利用扬声器做整点报时,整点前五秒短声,整点长声。

然后设计好总的原理图,将功能全部覆盖进去,设计每个模块,用EDA中的VHDL编写程序,然后再仿真,根据仿真图检测自己的程序是否正确。

当每个模块在电脑中仿真无误时,编写顶层文件,把各
个小模块连接到一起,然后将整个程序画出原理框图,与自己预测的相比较。

当软件做好后,用下载线将自己写的程序写进芯片中,不过此时要注意先连接好线才能开电源,当下载后,要先关电源,再拔USB接口。

下载后与同组同学用杜邦线连接开始测试,第一次先将整个程序写入,发现没有正确显示,然后一个一个模块检测后,发现了问题,终于数字钟做好了,基本功能与扩展功能都出来了。

这次课程设计后,软件方面有着明显的提高,而且合作啊能力也提高了,作品完成的还是很好的。

首先要感谢老师的细心教导,让我学习到了好多知识,从硬件到软件,不仅仅是知识上,还有能力上,还要感谢同组同学,没有他的硬件,这次数字钟也完不成。

这次收获还是很大的,自己的努力与汗水终于没有出,总结这次课程设计的经验,在以后的课程设计中能够更好的发挥!
十、参考文献:
1、《EDA技术与VHDL》清华大学出版社
2、《数字系统设计与Verilog HDL(第三版)》王金明编著
3、《EDA技术与应用(第2版)》江国强编著
4、《EDA技术实用教程》科学出版社。

相关文档
最新文档