多功能数字钟.docx

上传人:b****5 文档编号:7964044 上传时间:2023-01-27 格式:DOCX 页数:21 大小:418.87KB
下载 相关 举报
多功能数字钟.docx_第1页
第1页 / 共21页
多功能数字钟.docx_第2页
第2页 / 共21页
多功能数字钟.docx_第3页
第3页 / 共21页
多功能数字钟.docx_第4页
第4页 / 共21页
多功能数字钟.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

多功能数字钟.docx

《多功能数字钟.docx》由会员分享,可在线阅读,更多相关《多功能数字钟.docx(21页珍藏版)》请在冰豆网上搜索。

多功能数字钟.docx

多功能数字钟

EDA实验

多功能数字钟

 

姓名:

方超

学号:

0908320112

班级:

09042102

院系:

电子工程与光电技术学院

专业:

电子信息工程

指导老师:

花汉兵

实验时间:

2011年10月24日——11月28日

目录

摘要与关键字----------------------------------------3

实验要求说明----------------------------------------4

实验内容--------------------------------------------4

实验目的--------------------------------------------4

实验要求--------------------------------------------4

整体电路设计原理------------------------------------4

电路原理--------------------------------------------4

整体电路图------------------------------------------5

各子模块设计原理------------------------------------5

分频电路--------------------------------------------5

计时电路--------------------------------------------7

报时电路-----------------------------------------9

校时校分、清零保持电路------------------------------10

译码显示电路----------------------------------------11

闹钟电路--------------------------------------------12

音乐报时电路----------------------------------------16

调试仿真及下载--------------------------------------20

设计感想--------------------------------------------20

问题与解决------------------------------------------21

收获与感受------------------------------------------21

参考文献--------------------------------------------21

摘要

本次实验的主要目的是熟悉QUARTEUS-Ⅱ软件的使用方法,和实现FPGA电路设计的一般流程。

本次试验的主要内容是利用ALTERA公司的QUARTUSⅡ开发平台,对Cyclone系列的EP1C12Q240C8芯片进行开发,以实现一周计时的数字钟。

具体功能有:

计时,保持,校时校分,清零,闹铃,音乐整点报时等。

硬件测试与软件仿真的结果吻合。

这次实验说明了数字电路的优势明显,是现在很多电子线路在设计时的首选。

由于FPGA的集成度高,使得FPGA在现在超大规模集成电路时代应用广泛。

关键字:

FPGAQURATUSⅡ数字钟超大规模集成电路

 

Abstract

ThemainpurposeofthisexperimentistomakeusbefamiliarwiththeusageofQUARTEUS-ⅡandtheprocedureofrealizingFPGAcircuits.ThereportmainlytalksaboutthedevelopmentofEP1C12Q240C8chipinCycloneseriestoimplementadigitalclock.Itcontainsfollowingfunctions:

timing,keep,hour&minuteadjust,alarm,ringingonthehour.Thehardwaretestingresultcorrespondwiththesoftwaresimulationresult.Thisexperimentprovesthatdigitalcircuitshaveobviousadvantagestobethefirstchoiceinthecircuitdesign.DuetothehighintegrationofFPGA,itiswidelyappliedinVLSI.

Keywords:

FPGAQURATUSⅡdigitalclockVLSI

 

实验要求说明

1.实验内容

利用QuartusII软件设计一个数字钟,可以完成00:

00:

00到23:

59:

59的计时功能,并在控制电路的作用下具有保持、清零、快速校时、快速校分、整点报时、闹钟等功能,并下载到SmartSOPC实验系统中。

2.实验目的

1.熟悉QUARTUS

软件的使用方法,和实现FPGA电路设计的一般流程。

2.掌握较为复杂的逻辑电路的设计方法。

3.了解verilog语言编程。

3.实验要求

1.设计计时电路,完成0时0分00秒~23时59分59秒的计时功能。

2.清零电路,在任何时候,按动清零开关可以进行计时器清零。

3.保持电路,在任何时候,按动使能控制开关可以控制系统的使能。

4.设计音乐报时电路,使数字计时器从59分53秒开始报时,每隔一秒发一声,共三声低音,一声高音;即59分53秒、59分55秒、59分57秒发低音,59分59秒发高音。

之后持续一段音乐。

5.设计校分电路,在任何时候,拨动校分开关,可以进行快速校分;

设计校时电路,在任何时候,拨动校时开关,可以进行快速校时。

6.闹钟设定功能。

 

