fpga数字钟课程设计报告_第1页
fpga数字钟课程设计报告_第2页
fpga数字钟课程设计报告_第3页
fpga数字钟课程设计报告_第4页
fpga数字钟课程设计报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、. 课程设计报告设计题目:基于FPGA的数字钟设计班级:电子信息工程1301*:20133638:王一丁指导教师:世平设计时间:2016年1月摘要 EDAElectronic Design Automation电子设计自动化,是以大规模可编程器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,通过相关的软件,自动完成软件方式设计得电子系统到硬件系统,最终形成集成电子系统或专用集成芯片。本次课程设计利用Quartus II 为设计软件,VHDL为硬件描述语言,结合所学知识设计一个多功能时钟,具有显示年、月、日、时、分、秒显示,计时,整点报时,设定时间等功能。利用硬件描述语言VHDL 对设

2、计系统的各个子模块进展逻辑描述,采用模块化的思想完成顶层模块的设计,通过软件编译、逻辑化简、逻辑综合优化、逻辑仿真、最终完本钱次课程设计的任务。关键词:EDA VHDL语言数字钟目录摘要1 课程设计目的2 课程设计容及要求 2.1 设计任务2.2 设计要求3 VHDL程序设计3.1方案论证3.2 系统构造框图3.3设计思路与方法 3.3.1 状态控制模块 3.3.2 时分秒模块 3.3.3 年月日模块 3.3.4 显示模块脉冲产生模块 3.3.6 扬声器与闹钟模块3.4 RTL整体电路 4 系统仿真与分析 5 课程设计总结,包括.收获、体会和建议 6 参考文献1 课程设计目的(1)通过设计数字

3、钟熟练掌握EDA软件(QUARTUS II)的使用方法,熟练进展设计、编译,为以后实际工程问题打下设计根底。 (2)熟悉VHDL 硬件描述语言,提升分析、寻找和排除电子设计中常见故障的能力。 (3)通过课程设计,锻炼书写有理论根据的、实事的、文理通顺的课程设计报告。2 课程设计容及要求 2.1 设计任务 (1)6个数字显示器显示时分秒,setpin按键产生一个脉冲,显示切换为年月日。 (2)第二个脉冲可预置年份,第三个脉冲可以预置月份,依次第四、五、六、七个脉冲到来时分别可以预置时期、时、分、秒,第八个脉冲到来后预置完毕正常从左显示时分秒。 (3)up为高时,upclk有脉冲到达时,预置位加一

4、,否则减一。 2.2 设计要求 (1)在根本功能的根底上,闹钟在整点进展报时,产生一定时长的高电平。 (2)实现闹钟功能,可对闹钟时间进展预置,当到达预置时间时进展报时。3 VHDL程序设计 3.1方案论证该数字钟可以实现:计时功能、整点报时、闹钟和预置时间功能,因此时钟系统可分为5个模块:功能选择模块、时分秒计数模块、年月日计数模块、显示模块、扬声器模块、脉冲产生模块。功能选择模块是有状态机构成的,功能为依次进展、设置时间、设置闹钟时间。调整工作状态:数字钟的初始状态显示时分秒,在setpin按键产生一个脉冲,显示切换为年月日。设置时间:第二个脉冲可预置年份,第三个脉冲可以预置月份,依次第四

5、、五、六、七个脉冲到来时分别可以预置时期、时、分、秒。第八个脉冲到来后,预置完毕恢复初始状态,正常显示时分秒。设置闹钟时间:闹钟在setpin1按键产生第一个脉冲时设定闹钟的时,第二个脉冲设定分,第三个脉冲设定秒,第四个脉冲恢复显示时分秒。(2)时分秒计数模块包括正常计时、闹钟、整点报时三个功能。正常计时功能通过软件编写,60进制的秒计数器,60进制的分计数器,24进制的时计数器。时分秒的计数器具有清0、置数、进位和计数功能。其中reset为清0信号,当reset为0时,时分秒的计数器清0。当set产生第四个脉冲后,连续产生的set信号使分秒计数器依次进展置数。以upclk为时钟,通过up对预

