资源描述:
《数字逻辑课程设计---数字钟的设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、计算机科学学院数字逻辑课程设计报告数字钟的设计班级:学号:姓名:同组者:日期:2010.7.21题目与要求1.1问题的提出设计一个数字时钟,具有以下功能:1、秒、分为00~59六十进制计数器。2、时为00~23二十四进制计数器。3、整点报时。4、数码管显示。5、校时功能。1.2设计原理数字钟的主体是计数器,它记录并显示接收到的秒脉冲个数,其中秒和分为模60计数器,小时是模24计数器,分别产生3位BCD码。BCD码经译码,驱动后接数码管显示电路。秒模60计数器的进位作为分模60计数器的时钟,分模60计数器的进位作为模24计数器的时钟。为了实现手动调整时间,在外部增加了switch,add,
2、clk和set按键,在switch值为1时,正常计数;switch值为0时校对时间,此时set为10时校对分,set为11时校对时,校对动作是通过clk来实现的,clk按下一次对应的数值加1;同时还在外部增加了一个清零按键clear,当clear为1时执行清零操作。数字钟显示为59分52,54,56,58秒时,报时闹钟会响起。2设计过程2.1逻辑描述源代码:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityclockisport(c
3、lk,switch,clear,add:instd_logic;set:instd_logic_vector(1downto0);second0,second1,minute0,minute1,hour0,hour1:outstd_logic_vector(3downto0);naozhong:outstd_logic_vector(0downto0));end;architecturearchofclockissignalclk0,clr,m0,m1,m2,m3,m4:std_logic;signalcout0:std_logic_vector(3downto0);signalcout
4、1:std_logic_vector(3downto0);signalcout2:std_logic_vector(3downto0);signalcout3:std_logic_vector(3downto0);signalcout4:std_logic_vector(3downto0);signalcout5:std_logic_vector(3downto0);signalcout6:std_logic_vector(0downto0);beginstart:process(switch)beginif(switch='0')thenclk0<=clk;elseif(add='1'
5、)thenclk0<='1';elseclk0<='0';endif;endif;endprocessstart;p1:process(clr,clk0)beginif(set="00"orset="01")thenif(clr='1')thencout0<="0000";m0<='0';elsif(rising_edge(clk0))thenif(cout0="1001")thencout0<="0000";m0<='1';elsecout0<=cout0+'1';m0<='0';endif;endif;endif;endprocessp1;p2:process(clr,m0)begi
6、nif(set="00"orset="01")thenif(clr='1')thencout1<="0000";m1<='0';elsif(rising_edge(m0))thenif(cout1="0101")thencout1<="0000";m1<='1';elsecout1<=cout1+'1';m1<='0';endif;endif;elsif(set="10")thenif(clk0='1')thenm1<='1';elsem1<='0';endif;endif;endprocessp2;p3:process(clr,m1)beginif(set="00"orset="10"
7、)thenif(clr='1')thencout2<="0000";m2<='0';elsif(rising_edge(m1))thenif(cout2="1001")thencout2<="0000";m2<='1';elsecout2<=cout2+'1';m2<='0';endif;endif;endif;endprocessp3;p4:process(clr,m2)beginif(set="00"orset="10")the