整体电路设计原理

一.电路原理

数字钟说到底就是计数器,只是它的工作频率为1HZ。

时分秒各有两位,周一位。

其中周位为模7计数器,时位为一个模24计数器,分位和秒位为模60计数器。

秒位每秒加一,分位每六十秒加一,时位每60分加一,周位每24时加一。

这就是低位的进位信号可以用来驱动高位,这也就是数字钟的最本质的原理。

至于校时和校分电路则只需要用一个开关来控制即可,开关处于一个状态时正常计数,处于另一个状态时位或分位以另外提供的频率工作。

整点报时即当计时满足一定的条件时驱动扬声器即可。

而闹钟也类似,只是用一个比较器进行比较,只要设定的闹铃时间跟数字钟的时间相等时便驱动扬声器工作,但是闹钟需要一个单独的计数器来设定闹铃时间。

最后就是动显部分,动态显示说到底利用的就是人眼的视觉惰性,在闪烁频率大于48HZ时人眼便感觉不到闪烁。

利用这个原理可以使几个数码管以比较高的频率进行工作,这样就可以实现动态显示。

电子设计框图如下

2.整体电路图

各子模块设计原理

1.分频电路的设计

脉冲发生电路是为计时器提供计时脉冲的,因为设计的是计时器,所以需要产生1Hz的脉冲信号。

EDA实验系统的输入时钟为48MHz,那么要产生1Hz的脉冲信号,则要对输入时钟48MHz进行分频,依次进行24分频、两次1000分频、2分频即可得到1Hz的脉冲信号。

同理可以得到校时校分电路所需的2Hz及报时电路所需的500Hz及1KHz。

分频电路总图:

2分频电路图:

2分频仿真波形:

3分频电路图:

3分频仿真波形:

8分频电路:

8分频仿真波形:

10分频电路:

10分频仿真波形:

 

2.计时电路的设计

由于分位和秒位都是60进制、时位是24进制、周位是7进制,故可以分别设计模60、模24和模7计数器,完成秒、分、小时、周的计时。

1.模60

1)电路图:

2)仿真波形:

2.模24

1)电路图:

2)仿真波形:

3.模7

1)电路图:

2)仿真波形:

4.计时模块总图:

三.报时电路的设计

电路每小时进行一次报时,从59分53秒开始报时,每隔一秒发一声,共三声低音、一声高音。

即59分53秒、59分55秒、59分57秒为低音,59分59秒为高音。

实际上,需要在某一时刻报时,就将该时刻输出为“1”的信号作为触发信号,选通报时脉冲信号,进行报时即可。

总结得出公式为:

F=59’51’’*(2’*f3+4’*f3+8’*f4),其中F为最后要传到扬声器中的信号,f3为500HZ信号,f4为1KZ的信号。

具体电路图如下:

仿真波形:

 

四.校分、校时电路及清零、保持电路的设计

K1是系统的使能开关(K1=0正常工作,K1=1时钟保持不变);

K2是系统的清零开关(K2=0正常工作,K2=1时钟的周、时、分、秒全清零);

K3是系统的校分开关(K3=0正常工作,K3=1时可以快速校分);

K4是系统的校时开关(K4=0正常工作,K4=1时可以快速校时);

校分可通过K3来选择2hz快速校分脉冲或由秒位来得进位信号作为分位的计时脉冲,校时也是如此。

清零可通过K2控制所有位的清零端,使它们同时清零。

保持可让1hz计时信号通过一个与门,由K1控制与门的通断。

由于拨动开关时会有抖动,这在校分校时时会使时间乱跳,因此必须在开关后加消颤电路。

这里用D触发器消颤,因为D触发器的输出端只在时钟的上升沿变化,而其他时刻保持上一次的电平。

实践表明,D触发器的消颤效果不错。

校分电路:

校时电路:

清零电路:

保持电路:

五.译码显示电路的设计

1.原理:

本次实验中用到七位数码显示即七个数码显示管,为控制七个数码管循环点亮,首先用74161设计一个模八计数器。

后将其输出经过一个三--八译码器74138输出位地址。

再用4个8选1数据选择器设计一个32选4的总线数据选择器(可定制),用三位地址选出7个不同的四位BCD码,并送至7447进行码转换,将BCD码转换成数码管相应的段码。

每个数码显示管同步显示需要显示的数字,由于同一时间至点亮一个数码管,用较高的频率来数码管循环显示,利用人眼的视觉惰性,就实现了动态显示功能。