6、置位进展控制,当up为高时且upclk有脉冲到来时,预置位加一,否则减一。当set产生第八个脉冲时,数字钟恢复时分秒的显示。闹钟功能是在正常计数功能上拓展,分为闹钟时间预置和闹钟响应两个局部。闹钟时间预置功能:当set1连续产生脉冲时,依次对闹钟的时分秒位进展预置。以upclk为时钟,通过up对预置位进展控制,当up为高时且upclk有脉冲到来时,预置位加一,否则减一。当set1产生第四个脉冲时,数字钟恢复时分秒的显示。与此同时在程序中增添变量时计时功能可以持续运行。闹钟响应功能:通过预置后,储存的变量与计时器模块的时、分、秒进展比对,当时、分、秒一样时,模块产生一个一段时间的高电平,传输给闹

7、钟响应模块。整点报时功能:当计数器中的分位等于59,秒位等于59时,模块产生一段高电平,输出给扬声器模块进展报时。年月日计数模块分为年月日计数功能,年月日预置数功能。年月日计数功能:以时位的进位脉冲为计时脉冲,闰年二月份为29天,普通年二月份为28天。一月、三月、五月、七月、八月、十月、十二月为31天,四月、六月、九月、十一月为30天。年月日预置数功能:当set产生第一个脉冲后,依次进展年月日数器置数。以upclk为时钟,通过up对预置位进展控制,当up为高时且upclk有脉冲到来时,预置位加一,否则减一。(4) 显示模块:以时分秒,年月日模块的输出、状态标志为输入信号,通过状态控制模块产生的

8、状态标志对显示模块进展控制,显示计时、预置时的不同状态。(5)扬声器模块:输入信号为分位、秒位和状态信号,当计时时钟到达整点是输出高电平,其他时刻输出低电平。(6)脉冲产生模块:对输入的信号进展1000分频,产生周期为一秒的时钟信号,用于数字钟的时钟输入。3.2系统构造框图3.3设计思路与方法 3.3.1 状态控制模块状态控制模块实现对各个功能模块的整体设计,包括对时间与日期的显示与调整,闹钟的显示与调整等控制操作。状态机的输入为setpin,setpin1,upclk。状态机的状态有11种状态。:闹钟设置时位;:闹钟设置分位;:闹钟设置秒位;:时钟显示时分秒;:时钟显示年月日;:钟设置年;:

9、时钟设置月;:时钟设置日;:时钟设置时;:时钟设置分;:设置秒在产生如上状态的同时产生Tlock,flag状态标志,此标志用来进展时钟设置、闹钟设置与显示控制。 RTL 电路图实现代码如下:process(upclk)begin if (upclk=1 and upclkLAST_VALUE=0)then state=ne*t_state; - 实现状态变换end if;end process;process(state,setpin,setpin1)begin ne*t_stateTlock=0000;flag=1; if(setpin1=1 and setpin1LAST_VALUE=0)

10、then ne*t_state=g0; end if; if(setpin=1 and setpinLAST_VALUE=0) then ne*t_stateTlock=0001;flag=1; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=g0;end if; if(setpin=1 and setpinLAST_VALUE=0) then ne*t_stateTlock=0010;flag=1; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=g0;end if; if(s

11、etpin=1 and setpinLAST_VALUE=0) then ne*t_state Tlock=0011; flag=1; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=g0;end if; if(setpin=1 and setpinLAST_VALUE=0) then ne*t_stateTlock=0100;flag=1; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=g0;end if; if(setpin=1 and setpinLAST_VALUE=0

12、) thenne*t_state Tlock=0101; flag=1; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=g0;end if; if(setpin=1 and setpinLAST_VALUE=0) thenne*t_stateTlock=0110;flag=1; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=g0;end if; if(setpin=1 and setpinLAST_VALUE=0) then ne*t_stateTlock=0111;flag

