EDA课程设计报告(电子钟) 2
eda电子课程设计

eda电子课程设计一、课程目标知识目标:1. 学生能理解EDA(电子设计自动化)的基本概念,掌握电子电路设计的基本流程。
2. 学生能够运用所学软件工具,完成简单的电子电路图绘制和仿真。
3. 学生了解常见的电子元器件及其功能,能正确运用到电路设计中。
技能目标:1. 学生能够独立使用EDA软件进行电路设计,具备初步的电路分析和调试能力。
2. 学生通过实践操作,掌握电路板布线、打印及制作的基本方法。
3. 学生具备团队协作能力,能够与同学共同完成复杂的电子设计项目。
情感态度价值观目标:1. 学生培养对电子技术的兴趣,激发创新意识和探索精神。
2. 学生在实践过程中,体会电子设计的实际意义,增强解决实际问题的自信心。
3. 学生通过课程学习,认识到电子技术对社会发展的作用,培养环保意识和责任感。
本课程针对中学生设计,充分考虑学生的认知水平、兴趣和实际需求。
课程以实践为主,注重培养学生的动手操作能力和团队协作精神。
通过课程学习,使学生掌握电子设计的基本技能,提高创新意识和实践能力,为未来的学习和发展奠定基础。
二、教学内容本课程教学内容分为以下四个部分:1. EDA基本概念与软件操作- 介绍EDA的基本概念、发展历程和应用领域。
- 学习并掌握常见的EDA软件操作,如电路图绘制、仿真等。
2. 电子元器件及其功能- 认识常见的电子元器件,如电阻、电容、二极管、晶体管等。
- 了解元器件的参数和选型原则,学会在电路设计中正确使用元器件。
3. 电子电路设计与仿真- 学习基本的电子电路原理,如放大器、滤波器、振荡器等。
- 应用EDA软件进行电子电路设计与仿真,分析并优化电路性能。
4. 电路板布线与制作- 学习电路板布线的基本原则和技巧。
- 完成电路板的设计、打印和制作,并进行实际测试与调试。
教学内容依据课本章节进行组织,具体安排如下:第1周:EDA基本概念与软件操作第2周:电子元器件及其功能第3-4周:电子电路设计与仿真第5-6周:电路板布线与制作教学内容注重科学性和系统性,以实践操作为主线,结合理论讲解,使学生在动手实践中掌握电子设计的基本知识和技能。
设计一个电子时钟,要求可以显示时、分、秒,用户可以设置时间

