EDA数字钟实验报告
EDA数字钟

电子技术课程设计II数字电子钟实验报告一、课程设计的目的1.掌握简单数字系统的设计方法,培养数字电路的设计能力。
2.掌握数字电子钟的设计制作方法。
二、课程设计的内容及要求1.设计一个数字电子钟电路。
要求:a)按24小时制直接显示“时”、“分”、“秒”。
b)当电路发生走时误差时具有校时功能。
c)具有整点报时功能。
2.中、小规模集成电路组成数字电子钟,并在实验仪器上进行组装和测试。
3.画出各单元电路图、整机逻辑框图和逻辑电路图,写出设计和试验总结报告。
三、可选用器材1.数字电路试验箱2.集成电路:74LS90、74LS160、74LS00、74LS20、74LS863.晶振4.电阻5.电容6.数码管7.开关:单刀双掷8.发光二极管备注:若设计方案好,选择其他器件,提前向老师说明。
四、数字钟的基本工作原理数字钟一般都由计数器、译码器、显示器等几部分组成。
不同进制的计数器、译码器和显示器组成计时系统。
秒信号送入计数器进行计数,把累计的结果以“时”、“分”、“秒”、“星期”的数字显示出来。
各部分单元电路的基本设计思想和电路图如下:1.60进制秒、分计数器数字钟的秒和分是60进制的计数器,从00~59计时,都各选用两片74LS90集成片来实现。
实现的方法采用反馈清零法。
如图1所示电子技术课程设计II图1 60进制计数器2.24进制小时计数器小时为24进制计数,由00~23时。
跟秒、分计数器一样,选用2片74LS90集成片来实现,实现方法为反馈清零法。
如图2所示。
图2 24进制计数器3.7进制星期计数器星期的显示需要一个7进制计数器。
设计思路是想办法让它显示1~6,8,来表示1周的七天。
因为数码管显示的数字8,和汉字中的日字一样,所以用来表示周日比较人性化。
选用1片74LS90集成片,作0~6的7进制计数器。
想办法让它把0显示为8。
这又有两种做法,具体分析如下:让0时的计数器状态转换为8的状态,而1~6时的状态不变,这样译码器译码后,数码管显示的将是8,1,2,3,4,5,6形式,而不是0,1,2,3,4,5,6。
eda多功能数字钟实验报告

eda多功能数字钟实验报告
《EDA多功能数字钟实验报告》
摘要:
本实验通过对EDA多功能数字钟的组装和测试,探索了数字钟的功能和性能。
实验结果表明,EDA多功能数字钟具有精准的时间显示、多种闹铃设置、温度
和湿度监测等功能,是一款实用且性能稳定的数字钟产品。
引言:
数字钟作为现代生活中不可或缺的家居用品,其功能和性能一直备受关注。
本
次实验选择了EDA多功能数字钟作为研究对象,旨在通过对其组装和测试,深
入了解数字钟的各项功能和性能指标。
实验方法:
1. 组装数字钟:按照产品说明书,将数字钟的各个部件进行组装,并确保连接
牢固。
2. 功能测试:测试数字钟的时间显示、闹铃设置、温度和湿度监测等功能。
3. 性能测试:对数字钟的时间精准度、闹铃响铃声音、温度和湿度监测准确度
等进行测试。
实验结果:
1. 时间显示:数字钟的时间显示精准,误差在1秒以内。
2. 闹铃设置:数字钟支持多组闹铃设置,响铃声音清晰、音量适中。
3. 温度和湿度监测:数字钟的温湿度监测准确度高,与实际环境温湿度相符合。
讨论:
通过本次实验,我们发现EDA多功能数字钟具有精准的时间显示、多种闹铃设
置、温度和湿度监测等功能,性能稳定,符合用户对数字钟的基本需求。
同时,数字钟的组装和操作也相对简单,适合家庭使用。
结论:
EDA多功能数字钟是一款实用且性能稳定的数字钟产品,能够满足用户对数字
钟的基本需求。
在未来的生活中,数字钟将继续扮演重要的角色,为人们的生
活提供便利。
致谢:
感谢实验中提供支持和帮助的老师和同学们。
EDA 数字时钟实训报告