13、=1; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=g0;end if;if(setpin=1 and setpinLAST_VALUE=0) then ne*t_stateTlock=1000;flag=0; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=g1;end if; if(setpin=1 and setpinLAST_VALUE=0) then ne*t_stateTlock=1001;flag=0; if(setpin1=1 and setpin1LAST_

14、VALUE=0)then ne*t_state=g2;end if; if(setpin=1 and setpinLAST_VALUE=0) then ne*t_stateTlock=1010;flag=0; if(setpin1=1 and setpin1LAST_VALUE=0)then ne*t_state=s0;end if; if(setpin=1 and setpinLAST_VALUE=0) then ne*t_state ne*t_state=s0; end case; end process; 3.3.2 时分秒模块时分秒模块的输入为ce(使能端),clk0(系统输入时钟),

15、clk1(upclk时钟),flag(标志位),lock(状态位),up(预置位增减控制),ov(进位位),op(闹钟与扬声器响应)。时分秒模块的RTL电路图时钟选择方式:在初始状态和显示年月日的状态下,时分秒模块的时钟输入为系统时钟输入(clk0),在其他状态下,时分秒模块的时钟输入为(upclk时钟)用来进展置位。实现代码入下: process(lock,clk0,clk1) begin if(lock=0000 or lock=0001)thenclk=clk0; -正常计数时选择clk0else clk=clk1; -预置的时候clk1end if;end process;时钟计时功能

16、,在显示年月日,时分秒的状态时,时钟正常计数。当数字钟处于置数状态时,年、月、日、时、分、秒时钟停顿计时,各个位显示预置数。在闹钟的预置功能实现的同时,通过增添变量,在设置闹钟的同时保证时钟的正常计数,在闹钟预置完毕后,恢复到初始的时钟显示。 3.2.3 年月日模块年月日模块分为日期增加和日期减小两个局部,日期增加:在显示时分秒,显示年月日和设置完秒位的状态下,如果是二月,通过函数判断是否为闰年,其他月份对大小月进展判断,大月为31天,小月为30天,代码如下: if(clkevent and clk=1)then if(ce=1)then if(lock=0000)or(lock=0001)o

17、r(lock=0100and up=1)then if(mon0=0010and mon1=0000) then Feb_add_day(Td0,Td1,tempy0,tempy1,date0,date1); elsif(mon0=0001and mon0=0000)or(mon0=0011)or(mon0=0101) or(mon0=0111)or(mon0=1000)or(mon0=0000and mon1=0001)or(mon0=0010and mon1=0001)then oddmonth_add_day(Td0,Td1,date0,date1);else evenmonth_add

18、_day(Td0,Td1,date0,date1);end if;end if;日期减少同理,代码如下:if(lock=0100and up=0)then if(mon0=0010and mon1=0000)then Feb_add_day(Td0,Td1,tempy0,tempy1,date0,date1);elsif(mon0=0001and mon1=0000)or(mon0=0011)or(mon0=0101) or(mon0=0111)or(mon0=1000)or(mon0=0000and mon1=0001) or(mon0=0010and mon1=0001)then oddm

19、onth_sub_day(Td0,Td1,date0,date1);else evenmonth_sub_day(Td0,Td1,date0,date1);END IF;end if;end if;end if;当以日位的进位为输入,当存在输入脉冲时,通过函数对月份进展加减,代码如下: beginif(clkevent and clk=1)then if(ce=1)then if(lock=0000)or (lock=0001)or (lock=0011and up=1)then add_month(Tm0,Tm1,mon0,mon1); end if;if(lock=0011and up=0

20、)then sub_month(Tm0,Tm1,mon0,mon1); end if; if (lock=0000)or (lock=0001) then if(mon0=0010and mon1=0001)then sub_year(Ty0,Ty1,year0,year1); end if; end if;if(lock=0010and up=1)then add_year(Ty0,Ty1,year0,year1); end if;if(lock=0010and up=0)then sub_year(Ty0,Ty1,year0,year1); end if; end if; end if;