EDA课程设计-电子钟一、设计要求1、基本功能要求:设计一个电子时钟,要求可以显示时、分、秒,用户可以设置时间。
扩展功能要求:2、跑表功能,闹钟功能,调整数码管的亮度。
二、系统结构控制键—jian5、jian4、jian7、jian8:数码管显示段选信号输出sg:——选择6位数码管中的某一个显示数据;发光二极管控制信号输出—led(7~0)闹钟声音输出—speaker通过一个10M信号分出各种所需频率功能介绍运行后,选择模式7,8位数码管分显示时间的时、分、秒,当前为模式0:时间显示模式,按键7为模式选择键,按下按键7,系统进入模式1,第二次按下为模式2,设置时间模式,第三次按下为跑表模式,第四次为闹钟设置模式,第五次为亮度调节模式:设置时间模式,按键4控制更改数码管的位,按键5控制选中数码管的数值,时间设置完成后,按键按键8,设置时间会保存住,并在模式0中显示;系统进入模式2:秒表模式,按键4为开始/结束键,按键5为清零键;系统进入模式3:闹钟设置模式,相关设置与模式1相同,当当前时间与闹钟设置时间相同时,喇叭就会响;系统进入模式4:亮度调节模式,通过按键4设置亮度,共三种亮度;再按下按键7,系统又会进入模式0。
4、RTL图三、VHDL源程序1、library ieee; --通过10M分出所需频率use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin isport (clk_10M : in std_logic;clk_10000 : out std_logic;clk_100 : out std_logic;clk_1 : out std_logic);end entity;architecture sub1 of fenpin issignal Q_1 : std_logic_vector(8 downto 0);signal Q_2 : std_logic_vector(6 downto 0);signal Q_3 : std_logic_vector(6 downto 0);signal clk10000 : std_logic;signal clk100 : std_logic;signal clk1 : std_logic;beginprocess(clk_10M)beginif clk_10M'event and clk_10M='1' thenif Q_1=500 thenQ_1 <= "000000000";clk10000 <= not clk10000;if Q_2=100 thenQ_2 <= "0000000";clk100<= not clk100;if Q_3=100 thenQ_3 <= "0000000";clk1<=not clk1;else Q_3<=Q_3+1;end if;else Q_2<=Q_2+1;end if;else Q_1<=Q_1+1;end if;end if;end process;clk_10000 <= clk10000;clk_100 <= clk100;clk_1 <= clk1;end sub1;2、library ieee; --扫描数码管use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity xianshi isport(clk_10000:in std_logic;jian4:in std_logic;moshi:in integer range 0 to 4;a0,a1,a3,a4,a6,a7:in integer range 0 to 9;sg11:out std_logic_vector(6 downto 0);bt11:out std_logic_vector(7 downto 0));end;architecture one of xianshi issignal cnt8 :std_logic_vector(2 downto 0);signal a :integer range 0 to 15;signal light: std_logic;signal flash:integer range 0 to 2;signal count1,count2:integer range 0 to 10;beginp1: process(cnt8,light,a0,a1,a3,a4,a6,a7)begincase cnt8 iswhen "000" => bt11<= "0000000"&(light);a<=a0;when "001" => bt11<= "000000"&(light)&'0';a<=a1; when "010" => bt11<= "00000"&(light)&"00";a<=15; when "011" => bt11<= "0000"&(light)&"000";a<=a3; when "100" => bt11<= "000"&(light)&"0000";a<=a4; when "101" => bt11<= "00"&(light)&"00000";a<=15; when "110" => bt11<= '0'&(light)&"000000";a<=a6; when "111" => bt11<= (light)&"0000000";a<=a7;when others => null;end case;end process p1;p2:process(clk_10000)beginif clk_10000'event and clk_10000 ='1' then cnt8 <= cnt8+1; end if;end process p2;p3:process(a)begincase a iswhen 0 => sg11<= "0111111";when 1 => sg11<= "0000110";when 2 => sg11<= "1011011";when 3 => sg11<= "1001111";when 4 => sg11<= "1100110";when 5 => sg11<= "1101101";when 6 => sg11<= "1111101";when 7 => sg11<= "0000111";when 8 => sg11<= "1111111";when 9 => sg11<= "1101111";when 10 => sg11<= "1110111";when 11 => sg11<= "1111100";when 12 => sg11<= "0111001";when 13 => sg11<= "1011110";when 14 => sg11<= "1111001";when 15 => sg11<= "1000000";when others => null;end case;end process p3;process(jian4,moshi)beginif moshi=4 thenif jian4'event and jian4='1' thenif flash =2 thenflash<=0;else flash<=flash+1;end if;end if;end if;end process;process(clk_10000,flash)beginif clk_10000'event and clk_10000 ='1' thencase flash iswhen 0 => light<='1';when 1 => if count1=2 thencount1<=0; light<='1';else count1<=count1+1;light<='0';end if;when 2 => if count2=4 thencount2<=0; light<='1';else count2<=count2+1;light<='0';end if;end case;end if;end process;end;3、library ieee; --跑表开始暂停use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity paobiao isport(clk_1:in std_logic;jian8:in std_logic;shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1:in integer range 0 to 9; shishi2,shige2,fenshi2,fenge2,miaoshi2,miaoge2:out integer range 0 to 9); end entity;architecture bhv of paobiao issignal shi:integer range 0 to 100;signal fen:integer range 0 to 100;signal miao:integer range 0 to 100;beginprocess(clk_1,jian8,shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1)beginif jian8='1' thenshi<=shishi1*10+shige1;fen<=fenshi1*10+fenge1;miao<=miaoshi1*10+miaoge1;elsif clk_1'event and clk_1='1' thenif miao=59 thenmiao<=0;fen<=fen+1;elsif fen>59 thenfen<=0;shi<=shi+1;elsif shi>23 thenshi<=0;else miao<=miao+1;end if;end if;end process;miaoge2<=miao rem 10;miaoshi2<=miao/10;fenge2<=fen rem 10;fenshi2<=fen/10;shige2<=shi rem 10;shishi2<=shi/10;end;4、library ieee; --设置当前时间use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity settime isport(moshi:in integer range 0 to 4;jian4,jian5:in std_logic;shishi,shige,fenshi,fenge,miaoshi,miaoge:out integer range 0 to 9);end entity;architecture bav of settime issignal a:integer range 0 to 5;signal shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1: integer range 0 to 9; beginprocess(moshi,jian4)beginif moshi=1 thenif jian4'event and jian4='1' thenif a < 5 thena<=a+1;else a<=0;end if;end if;end if;end process;process(moshi,a,jian5)beginif moshi=1 thenif a=0 thenif jian5'event and jian5='1' thenif miaoge1 =9 thenmiaoge1<=0;else miaoge1<=miaoge1+1;end if;end if;end if;if a=1 thenif jian5'event and jian5='1' thenif miaoshi1 =5 thenmiaoshi1<=0;else miaoshi1<=miaoshi1+1;end if;end if;end if;if a=2 thenif jian5'event and jian5='1' thenif fenge1 =9 thenfenge1<=0;else fenge1<=fenge1+1;end if;end if;end if;if a=3 thenif jian5'event and jian5='1' thenif fenshi1 =5 thenfenshi1<=0;else fenshi1<=fenshi1+1;end if;end if;end if;if a=4 thenif jian5'event and jian5='1' thenif shige1 =9 thenshige1<=0;else shige1<=shige1+1;end if;end if;end if;if a=5 thenif jian5'event and jian5='1' thenif shishi1 =2 thenshishi1<=0;else shishi1<=shishi1+1;end if;end if;end if;end if;end process;miaoge<=miaoge1;miaoshi<=miaoshi1;fenge<=fenge1;fenshi<=fenshi1;shige<=shige1;shishi<=shishi1;end;5、library ieee; --秒表功能use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity miaobiao isport(clk_100:in std_logic;moshi:in integer range 0 to 4;jian5,jian4:in std_logic;fenshi,fenge,miaoshi,miaoge,xmiaoshi,xmiaoge:out integer range 0 to 9); end entity;architecture bhv of miaobiao issignal fen,miao,xmiao:integer range 0 to 99;signal start:std_logic:='0';signal reset:std_logic:='0';beginprocess(clk_100,jian5,jian4,moshi,reset,start)beginif moshi=2 thenif reset='1' thenfen<=0;miao<=0;xmiao<=0;elsif start='1' thenelsif clk_100'event and clk_100='1' thenif xmiao=99 thenxmiao<=0;miao<=miao+1;elsif miao>59 thenmiao<=0;fen<=fen+1;elsif fen>23 thenfen<=0;else xmiao<=xmiao+1;end if;end if;end if;end process;process(jian4,start)beginif jian4'event and jian4='1' thenstart<=not start;else start<=start;end if;end process;process(jian5,reset)beginif jian5'event and jian5='1' thenreset<=not reset;else reset<= reset;end if;end process;xmiaoge<=xmiao rem 10;xmiaoshi<=xmiao/10;miaoge<=miao rem 10;miaoshi<=miao/10;fenge<=fen rem 10;fenshi<=fen/10;end;6、library ieee; --设置闹钟时间use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity naozhongset isport(moshi:in integer range 0 to 4;jian4,jian5:in std_logic;shishi,shige,fenshi,fenge,miaoshi,miaoge:out integer range 0 to 9); end entity;architecture bav of naozhongset issignal a:integer range 0 to 5;signal fenshi1,fenge1,miaoge1: integer range 0 to 9;signal shishi1: integer range 0 to 9:=1;signal shige1: integer range 0 to 9:=2;signal miaoshi1: integer range 0 to 9:=0;beginprocess(moshi,jian4)beginif moshi=3 thenif jian4'event and jian4='1' thenif a < 5 thena<=a+1;else a<=0;end if;end if;end if;end process;process(moshi,a,jian5)beginif moshi=3 thenif a=0 thenif jian5'event and jian5='1' thenif miaoge1 =9 thenmiaoge1<=0;else miaoge1<=miaoge1+1;end if;end if;end if;if a=1 thenif jian5'event and jian5='1' thenif miaoshi1 =5 thenmiaoshi1<=0;else miaoshi1<=miaoshi1+1;end if;end if;end if;if a=2 thenif jian5'event and jian5='1' thenif fenge1 =9 thenfenge1<=0;else fenge1<=fenge1+1;end if;end if;end if;if a=3 thenif jian5'event and jian5='1' thenif fenshi1 =5 thenfenshi1<=0;else fenshi1<=fenshi1+1;end if;end if;end if;if a=4 thenif jian5'event and jian5='1' thenif shige1 =9 thenshige1<=0;else shige1<=shige1+1;end if;end if;end if;if a=5 thenif jian5'event and jian5='1' thenif shishi1 =2 thenshishi1<=0;else shishi1<=shishi1+1;end if;end if;end if;end if;end process;miaoge<=miaoge1;miaoshi<=miaoshi1;fenge<=fenge1;fenshi<=fenshi1;shige<=shige1;shishi<=shishi1;end;7、library ieee; --闹钟喇叭输出use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity naozhongspeaker isport(clk_100:in std_logic;shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1:in integer range 0 to 9; shishi2,shige2,fenshi2,fenge2,miaoshi2,miaoge2:in integer range 0 to 9; speaker:out std_logic);end entity;architecture bav of naozhongspeaker isbeginprocess(clk_100,shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1,shishi2,shige2,fenshi2,fenge2,miaoshi2,miaoge2)beginif shishi2=shishi1 and shige2=shige1 and fenshi2=fenshi1 andfenge2=fenge1 and miaoshi2=miaoshi1 thenspeaker<=clk_100;else speaker<='1';end if;end process;end;8、library ieee; --转换模式use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity moshi isport(jian7:in std_logic;moshi:out integer range 0 to 4);end;architecture one of moshi issignal moshis:integer range 0 to 4;beginprocess(jian7)beginif jian7'event and jian7='1' thenif moshis=4 thenmoshis<=0;else moshis<=moshis+1;end if;end if;end process;moshi<=moshis;end;9、library ieee; --五选一选择器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mux5_1 isport(moshi:in integer range 0 to 4 ;shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1:in integer range 0 to 9;shishi2,shige2,fenshi2,fenge2,miaoshi2,miaoge2:in integer range 0 to 9;shishi3,shige3,fenshi3,fenge3,miaoshi3,miaoge3:in integer range 0 to 9; fenshi,fenge,miaoshi,miaoge,xmiaoshi,xmiaoge:in integer range 0 to 9;a0,a1,a3,a4,a6,a7:out integer range 0 to 9);end entity mux5_1;architecture bhv of mux5_1 isbeginprocess(shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1,shishi2,shige2,fenshi2,fenge2,miaoshi2,miaoge2,shishi3,shige3,fenshi3,fenge3,miaoshi3,miaoge3,fenshi,fenge,miaoshi,miaoge,xmiaoshi,xmiaoge,moshi)begincase moshi iswhen 0 =>a0<=shishi1;a1<=shige1;a3<=fenshi1;a4<=fenge1;a6<=miaoshi1;a7<=miaoge1;when 1 =>a0<=shishi2;a1<=shige2;a3<=fenshi2;a4<=fenge2;a6<=miaoshi2;a7<=miaoge2;when 2 =>a0<=fenshi;a1<=fenge;a3<=miaoshi;a4<=miaoge;a6<=xmiaoshi;a7<=xmiaoge;when 3 =>a0<=shishi3;a1<=shige3;a3<=fenshi3;a4<=fenge3;a6<=miaoshi3;a7<=miaoge3;when 4 => a0<=8;a1<=8;a3<=8;a4<=8;a6<=8;a7<=8;end case;end process;end;10、library ieee; --主程序置顶use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clock isport(clk_10M:in std_logic;jian5,jian4,jian7,jian8:in std_logic;sg:out std_logic_vector(6 downto 0);bt:out std_logic_vector(7 downto 0);speaker:out std_logic);end entity;调用声明语句architecture bav of clock iscomponent fenpin --分频port (clk_10M : in std_logic;clk_10000 : out std_logic;clk_100 : out std_logic;clk_1 : out std_logic);end component;component paobiao --跑表port(clk_1:in std_logic;jian8:in std_logic;shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1:in integer range 0 to 9; shishi2,shige2,fenshi2,fenge2,miaoshi2,miaoge2:out integer range 0 to 9);end component;component xianshi --扫描显示port(clk_10000:in std_logic;jian4:in std_logic;moshi:in integer range 0 to 4;a0,a1,a3,a4,a6,a7:in integer range 0 to 9;sg11:out std_logic_vector(6 downto 0);bt11:out std_logic_vector(7 downto 0));end component;component moshi --模式转换port(jian7:in std_logic;moshi:out integer range 0 to 4);end component;component mux5_1 --五选一选择器port(moshi:in integer range 0 to 4 ;shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1:in integer range 0 to 9;shishi2,shige2,fenshi2,fenge2,miaoshi2,miaoge2:in integer range 0 to 9;shishi3,shige3,fenshi3,fenge3,miaoshi3,miaoge3:in integer range 0 to 9;fenshi,fenge,miaoshi,miaoge,xmiaoshi,xmiaoge:in integer range 0 to 9;a0,a1,a3,a4,a6,a7:out integer range 0 to 9);end component;component settime --设置当前时间port(moshi:in integer range 0 to 4;jian4,jian5:in std_logic;shishi,shige,fenshi,fenge,miaoshi,miaoge:out integer range 0 to 9);end component;component miaobiao is --秒表port(clk_100:in std_logic;moshi:in integer range 0 to 4;jian5,jian4:in std_logic;fenshi,fenge,miaoshi,miaoge,xmiaoshi,xmiaoge:out integer range 0 to 9);end component;component naozhongset is --闹钟时间设置port(moshi:in integer range 0 to 4;jian4,jian5:in std_logic;shishi,shige,fenshi,fenge,miaoshi,miaoge:out integer range 0 to 9);end component;component naozhongspeaker is --闹钟喇叭输出port(clk_100:in std_logic;shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1:in integer range 0 to 9;shishi2,shige2,fenshi2,fenge2,miaoshi2,miaoge2:in integer range 0 to 9;speaker:out std_logic);end component;signal moshis:integer range 0 to 4; --信号声明signal shishi1s,shige1s,fenshi1s,fenge1s,miaoshi1s,miaoge1s:integer range 0 to 9;signal shishi2s,shige2s,fenshi2s,fenge2s,miaoshi2s,miaoge2s:integer range 0 to 9;signal shishi3s,shige3s,fenshi3s,fenge3s,miaoshi3s,miaoge3s:integer range 0 to 9;signal fenshis,fenges,miaoshis,miaoges,xmiaoshis,xmiaoges: integer range 0 to 9;signal a0s,a1s,a3s,a4s,a6s,a7s: integer range 0 to 9;signal clk_10000s,clk_100s, clk_1s: std_logic;begin --元件例化u1:paobiao port map(clk_1=>clk_1s,jian8=>jian8,shishi1=>shishi2s,shige1=>shige2s,fenshi1=>fenshi2s,fenge1=>fenge2s,miaoshi 1=>miaoshi2s,miaoge1=>miaoge2s,shishi2=>shishi1s,shige2=>shige1s,fenshi2=>fenshi1s,fenge2=>fenge1s,miaoshi2=>m iaoshi1s,miaoge2=>miaoge1s);u2:xianshi port map(clk_10000=>clk_10000s,jian4=>jian4,moshi=>moshis,a0=>a0s,a1=>a1s,a3=>a3s,a4=>a4s,a6=>a6s,a7=>a7s,sg11=>sg,bt11=>bt);u3:settime port map(moshi=>moshis,jian5=>jian5,jian4=>jian4,shishi=>shishi2s,shige=>shige2s,fenshi=>fenshi2s,fenge=>fenge2s,miaoshi=>miaosh i2s,miaoge=>miaoge2s);u4:moshi port map(jian7=>jian7,moshi=>moshis);u5:mux5_1 port map(moshi=>moshis,shishi1=>shishi1s,shige1=>shige1s,fenshi1=>fenshi1s,fenge1=>fenge1s,miaoshi1=>m iaoshi1s,miaoge1=>miaoge1s,shishi2=>shishi2s,shige2=>shige2s,fenshi2=>fenshi2s,fenge2=>fenge2s,miaoshi2=>m iaoshi2s,miaoge2=>miaoge2s,shishi3=>shishi3s,shige3=>shige3s,fenshi3=>fenshi3s,fenge3=>fenge3s,miaoshi3=>m iaoshi3s,miaoge3=>miaoge3s,fenshi=>fenshis,fenge=>fenges,miaoshi=>miaoshis,miaoge=>miaoges,xmiaoshi=>x miaoshis,xmiaoge=>xmiaoges,a0=>a0s,a1=>a1s,a3=>a3s,a4=>a4s,a6=>a6s,a7=>a7s);u6:miaobiao port map(clk_100=>clk_100s,moshi=>moshis,jian5=>jian5,jian4=>jian4,fenshi=>fenshis,fenge=>fenges,miaoshi=>miaoshis,miaoge=>miaoges,xmiaoshi=>xmiao shis,xmiaoge=>xmiaoges);u7:fenpin port map(clk_10M=>clk_10m,clk_10000=>clk_10000s,clk_100=>clk_100s,clk_1 =>clk_1s);u8:naozhongset port map(moshi=>moshis,jian5=>jian5,jian4=>jian4,shishi=>shishi3s,shige=>shige3s,fenshi=>fenshi3s,fenge=>fenge3s,miaoshi=>mi aoshi3s,miaoge=>miaoge3s);u9:naozhongspeaker port map(clk_100=>clk_100s,speaker=>speaker,shishi1=>shishi3s,shige1=>shige3s,fenshi1=>fenshi3s,fenge1=>fenge3s,miaoshi1=>m iaoshi3s,miaoge1=>miaoge3s,shishi2=>shishi1s,shige2=>shige1s,fenshi2=>fenshi1s,fenge2=>fenge1s,miaoshi2=>m iaoshi1s,miaoge2=>miaoge1s);end;。
《EDA技术》实验报告