2.电路图:

 

六.闹钟电路的设计

首先闹钟要有独立的闹钟时间设定电路。

为了方便随时查看、修改闹钟时间,闹钟的时位和分位的值也要在数码管上显示,而数码管有限,所以需要设计一个选择显示电路来切换时钟时间和闹钟时间。

当时钟时间和闹铃时间重合时,蜂鸣器会响。

此时需要一个比较电路来判断两者是否相等。

闹钟时间设定电路其实是计时电路的简化版。

它只包括校时、校分。

闹钟时间设定电路的原理图如下:

选择显示电路是一个总线型2选1数据选择器,可用一个开关作为地址。

选择显示电路的封装图如下:

 

原理图如下:

比较电路可用同或门来实现。

比较电路的封装图如下:

比较电路的原理图如下:

 

七、音乐报时电路的设计

为了让自己的数字钟更加精美,故添加音乐报时功能。

先将所要播放的音乐用verilog语言编写后生成一个模块,然后用整点进位信号驱动此模块即可。

音乐报时电路原理图如下:

音乐模块的verilog源程序如下:

//*********************************************************************//

//《友谊地久天长》乐曲//

//时钟:

48MHz//

//*********************************************************************//

//音高与频率的对应关系

//----------------------------------------------------------------------

//||1|2|3|4|5|6|7|

//|低音|261.6Hz|293.7Hz|329.6Hz|349.2Hz|392Hz|440Hz|493.9Hz|

//|中音|523.3Hz|587.3Hz|659.3Hz|698.5Hz|784Hz|880Hz|987.8Hz|

//|高音|1045.5Hz|1174.7Hz|1318.5Hz|1396.9Hz|1568Hz|1760Hz|1975.5Hz|

//----------------------------------------------------------------------

modulesong(clk,beep);//模块名称song

inputclk;//系统时钟48MHz

outputbeep;//蜂鸣器输出端

regbeep_r;//寄存器

reg[7:

0]state;//乐谱状态机

reg[15:

0]count,count_end;

reg[23:

0]count1;

//乐谱参数:

D=F/2K(D:

参数,F:

时钟频率,K:

音高频率)

parameterL_5=16'd61224,//低音5

L_6=16'd54545,//低音6

M_1=16'd45863,//中音1

M_2=16'd40865,//中音2

M_3=16'd36402,//中音3

M_5=16'd30612,//中音5

M_6=16'd27273,//中音6

H_1=16'd22956;//高音1

parameterTIME=12000000;//控制每一个音的长短(250ms)

assignbeep=beep_r;//输出音乐

always@(posedgeclk)

begin

count<=count+1'b1;//计数器加1

if(count==count_end)

begin

count<=16'h0;//计数器清零

beep_r<=!

beep_r;//输出取反

end

end

always@(posedgeclk)

begin