21、3.2.4 显示模块显示模块的输入为年、月、日、时、分、秒、lock(状态标志),通过if语句,状态机一共提供11钟状态。在不同状态下,给显示模块的年月日时分秒不同的输入,从而得到要求的显示。显示电路的RTL电路代码如下:process(lock,sec0,sec1,min1,min0,hour1,hour0,date0,date1,mon0,mon1,year0,year1)beginif(lock=0000)thena0=sec0;a1=sec1;b0=min0;b1=min1;c0=hour0;c1=hour1;end if;if(lock=0001)thena0=date0;a1=da

22、te1;b0=mon0;b1=mon1;c0=year0;c1=year1;end if;if(lock=0101)or(lock=1000)thena0=1111;a1=1111;b0=1111;b1=1111;c0=hour0;c1=hour1;end if;if(lock=0110)or(lock=1001)thena0=1111;a1=1111;b0=min0;b1=min1;c0=1111;c1=1111;end if;if(lock=0111)or(lock=1010)thena0=sec0;a1=sec1;b0=1111;b1=1111;c0=1111;c1=1111;end i

23、f;if(lock=0010)thena0=1111;a1=1111;b0=1111;b1=1111;c0=year0;c1=year1;end if;if(lock=0011)thena0=1111;a1=1111;b0=mon0;b1=mon1;c0=1111;c1=1111;end if;if(lock=0100)thena0=date0;a1=date1;b0=1111;b1=1111;c0=1111;c1=1111;end if;end process;end led_disp_arc;脉冲发生模块分频电路脉冲发生电路将提供的1000hz频率分频成1hz(供系统时钟)。f1000为1

24、000hz输入,second_wave为分频输出。分频器的RTL电路代码如下:process(f1000,t) begin if(f1000event and f1000=1)then if(t=00000011)thent=000000000;second_wave=not second_wave;elset=t+1;end if;end if;end process;end second_wave_arc;3.2.6 扬声器模块模块的输入为clk(系统时钟),op(响应信号),vcc(闹钟使能端),ala(高电平输出)。当vcc为高时,且当op有响应信号输入(高),闹钟产生一定时长的高电平

25、。闹钟的RTL电路代码如下:signal temp1:std_logic_vector(3 downto 0);beginprocess(op,vcc,clk) begin if clkevent and clk=1 then if(vcc=1)then if(temp1=1111)then ala=not ala;elsetemp1=temp1+1;ala=1;end if;end if;end if;end process; end alarm_arc;3.3整体RTL电路4 系统仿真与分析 4.1对根本要求的仿真初态设置:setpin1=0;up=0;setpin置连续8个脉冲,f100

26、0为频率为1000hz的方波。分析:在setpin第一次脉冲到来时,显示年月日,因为数字钟是初始状态所以年月日均为0。Setpin。第二次脉冲到来时对时进展预置数,因为up=0,所以设置时位,时位在不断地减小,在后面各位预置的过程中,每一位的预置过程都是减小。第三次脉冲来到是对分位进展预置,第四次脉冲到来时对秒位进展预置。第四次脉冲到来时对年进展预置,第五次脉冲到来时对月进展预置,第六次脉冲到来时对日进展预置。第七次脉冲到来时,数字钟显示时分秒,从仿真结果可以看出来,此时时钟是从预置的时间开场计时的,第八次脉冲到来时,此时时钟显示的是年月日,此时显示的年月日为预置的年月日。从上述分析可以看出,经过仿真的程序根本到达数字钟的根本要求,系统可靠。 4.2对闹钟状态转换的仿真初始设置:初态设置:setpin1设计一个脉冲;up=0;setpin置连续2个脉冲,f1000为频率为1000hz的方波。当第一个setpin脉冲到来时,显示年月日,第二个setpin脉冲降临时时钟对年进展预置,此后setpin1的第一个脉冲到来,时钟的状态转为对闹钟时间的设置,到达实验要求。4.3对闹钟功能的仿真初始设置:初态设置:setpin1设计三个脉冲;up=0;f1000为频率为100

温馨提示

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

评论

0/150

提交评论