《EDA技术》课程实验报告姓名:学号:班级:同组者:指导教师:信息科学与工程学院2013-2014学年第二学期《EDA技术》课程实验报告学生姓名:所在班级:电信1101班指导教师:老师记分及评价:一、实验名称实验1-3:简单数字电子钟的设计(原理图输入设计方法)二、任务及要求【基本部分】1、在QuartusII平台上,采用原理图输入设计方法,调用两片74160十进制计数器,采用反馈置数法,完成一个24进制同步计数器的设计,并进行时序仿真。
要求具备使能功能和异步清零功能,设计完成后封装成一个元件。
2、同1,采用原理图输入设计方法,调用两片74160十进制计数器,采用反馈置数法,完成一个60进制同步计数器的设计,并进行时序仿真。
要求具备使能功能和异步清零功能,设计完成后封装成一个元件。
3、利用1和2所设计的60进制计数器和24进制计数器元件,采用同步的方式设计一个简单的数字电子钟并进行时序仿真,要求具有时分秒功能显示功能、使能功能和异步清零功能。
【发挥部分】1、思考:采用反馈清零法设计的计数器与反馈置数法有何不同?请用实例进行仿真。
2、如何实现电子钟时分秒连续可调的功能?三、原理图1、如图3.1为24进制计数器原理图,2、如图3.2为60进制计数器的原理图,该图在24进制的基础上进行改进3、如图3.3为电子时钟原理图,4、图3.4a、3.4b分别为24、60进制原理图的封装元件1、g[3..0]OUTPUT s[3..0]OUTPUT图3.1 24进制计数器原理图2、g[3..0]OUTPUT s[3..0]OUTPUT图3.2 60进制原理图3、图3.3 数字电子时钟4、24jinzhi insten clr clk 24co co g[3..0]s[3..0]24jinzhi2insten clr clk 60co co g[3..0]s[3..0]3.4a 24进制原理图封装图 3.4b 60进制原理图封装四、仿真及结果分析1、图4.1 24进制时序仿真图2、图4.2 60进制时序仿真图3、图4.3 电子时钟时序仿真图五、小结在实验中需要注意的是创建的文件名需要和工程名字保持一致,若不一致,在进行功能仿真和时序仿真时会出现错误。
EDA自动电子钟

