ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:266.58KB ,
资源ID:9521226      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9521226.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(电子时钟.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

电子时钟.docx

1、电子时钟黑龙江科技学院课程设计任务书一、设计题目: 秒表的设计 二、设计的主要内容: 利用一块芯片完成除时钟源、按键、扬声器喝显示器(数码管)之外的所有数字电路功能。所有数字逻辑功能都在CPLD器件上用VHDL实现。 秒表有六个输出显示,分别为百分之一秒,十分之一秒、秒、十秒、分、十分,共有6个计数器与之对应,6个计数器全为BCD码输出,这样便于显示器译码的链接。当计时达60秒后,蜂鸣器响10声。 指导教师: 日 期: 教师评语: 评阅成绩: 评 阅 人: 日 期: 摘 要本课程设计完成了秒表电子钟的设计,数字电子钟是一种用数字显示秒、分、时的计时装置,由于数字集成电路技术的发展和采用了先进的

2、石英技术,它使数字钟具有走时准确、性能稳定、携带方便等优点。数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活带来极大的方便。在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路的能力。关键词:秒表、计时装置、石英技术第1章 电子时钟概述1.1 设计目的随着时代的发展,社会的进步,现在人们的生活节奏是越来越快,所谓争分夺秒,时间就是金钱之说历史已久,电子时钟也由来变成人们生活必不可少的。电子时钟有着看时间方便,能够定制提醒,有着任务和日常记事功能。设计这样的电子时钟,方便了我们的出行,我们的约会,

3、我们的工作等。通过本次实验掌握多位计数器相连的设计方法。掌握十进制,六进制,二十四进制计数器的设计方法。继续巩固多位共阴极扫描显示数码管的驱动及编码。掌握扬声器的驱动和LED灯的花样显示。1.2 设计要求为了简化程序设计及增加可读性,本系统仍采取模块化的设计方式,重复使用的功能模块均以组件(component)的形式存在,以便相关块的调用。主程序内的不同功能的模块构成一个完整的结构。为了便于时钟计数,需要1hz的时钟信号。为了节省电路耗电,输出显示采用了四合一七段显示器来显示分与秒共4个数字,另外2个数字的小时显示也采用四合一七段显示器来显示。由于需要一个除以1024hz的分频器,用来实现系统

4、输入信号产生一个1hz的时钟信号。能进行正常的时、分、秒计时功能,分别由6个数码管显示24h、60min、60s。按下rst键时,起到复位功能总清0。按下choose_mode键时,能够在12进制和24进制之间转换显示。按下set_hou、set_min可以设置小时和分钟。可以设置闹铃报时。第2章 电子时钟设计思想2.1 模块设计思想2.1.1 count6模块该模块实现模6输出功能。当计数满6时,计数器清零并产生一个进位标示。即当carry2满6时,value2变为1。2.1.2 country10模块该模块同count6模块相同,当计数器满10时,计数器清零并产生一个进位标示。即当carr

5、y1满10时,value1变为1。2.1.3 count12模块12进制计数作为一个整体,和cout6和count10相同计数器满12清零。但不同的时count12定义了一个信号选择信号temp比用case when语句实现状态选择,两个输出信号value _1 和value _ 2全位4位以实现两个数码管显示,当value _1 9 时value _ 2 位1。2.1.4 count24模块count24计数器实现原理基本和count12相同,value_lb在09之间取值,value_hb在02之间取值。2.1.5 decoder7s模块本模块为7段数码管译码,本模块将十进制数转换成七段数

6、码管所需的数据。使用casewhen语句实现。2.1.6 division模块为了便于时钟计数,需要1hz的时钟信号。我们利用视觉暂留效应,让4个七段显示器轮流供电显示,换句话说,需要进行输出显示扫描。1024分频产生1hz的时钟信号。2.1.7 reg模块本模块主要功能为锁存器锁存闹钟数据。采用D触发器实现。当lock是上升沿的时候输出数据,否则锁存。2.1.8 scan模块七段显示器扫描输出模块。4个串联的四合一七段显示器,将分与秒4个数字共享一组七段显示器组,其中必须使用同步扫描电路。同时触发该数字所对应的七段显示器的电源引脚。使用casewhen语句实现状态转移。2.1.9 timin

7、g模块分钟与小时计时的模块(与外部联系可设置计时模式),用于显示和调制时间,并选择是12进制还是24进制显示,当select12_24为1时位24进制显示,否则位12进制。调用count6,count10,count12,count24模块实现时间显示。2.1.10 clock块本模块位上层模块,将各模块组合到一起。使用component进行元件例化,port map端口映射。rst位复位键,当人rst位1时时钟清0。choose_mode位12进制和24进制选择键,当choose_mode位1时为24进制。set_min和set_hou位时间设置键。alarm为闹钟信号,当设置时间和当前时间

8、相同时alarm设为1.第3章 模块仿真图与分析3.1 decoder7s 模块图图3-1 decoder7s模块图本模块位7段数码管译码,当binary输入09时,bcd输出经转换后的2进制码。使用case.when.语句实现。3.2 count12模块图图3-2 count12模块图本模块位12进制计数器,当clr输出1时,输出被清零。value_l和value_h全变为0。否则当value_l到9时value_h输出1。当满12时value_l和value_h全变为0重新计数。使用case.when.语句实现。3.3 Scan模块图图3-3 scan模块图Temp从000到101,dat

9、a0相对应的赋值给dataout,并且choose输出相应的值。使用case.when.语句实现。3.4 Reg模块图图3-4 reg模块图当lock为上升沿时将datain输出给dataout。3.5 Count24模块图图3-5 count24模块图当clr4位零时计数器清零,否则24计数。使用case.when.语句实现。3.6 Count6模块图图3-6 count6模块图当clr2位零时计数器清零,否则6计数。使用case.when.语句实现。3.7 Count10模块图图3-7 county10模块图当clr1位零时计数器清零,否则10计数。使用case.when.语句实现。3.8

10、 Timing模块图图3-8 timing模块图分钟与小时计时的模块(与外部联系可设置计时模式),调用cout6,cout10,cout12,cout24模块。设置和显示时间。当select12_24 = 0时,12进制显示,否则24进制显示。setclk_h和setclk_m位时间设置时,当有时钟信号时可设置时间。使用元件例化和元件调用实现。3.9 Division模块图图3-9 division模块图3.10 Clock模块图图3-10 clock模块图上层模块,将各模块组合到一起。使用component进行元件例化,port map端口映射。rst位复位键,当人rst位1时时钟清0。ch

11、oose_mode位12进制和24进制选择键,当choose_mode位1时为24进制。set_min和set_hou位时间设置键。alarm为闹钟信号,当设置时间和当前时间相同时alarm设为1。第4章 实验感想 正所谓“纸上得来终觉浅,绝知此事要躬行”,通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。特别是当每一个子模块编写调试成功时,心里特别的开心。但是在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。在波形仿真时,也遇到了一点困难,想要

12、的结果不能在波形上得到正确的显示:在设定输入的时钟信号后,数字钟开始计数,但是始终看不到小时、星期的循环计数。后来,在数十次的调试之后,才发现是因为输入的时钟信号对于小时、星期来说太短了。经过屡次调试,终于找到了比较合适的输入数值。总的来说,这次设计的数字钟还是比较成功的,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。参考文献:l 基于Quartus 的FPGA/CPLD设计电子工业出版社2 CPLD系统设计技术入门与应用电子工业出版社3 EDA技术

13、基础湖南大学出版社4 沈明山 EDA技术及可编程器件应用实训科学出版社5 朱正伟 EDA技术及应用清华大学出版社程序清单:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity clock is port(clk_20m,rst,clk_dis,alarm_set,choose_mode,set_min,set_hou:in std_logic; display7:out std_logic_vector(6 downto 0);se

14、lect6:out std_logic_vector(5 downto 0);alarm:out std_logic );end clock;architecture behave of clock issignal clk_1s,h : std_logic;signal second_l,second_h : std_logic_vector(3 downto 0);signal minute_l,minute_h : std_logic_vector(3 downto 0);signal hour_l,hour_h : std_logic_vector(3 downto 0);signal

15、 carry_clk1,carry_clk2,carry_clk3 : std_logic;signal decoder_temp : std_logic_vector(3 downto 0);signal lock_temp : std_logic;signal reg_temp1,reg_temp2 : std_logic_vector(3 downto 0);signal reg_temp3,reg_temp4 : std_logic_vector(3 downto 0);component division is port(clk : in std_logic; output : ou

16、t std_logic);end component;component count10 is port(clk1 : in std_logic; clr1 : in std_logic; carry1 : out std_logic; value1 : out std_logic_vector(3 downto 0);end component;component count6 is port(clk2 : in std_logic; clr2 : in std_logic; carry2 : out std_logic; value2 : out std_logic_vector(3 do

17、wnto 0);end component;component reg is port(lock : in std_logic; DataIn0,DataIn1 : in std_logic_vector(3 downto 0); DataIn2,DataIn3 : in std_logic_vector(3 downto 0); DataOut0,DataOut1 : out std_logic_vector(3 downto 0); DataOut2,DataOut3 : out std_logic_vector(3 downto 0);end component reg;componen

18、t timing is port(clr_time : in std_logic; setclk_h : in std_logic; setclk_m : in std_logic; select12_24 : in std_logic; data_min_l : out std_logic_vector(3 downto 0); data_min_h : out std_logic_vector(3 downto 0); data_hou_l : out std_logic_vector(3 downto 0); data_hou_h : out std_logic_vector(3 dow

19、nto 0); end component timing;component scan is port(clk_scan : in std_logic; data0,data1,data2 : in std_logic_vector(3 downto 0); data3,data4,data5 : in std_logic_vector(3 downto 0); dataout : out std_logic_vector(3 downto 0); choose : out std_logic_vector(5 downto 0);end component;component decoder

20、7s is port(binary : in std_logic_vector(3 downto 0); bcd : out std_logic_vector(6 downto 0);end component decoder7s; beginU1: division port map(clk_20m,clk_1s);U2: count10 port map(clk_1s,rst,carry_clk1,second_l);U3: count6 port map(carry_clk1,rst,carry_clk2,second_h);h=set_min or carry_clk2;U4: tim

21、ing port map(rst,set_hou,h,choose_mode,minute_l,minute_h,hour_l,hour_h);U6: scan port map(clk_dis,second_l,second_h,minute_l,minute_h,hour_l,hour_h,decoder_temp,select6);U7: decoder7s port map(decoder_temp,display7);U8:reg port map(lock_temp,minute_l,minute_h,hour_l,hour_h,reg_temp1,reg_temp2,reg_te

22、mp3,reg_temp4);P1: process(clk_20m,alarm_set) begin if alarm_set=1 then lock_temp = 1; else lock_temp = 0; end if; end process;P4: process(clk_20m,lock_temp) begin if reg_temp1=minute_l and reg_temp2=minute_h and reg_temp3=hour_l and reg_temp4 = hour_h then alarm 0); elsif clk2event and clk2=1 then

23、if temp 5 then temp := temp + 1; carry2 0); carry2 = 1; end if; end if; value2 0); elsif clk1event and clk1=1 then if temp 9 then temp := temp + 1; carry1 0); carry1 = 1; end if; end if; value1 = temp; end process;end architecture behave;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_un

24、signed.all;use ieee.std_logic_arith.all;entity count12 is port(clk3 : in std_logic; clr3 : in std_logic; value_l: out std_logic_vector(3 downto 0); value_h: out std_logic_vector(3 downto 0) );end entity count12;architecture behave of count12 is signal temp : std_logic_vector(3 downto 0); beginP1: pr

25、ocess(clk3,clr3) begin if clr3=1 then temp 0); elsif clk3event and clk3=1 then if temp 11 then temp = temp + 1; else temp 0); end if; else null; end if; end process;P2: process(clk3,temp,clr3) begin case temp is when 0000 = value_l 0); value_h 0); when 0001 = value_l = 0001; value_h value_l = 0010; value_h value_l = 0011; value_h value_l = 0100; value_h value_l = 0101; value_h value_l = 0110; value_h value_l = 0111; value_h value_l = 1000; value_h value_l = 1001; value_h value_l = 0000; value_h value_l = 0001; value_h null; end case;end process;end architecture behave;library ieee;use ieee.s

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1