EDA实训报告指导教师 朱小祥 田 欢专业电子信息工程技术班级电信1001姓名张慧情日期2012年6月11日—14日一、实训目的1、了解数字钟的工作原理。
2、进一步熟悉用VHDL语言编写驱动七段码管显示的代码。
3、掌握VHDL编写中的一些小技巧。
二、实训原理多功能数字钟应该具有的功能有:显示时-分-秒、整点报时、小时和分钟可调等基本功能。
首先要知道钟表的工作机理,整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,但是需要注意的是,小时的范围是从0~23时。
在实训中为了显示的方便,由于分钟和秒钟显示的范围都是从0~59,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD码)显示个位,对于小时因为它的范围是从0~23,所以可以用一个2位的二进制码显示十位,用4位二进制码(BCD码)显示个位。
实训中由于七段码管是扫描的方式显示,所以虽然时钟需要的是1Hz时钟信号,但是扫描确需要一个比较高频率的信号,因此为了得到准确的1Hz信号,必须对输入的系统时钟进行分频。
对于整点报时功能,用户可以根据系统的硬件结构和自身的具体要求来设计。
本实训设计的是当进行整点的倒计时5秒时,让LED来闪烁进行整点报时的提示。
三、实训内容本实验的任务就是设计一个多功能数字钟,要求显示格式为小时-分钟-秒钟,整点报时,报时时间为10秒,即从整点前10秒钟开始进行报时提示,喇叭开始发声,直到过整点时,在整点前5秒LED开始闪烁,过整点后,停止闪烁。
调整时间的的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时,S2调整分钟,每按下一次,分钟增加一分钟。
另外用按键作为系统时钟复位,复位后全部显示00-00-00。
四、实训步骤1、建立工程文件运行QUARTUSII软件选择软件中的菜单File>New Project Wizard,点击Next,将工程文件保存至制定文件夹中,并用所编程序的实体名命名工程文件,点击Next,继续点击NEXT,选择Cyclone EP1C12F324C8芯片,点击Finsh。
电子设计自动化(EDA)_数字时钟程序模块(LED数码管显示)_实验报告