燕山大学EDA课程设计报告书题目:自动电子钟姓名:班级:学号:成绩:一、设计题目及要求题目:自动电子钟要求:1.用24小时制进行时刻显示;2.能够显示小时、分钟;3.每秒钟要有秒闪烁指示;4.上电后从"00:00"开始显示。
5.整点报时,喇叭响两秒;6.可设定夜间某个时段不报时。
二、设计进程及内容①由分频,计时,显示及整点报时四部份组成。
⑴分频部份实现的功能是将输入的366hz信号进行分频取得1hz的秒脉冲,并将秒脉冲接到二极管上以实现秒闪烁。
分频部份用两片十六进制计数器74161,一个D触发器连接以实现分频功能。
⑵计时部份用来实现时,分,秒的计时功能,由两个60进制计数器实现分秒计时和一个24进制计数器实现小时计时,计数器由多片十进制计数器74160连接而成。
⑶显示部份用四个74151和BCD—七段7449译码器设计成电路完成数字显示功能,用来显示小时和分钟以及秒闪烁。
⑷整点报时部份实现的功能是整点的时候报时响两秒而且在夜间22点到5点间不报时。
由两个模块组成别离实现响铃两秒和整点报时功能。
响铃两秒模块由D触发器和一个2进制计数器实现,整点报时部份由4片4位2进制比较器7485连接而成。
②各部份的功能实现及其相关原理图,仿真图。
⑴分频部份用两个74161设置成183分频器,将输入的366HZ的脉冲得2HZ脉冲,再用一个D触发器取得1hz的时钟脉冲,将秒脉冲用一个输出端引出,接到显示管的dp上,用显示电路在分钟个位的显示位实现秒闪烁。
图㈠b分频仿真图⑵计时部份用两个74160采纳整体置数法别离组成六十进制计数器和24进制计数器,用两个六十进制一个二十四进制计数器别离完成秒,分,小时的计时功能。
然后将三者进行级联,实现24小时计时。
图㈡a 60进制原理图图㈡b 60进制仿真图图㈢a 24进制计数器原理图图㈢b 24进制计数器仿真图图㈣a计时部份原理图图㈣b 计时部份仿真图⑶显示部份显示电路由74161组成的四进制计数器,四个八选一数据选择器74151和7449七段译码器组成,显示电路图如图五所示,秒闪烁显示与分钟显示在同一时刻。
EDA课程设计报告