if(count1

count1=count1+1'b1;

else

begin

count1=24'd0;

if(state==8'd147)

state=8'd0;

else

state=state+1'b1;

case(state)

8'd0,8'd1:

count_end=L_5;//低音"5",持续2个节拍

8'd2,8'd3,8'd4,8'd5,8'd6,8'd7,8'd8:

count_end=M_1;//中音"1",持续7个节拍

8'd9,8'd10:

count_end=M_3;//中音"3",持续2个节拍

8'd11,8'd12,8'd13,8'd14:

count_end=M_2;

8'd15:

count_end=M_1;

8'd16,8'd17:

count_end=M_2;

8'd18,8'd19:

count_end=M_3;

8'd20,8'd21,8'd22,8'd23,8'd24:

count_end=M_1;

8'd25,8'd26:

count_end=M_3;

8'd27,8'd28:

count_end=M_5;

8'd29,8'd30,8'd31,8'd32,8'd33:

count_end=M_6;

8'd34,8'd35,8'd36,8'd37,8'd38:

count_end=M_6;

8'd39,8'd40,8'd41,8'd42:

count_end=M_5;

8'd43,8'd44,8'd45:

count_end=M_3;

8'd46,8'd47:

count_end=M_1;

8'd48,8'd49,8'd50,8'd51:

count_end=M_2;

8'd52:

count_end=M_1;

8'd53,8'd54:

count_end=M_2;

8'd55,8'd56:

count_end=M_3;

8'd57,8'd58,8'd59,8'd60:

count_end=M_1;

8'd61,8'd62,8'd63:

count_end=L_6;

8'd64,8'd65:

count_end=M_5;

8'd66,8'd67,8'd68,8'd69:

count_end=M_1;

8'd70,8'd71,8'd72,8'd73:

count_end=M_1;

8'd74,8'd75:

count_end=M_6;

8'd76,8'd77,8'd78,8'd79:

count_end=M_5;

8'd80,8'd81,8'd82:

count_end=M_3;

8'd83,8'd84:

count_end=M_1;

8'd85,8'd86,8'd87,8'd88:

count_end=M_2;

8'd89:

count_end=M_1;

8'd90,8'd91:

count_end=M_2;

8'd92,8'd93:

count_end=M_6;

8'd94,8'd95,8'd96,8'd97:

count_end=M_5;

8'd98,8'd99,8'd100:

count_end=M_3;

8'd101,8'd102:

count_end=M_5;

8'd103,8'd104,8'd105,8'd106:

count_end=M_6;

8'd107,8'd108,8'd109,8'd110:

count_end=M_6;

8'd111,8'd112:

count_end=H_1;

8'd113,8'd114,8'd115,8'd116:

count_end=M_5;

8'd117,8'd118,8'd119:

count_end=M_3;

8'd120,8'd121:

count_end=M_1;

8'd122,8'd123,8'd124,8'd125:

count_end=M_2;

8'd126:

count_end=M_1;

8'd127,8'd128:

count_end=M_2;

8'd129,8'd130:

count_end=M_3;

8'd131,8'd132,8'd133,8'd134:

count_end=M_1;

8'd135,8'd136,8'd137:

count_end=L_6;

8'd138,8'd139:

count_end=M_5;

8'd140,8'd141,8'd142,8'd143:

count_end=M_1;

8'd144,8'd145,8'd146,8'd147:

count_end=M_1;

default:

count_end=16'h0;

endcase

end

end

endmodule

 

调试仿真及下载

调试

先保存,将上述电路以字母输入方式输入并保存在工程文件夹中。

再将文件置顶,最后进行编译,在主菜单中选择processing项,在弹出的对话框中选择Startcomplication键,则编译开始。

在编译过程中,若有任何信息、错误和警告消息,都将显示在自动打开的Message-Compiler窗口中;若由于文件出错而没有通过,则需要返回原文件进行修改,修改后存盘,再编译直至文件通过。

仿真

新建一个“VectorWaveformfile”文件,并在下拉列表中选.vwf扩展名,生成波形文件。

右键单击,在弹出的菜单中选EnterNodesFromeSNF,在弹出的对话框中选择要观测的节点。

选Option\GridSize和File\EndTime,设置相应选项,并给输入引脚加上适当的信号。

然后,选File\Save保存。

接着选择主菜单中的Simulator项,打开模拟器,点击Start开始仿真。

下载

1.在主菜单Assignments中选择Device项,在弹出的对话框中选择相应的器件EP1C12Q240C8。

2.在主菜单Assignments选“Pins”,打开平面布置图编辑器窗口,将设计的电路图中的各输入输出锁定在相应的管脚上。

具体管脚号参见《课程设计参考资料》附录五。

3.在主菜单选File\Save保存文件,再次编译项目,生成.sof文件,以用于下载。

4.在主菜单Tools选Programmer,在弹出的对话框中单击start,即可完成下载。

5.要注意在实验的不同阶段,系统板上各短路帽、跳线帽的插拔与否。

 

设计感想

1.问题与解决

1.刚开始在硬件上调试时发现数码管显示乱码,查阅相关资料发现码转换芯片7448输出高电平有效,而实验板上的数码管是共阳极的。

将7447换成输出低电平有效的7447后,数码管显示正常。

2.在进行校分校时操作时,分位和十位总在58进位,后来听同学建议,将消颤开关的时钟频率由50hz调到500hz后,问题得以解决,具体原因尚不明了。

3.后来添加星期计时功能时,由于时间仓促,误将清零信号给错了,导致星期始终停留在1位置。

4.添加音乐功能时,音乐打开后会一直在响,控制信号不起作用,这个问题没有解决。

2.收获与感受

还记得上学期电工电子综合实验2我们也做的是电子计时器。

那时要在面包板上自己插芯片和连电路,一个简单的1小时计时器就花了我将近一个星期的时间。

实验的最终电路就像一个球,里面的线错综复杂。

就连一个简单的与门都要用一个芯片来完成,而且还要给芯片加电,十分繁琐。

更何况我们做的只是一个

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

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

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