基于eda的多功能数字钟方案设计书.docx
- 文档编号:28248382
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:36
- 大小:743.16KB
基于eda的多功能数字钟方案设计书.docx
《基于eda的多功能数字钟方案设计书.docx》由会员分享,可在线阅读,更多相关《基于eda的多功能数字钟方案设计书.docx(36页珍藏版)》请在冰豆网上搜索。
基于eda的多功能数字钟方案设计书
一.设计说明…………………………………………………………1
.功能说明…………………………………………………………………………………1
.功能简介…………………………………………………………………………………1
二.总体方案分析………………………………………………3
三.各子模块设计原理……………………………………………3
.脉冲分频模块…………………………………………………………………………3
.时钟计时模块(包含校定和清零功能)………………………………………………4
.显示控制电路…………………………………………………………………………7
.显示模块和计时模块结合……………………………………………………………11
.整点报时模块…………………………………………………………………………11
.闹钟模块………………………………………………………………………………13
四.调试与仿真……………………………………………………17
.脉冲发生模块…………………………………………………………………………17
.计时电路……………………………………………………………………………18
.仿真……………………………………………………………………………………18
五.收获与体会…………………………………………………………19
六.附录…………………………………………………………20
一.设计说明
.功能说明:
设计一个能进行时、分、秒计时的十二小时制或二十四小时制的数字钟,并具有定时与闹钟功能,能在设定的时间发出闹铃音,能非常方便地对小时、分钟和秒进行手动调节以校时间,每逢整点,产生报时音报时。
系统框图如图1-1所示:
图1-1多功能数字钟系统框图
.功能简介
此设计问题可分为主控电路、计数器模块和扫描显示三大部,主控电路中各种特殊功能的实现设计问题的关键。
用两个电平信号A、B进行模式选择,AB=00为模式0,系统为计时状态;AB=01为模式1,系统为手动校时状态;AB=10为模式2,系统为闹钟设置状态。
设置一个cd信号,当cd=00时,表示在手动校对时,选择调整时部分;当cd=01时,表示在手动校对时,选择调整分钟部分;。
当cd=10时,表示在手动校对时,选择调整秒部分
设置一个change信号,在手动校时或闹钟设置模式下,每按一次,计数器加1。
设置一个reset信号,当reset=0时,整个系统复位;当reset=1时,系统进行计时或其他特殊功能操作。
设置一个闹钟设置信号reset1,当reset1=1时,对闹钟进行设置,当reset1=0时,关闭闹钟信号。
设置一个E信号,当E=0时,表示在手动校对时,选择调整时部分;当E=1时,表示在手动校对时,选择调整分钟部分
设置状态显示信号(连发光二极管):
LD_alert指示是否设置了闹铃功能;LD_h指示当前调整的是小时信号;LD_m指示当前调整的是分钟信号。
当闹钟功能设置后(LD_alert=1),系统应启动一个比较电路,当计时与预设闹铃时间相等时,启动闹铃声,直到关闭闹铃信号有效。
整点报时部分由分和秒计时同时为0(或60)启动,与闹铃共用一个扬声器驱动信号out。
系统计时时钟为clk=1Hz,选择另一时钟clk_lk=1kHz作为产生闹铃声、报时音的时钟信号。
主控电路状态表如表1-1所示。
硬件系统示意图如图1-2所示。
表1-1数字钟主控电路状态表
模式
选择
秒、分、时计数器秒冲
输出状态
备注
reset
reset1
AB
turn
LD_h
LD_m
LD_alert
0
x
xx
x
x
0
0
0
系统复位
1
x
00
x
clk
0
0
0
系统计时
1
x
01
0
change=↑
分计数器加1
0
1
0
手动校时
1
x
01
1
change=↑
时计数器加1
1
0
0
1
1
10
0
change=↑
分计数器加1
0
1
1
设置闹钟
1
1
10
1
change=↑
时计数器加1
1
0
1
1
0
xx
x
x
0
0
0
关闭闹钟
图1-2数字钟硬件系统示意图
二.总体方案分析:
整个电路有三大主体电路:
1.控制电路,2.脉冲电路,3,功能电路
时钟电路首先要有输入脉冲,由于平台提供了脉冲发生器,就省去了脉冲发生器的设计,这里我们只需要设计一个分频器,得到我们需要的频率。
时钟的计时范围是00:
00:
00---23:
59:
59,所以我们需要设计模六十和模二十四的计数器组成时钟计时电路。
为了显示当前时钟时间,我们需要一个显示电路。
校分、校时、清零电路只需要输入一些控制信号给时钟计时电路即可,当然这些控制信号是由开关提供的。
要实现整点报时功能,一个报时控制电路是必不可少的。
这是只含基本功能的时钟电路所包含的子电路。
为了实现我们加入的闹钟功能,我们需要一个闹钟时间设定电路;闹钟时间保持电路;比较电路;蜂鸣器控制电路;闹表时间显示电路。
因为我们只含有一个数码显示器,一般状态下显示的是时钟,所以我们需要一个显示模式切换电路。
三.各子模块设计原理
.脉冲分频模块
平台提供给我们的是48Mhz的脉冲,由于电路的需要,我们要把48Mhz的脉冲分频得到1Khz(蜂鸣器、动态显示)、1hz(时钟计数)的脉冲。
分频器的总电路图:
图7
.时钟计时模块
数字钟的计时电路包括秒位、分位、时位三部分。
其中秒位与分位均为60进制计时,时位为24进制计时。
这样我们只需设计模60和模24两种计数器即可。
秒向分进位,分向时进位,这样把两个模60和一个模24计数器级联就可以得到时钟的计时电路。
a.模60计数器电路图:
图9
为了防止冒险我们采用同步的方法设计计数器(1、同步时钟;2、同步置数)。
把进位信号送入使能端ENT(高电平有效),当第一片计数到1001(9)时,ENT端变成高电平,但74160是上升沿触发的,此时clk无上升沿第二片不计数,当CLK的上升沿到来,第一片回到0000状态,第二片计数器的值增加1。
第一片要设计为模10计数器,第二片要设计成模6计数器,因为74160本身就是模10计数器,所以第一片不要加别的控制电路。
第二片我们把Qc、Qa与非起来送入同步置数端LDN,当第二片的计数值为0101(5)时,LDN端低电平,但74160是同步置数的而且是上升沿有效,此时无上升沿不置数,当CLK的上升沿到来第一片会到0000状态,第二片置数为0000,这样计数器就实现了00000000----01011001的计数范围。
与外部的联系我们设置了6个端口,一个输出端(进位信号),五个输入端(保持、清零、脉冲切换、脉冲一、脉冲二),下面对6个端口一一分析:
保持:
我们把开关接到ENP端正常状态开关低电平,信号经过非门变成高电平,送入ENP(高电平有效)端,当开关变成高电平时,ENP端变成低电平,使能端无效此时停止计数,从而达到保持的目的。
、清零:
与保持端相似。
脉冲1、脉冲2、脉冲切换开关:
当脉冲切换开关为低电平时CLK2与其与后为低电平,其非与CLK1与后还是CLK1,两个与门的结果或起来为CLK1,当脉冲切换开关为高电平时,同样的分析此时选中CLK2
进位端:
把Q1a、Q1d、Q2c、Q2a与非后当做进位信号,及计数值为01011001(59)时进位。
为什么选用非信号在总时钟电路时在分析。
.模24计数器电路图:
图11
其基本思路与模60相差无几,差别只是在置数时不同,第一片在0—20连个阶段不要置数自己回0,但计到23时要置为0,需要外部控制电路。
所以我们要把Q1b、Qa1、Q2b(00100011—23)与非起来,把此信号作为置数信号。
封装后如下:
图12
c.时钟计数电路(包含控制电路)
图13
计数电路:
脉冲由分频器提供,外部的总电路采用的是异步计数法(但达到了同步的效果),把进位信号连接起来。
秒位芯片CLC1接1HZ脉冲CLC2不接,分位芯片CLC1接秒位的进位信号脉冲CLC2接2HZ脉冲---用于校分,时位芯片CLC1接分位的进位信号脉冲CLC2接2HZ脉冲----用于校时。
由于进位信号是经过非后送出的,所以未到进位数值时为高电平,当达到进位制时低电平。
当秒位为0—58时,SCI为高,当秒位为59时,SCI为低,此时出现下降沿,分的计数器不计数,当秒位由59—变为0时,SCI又变为高电平,出现上升沿,触发分位的计数器,分位计数器加1,从而达到与同步计数方法相同的效果,而且不会出现冒险,这也就是为什么把原来的进位信号非后再送出的原因,分向秒进位分析方法相同。
控制电路:
总共有三个外接开关---清零、校分、校时。
由于校分和校时切换的是脉冲开关的颤抖可能被芯片误认为是计数脉冲,从而造成不稳定,所以在这两个开关上加了防抖动装置(D触发器)。
图14
时钟端接的是2HZ脉冲,D触发器的功能是输入端是什么输出端便是什么,但需要上升沿去触发,没有上升沿即使输入端改变输出端也不变,当按下开关时发生颤抖(很短暂)这时无上升沿,输出端不改变,当开关稳定后而且上升沿也到来了输出端改变。
为了达到消颤的目的同时又不造成开关的延时这里我们引入的脉冲是2HZ。
清零:
把开关直接接到三个计数器芯片的清零端即可。
校分:
开关值接到分位的K,为了达到校分时其他的保持这里还要把开关的值接到其他两个芯片的保持信号输入端。
校时:
同校分的原理一样。
由于秒位在校分和校时时都要保持,所以要把两个保持信号或其来。
.显示控制电路
结构图:
图15
电路图:
图16
电路原理:
本电路完成的是动态显示,动态显示不同于以往的静态显示,所谓静态显示,即每一个数码管由单独的七段显示译码器驱动,如要显示N位数,必需用N个七段显示译码器。
和静态显示不同,动态显示使用数据选择器的分时复用功能,将任意多位数码管的显示驱动,由一个七段显示译码器来完成。
这样即节省了器件,又提高了效率。
主体是一个24选4的数据选择器,路选信号是由一个模8计数器提供的,这样在一个周期里空余两个路选信号,由于用的是动态原理,信号停留时间很短一个周期1/1000秒,这样人眼根本看不出。
24选4的输出送到7447段译码器,以便在数码管上显示相应数值。
模8计数器的输出同时送到位选控制电路,由一个74138译码器构成,以便在任意时间只有一个位有效,这样在任意的一个时间段里由7447提供段显信号,74138提供位显信号,从而达到动态显示的目的。
这里只有24选4芯片是自己设计的,其他的软件都提供了。
.24选4数据选择器的设计
这里我们是自己依据实验参考书里的mux数据选择器的VHDL语句编写的。
语句如下:
libraryieee;
useieee.std_logic_1164.all;//声明库
entityMUX24isport
(SL1,SL2,SL3,SL4:
instd_logic;
SH1,SH2,SH3,SH4:
instd_logic;
ML1,ML2,ML3,ML4:
instd_logic;
MH1,MH2,MH3,MH4:
instd_logic;
HL1,HL2,HL3,HL4:
instd_logic;
HH1,HH2,HH3,HH4:
instd_logic;
A1,A2,A3:
instd_logic;
D1,D2,D3,D4:
outstd_logic);//定义输入输出端口
endMUX24;
architecturePofMUX24is
SIGNALSL:
std_logic_vector(3downto0);
SIGNALSH:
std_logic_vector(3downto0);
SIGNALML:
std_logic_vector(3downto0);
SIGNALMH:
std_logic_vector(3downto0);
SIGNALHL:
std_logic_vector(3downto0);
SIGNALHH:
std_logic_vector(3downto0);
SIGNALD:
std_logic_vector(3downto0);
SIGNALSEL:
std_logic_vector(2downto0);//定义数组范围
begin
SL<=SL1&SL2&SL3&SL4;
SH<=SH1&SH2&SH3&SH4;
ML<=ML1&ML2&ML3&ML4;
MH<=MH1&MH2&MH3&MH4;
HL<=HL1&HL2&HL3&HL4;
HH<=HH1&HH2&HH3&HH4;
SEL<=A1&A2&A3;//把相应的数值赋给对应的数组
withSELselect//用SEL的值作为选择信号
D<=SLwhen"000",//SEL(即输入A1、A2、A3)为000时输出秒低位
SHwhen"100",
MLwhen"010",
MHwhen"110",
HLwhen"001",
HHwhen"101",
"0000"whenothers;
D1<=D(3);//把数组D的值赋给对应的输出端口
D2<=D
(2);
D3<=D
(1);
D4<=D(0);
endP;
封装:
图17
如外我们还用已有芯片设计了一个24选4的数据选择器:
图18
其封装结果与VHDL语言编的基本相似。
.显示模块和计时模块结合
电路图:
图19
封装:
图20
.整点报时模块
要求:
当时钟计到59’53”时开始报时,在59’53”,59’55”,59’57”时报时频率为512Hz,59’59”时报时频率为1KHz。
(512hz&(59’53”+59’55”+59’57”)+1000hz&59’59”)
==59’&50”(512hz&(3”+5”+7”)+1000hz&9”)
QbQa
QdQc
00
01
11
10
00
0
0
1
0
01
0
1
1
0
11
*
*
*
*
10
0
0
*
*
图21
3+5+7由卡诺图化简得:
QaQb+QaQc
所以上式可以化简为:
59’&50”(512hz&(QslaQslb+QslaQslc)+1000hz&QslaQsld)
电路图:
图22
封装:
图23
.闹钟模块
闹钟模块分为四个部分:
闹钟定时和定分模块、闹钟时间存储模块、比较模块和闹钟显示模块。
闹钟有一个存储电路(由两个计数器组成),计数器由两个开关控制,用来对闹钟的分钟和时钟设定,当开关都打到不送脉冲的状态,两个计数器都保持,从而达到存储的目的。
比较电路用来比较闹钟时间和时钟计时器时间,当它们一致时,输出为1,这样可以驱动报时模块。
最后,利用显示电路将闹钟的时间设定输出。
要使闹钟起到提醒作用,还要有铃声,这里用1khz脉冲作为蜂鸣器的信号源。
.定时和存储模块
图24
电路主要由一个模60(分位)和一个模24(时位)计数器组成(时钟计时电路已设计),外围两个开关只是用来控制是否把2HZ的脉冲送入两个计数器的时钟端。
开关DMK为一时2HZ脉冲送入模60计数器,计数器计数,计到要设定的值,开关转换为低电平,脉冲消失,计数器保持。
开关DHK的作用与DMK的作用相似。
.比较模块
图25
由14个同或门组成,比较的电平是SL1—----HH2,不包含HH3、HH4,因为时钟时位的高位范围是0—2,转换为2进制是0000----0010,高两位始终为零。
当两组输入电平对应位都相等时所有输出都为高电平。
封装:
图26
.显示模块
这里也使用动态显示原理,直接调用已经做好的芯片display,即可实现功能,这里就不再重复叙述了。
.闹钟总电路(包含已有功能)
定时和存储
显示切换电路
显示切换电路
整点报时
时钟计时电路
各个模块的位置如图中标注所示。
为了整合时钟计时模块和闹钟模块,图加了两个电路,一个是显示器的切换电路,一个是蜂鸣器的切换电路。
显示器的切换电路
显示位切换电路
显示段信号切换
图28
位切换是把两种模式下的位信号或其来送到显示器的,能这样做是由于我们给两个display电路引入的是相同的1KHZ的脉冲,所以位信号是相同的,或其来主要是为了保险。
段切换时,我们需要一个模式键(CMOD1)控制,开关信号为1时所用双号与门工作,送出的是闹钟相应位的段信息,当开关信号为0时,所有单号的与门工作,送出是时钟相应位的段信息。
蜂鸣器的控制电路
图29
前面的两个与门是为了得到闹钟的蜂鸣器信号,把所有同或门的比较输出和1KHZ脉冲与其来,便实现了此功能。
后面的一个或门是把闹钟的蜂鸣器信号和时钟整点报时功能的蜂鸣器信号通过后面的一个或门送到蜂鸣器。
闹钟总电路(包含已有功能)的封装:
校分
校时
模式
定时
定时
图30
四.调试与仿真
.脉冲发生模块
脉冲发生器由1000分频器和48分频器构成。
a.48分频器
时序图:
由48分频电路(第3部分)仿真时序波形图可以看出输入波形周期为10ns,输出波形周期为480ns,输出周期为输入周期480倍且占空比为1/3。
b.1000分频器
时序图:
由1000分频电路仿真时序波形图可以看出输入波形周期为10ns,(图中标注的是输出时脉冲的频率)输出波形中2分频周期为20us,占空比为1/2,10分频周期为100us,占空比2/5,100分频周期为1000us,占空比2/5,500分频周期为5000us,占空比有两个分别为1/3和1/2,1000分频周期为10000us,占空比2/5。
.计时电路
a.秒位
b.分位
c.时位
.仿真
首先要进行管脚的分配,选择“Assingnment—〉Pins”,总电路管脚分配如下图示:
管脚分配保存好后,选择“Assingnment—>Device”,点击“DeviceandPinOption…”,选择“UnusedPins”页中“Reserveallunusedpins:
”选项中的“Asinputtri-stated”选项,将未用引脚设为三态输入,重新编译。
点击工具栏上的(Programmer)按钮,点击“HardwareSetup”按钮,在“Currentlyselectedhardware”中选择“ByteBlaster[LPT1]”。
最后选择要下载的文件,点击“Start”即可下载程序。
下载完毕即可在模拟试验箱上观察结果。
五.收获与体会
通过本次实验,我知道了自己许多知识的不足,同时也知道了许多操作的不熟练,在软件应用上有很大的不足,让我对许多知识重新熟悉,巩固。
同时训练了我的组织,整合能力,我们的能力与知识同时得到提升,课设对我们的考核是多方面的,让我们的能力与知识多方面得到提升,我们也对自己的知识与能力更加深入的了解,我们的不足就会暴露出来,在课设过程中得到改进。
实验是对耐心的考验,特别是在出错时锻炼了自己的耐力,是对自己的一种提升。
希望可以把实验改成开放新实验,老师介绍完实验设备和软件,然后由学生自由发挥。
凭自己的创造力设计出自己中意的作品。
这样不但会增加学生的积极性而且会照顾到不同层次的学生。
参考文献
[1]蒋立平.数字电路.北京:
兵器工业出版社,2008.7
[2]南京理工大学电子技术中心.EDA设计实验指导书.
[3]万隆.EDA技术及应用.北京.清华大学出版社,2011.10
[4]王新.EDA技术与虚拟实验.徐州.中国矿业大学出版社,2007,.2
六.附录
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_arith.all;
Useieee.std_logic_unsigned.all;
Entityvhdl1is
Port(clk:
instd_logic;---时钟输入
change:
instd_logic;---时间调节输入
Reset,reset1,A,B,C,D,E:
inintegerrange0to1;---复位与控制输入
ld_h,ld_m,ld_alert:
inoutintegerrange0to1;---状态显示
Led:
outstd_logic_vector(3downto0);---整点报时led显示
Display:
outstd_logic_vector(6downto0);---七段码管显示输出
spk,out1:
outstd_logic;---整点报时声音信号输出
Seg_sel:
bufferstd_logic_vector(2downto0));---七段码管扫描驱动
Endvhdl1;
Architecturebehaveofvhdl1is
Signaldisp_temp:
integerrange0to15;---显示数据缓存
Signaldisp_decode:
std_logic_vector(6downto0);----译码数据缓存
Signalsec1,sec10:
integerrange0to9;
Signalmin1,min10:
integerrange0to9;
Signalhour1,hour10:
integerrange0to9;
Signalmusic_count:
std_logic_vector(2downto0);---报时时钟计数器
Signalclk_count1:
std_logic_vector(13downto0);---产生1hz时钟的分频计数器
Signalclk_count10:
std_logic_vector(13downto0);---产生1khz时钟的分频计数器
Signalclk1hz:
std_logic;---1hz秒计数缓存
Signalclk1khz:
std_logic;---1khz秒计数缓存
Signalled_count:
std_logic_vector(2downto0);----led计数缓存
Signalled_display:
std_logic_vector(3downto0);----led指示灯信号输出
Begin
Process(clk)
Begin-----产生1hz时钟信号
If(clk'event
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 eda 多功能 数字 方案设计