电子设计自动化(EDA)—数字时钟LED数码管显示二、实验内容和实验目的1. 6个数码管动态扫描显示驱动2. 按键模式选择(时\分\秒)与闹钟(时\分)调整控制,3. 用硬件描述语言(或混合原理图)设计时、分、秒计数器模块、闹钟模块、按键控制状态机模块、动态扫描显示驱动模块、顶层模块。
要求使用实验箱左下角的6个动态数码管(DS6 A~DS1A)显示时、分、秒;要求模式按键和调整按键信号都取自经过防抖处理后的按键跳线插孔。
实验目的: 1)学会看硬件原理图, 2)掌握FPGA硬件开发的基本技能3)培养EDA综合分析、综合设计的能力三、实验步骤、实现方法(或设计思想)及实验结果主要设备: 1)PC机, 2)硬件实验箱, 3)Quartus II软件开发平台。
1.打开Quartus II , 连接实验箱上的相关硬件资源, 如下图1所示。
2.建立新文件, 选择文本类型或原理图类型。
3. 编写程序。
4.编译5. 仿真, 加载程序到芯片, 观察硬件输出结果(数码管显示)6.结果正确则完成。
若结果不正确, 则修改程序, 再编译, 直到正确。
模24计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY count24 ISPORT(clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END count24;ARCHITECTURE arc OF count24 ISSIGNAL a,b:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(clk,en)BEGINhh<=a;hl<=b;IF(clk'EVENT AND clk='1') THENIF(en='1') THENIF(a="0010" AND b="0011") THENa<="0000";b<="0000";ELSE IF(b="1001") THENa<=a+'1';b<="0000";ELSE b<=b+'1';END IF;END IF;IF(a="0010" AND b="0010") THENcout<='1';ELSE cout<='0';END IF;END IF;END IF;END PROCESS;END arc;模60计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY count60 ISPORT(clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END count60;ARCHITECTURE arc OF count60 ISSIGNAL a,b:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL sout:STD_LOGIC;BEGINPROCESS(clk)BEGINhh<=a; hl<=b;IF(clk'EVENT AND clk='1') THENIF(en='1') THENIF(a="0101" AND b="1001") THENa<="0000";b<="0000";ELSE IF(b="1001") THENa<=a+'1';b<="0000";ELSE b<=b+'1';END IF;END IF;END IF;END IF;END PROCESS;sout<='1' WHEN a="0101" AND b="1001" ELSE '0';cout<=sout AND en;END arc;4-7显示译码模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY segment4to7 ISPORT(s:IN STD_LOGIC_VECTOR(3 DOWNTO 0);a,b,c,d,e,f,g:OUT STD_LOGIC);END segment4to7;ARCHITECTURE arc OF segment4to7 IS SIGNAL y:STD_LOGIC_VECTOR(6 DOWNTO 0); BEGINa<= y(6);b<= y(5);c<= y(4);d<= y(3);e<= y(2); f<= y(1);g<= y(0);PROCESS(s)BEGINCASE s ISWHEN "0000"=>y<="1111110"; WHEN "0001"=>y<="0110000"; WHEN "0010"=>y<="1101101"; WHEN "0011"=>y<="1111001"; WHEN "0100"=>y<="0110011"; WHEN "0101"=>y<="1011011"; WHEN "0110"=>y<="1011111"; WHEN "0111"=>y<="1110000"; WHEN "1000"=>y<="1111111"; WHEN "1001"=>y<="1111011"; WHEN OTHERS=>y<="0000000"; END CASE;END PROCESS;END arc;带闹钟控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mode_adjust_with_alarm ISPORT (adjust,mode,clk1hz: IN STD_LOGIC;clkh,enh,clkm,enm,clks,enha: OUT STD_LOGIC;clkh_a,clkm_a:OUT STD_LOGIC;mode_ss: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END mode_adjust_with_alarm;ARCHITECTURE arc OF mode_adjust_with_alarm ISTYPE mystate IS (s0,s1,s2,s3,s4,s5);SIGNAL c_state,next_state: mystate;BEGINPROCESS (c_state)BEGINCASE c_state ISWHEN s0=> next_state <= s1; clkh<=clk1hz; clkm<=clk1hz; clks<=clk1hz;enh<='0'; enm<='0'; enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="000";WHEN s1=> next_state <= s2; clkh<=adjust; clkm<= '0'; clks<='0';enh<='1'; enm<='0';enha<='0'; clkh_a<= '0';clkm_a<= '0'; mode_ss <="001";WHEN s2=> next_state <= s3; clkh<= '0'; clkm<=adjust; clks <= '0';enh<='0';enm<='1';enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="010";WHEN s3=> next_state <= s4; clkh<= '0'; clkm<= '0'; clks<=adjust;enh<='0'; enm<='0';enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="011";WHEN s4=> next_state <= s5; clkh<= clk1hz; clkm<= clk1hz; clks<=clk1hz;enh<='0';enm<='0';enha<='1'; clkh_a<=adjust; clkm_a<= '0'; mode_ss <="100";WHEN s5=> next_state <= s0; clkh<= clk1hz; clkm<= clk1hz; clks<=clk1hz;enh<='0'; enm<='0'; enha<='0'; clkh_a<= '0'; clkm_a<=adjust; mode_ss <="101";END CASE;END PROCESS;PROCESS (mode)BEGINIF (mode'EVENT AND mode='1') THENc_state<=next_state ;END IF;END PROCESS;END arc;扫描模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY scan ISPORT(clk256hz:IN STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END scan;ARCHITECTURE arc OF scan ISTYPE mystate IS (s0, s1,s2,s3,s4,s5);SIGNAL c_state,next_state: mystate;BEGINPROCESS ( c_state )BEGINCASE c_state ISWHEN s0=> next_state <=s1; ss<="010";WHEN s1=> next_state <=s2; ss<="011";WHEN s2=> next_state <=s3; ss<="100";WHEN s3=> next_state <=s4; ss<="101";WHEN s4=> next_state <=s5; ss<="110";WHEN s5=> next_state <=s0; ss<="111";END CASE;END PROCESS;PROCESS (clk256hz)BEGINIF (clk256hz'EVENT AND clk256hz='1') THENc_state<=next_state ;END IF;END PROCESS;END arc;复用模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux ISPORT(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);alarm:OUT STD_LOGIC);END mux;ARCHITECTURE arc OF mux ISSIGNAL a,hhtmp,hltmp,mhtmp,mltmp,shtmp,sltmp:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(mode_ss)BEGINCASE mode_ss ISWHEN "000"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "001"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "010"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "011"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "100"=> hhtmp<=hha; hltmp<=hla; mhtmp<=mha; mltmp<=mla; shtmp<=sh; sltmp<=sl;WHEN "101"=> hhtmp<=hha; hltmp<=hla; mhtmp<=mha; mltmp<=mla; shtmp<=sh; sltmp<=sl;WHEN OTHERS=>hhtmp<="0000";hltmp<="0000";mhtmp<="0000";mltmp<="0000";shtmp<="0000";sltmp<="0000"; END CASE;END PROCESS;PROCESS(ss)BEGINCASE ss ISWHEN "010"=> a <=hhtmp;WHEN "011"=> a <=hltmp;WHEN "100"=> a <=mhtmp;WHEN "101"=> a <=mltmp;WHEN "110"=> a <=shtmp;WHEN "111"=> a <=sltmp;WHEN OTHERS => a <="0000";END CASE;y<=a;END PROCESS;alarm<='1' WHEN ((hh=hha)AND(hl=hla)AND(mh=mha)AND(ml=mla)) ELSE '0';END arc;闪烁模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY blink_control ISPORT(ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);blink_en:OUT STD_LOGIC);END blink_control;ARCHITECTURE arc OF blink_control ISBEGINPROCESS (ss,mode_ss)BEGINIF(ss="010" AND mode_ss="001") THEN blink_en<='1';ELSIF(ss="011" AND mode_ss="001") THEN blink_en<='1';ELSIF(ss="100" AND mode_ss="010") THEN blink_en<='1';ELSIF(ss="101" AND mode_ss="010") THEN blink_en<='1';ELSIF(ss="110" AND mode_ss="011") THEN blink_en<='1';ELSIF(ss="111" AND mode_ss="011") THEN blink_en<='1';ELSIF(ss="010" AND mode_ss="100") THEN blink_en<='1';ELSIF(ss="011" AND mode_ss="100") THEN blink_en<='1';ELSIF(ss="100" AND mode_ss="101") THEN blink_en<='1';ELSIF(ss="101" AND mode_ss="101") THEN blink_en<='1';ELSE blink_en<='0';END IF;END PROCESS;END arc;Top文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY design3 ISPORT (mode,adjust,clk1hz,clk2hz,clk256hz,clk1khz:IN STD_LOGIC;alarm,a,b,c,d,e,f,g:OUT STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END design3;ARCHITECTURE arc OF design3 ISCOMPONENT mode_adjust_with_alarm PORT (adjust,mode,clk1hz: IN STD_LOGIC;clkh,enh,clkm,enm,clks,enha: OUT STD_LOGIC;clkh_a,clkm_a:OUT STD_LOGIC;mode_ss: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END COMPONENT;COMPONENT scan PORT (clk256hz:IN STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END COMPONENT;COMPONENT segment4to7 PORT (s: IN STD_LOGIC_VECTOR(3 DOWNTO 0);a,b,c,d,e,f,g: OUT STD_LOGIC);END COMPONENT;COMPONENT mux PORT(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);alarm:OUT STD_LOGIC);END COMPONENT;COMPONENT blink_control PORT(ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);blink_en:OUT STD_LOGIC);END COMPONENT;COMPONENT count24 PORT (clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;COMPONENT count60 PORT (clk ,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;SIGNALclkh,enh,clkm,enm,clks,clkh_a,clkm_a,coutm,couts,coutm_en,couts_en,cout,vcc,coutma_en,coutma,alarm1,bli nk_en,blink_tmp,enha: STD_LOGIC;SIGNAL mode_ss,ss1:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL hh,hl,mh,ml,sh,sl,hha,hla,mha,mla,y,i:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINvcc<='1';coutm_en <= enh OR coutm;couts_en <= enm OR couts;coutma_en<= enha OR coutma;blink_tmp<=blink_en and clk2hz;i(3)<=y(3) OR blink_tmp;i(2)<=y(2) OR blink_tmp;i(1)<=y(1) OR blink_tmp;i(0)<=y(0) OR blink_tmp;ss<=ss1;alarm<=alarm1 AND clk1khz;u1:mode_adjust_with_alarmPORT MAP( adjust,mode,clk1hz,clkh,enh,clkm,enm,clks,enha,clkh_a,clkm_a,mode_ss);u2:count24 PORT MAP(clkh,coutm_en,cout,hh,hl);u3:count60 PORT MAP(clkm,couts_en,coutm,mh,ml);u4:count60 PORT MAP(clks,vcc,couts,sh,sl);u5:count24 PORT MAP(clkh_a,coutma_en,cout,hha,hla);u6:count60 PORT MAP(clkm_a,vcc,coutma,mha,mla);u7:mux PORT MAP(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla,ss1,mode_ss,y,alarm1);u8:scan PORT MAP(clk256hz,ss1);u9:blink_control PORT MAP(ss1,mode_ss,blink_en);u10:segment4to7 PORT MAP(i,a,b,c,d,e,f,g);END arc;实验结果:数字钟包括正常的时分秒计时, 实验箱左下角的6个动态数码管(DS6 A~DS1A)显示时、分、秒。
数字钟EDA实验报告

EDA实验报告书题目数字钟学生姓名学号系别物理与信息工程系专业电子信息科学与技术指导教师讲师2014年10月26日摘要数字钟是人们日常生活中经常使用的计时工具,本次的课程设计是基于Verilog HDL的多功能数字钟,完成时、分、秒的显示功能。
设计利用Verilog HDL语言自顶向下的设计理念,突出其作为硬件描述语言的良好的可读性、可移植性以及易于理解等优点。
程序下载到FPGA芯片后,可用于实际的数字钟显示中。
此次设计的逻辑结构主要由分频器、计数器和译码显示器三个模块构成。
分频模块将40Mhz系统基准时钟分频产生两路时钟信号,一路是1HZ的数字钟计时工作频率,一路是数码管动态显示的扫描频率;计时模块对1HZ的时钟信号进行计时,分为时、分、秒三个部分;与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,已得到广泛的使用。
数字钟的设计方法有许多种,例如,可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟;钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
译码显示模块采用动态扫描的方式完成数码管的显示。
最后通过主模块调用三个子模块函数完成整个设计。
1)数字钟电路的基本结构框图如下,它是由两个60进制计数器和一个24进制计数器组成,分别对秒,分,小时进行计时,当计时到23时59分59秒时,再来一个时钟脉冲,则计数器清零,重新开始计时。
clkco 秒分时1、20分频器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin is --实体定义为fenpin即本程序实现20分频的功能port(clk:in std_logic;--输入clk接外部晶振clk1:out std_logic;--输出clk1为20分频后的时钟shu:out std_logic_vector(4 downto 0)--shu没有实际意义,用于对外部时钟计数,目的是判断是否为20分频);end fenpin;architecture one of fenpin issignal c1,c2:std_logic_vector(4 downto 0);--c1、c2用于内部计数的信号signal m1:std_logic;--m1用于传递输出clk1的信号beginprocess(clk,c1)beginif clk'event and clk='1' then--时钟上升沿有效if(c1=9) then c1<="00000";m1<=not m1;c2<="00000";--记满10次后复位else c1<=c1+1;c2<=c2+1;--计数少于10次加1end if;end if;end process;clk1<=m1;shu<=c2;--将信号的结果传递给输出end one;2、24进制计数器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt24 is --定义实体时钟的时port(clk:in std_logic;--定义时钟、复位、输入使能、置输控制端ge:out std_logic_vector(3 downto 0 );--定义时表的个位shi:out std_logic_vector(3 downto 0 );--定义时表的十位c0:out std_logic --定义进位输出end cnt24;architecture two of cnt24 isbeginprocess(clk)variable Q:std_logic_vector(4 downto 0);--Q用于内部计数的变量variable t:std_logic_vector(4 downto 0);--t用于过度的变量,应为输出量与计数量数组的位数不同beginif clk'event and clk='1' then --时钟上升沿有效if(Q>=23) then Q:="00000";c0<='1'; shi<="0000"; ge<="0000";--Q实现0--23的计数else Q:=Q+1;c0<='0';if(Q>19 and Q<24) thenshi<="0010";t:=(Q-"10100");ge<=t(3 downto 0);else if(Q>9 and Q<20) thenshi<="0001";t:=(Q-"01010");ge<=t(3 downto 0);--Q位于10--19之间十位和个位的情况elseshi<="0000";t:=(Q-"00000");ge<=t(3 downto 0);--Q位于20--23之间十位和个位的情况end if;end if;end if;end if;end process;end two;3、60进制计数器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt60 is --定义实体时钟的时port(clk:in std_logic;--定义时钟、复位、输入使能、置输控制端ge:out std_logic_vector(3 downto 0 );--定义时表的个位shi:out std_logic_vector(3 downto 0 );--定义时表的十位c0:out std_logic --定义进位输出);end cnt60;architecture two of cnt60 isbeginprocess(clk)variable Q:std_logic_vector(5 downto 0);--Q为内部计数变量variable t:std_logic_vector(5 downto 0);--t为内部变量与输出间的过度变beginif clk'event and clk='1' then --时钟上升沿有效if(Q>=59) then Q:="000000";c0<='1'; shi<="0000"; ge<="0000";--Q实现0--23的计数else Q:=Q+1;c0<='0';if(Q>49 and Q<60) thenshi<="0101";t:=(Q-50);ge<=t(3 downto 0);else if(Q>39 and Q<50) thenshi<="0100";t:=(Q-40);ge<=t(3 downto 0);--Q位于10--19之间十位和个位的情况else if(Q>29 and Q<40) thenshi<="0011";t:=(Q-30);ge<=t(3 downto 0);else if(Q>19 and Q<30)then shi<="0010";t:=(Q-20);ge<=t(3 downto 0);else if(Q>9 andQ<20) then shi<="0001";t:=(Q-10);ge<=t(3 downto 0);elseshi<="0000";t:=(Q-0);ge<=t(3 downto 0);--Q位于20--23之间十位和个位的情况end if;end if;end if;end if;end if;end if;end if;end process;end two;4、结合后的模型:仿真1、分频器波形仿真图2、60进制计数器波形仿真图3、24进制计数器波形仿真图4、结合后波形仿真图实验总结这次数字钟的实验,不仅巩固了以前所学过的知识,而且学到了很多书本上学不到的知识,同时锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,对未来有了更多的信心。
EDA数字钟实验报告

5.改错并重新编译;
6.建立仿真波形文件并进行仿真。单击File菜单下的New,选择Vector Waveform File单击OK,创建一个后缀名为*.vwf的仿真波形文件,按照课件上的方法编辑输入波形,保存,进行仿真,验证仿真结果是否正确;
7.选择器件及分配引脚,重新编译;
四.心得体会
对于我们刚熟悉QuartusⅡ的新手来说,这是一个比较大的实现程序了。通过多VHDL语句的掌握以及真值表的理解来控制LED的七段显示译码。先设计一个4位计数器,使其可以从1计数到15.分别用1~F表示,然后通过译码器显示。通过这次实验进一步增进了我们对VHDL语言的了解,提高了发现错误及纠错的能力。
控制模块:数字钟要满足题目要求,必须有5种状态:正常计时、校小时、校分钟、闹铃设置小时、闹铃设置分钟,所以至少用三个二进制数字表示这5种状态,“000”、“001”、“010”、“011”、“100”,当setup为低电平时,状态在这五种状态之间转换,当setup为高电平时,就停在该状态,等待其他操作。主控组合进程程序:
8.根据引脚分配在试验箱上进行连线,使用LED进行显示;
9.程序下载,观察实验结果并记录;
三.仿真波形:
四.心得体会
通过此次课堂的亲自操作,大致了解了quartus的工作流程和操作步骤,对数字电路中的38译码器和半加器的原理有了新的认识,其中,全加器可以通过之前半加器的原理图生成文件以及与门和或门结合来实现。同时对VHDL语言的语法结构和设计方法也有了初步认识,虽然还不能独立编写程序但是却可以看懂程序了,对这门编程语言有浓厚的兴趣!
二.实验步骤
学习QuartusⅡ软件的使用方法:
1.进入QuartusⅡ环境;
EDA数字钟实验报告

EDA数字钟实验报告EDA实验EDA实验数字钟一.实验任务用FPGA器件和EDA技术的设计已知条件:XXX软件XXX实验开发装臵基本功能:1.以数字形式显示时,分,秒的时间;2.小时计数器为24进制;3.分,秒计数器为60进制;多功能数字电子钟设计:输入变量:时钟CPS,直接清零RD;输出变量:小时H[7..4]、H[3..0]为8421BCD码输出,其时钟为CLK;分计时M[7..4]、M[3..0]为8421BCD 码输出,其时钟为CPM;秒计时S[7..4]、S[3..0]为8421BCD码输出,其时钟为CLK;RD为清零信号等。
二.仿真与波形1.60进制原理图如下;其仿真波形如下:2.24进制原理图如下:其仿真波形如下:3.数字钟的整个电路图如下:逻辑电路说明:由电路分析得知,多功能数字电子钟最基本的计时电路在CLK(秒)时钟作用下,电路输出变量为H[7..0],M[7..0]及S[7..0],按8421BCD码正常走时,电路为异步时序逻辑电路4.数字电子钟的仿真波形如下:仿真波形分析及结论:由仿真波形分析得知在CLK(秒)时钟作用下,电路正常走时。
分析过程完全符合多功能数字电子钟最基本的计时功能,逻辑电路设计正确。
三.感想:这次的课程设计的内容是《EDA多功能数字钟》,这次课程设计验我花了两个上午的时间。
虽然我是顺利的完成了任务,但是在实验中我还是发现了自己存在的一些问题。
在课程设计中我经常做完上一步就忘记了下一步该怎么做,总是一边看老师的课件一边做,这样一来浪费了不少时间,这是由于我对软件的操作不熟练的缘故,因此我觉得我应该在今后的日子里多练习一下这个MA_+PLUS软件,做到在以后的学习及工作中能利用这个软件快速的正确的完成任务。
在实验中我还经常出现掉步骤的现象,比如经常忘记“指向当前文件”,从而导致得到的结果是错误的甚至根本就得不到结果,这全都是因为粗心大意造成的。
在今后的日子里我会努力的去改掉这个毛病,从而高质量的完成老师交给我的各项任务!。
eda数字钟实验报告

eda数字钟实验报告EDA数字钟实验报告本次实验旨在设计并实现一个EDA数字钟。
通过这个实验,我们将学习如何使用EDA工具来设计数字电路,并通过实际的电路实现来验证我们的设计。
1. 实验背景数字钟是我们日常生活中常见的设备之一。
它不仅可以显示时间,还具有闹钟等功能。
在这个实验中,我们将使用EDA工具来设计一个数字钟电路,并通过FPGA实现这个电路。
2. 实验目标本次实验的目标是设计一个能够显示小时、分钟和秒的数字钟电路。
我们将使用七段数码管来显示这些信息,并通过按键来设置时间和闹钟。
3. 设计思路我们的设计思路如下:3.1 时钟模块我们首先需要设计一个时钟模块,用来产生一个固定的时钟信号。
我们可以使用FPGA的时钟模块来实现这个功能,或者使用外部的晶振电路。
3.2 数码管驱动模块接下来,我们需要设计一个数码管驱动模块,用来将数字转换为七段数码管的显示信号。
我们可以使用查找表或者逻辑门电路来实现这个功能。
3.3 时间设置模块为了能够设置时间,我们需要设计一个时间设置模块。
这个模块可以通过按键来设置小时、分钟和秒。
3.4 闹钟设置模块类似于时间设置模块,我们还需要设计一个闹钟设置模块。
这个模块可以通过按键来设置闹钟的小时和分钟。
3.5 主控制模块最后,我们需要设计一个主控制模块,用来控制时钟、数码管驱动、时间设置和闹钟设置模块之间的交互。
这个模块可以根据设置的时间和闹钟来控制数码管的显示。
4. 电路实现根据我们的设计思路,我们使用EDA工具来实现我们的数字钟电路。
我们使用VHDL语言来描述电路,并使用模块化的方式来组织我们的代码。
5. 实验结果经过实际的电路实现和测试,我们成功地实现了数字钟电路。
我们可以通过按键来设置时间和闹钟,并通过七段数码管来显示时间和闹钟。
6. 实验总结通过这个实验,我们学习了如何使用EDA工具来设计数字电路,并通过实际的电路实现来验证我们的设计。
我们深入了解了数字钟的工作原理,并学会了如何使用VHDL语言来描述电路。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录1.设计思路—————————————————————(3)1.1总体结构——————————————————(3)2.方案论证与选择——————————————————(3)3.单元模块设计部分—————————————————(3)3.1 CNT10 模块的设计———————————————(4)3.2 CNT6 模块的设计———————————————(5)3.3 CNT101模块的设计———————————————(6)3.4 CNT61模块的设计———————————————(7)3.5 CNT23模块的设计———————————————(8)4.系统仿真—————————————————————(9) 4.1数字钟的引脚锁定———————————————(9) 4.2数字钟原理图————————————————(12) 4.3数字钟仿真图————————————————(10)4.4数字钟编译报告———————————————(11)5.参考文献————————————————————(13)EDA数字钟设计中文摘要:数字钟学习的目的是掌握各类计数器及它们相连的设计方法;掌握多个数码管显示的原理与方法;掌握FPGA技术的层次化设计方法;掌握用VHDL语言的设计思想以及整个数字系统的设计。
此数字钟具有时,分,秒计数显示功能,以24小时为计数循环;能实现清零,调节小时,分钟以及整点报时的功能。
关键词:数字钟,计数器,,FPGA,VHDL1.设计思路基于VHDL语言,用Top—To--Down的思想进行设计。
1.1 确定总体结构,如图1-1所示。
图1-12. 方案论证与选择方案:设置小时和分,输出整点报时信号和时,分,秒信号。
方案采用自顶向下的设计方法,它由秒计数模块,分计数模块,小时计数模块和顶层模块四部分组成。
3. 单元模块设计部分RES是整个系统的复位键,低电平有效,复位时,各个输出都为零,时间显示0时0分0秒;clk是输入时钟,提供秒信号,上升沿触发,每出发一次,时间增加一秒;HRTMP,MIN10TMP,MINTMPKEYI可以分别设置小时位,10分位,分位,起到调时的作用,高电平有效,有效时,每来一个CLK时钟(1s),所对应的位都将以各自的计数循环;RING是整点报时。
3.1 CNT10模块设计10进制计数器。
CLK为秒信号;RES是复位信号,与CLK同步;EN为选通信号;COUT3..0]输出秒个位;CA是进位信号。
如图1-2所示。
图1-2十进制的秒模块的VHDL源程序(CNT10.VHD),如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 isport(en,res,clk: in std_logic; --系统时钟信号res: in std_logic; --系统复位信号en: in std_logic; --选通信号ca : out std_logic; --进位信号cout : out std_logic_vector(3 downto 0)); ---输出秒信号end;architecture rtl of cnt10 issignal q : std_logic_vector(3 downto 0);beginp1 : process(en,clk,res)beginif(clk'event and clk='1') thenif(res='0') thenq<="0000";elsif(en='1') thenif(q=9) thenq<="0000";elseq<=q+1;end if;end if;end if;end process p1;p2 : process(q)beginif(q=9) thenca<=en;ca<='0';end if;end process p2;cout<=q;end rtl;3.2 CNT6模块设计即进制计数器,CLK为秒信号;RES为复位信号,与CLK同步;EN为选通信号;COUT[3..0]输出秒的十位;CA是进位信号。
如图1-3所示。
图1-3library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt6 isport(clk: in std_logic; ---系统秒信号en: in std_logic; ---系统选通信号res: in std_logic; ---系统复位信号ca : out std_logic; ---系统进位信号cout : out std_logic_vector(3 downto 0)); ---系统输出秒的十位end;architecture rtl of cnt6 issignal q : std_logic_vector(3 downto 0);beginp1 : process(en,clk,res)beginif(clk'event and clk='1') thenif(res='0') thenq<="0000";elsif(en='1') thenif(q=5) thenq<="0000";elseq<=q+1;end if;end if;end if;end process p1;p2 : process(q)if(q=5) thenca<=en;elseca<='0';end if;end process p2;cout<=q;end rtl;3.3 CNT101模块设计即十进制计数器,输出分的个位。
EN接CNT6的进位CA,产生正常的时钟;EN2由外部断口控制,可用来调节时间,高电平有效,输出将以秒的速度递增循环。
如图1-4 所示。
图1-4library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt101 is --output minitute's geweiport(clk : in std_logic; ---分计数时钟信号res: in std_logic; ---系统复位信号en : in std_logic;en2: in std_logic;ca : out std_logic; --系统输出进位信号icout : out std_logic_vector(3 downto 0)); ---分计数值end;architecture rtl of cnt101 issignal q : std_logic_vector(3 downto 0);beginp1 : process(en,en2,clk,res)beginif(clk'event and clk='1') thenif(res='0') thenq<="0000";elsif(en='1'or en2='1') thenif(q=9) thenq<="0000";elseq<=q+1;end if;end if;end if;end process p1;p2 : process(q)beginif(q=9) thenca<=en;elseca<='0';end if;end process p2;cout<=q;end rtl;3.4 CNT61模块的设计六进制计数器,输出分的十位。
EN接CNT101的进位CA,产生正常的时钟;EN2由外部端口控制,可用来调节时间,高电平有效,输出分的十位将以秒的速度递增循环。
如图1-5所示。
图1-5library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt61 is --output minitute's shiweiport(en2,en,res,clk : in std_logic;ca : out std_logic; --进位信号cout : out std_logic_vector(3 downto 0));---输出分的十位计数值end;architecture rtl of cnt61 issignal q : std_logic_vector(3 downto 0);beginp1 : process(en,en2,clk,res)beginif(clk'event and clk='1') thenif(res='0') thenq<="0000";elsif(en='1'or en2='1') thenif(q=5) thenq<="0000";elseq<=q+1;end if;end if;end if;end process p1;p2 : process(q)beginif(q=5) thenca<=en;elseca<='0';end if;end process p2;cout<=q;end rtl;3.5 CNT23模块设计24进制计数器,输出时个位和时十位,由两个选通信号EN和EN2控制,EN2用来调时。
如图1-6所示。
图1-6library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt23 isport(en2,en,res,clk : in std_logic;a,b: out std_logic_vector(3 downto 0);ca : out std_logic );end cnt23;architecture rtl of cnt23 issignal aout,bout : std_logic_vector(3 downto 0);beginp1 : process(en,en2,clk,res)beginif(res='0') thenaout<="0000";bout<="0000";elsif(clk'event and clk='1') thenif(en='1' or en2='1') thenif bout>1 thenif aout>2 thenaout<="0000" ;bout<="0000";elseaout<=aout+1;end if;elsif(aout=9) thenaout<="0000";bout<=bout+1;elseaout<=aout+1;end if;end if;end if;end process ;process(en,clk,aout,bout)beginif clk'event and clk='1' thenif en='1'thenif aout=3 and bout=2 thenca<='1';elseca<='0';end if;end if;end if;end process;a<=aout;b<=bout;end rtl;4.系统仿真4.1数字钟的引脚锁定RES是整个系统的复位键,低电平有效,复位时,各个输出都为零,时间显示0时0分0秒;clk是输入时钟,提供秒信号,上升沿触发,每出发一次,时间增加一秒;HRTMP,MIN10TMP,MINTMPKEYI可以分别设置小时位,10分位,分位,起到调时的作用,高电平有效,有效时,每来一个CLK时钟(1s),所对应的位都将以各自的计数循环;RING是整点报时。