EDA课程设计报告实训任务:一、实训目的和要求:(1)熟练掌握keil c51集成开发环境的使用方法(2)熟悉keil c51集成开发环境调试功能的使用和dp?51pro。
net单片机仿真器、编程器、实验仪三合一综合开发平台的使用。
(3)利用单片机的p1口作io口,学会利用p1口作为输入和输出口。
(4)了解掌握单片机芯片的烧写方法与步骤。
(5)学会用单片机汇编语言编写程序,熟悉掌握常用指令的功能运用。
(6)掌握利用protel 99 se绘制电路原理图及pcb图。
(7)了解pcb板的制作腐蚀过程。
二、实训器材:pc机(一台)pcb板(一块)520ω电阻(八只)10k电阻(一只)led发光二极管(八只)25v 10μf电容(一只)单片机ic座(一块)at89c51单片机芯片(一块)热转印机(一台)dp?51pro。
net单片机仿真器、编程器、实验仪三合一综合开发平台(一台)三、实训步骤:(2)将流水灯程序编写完整并使用tkstudy ice调试运行。
(4)打开电源,将编写好的程序运用tkstudy ice进行全速运行,看能否实现任务要求。
(6)制板。
首先利用protel 99 se画好原理图,根据原理图绘制pcb图,然后将绘制好的pcb布线图打印出来,经热转印机转印,将整个布线图印至pcb 板上,最后将印有布线图的pcb板投入装有三氯化铁溶液的容器内进行腐蚀,待pcb板上布线图外的铜全部后,将其取出,清洗干净。
(7)焊接。
将所给元器件根据原理图一一焊至pcb板相应位置。
(8)调试。
先把at89c51芯片插入ic座,再将+5v电源加到制作好的功能板电源接口上,观察功能演示的整个过程(看能否实现任务功能)。
(流水灯控制器原理图)四、流水灯控制器程序的主程序:org 0000hsjmp startorg 0030hstart:mov a,0ffhmov r0,1chmov r2,12hclr cloop1:acall delaydjnz r0,loop,尽在。
EDA课程设计报告(电子钟VHDL 设计)

EDA课程设计报告(电子钟VHDL 设计)作者:dang168 时间:2008-10-05E D A课程设计报告-----电子钟VHDL 设计一设计要求设计一个电子钟,要求可以显示时、分、秒,用户可以设置时间.二.实验目的1. 掌握多位计数器相连的设计方法。
2. 掌握十六进制,二十四进制,六十进制计数器的设计方法。
3. 掌握CPLD技术的层次化设计方法。
4. 了解软件的元件管理含义以及模块元件之间的连接概念。
5. 掌握电子电路一般的设计方法,并了解电子产品的研制开发过程,基本掌握电子电路安装和调试的方法。
6. 培养独立分析问题,解决问题的能力。
三.硬件要求1.8位8段扫描共阴极数码显示管。
2. 三个按键开关(清零,调小时,调分钟)。
四.设计原理数字钟是一个将“时”“分”“秒”显示于人的视觉器官的计时装置。
它的计时周期为24小时;显示满刻度为23时59分59秒,另外具备校时功能和报时功能。
因此,一个基本的数字钟电路主要由“时”“分”“秒”计数器校时电路组成。
将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累加60秒发送一个“分脉冲”信号,该信号将被送到“时计数器”。
“时计数器”采用24进制计数器,可实现对一天24小时的累计。
译码显示电路将“时”“分”“秒”计数器的输出状态六段显示译码器译码。
通过六位LED七段显示器显示出来。
校时电路器是用来对“时”“分”“秒”显示数字进行校时调整的。
在同一CPLD芯片口集成如下电路模块:1.电子钟计数采用层次化设计,将设计任务分成若干个模块。
规定每一模块的功能和各模块之间的接口。
(1)second(秒) 60进制BCD码计数(2)minute(分) 60进制BCD码计数(3)hour (时) 24进制BCD码计数(4)clock top 顶层设计同时整个计数器有清零,调时,调分功能。
2.端口引脚名称 输入 clk,reset,setmin,sethour 输出 second—daout,minute-daout,hour-daout五.设计原理图逻辑功能图:输入:CLK—时钟脉冲,RESET—复位信号,SETMIN—分加1信号,SETHOUR—秒加1信号输出:SECOND_DAOUT—秒输出,MINUTE_DAOUT—分输出,HOUR_DAOUT—时输出时序仿真:程序主要运用计数器完成,在时钟脉冲的作用下,完成时钟功能,由时序图可以看出每一个时钟脉冲上升沿秒加1,当接收到reset 信号,即reset为高电平,所有计数为零,并重新计数,setmin和sethour可以完成调节时钟功能,都是高电平调节,每来一个脉冲,相应的时或分加1。
eda课程设计报告

