首页资源分类FPGA/CPLD > EDA数字钟的制作

EDA数字钟的制作

已有 445109个资源

下载专区

上传者其他资源

    文档信息举报收藏

    标    签:数字钟eda

    分    享:

    文档简介

    数字钟eda  vhdl

    文档预览

     数字逻辑系统设计论文 课程代码: 11243011 课程中文名称:数字逻辑系统设计 课程英文名称: Digital Logic SystemDesign 院 系: 电子工程学院 专 业: 应用电子技术 姓 名: 张亚攀 班 级: B0632 学 号: 01号 指导老师: 高玉宝 时 间: 2008年9月18日 目 录 一 、 设 计 任 务 和 要 求 二 、 实 现 方 案 和 原 理 三 、 程 序 原 理 图 和 各 模 块 说 明 四 、 仿 真 结 果 五 、 实 验 结 果 和 现 象 六 、 总 结 七 、 参 考 文 献 数 字 钟 一 、设 计 任 务 和 要 求 (1)、设计任务 1、设计一个能显示1/10秒、秒、分、时的12小时数字钟。 2、熟练掌握各种计数器的使用。 3、能用计数器构成十进制、六十进制、十二进制等所需进制的计数器。 4、能用低位的进位输出构成高位的计数脉冲。 (2)、设计要求 1、时钟源使用频率为0.1Hz的连续脉冲。 2、设置两个按钮,一个供“开始”及“停止”用,一个供系统“复位”用。 3、时钟显示使用数码管显示。 4、“时显示”部分应注意12点后显示1点。 5、注意各部分的关系,由低位到高位逐级设计、调试。 二 、 实 现 方 案 和 原 理 (1)、实现方案 要实现一个数字钟可以用好多钟方法实现,但本次我们主要是EDA实习,所以就用VHDL语言实现,主要结合硬件实验箱上的现有的资源来完成。 (2)、数字钟原理 数字钟可以利用加法器来完成,总共有八个显示数字,从最低位开始记数,设定是六十进制,当最低位满进制后,便向前高位进一,依次类推,可以一直进到小时位,但在小时位时要注意,当十二小时满之后,就要显示一点钟。整个原理部分主要是随着时钟脉冲的增加,而计数器就增加,依次增加到小时位。同时要注意低位部分的进位即是高位部分的时钟信号的脉冲源,每一个部分总是跟着时钟信号的改变而改变。 三 、程 序 原 理 图 和 各 模 块 说 明 数字钟的顶层电路原理图如下: 说明:为了使程序简短,我把各个模块做成为一个完整的大模块,功能完全相同。 在本实验中CLK管脚接实验板1Hz的频率,经分频后得到实验要求的0.1Hz频率。CLK2管脚接实验板的1024 Hz用来动态扫描数码管显示时间 数字钟的完整程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ZHONGSHUZI IS PORT(RST,STOP,CLK,CLK2:IN STD_LOGIC; DIG:OUT STD_LOGIC_VECTOR( 7 DOWNTO 0); SEG:OUT STD_LOGIC_VECTOR( 7 DOWNTO 0)); END; ARCHITECTURE ELE OF ZHONGSHUZI IS SIGNAL A1,CLK1,C1,C2,C3,C4,C5,C6,C7: STD_LOGIC; SIGNAL Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8:STD_LOGIC_VECTOR( 3DOWNTO 0); SIGNAL B1:INTEGER RANGE 10 DOWNTO 0; SIGNAL A :STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL B :STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL C :STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL E :STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN U0:PROCESS(RST,STOP,CLK,CLK1,B1,A1)--分频 BEGIN IF RST='1' THEN B1<=0;A1<='0'; ELSIF STOP='1' THEN B1<=B1;A1<=A1; ELSIF CLK'EVENT AND CLK='1' THEN IF B1<10 THEN B1<=B1+1;A1<='0'; ELSE B1<=0;A1<=NOT A1; END IF; END IF; CLK1<=A1; END PROCESS; U1:PROCESS(RST,STOP,CLK1)--十秒记数 BEGIN IF RST='1' THEN Q1<="0000";C1<='0'; ELSIF STOP='1' THEN Q1<=Q1;C1<=C1; ELSIF CLK1'EVENT AND CLK1='1' THEN IF Q1="1001" THEN Q1<="0000";C1<='1'; ELSE Q1<= Q1+1;C1<='0'; END IF; END IF; END PROCESS ; U2:PROCESS(RST,STOP,C1) BEGIN IF RST='1' THEN Q2<="0000";C2<='0'; ELSIF STOP='1' THEN Q2<=Q2;C2<=C2; ELSIF C1'EVENT AND C1='1' THEN IF Q2="0101" THEN Q2<="0000";C2<='1'; ELSE Q2<= Q2+1;C2<='0'; END IF; END IF; END PROCESS ; U3:PROCESS(RST,STOP,C2)--秒记数 BEGIN IF RST='1' THEN Q3<="0000";C3<='0'; ELSIF STOP='1' THEN Q3<=Q3;C3<=C3; ELSIF C2'EVENT AND C2='1' THEN IF Q3="1001" THEN Q3<="0000";C3<='1'; ELSE Q3<= Q3+1;C3<='0'; END IF; END IF; END PROCESS ; U4:PROCESS(RST,STOP,C3) BEGIN IF RST='1' THEN Q4<="0000";C4<='0'; ELSIF STOP='1' THEN Q4<=Q4;C4<=C4; ELSIF C3'EVENT AND C3='1' THEN IF Q4="0101" THEN Q4<="0000";C4<='1'; ELSE Q4<= Q4+1;C4<='0'; END IF; END IF; END PROCESS ; U5:PROCESS(RST,STOP,C4)--分记数 BEGIN IF RST='1' THEN Q5<="0000";C5<='0'; ELSIF STOP='1' THEN Q5<=Q5;C5<=C5; ELSIF C4'EVENT AND C4='1' THEN IF Q5="1001" THEN Q5<="0000";C5<='1'; ELSE Q5<= Q5+1;C5<='0'; END IF; END IF; END PROCESS ; U6:PROCESS(RST,STOP,C5) BEGIN IF RST='1' THEN Q6<="0000";C6<='0'; ELSIF STOP='1' THEN Q6<=Q6;C6<=C6; ELSIF C5'EVENT AND C5='1' THEN IF Q6="0101" THEN Q6<="0000";C6<='1'; ELSE Q6<= Q6+1;C6<='0'; END IF; END IF; END PROCESS ; U7:PROCESS(RST,STOP,C6)--时记数 BEGIN IF RST='1' THEN Q7<="0000";C7<='0'; ELSIF STOP='1' THEN Q7<=Q7;C7<=C7; ELSIF C6'EVENT AND C6='1' THEN IF Q8="0001" AND Q7="0010" THEN Q8<="0000";Q7<="0001"; ELSIF Q7<"1001" THEN Q7<=Q7+1; ELSE Q7<="0000";Q8<=Q8+1; END IF; END IF; END PROCESS; U8:PROCESS(CLK2)--数码管显示 BEGIN IF CLK2'EVENT AND CLK2 ='1' THEN A<=A+1; END IF; END PROCESS ; U9: PROCESS(A) BEGIN CASE A IS WHEN "000" =>C<="11111110"; B<=Q1; WHEN "001" =>C<="11111101"; B<=Q2; WHEN "010" =>C<="11111011"; B<=Q3; WHEN "011" =>C<="11110111"; B<=Q4; WHEN "100" =>C<="11101111"; B<=Q5; WHEN "101" =>C<="11011111"; B<=Q6; WHEN "110" =>C<="10111111"; B<=Q7; WHEN "111" =>C<="01111111"; B<=Q8; WHEN OTHERS =>C<=NULL; END CASE; END PROCESS ; U10: PROCESS(B) BEGIN CASE B IS WHEN "0000" =>E<="11000000"; WHEN "0001" =>E<="11111001"; WHEN "0010" =>E<="10100100"; WHEN "0011" =>E<="10110000"; WHEN "0100" =>E<="10011001"; WHEN "0101" =>E<="10010010"; WHEN "0110" =>E<="10000010"; WHEN "0111" =>E<="11111000"; WHEN "1000" =>E<="10000000"; WHEN "1001" =>E<="10010000"; WHEN OTHERS =>E<=NULL; END CASE; END PROCESS; DIG<=C; SEG<=E; END ELE; 四 、仿 真 结 果 此为数字钟完整的波形仿真图 五 、实 验 结 果 和 现 象 在实验成功之后,可以看到数码管上显示时间,这个时间是同时有时、分、秒、十秒同时显示的。这个时钟是有十秒位的,当十秒位满了之后,秒位就变成一,并且不断的随着脉冲源的增加而增加,当小时位为十二,分位为五十九时,再有进位时,小时位便变为一,分位为零,依次再由十秒位向前增加。由于实验要求中给的频率和实地的时钟频率不同,所以显示的时间不和标准的时钟一秒钟相同。但只要把源频率调到标准的一赫兹,这个时钟就是标准的时钟了。在实验中只设定了复位、暂停等按钮,这样的时钟还不怎么完善,要是增加报时、调节时间功能就更加好了。 六 、总 结 实 习 小 结 为期一周的实习终于结束了,在这一个星期里让我学到了好多的东西。在星期二老师把实习课题给我们公布了之后,我们就选择了自己喜欢的课题开始做实验了。由于上个学期我们已经学习了这门课程,所以做起实验来也比较熟练一点,我们实习时是用Quartus II软件做自己的实验课题,我选择的是做数字钟,因为这个课题以前就做过,现在做起来也有一定的基础,可以在相对较短的时间里完成课题。 根据数字钟设计的要求,我在以前的实验项目上做了好多的改进,尽量符合要求。但在调试程序的过程中,我发现了一些错误,等找到错误后,我就一点一点的改进。在改进了好多次之后还是有一些地方不符合要求,只好去图书馆查找资料书,找一些相关的内容。同时也向班里的同学请教,实在不会时就向老师提问,在老师的耐心教导下,我的实验课题终于成功了,看着实验箱上的自己设计的数字钟在不断的走着,心里真的好高兴。 做实验让我看到,虽然只是一个小小的数字钟,但它却是不容易做成的,我们是学电子的,不求有什么高深的理论,但求有一种脚踏实地的实践精神。这种实践最能通过做实验能体现出来。通过实验我们可以知道自己所学的知识有哪些地方的不足,而且做实验可以锻炼自己的动手能力。在实验中可以加深自己对Quartus II软件的熟悉程度,假如自己以后想从事这方面的工作,那是很有帮助的。 这次的实习,使我有了很多更深的感想,比如要做一个大的项目,可以把它先分解成几个小的项目,先做好这些小的项目,在把这些小的项目一个一个组合起来,大的问题就迎刃而解。合作精神也是非常重要的,大家在一起把各自的想法提出来讨论,经过交换就是一种大的智慧,一个人闭门造车是永远都不会成功的。 通过这次的实习,让我加深了以前所学的理论知识,同时也让我明白只有把理论转化为实践才是真正的学以致用。在做实验的过程中,得到了老师和同学的关心和帮助,在次我衷心的谢谢他们。感谢这次实习,谢谢老师! 七、参 考 文 献 [1]《电子设计自动化(EDA)技术实验教程》 王祖强 主编 山东大学出版社,2005年 [2]《VHDL硬件描述语言实验指导书》(校内自编教材),电子工程学院 [3]《VHDL数字电路设计与应用实践教程》,王振红 主编,机械工业出版社,2003年 [4]《EDA技术与VHDL》,潘松,黄继业 编著,--2版,清华大学出版社,2007年

    Top_arrow
    回到顶部
    EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。