EDA数字钟设计实训报告.doc_第1页
EDA数字钟设计实训报告.doc_第2页
EDA数字钟设计实训报告.doc_第3页
EDA数字钟设计实训报告.doc_第4页
EDA数字钟设计实训报告.doc_第5页
免费预览已结束,剩余5页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

EDA实训报告 指 导 教 师朱小祥 田 欢专业电子信息工程技术班级电信1004班姓名 张子维日期2012年5月21日25日一、实训目的 1、了解数字钟的工作原理。 2、进一步熟悉用VHDL语言编写驱动七段码管显示的代码。 3、掌握VHDL编写中的一些小技巧。二、实训原理 多功能数字钟应该具有的功能有:显示时分秒、整点报时、小时和分钟可调等基本功能。首先要知道钟表的工作机理,整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,但是需要注意的是,小时的范围是从023时。 在实训中为了显示的方便,由于分钟和秒钟显示的范围都是从059,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD码)显示个位,对于小时因为它的范围是从023,所以可以用一个2位的二进制码显示十位,用4位二进制码(BCD码)显示个位。 实训中由于七段码管是扫描的方式显示,所以虽然时钟需要的是1Hz时钟信号,但是扫描确需要一个比较高频率的信号,因此为了得到准确的1Hz信号,必须对输入的系统时钟进行分频。 对于整点报时功能,用户可以根据系统的硬件结构和自身的具体要求来设计。本实训设计的是当进行整点的倒计时5秒时,让LED来闪烁进行整点报时的提示。三、实训内容 本实验的任务就是设计一个多功能数字钟,要求显示格式为 小时分钟秒钟,整点报时,报时时间为10秒,即从整点前10秒钟开始进行报时提示,喇叭开始发声,直到过整点时,在整点前5秒LED开始闪烁,过整点后,停止闪烁。调整时间的的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时,S2调整分钟,每按下一次,分钟增加一分钟。四、实训步骤 认真听取老师介绍开发板硬件结构,仔细阅读EDA实训指导书,了解数字钟设计程序的大致过程。根据之前写过的“精确24秒倒计时”程序,将其中的各个模块程序进行修改。修改分频模块,将50MHZ分频为1HZ,即周期为1s。修改显示模块,使秒钟和分钟从00至59循环显示,秒钟每次从59跳到00,则分钟增加一分钟,使时钟从00至23循环显示,分钟每次从59跳到00,则时钟增加一小时,在结构体处添加信号声明,使时钟、分钟和秒钟之间的“ ”显示出来,即000000。添加按键模块,使S1,S2,分别控制时钟的加减,使S3,S4分别控制分钟的加减。添加整点报时程序,当秒钟显示到50时,蜂鸣器开始发声,直至秒钟显示为00时停止。完成整个程序后,设置引脚和端口,使其一一对应,然后编译仿真,硬件测试。五、实训VHDL程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity shixun is port ( clk: in std_logic;s1,s2,s3,s4:in std_logic;display: out std_logic_vector(7 downto 0);seg_sel : out std_logic_vector(7 downto 0); bell:buffer std_logic);end ;architecture rtl of shixun is signal segbit: std_logic_vector(7 downto 0); signal disP_decode: std_logic_vector(7 downto 0); signal sec1,sec10,disp_temp:integer range 0 to 10; signal g1,g2: integer range 10 to 10; signal min1,min10: integer range 0 to 9; signal hour1,hour10: integer range 0 to 9; signal clk1hz :std_logic; signal cnt :std_logic_vector(19 downto 0); signal tone : std_logic_vector(10 downto 0); signal tone_count : std_logic_vector(10 downto 0); signal tone_index : std_logic_vector(2 downto 0); signal time : integer range 0 to 7; signal clk2Mhz : std_logic; begin display=disP_decode; seg_sel=segbit; process(clk)variable cnt1:integer range 0 to 49999999;begin if clkevent and clk=1 thenif cnt1=49999999 then cnt1:=0;elseif cnt124999999 then clk1hz=1;else clk1hz=0;end if;cnt1:=cnt1+1; end if; end if; end process; process(clk1hz)begin if (clk1hzevent and clk1hz=1) then if (sec1=9 and sec10=5 and min1=9 and min10=5 and hour1=3 and hour10=2) then sec1=0;sec10=0;min1=0;min10=0;hour1=0;hour10=0;elsif s1=0 thenhour1=hour1+1;if(hour1=9) thenhour1=0;hour10=hour10+1;elseif(hour10=2 and hour1=3) thenhour1=0;hour10=0;end if;end if;elsif s2=0 thenhour1=hour1-1;if(hour10=0 and hour1=0) thenhour1=3;hour10=2;elseif(hour1=0) thenhour1=9;hour10=hour10-1;end if;end if;elsif s3=0then min1=min1+1; if (min1=9) thenmin1=0; min10=min10+1;if(min10=5)then min10=0;end if;end if;elsif s4=0 thenmin1=min1-1;if(min1=0) thenmin1=9; min10=min10-1;if(min10=0) thenmin10=5;end if;end if; else if(sec1=9)then sec1=0; if(sec10=5)then sec10=0; if(min1=9)then min1=0; if(min10=5)then min10=0; if(hour1=9)then hour1=0; hour10=hour10+1; else hour1=hour1+1; end if; else min10=min10+1; end if; else min1=min1+1; end if; else sec10=sec10+1; end if; else sec1=sec1+1; end if; end if; end if; end process;process(cnt(15 downto 13)begin if clk=1 and clkevent then cntsegbitsegbitsegbitsegbitsegbitsegbitsegbitsegbitnull; end case; end if;end process;process(segbit) begin case segbit is when 11111110=disp_tempdisp_tempdisp_tempdisp_tempdisp_tempdisp_tempdisp_tempdisp_tempnull; end case; end process; process(disp_temp) begin case disp_temp iswhen 0=disp_decodedisp_decodedisp_decodedisp_decodedisp_decodedisp_decodedisp_decodedisp_decodedisp_decodedisp_decodedisp_decodedisp_decode=11111111; end case;end process; process(clk) variable cnt1 : integer range 0 to 29; begin if clk=1 and clkevent then if cnt1=24 then cnt1:=0; else if cnt116 then clk2Mhz=1; else clk2Mhz=0; end if; cnt1:=cnt1+1; end if; end if; end process; process(clk1hz) begin if(clk1hzevent and clk1hz=1) then if(time=7) then time=0; else timetone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextonetonetonetonetonetonetonetonetone0 and sec10=5 ) then if(clk2Mhzevent and clk2Mhz=1) then if(tone_count=16#7ff#) then tone_count=tone; if(tone2047) then bell=not bell; end if; else tone_count=tone_count+1; end if; end if; elsebell=1;end if; end process; end rtl;六、管脚分配 七、实训结果本实验的是设计一个多功能数字钟,显示格式为“ 小时分钟秒”钟,整点报时,报时时间为10秒,即从整点前10秒钟开始进行报时提示,喇叭开始发声,发出的声音从低到高,是一段连串的循环的音符,直到过整点时。调整时间的的按键用按键模块的S1,S2 ,S3, S4。S1, S2调节小时,S1每按下一次,小时增加一个小时,S2每按下一次, 小时减小一个小时,S3,S4调整分钟,S3每按下一次,分钟增加一分钟,S4每按下一次,分钟减小一分钟。另外用按键作为系统时钟复位,复位后全部显示000000。八、实训总结通过这次实训,我对数字钟的原理和数字钟设计有了很清楚的认识,多功能数字钟具有的功能有:显示时分秒、整点报时、小时和分钟可调等基本功能。实训开发板上的芯片EPM240T100C5,它的时钟信号频率为50MHz,所以要将其分频为1Hz,整个钟表的工作是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,但是需要注意的是,小时的范围是从023时。另外,我对程序中的输入输出端口、实体、结构体、信号声明、进程、分频、if条件语句、顺序语句、七段数码管段显示和位选、音乐控制报时程序等等有了更清楚的理解,对于数字中某些功能的设计,总是会遇到一些困难,但是经过我反复的思考尝试和验证,终于完成了这些功能的设计,因此我对程序的编写更加熟练,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论