eda课程设计报告一、课程目标知识目标:1. 学生能理解EDA(电子设计自动化)的基本概念,掌握EDA工具的使用方法。
2. 学生能运用EDA软件进行电路设计与仿真,理解并掌握数字电路的设计原理。
3. 学生了解并掌握基础的硬件描述语言(如VHDL/Verilog),能完成简单的数字系统设计。
技能目标:1. 学生通过EDA软件的操作,培养电子电路设计、仿真与验证的实际操作能力。
2. 学生通过小组合作完成设计项目,提高团队协作与沟通技巧。
3. 学生能够运用所学知识解决实际问题,具备一定的创新意识和动手能力。
情感态度价值观目标:1. 学生在EDA课程学习中,培养对电子科学技术的兴趣和探究精神。
2. 学生通过课程实践,增强自信心和成就感,激发进一步学习的动力。
3. 学生在学习过程中,树立正确的工程伦理观念,认识到技术发展对社会的责任和影响。
课程性质:本课程为电子信息工程及相关专业高年级学生的专业核心课程,旨在通过理论与实践相结合的教学,提高学生的电子设计能力。
学生特点:学生已具备一定的电子技术基础,具有较强的学习能力和实践欲望,对新技术和新工具充满好奇心。
教学要求:结合学生特点,注重培养实际操作能力,鼓励学生创新思维,提高解决实际问题的能力。
通过课程目标分解,确保学生在知识、技能和情感态度价值观方面的全面成长。
后续教学设计和评估将以此为基础,关注学生的学习成果。
二、教学内容根据课程目标,教学内容分为以下三个模块:1. EDA基本概念与工具使用- 教材章节:第一章 EDA技术概述,第二章 EDA工具简介- 内容列举:EDA发展历程,常用EDA软件介绍,软件安装与配置,基本操作流程。
2. 数字电路设计与仿真- 教材章节:第三章 数字电路设计基础,第四章 仿真技术- 内容列举:数字电路设计原理,EDA软件电路设计流程,仿真参数设置,波形分析与验证。
3. 硬件描述语言与数字系统设计- 教材章节:第五章 硬件描述语言,第六章 数字系统设计实例- 内容列举:硬件描述语言基础,VHDL/Verilog语法要点,简单数字系统设计方法,设计实例分析与实操。
eda电路课程设计

eda电路课程设计一、课程目标知识目标:1. 让学生理解EDA电路的基本概念,掌握电路设计的基本原理。
2. 使学生掌握EDA软件的使用方法,能够进行简单的电路图绘制和仿真。
3. 帮助学生掌握常见的电子元器件的特性及其在电路中的应用。
技能目标:1. 培养学生运用EDA软件进行电路设计和仿真的能力。
2. 培养学生分析电路原理和解决实际问题的能力。
3. 提高学生的团队协作能力和沟通表达能力。
情感态度价值观目标:1. 培养学生对电子电路设计和制作的兴趣,激发创新意识。
2. 培养学生严谨、认真的学习态度,养成良好的学习习惯。
3. 增强学生的环保意识,了解电子电路在生产、生活中的环保要求。
课程性质:本课程为实践性较强的电子技术课程,结合理论知识与实际操作,培养学生的电路设计能力和动手能力。
学生特点:学生处于高中阶段,具有一定的物理和数学基础,对电子技术有一定的好奇心,但实际操作能力有待提高。
教学要求:结合学生特点,注重理论与实践相结合,以学生为主体,发挥教师引导作用,提高学生的实践操作能力和创新能力。
通过分解课程目标为具体的学习成果,使学生在课程学习过程中逐步实现目标,为后续教学设计和评估提供依据。
二、教学内容1. EDA电路基本概念:介绍EDA电路的定义、发展历程及在电子设计中的应用。
教材章节:第一章 芯片设计自动化概述2. EDA软件使用方法:讲解如何安装、使用EDA软件,以及软件的基本操作。
教材章节:第二章 EDA工具及其使用3. 电路设计基本原理:学习电路设计的基本流程、原理图绘制和PCB布线等。
教材章节:第三章 电路设计基本原理4. 常见电子元器件:介绍电阻、电容、二极管、三极管等元器件的特性和选型。
教材章节:第四章 电子元器件5. 电路设计与仿真:学习运用EDA软件进行电路设计与仿真,分析电路性能。
教材章节:第五章 电路设计与仿真6. 实践项目:分组进行电路设计实践,培养学生的动手能力和团队协作精神。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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) 时间设置模块:设置调试使能端,可以调时,分,秒。
基本功能是在使能端为高电平时,可以使时和、分和秒循环计数;(7) 整点报时模块:在秒计数到50秒时,同时分计数到59分开始,蜂鸣器产生四个时钟周期的鸣叫,到整点是产生两个时钟周期的鸣叫。
(8) 闹钟模块:在设定闹钟闹铃时间后,当闹钟使能端有效时,可在闹铃时间闹铃,通过人工拨0后停闹。
一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”计数器和定时器组成。
干电路系统由秒信号发生器、“时”,“分”,“秒”计数器、译码器及显示器、电路组成。
分频器电路:通常,数字钟的晶体振荡器输出频率较高,为了得到1Hz的秒信号输入,需要对振荡器的输出信号进行分频。
通常实现分频器的电路是计数器电路,当计数满时则产生相应的跳变,从而得到想要的的分频后频率。
时间计数单元:时间计数单元有时计数、分计数和秒计数等几个部分。
时计数单元一般为12进制计数器或24进制计数器。
译码驱动及显示单元:计数器实现了对时间的累计以8421BCD码形式输出,为了将计数器输出的8421BCD码显示出来。
试验箱上有几种模式可供选择,选择模式5则自带有显示译码器,代码中就可以直接送四位bcd码给相应端口就行。
校时电源电路:当重新接通电源或走时出现误差时都需要对时间进行校正。
通常,校正时间的方法是:首先截断正常的计数通路,然后再进行人工出触发计数将高电平信号加到需要校正的计数单元的输入端,相应的时分秒数值随着时钟脉冲信号跳变,校正好后,再按下使能键变为低电平,转入正常计时状态。
整点报时电路:一般时钟都应具备整点报时电路功能,即在时间出现整点时,数字钟会自动报时,以示提醒。
其作用方式是发出连续的或有节奏的音频声波,较复杂的也可以是实时语音提示。
本设计的总体设计原理结构框图如下:图1 数字钟的系统框图该系统由振荡器、分频器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路等组成。
石英晶体振荡器和分频器产生整个系统的时基信号,它直接决定计时系统的精度。
“秒计数器”采用六十进制计数器,每累计60秒向“分计数器”进位;“分计数器”采用六十进制计数器,每累计60分向“时计数器”进位;“时计数器”采用二十四进制计数器,按照“24翻1”规律计数。
“时、分、秒”计数器的输出经译码器送显示器显示。
校时电路用来当计时出现误差时对“时、分、秒”进行校对调整。
整点报时电路是根据计时系统的输出状态产生一脉冲信号,然后去触发音频发生器实现报时。
本程序实现的功能并不复杂,故本课程设计并未采用例化语句,而是将各个模块的功能整合到一起,采用一个结构体多个进程来实现。
四、调试过程程序完成后,首先要做的便是仿真,观察仿真图,改变相应的输入参数值看是否达到所要求的结果。
输入时钟信号如下:相应的产生仿真图如下:从图中可以看出,仿真结果正常,分秒可以正常跳变。
其它功能也同样可以通过更改输入参数来观察输出的仿真结果,从而查看实现的功能。
如下所示:从图中可以看出,闹铃功能正常实现。
图中实现的是调节分位的时间,其它位的时间调节方法一致。
从图中可以看出整点报时功能也能实现,产生高电平使得蜂鸣器发声。
调时功能测试,从图中可以看出,可以正常调节时间。
部分RTL图五、实验心得:本次课程设计是通过所学的EDA知识,自主设计使用物品,将所学的知识运用到实处,感觉收获很大,以前学的时候都是学的理论上的知识,并没有运用到实际做具体的功能器件上来,通过这次的课程设计使我将理论的知识联系到实际运用中来,巩固了以前学习的知识,并且有了新的收获,进一步熟悉了软件运用和实验箱的使用,增强了自我动手能力。
学习EDA课程已经过去一段时间,好多知识开始模糊,所以在实验过程中要经常翻阅书本查询相关知识,实验的过程也将书本的知识进一步强化,对书本的知识有了新的认识,受益匪浅。
在程序设计过程中容易将各个复合语句的范围用错,从而出现意想不到的结果,逻辑出现紊乱,有时是漏掉了某些语句或者是一些语法错误,这些在编译的时候都会有相应的出错提示,顺着提示去改正相对比较容易,不过也出现过几次错误出现的地方和提示出错的地方不一致,费了很大力气才解决,还有一种就是,编译可以通过,但是结果不与预想的一致,一般进程process…end process不会出错,原因主要是进程中的逻辑顺序或嵌套没有安排好,比如if…else……end if语句,如果if语句结束的位置用错,即end if的位置不对,不会提示出错但是不能达到想要的结果,这就需要从头认真分析各逻辑关系,重新考虑end if位置,总之课程设计虽然辛苦,但是却有其中的乐趣,尤其是解决问题后的成就感,学以致用,感觉很充实。
EDA是现代信息社会里很有用的一门学科,以后一定会再次用到,现在打好基础,为以后的学习和工作奠定基础,培养兴趣。
参考文献:EDA技术与VHDL(第二版).潘松黄继业 .清华大学出版社.2008六、程序清单library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shuzizhong isport(clk1,set,naol,change,s1,s2,s3:in std_logic;------秒分时校验---s1,s2,s3;闹铃设置naol,调时间启动键changeminite1:out std_logic_vector(3 downto 0);minite2:out std_logic_vector(3 downto 0);second1,second2, hour1,hour2:out std_logic_vector(3 downto 0);cout:out std_logic);end entity;architecture one of shuzizhong issignal clk,temp:std_logic;beginpro:process(clk1)variable n:integer:=0 ;beginif clk1'event and clk1='1' thenif n=4 then temp<=not temp;n:=0;else n:=n+1;end if;end if;end process pro;clk<=temp;pro1:process(clk,set,s1,s2,s3,change,naol)variablemsecond1,msecond2,mminite1,mminite2,mhour11,mhour12,mhour21,mhour22:s td_logic_vector(3 downto 0);variablemminite10,mminite20,mhour110,mhour120,mhour210,mhour220:std_logic_vec tor(3 downto 0);beginif (clk'event and clk='1') thenif(naol='1') then --qidong dinshiif s2='1' thenmminite10:=mminite10+1;if mminite10="1010"then mminite10:="0000";mminite20:=mminite20+1;if mminite20="0110"then mminite20:="0000";end if;end if;end if; ---------分校验if s3='1' thenmhour110:=mhour110+1;mhour210:=mhour210+1;if mhour110="1010" then mhour110:="0000";mhour120:=mhour120+1;end if;if mhour110="0011" and mhour120="0001"thenmhour110:="0001";mhour120:="0000";end if;if mhour210="1010" then mhour210:="0000";mhour220:=mhour220+1;end if;if mhour210="0100"and mhour220="0010"then mhour210:="0000";mhour220:="0000";end if;end if;-------时校验end if;if set='1' then -----启动校验if s1='1'then msecond1:=msecond1+1;if msecond1="1010"then msecond1:="0000";msecond2:=msecond2+1;if msecond2="0110"then msecond2:="0000";end if;end if;end if; --------秒校验if s2='1'thenmminite1:=mminite1+1;if mminite1="1010"then mminite1:="0000";mminite2:=mminite2+1;if mminite2="0110"then mminite2:="0000";end if;end if;end if; ---------分校验if s3='1' thenmhour11:=mhour11+1;mhour21:=mhour21+1;if mhour11="1010" then mhour11:="0000";mhour12:=mhour12+1;end if;if mhour11="0011" and mhour12="0001"thenmhour11:="0001";mhour12:="0000";end if;if mhour21="1010" then mhour21:="0000";mhour22:=mhour22+1;end if;if mhour21="0100"and mhour22="0010"then mhour21:="0000";mhour22:="0000";end if;end if;-------时校验elsemsecond1:=msecond1+1;-----正常计时工作if msecond1="1010"then msecond1:="0000";msecond2:=msecond2+1;if msecond2="0110"then msecond2:="0000";mminite1:=mminite1+1;if mminite1="1010"then mminite1:="0000";mminite2:=mminite2+1;if mminite2="0110"then mminite2:="0000";mhour11:=mhour11+1;mhour21:=mhour21+1;if mhour11="1010" then mhour11:="0000";mhour12:=mhour12+1;end if;if mhour11="0011" and mhour12="0001"then mhour11:="0001";mhour12:="0000";end if;-------12小时制if mhour21="1010" then mhour21:="0000";mhour22:=mhour22+1;end if;if mhour21="0100"and mhour22="0010"then mhour21:="0000";mhour22:="0000";end if;----------24小时制end if; end if;end if; end if;end if;if naol='0' thensecond1<=msecond1;second2<=msecond2;minite1<=mminite1;minite2<=mminite2;if change='0' then hour1<=mhour11;hour2<=mhour12;else hour1<=mhour21;hour2<=mhour22;------12/24小时制转换end if; elsesecond1<="0000";second2<="0000";minite1<=mminite10;minite2<=mminite20;if change='0' then hour1<=mhour110;hour2<=mhour120;else hour1<=mhour210;hour2<=mhour220;------12/24小时制转换end if;end if;if (msecond1="0000" or msecond1="0001") and (msecond2="0000") and (mminite1="0000") and (mminite2="0000")--and(msecond1<"0010")and (msecond2="0000")then cout<='1';else if change='0' thenif (mminite1=mminite10) and (mminite20=mminite2) and (mhour12=mhour120) and (mhour11=mhour110) and (msecond1<="0100") and (msecond2="0000")then cout<='1'; else cout<='0';--整点报时end if;else if (mminite1=mminite10)and (mminite20=mminite2)and (mhour22=mhour220) and (mhour21=mhour210) and (msecond1<="0101") and (msecond2="0000")then cout<='1';elsecout<='0';end if;end if;end if;end if;end process;end architecture one;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shuzizhong isport(clk1,set,naol,change,s1,s2,s3:in std_logic;------秒分时校验---s1,s2,s3;闹铃设置naol,调时间启动键changeminite1:out std_logic_vector(3 downto 0);minite2:out std_logic_vector(3 downto 0);second1,second2, hour1,hour2:out std_logic_vector(3 downto 0);cout:out std_logic);end entity;architecture one of shuzizhong issignal clk,temp:std_logic;beginpro:process(clk1)variable n:integer:=0 ;beginif clk1'event and clk1='1' thenif n=4999999 then temp<=not temp;n:=0;else n:=n+1;end if;end if;end process pro;clk<=temp;pro1:process(clk,set,s1,s2,s3,change,naol)variablemsecond1,msecond2,mminite1,mminite2,mhour11,mhour12,mhour21,mhour22:s td_logic_vector(3 downto 0);variablemminite10,mminite20,mhour110,mhour120,mhour210,mhour220:std_logic_vec tor(3 downto 0);beginif (clk'event and clk='1') thenif(naol='1') then --qidong dinshiif s2='1' thenmminite10:=mminite10+1;if mminite10="1010"then mminite10:="0000";mminite20:=mminite20+1;if mminite20="0110"then mminite20:="0000";end if;end if;end if; ---------分校验if s3='1' thenmhour110:=mhour110+1;mhour210:=mhour210+1;if mhour110="1010" then mhour110:="0000";mhour120:=mhour120+1;end if;if mhour110="0011" and mhour120="0001"thenmhour110:="0001";mhour120:="0000";end if;if mhour210="1010" then mhour210:="0000";mhour220:=mhour220+1;end if;if mhour210="0100"and mhour220="0010"then mhour210:="0000";mhour220:="0000";end if;end if;-------时校验end if;if set='1' then -----启动校验if s1='1'then msecond1:="0000";msecond2:="0000";end if; --------秒校验if s2='1'thenmminite1:=mminite1+1;if mminite1="1010"then mminite1:="0000";mminite2:=mminite2+1;if mminite2="0110"then mminite2:="0000";end if;end if;end if; ---------分校验if s3='1' thenmhour11:=mhour11+1;mhour21:=mhour21+1;if mhour11="1010" then mhour11:="0000";mhour12:=mhour12+1;end if;if mhour11="0011" andmhour12="0001"thenmhour11:="0001";mhour12:="0000";end if;if mhour21="1010" then mhour21:="0000";mhour22:=mhour22+1;end if;if mhour21="0100"and mhour22="0010"then mhour21:="0000";mhour22:="0000";end if;end if;-------时校验elsemsecond1:=msecond1+1;-----正常计时工作if msecond1="1010"then msecond1:="0000";msecond2:=msecond2+1;if msecond2="0110"then msecond2:="0000";mminite1:=mminite1+1;if mminite1="1010"then mminite1:="0000";mminite2:=mminite2+1;if mminite2="0110"then mminite2:="0000";mhour11:=mhour11+1;mhour21:=mhour21+1;if mhour11="1010" then mhour11:="0000";mhour12:=mhour12+1;end if;if mhour11="0011" and mhour12="0001"then mhour11:="0001";mhour12:="0000";end if;-------12小时制if mhour21="1010" then mhour21:="0000";mhour22:=mhour22+1;end if;if mhour21="0100"and mhour22="0010"then mhour21:="0000";mhour22:="0000";end if;----------24小时制end if; end if;end if; end if;end if;if naol='0' thensecond1<=msecond1;second2<=msecond2;minite1<=mminite1;minite2<=mminite2;if change='0' then hour1<=mhour11;hour2<=mhour12;else hour1<=mhour21;hour2<=mhour22;------12/24小时制转换end if; elsesecond1<="0000";second2<="0000";minite1<=mminite10;minite2<=mminite20;if change='0' then hour1<=mhour110;hour2<=mhour120;else hour1<=mhour210;hour2<=mhour220;------12/24小时制转换end if;end if;if (msecond1="0000" or msecond1="0001") and (msecond2="0000") and (mminite1="0000") and (mminite2="0000")and(msecond1<"0010")and (msecond2="0000")then cout<='1';else if change='0' thenif (mminite1=mminite10) and (mminite20=mminite2) and(mhour12=mhour120) and (mhour11=mhour110) and (msecond1<="0100") and (msecond2="0000")then cout<='1'; else cout<='0';--整点报时end if;else if (mminite1=mminite10)and (mminite20=mminite2)and (mhour22=mhour220) and (mhour21=mhour210) and (msecond1<="0101") and (msecond2="0000")then cout<='1';elsecout<='0';end if;end if;end if;end if;end process;end architecture one;。