EDA数字时钟宁波工程学院verilogpldWord格式.docx
- 文档编号:17184254
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:42
- 大小:834.54KB
EDA数字时钟宁波工程学院verilogpldWord格式.docx
《EDA数字时钟宁波工程学院verilogpldWord格式.docx》由会员分享,可在线阅读,更多相关《EDA数字时钟宁波工程学院verilogpldWord格式.docx(42页珍藏版)》请在冰豆网上搜索。
5.2管脚分配·
六、参考文献·
七、实验感想·
摘要:
本次EDA课程设计利是在QuartusII软件平台上用verilog硬件语言来编程设计PLD电路,最终设计出一简单的数字时钟电路,并且将程序代码烧写到EDA试验箱进行验证。
本次设计充分采用了软件编程中分层次、模块化的编程思想,同时也充分考虑到了硬件结构编程与纯软件编程的差异性,仿真与实际烧写相结合,逐步完善其逻辑、功能。
本系统主要由时钟基本功能电路、闹钟电路、动态显示控制电路、分频电路,状态灯显示电路,按键电路组成,实现了时分秒的计时、闹钟报时,整点报时,调整时分等功能。
关键字:
数字时钟;
模块化;
分层思想;
硬件结构
Abstract:
TheEDAcurriculumdesignbenefitisthesoftwareplatformonQuartusIIveriloghardwaredesignlanguageforprogrammingPLDcircuit,thefinaldesignofasimpledigitalclockcircuit,andtheEDAprogramcodeintothechamberforverification.Thefulluseofthesoftwareprogramdesignedhierarchically,modularprogrammingideas,butalsogivefullconsiderationtothestructureofprogrammingandhardwaredifferencespuresoftwareprogramming,simulationandactualprogrammingcombinedwiththegradualimprovementofitslogicfunction.Thesystemconsistsofabasicfunctionalcircuitclock,alarmcircuits,dynamicdisplaycontrolcircuit,dividercircuit,displaycircuitstatuslights,keycircuit,achievedwheneveryminutechronograph,alarmtime,thewholepointoftime,adjustinghoursandotherfunctions.
Keyword:
Digitalclock;
modular;
hierarchicalthinking;
hardwarearchitecture
一、简述
在QuartusII软件平台上使用verilong硬件编程语言设计了简易的数字时钟,该时钟在控制电路的作用下具有保持、清零、快速校时、快速校分、整点报时、闹钟等功能。
,可以完成一般的时钟任务。
数字计时器的系统框图如下图所示:
数字计时器的硬件电路框图如下图所示:
二、设计要求说明
(1)设计总体要求:
利用QuartusII软件设计一个数字钟,对设计电路进行功能仿真,并下载到SmartSOPC实验系统中,可以完成00:
00:
00到23:
59:
59的计时功能,并在按键控制电路的作用下具有保持、清零、快速校时、快速校分、整点报时、闹钟等功能,做到能够创新的添加自己能够实现的功能。
(2)设计基本要求
1.进行正常的时、分、秒计时功能。
2.分别由六个数码管显示时、分、秒的计时。
3.有系统使能开关
4.有系统清零开关
5.有系统校分开关
6.有系统校时开关
(3)设计提高部分要求
1.使时钟具有整点报时功能
2.闹表设定功能
3.自己添加其他功能
(4)已经完成的设计
完成了进行正常的时、分、秒计时功能,能够通过数码管正常显示时、分、秒的计时,能够实现闹钟的设定以及闹醒功能,同时支持整点报时。
按键设计上由于试验箱上8个按键完全足够使用,不需要按键复用,大大简化了按键扫描电路的设计,具体分配如下
K0是系统的清零开关
K0=0正常工作,K0=1时钟清零
K1是系统的使能开关
K1=0正常工作,K1=1时钟保持不变
K2是系统的校时开关
K2=0正常工作,K2=1时钟进入校时
K3是系统的闹钟设置开关
K3=0正常工作,K3=1时钟进入闹钟设置
K4是系统的时(单位)加按键
K4=0正常工作,K4=1时钟时加一
K5是系统的分(单位)加开关
K5=0正常工作,K5=1时钟分加一
三、系统设计
3.1整体设计方案
多功能数字计时器是由计时电路、译码显示电路、脉冲发生电路和控制电路等几部分基本电路组成的,其中控制电路按照设计要求可以由校时电路、清零电路、报时电路和闹钟设计电路等组成。
多功能数字钟控制器的系统框图如下图所示:
控制电路原则确定的思路:
首先需要考虑到的是此次设计要实现的功能有:
正常的计时、保持、清零、校时、校分以及整点报时功能;
闹铃功能,从使用者的角度来看闹铃需要设定相应的校分、校时功能;
其次需考虑控制电路的设计有以下一些要求:
1.考虑到有8个按键,按键数量完全能够满足本系统设计要求,不采用按键复用技术,简化编程步骤,方便使用者的操作,不易出错具有便捷的特点
2.按键的干扰,充分考虑完善按键消抖的过程,防止误操作
3.闹钟设定模块、正常时钟模块的切换不影响时钟的正常计时;
3.2整体设计算法流程
3.3译码显示模块
一般的显示分为两种,即静态显示与动态显示;
所谓静态显示,即每一个数码管由单独的七段显示译码器驱动,如要显示N位字符,必须用N个七段显示译码器,这种现实方法极大地浪费了芯片的控制管脚。
动态显示则是利用了数据选择器的分时复用功能,将任意多位数码管的显示驱动,由一个七段显示译码器来完成。
这样即节省了器件及芯片管脚,又提高了元件的使用效率。
在此次实验中,我们采用了动态显示的方法,利用八进制计数器分别实现对秒个位、秒十位、分个位、分十位、时个位、时十位利用一个六进制计数器实现扫描,扫描到的显示管的位选信号为1同时相应段码信号同时传到七段显示。
扫描频率设置为1KHz,这样躲过人眼的辨别范围,使得肉眼看上去与静态显示没有什么区别。
译码显示结构图:
CLK1ms8位
时钟数据输入
8位
3.4计时电路
计时电路用的是1hz的时钟信号输入,从秒的个位开始分别开始自加1,直到秒信号累计到六十,开始进位至分钟的个位,一次类推一直到小时的十位。
分别采用模60至模24的计数方式,实现计时功能。
计时电路结构图:
3.5清零电路
复位电路采用k0开关来控制,实现的功能则是,当该键被按下之后,就可以实现计时清零功能。
清零电路结构图:
具体的参见上计时电路中的流程框图
3.5脉冲发生电路
48MHZ脉冲信号1HZ
1KHZ
500HZ
3.6校时校分流程
3.6闹钟判断流程
四、功能模块电路设计
此次设计一共有以下几个模块:
正常显示模块、分频模块闹铃设定模块、闹铃比较模块、显示管段选模块、显示管位选模块;
为了写代码方便都放在一个module里,只将分频单独隔离出来。
4.1秒脉冲发生电路模块
modulemake_sec(clk,out_clk1hz);
inputclk;
outputout_clk1hz;
regsec;
reg[24:
0]count1;
//定义计数器
always@(posedgeclk)//定义clock上升沿触发
begin
count1=count1+1'
b1;
if(count1==25'
d24000000)//判断0.5S
begin
count1=25'
d0;
//计数器清零
sec=~sec;
//置位秒标志
end
end
assignout_clk1hz=sec;
//秒输出
endmodule
4.2整体时钟模块
moduleclock(clk,clk1h,key,dig,seg,modestateled,bsbeep);
//模块名clock
inputclk1h;
//输入时钟
input[5:
0]key;
//输入按键
output[7:
0]dig;
//数码管选择输出引脚
0]seg;
//数码管段码
output[2:
0]modestateled;
//模式灯
outputbsbeep;
//蜂鸣器输出
reg[7:
0]seg_r;
//数码管段输出引脚
0]dig_r;
//数码管位输出引脚
reg[3:
0]disp_dat;
//定义显示数据寄存器
reg[24:
0]count;
//定义计数寄存器
0]hour,jzhour,nzhour;
//定义时钟,闹钟,校时寄存器
regsec,keyen,bsbeep_r,zdbeep_r;
//定义秒信号,乒乓开关,蜂鸣器寄存器
reg[2:
0]modestate;
//定义状态模式
reg[5:
0]dout1,dout2,dout3;
//寄存器
reg[27:
0]zdcount;
//定义整点计时器
wire[5:
0]key_done;
//定义按下后稳定的键值
wirebsbeep;
assigndig=dig_r;
//输出数码管选择
assignseg=seg_r;
//输出数码管译码结果
//各类触发信号
always@(posedgeclk)//定义clock上升沿触发
if(count==25'
d24000000)//0.5S到了吗?
count=25'
sec=~sec;
end//计数器清零
else
count=count+1'
//按键消抖处理部分
assignkey_done=(dout1|dout2|dout3);
//按键消抖输出
always@(posedgecount[17])
dout1<
=key;
dout2<
=dout1;
dout3<
=dout2;
always@(negedgekey_done[1])//计数开关
keyen=~keyen;
//按键输入工作模式led显示处理部分
assignmodestateled=modestate;
//令状态可以用灯输出
always@(key_done)//工作模式
if(key_done[3:
1]==3'
b110)
modestate=3'
b110;
//计时模式
elseif(key_done[3:
b101)//校时模式
begin
b101;
elseif(key_done[3:
b011)//闹钟模式
b011;
elseif(key_done[3:
b001)
modestate=3'
b001;
//数码管动态扫描显示部分
always@(posedgeclk)//count[17:
15]大约1ms改变一次
case(count[17:
15])//选择扫描显示数据
3'
d0:
disp_dat=hour[3:
0];
//秒个位
d1:
disp_dat=hour[7:
4];
//秒十位
d2:
disp_dat=4'
ha;
//显示"
-"
d3:
disp_dat=hour[11:
8];
//分个位
d4:
disp_dat=hour[15:
12];
//分十位
d5:
d6:
disp_dat=hour[19:
16];
//时个位
d7:
disp_dat=hour[23:
20];
//时十位
endcase
15])//选择数码管显示位
dig_r=8'
b11111110;
//选择第一个数码管显示
b11111101;
//选择第二个数码管显示
b11111011;
//选择第三个数码管显示
b11110111;
//选择第四个数码管显示
b11101111;
//选择第五个数码管显示
b11011111;
//选择第六个数码管显示
b10111111;
//选择第七个数码管显示
b01111111;
//选择第八个数码管显示
endcase
always@(posedgeclk)
case(disp_dat)
4'
h0:
seg_r=8'
hc0;
//显示0
h1:
hf9;
//显示1
h2:
ha4;
//显示2
h3:
hb0;
//显示3
h4:
h99;
//显示4
h5:
h92;
//显示5
h6:
h82;
//显示6
h7:
hf8;
//显示7
h8:
h80;
//显示8
h9:
h90;
//显示9
ha:
hbf;
//显示-
default:
hff;
//不显示
if((count[17:
15]==3'
d2)&
sec)
seg_r=8'
if((count[17:
15]==3'
d5)&
sec)//数码管秒和分,分和时之间显示“-”
seg_r=8'
//校时以及闹钟校时处理部分
always@(negedgekey_done[4])
if(modestate==3'
b101)//计时模式下
jzhour[19:
16]=jzhour[19:
16]+1'
//时个位加一
if(jzhour[19:
16]==4'
ha)
jzhour[19:
16]=4'
h0;
jzhour[23:
20]=jzhour[23:
20]+1'
//时十位加一
end
if(jzhour[23:
16]==8'
h24)jzhour[23:
16]=8'
b011)//闹钟模式下
nzhour[19:
16]=nzhour[19:
if(nzhour[19:
nzhour[19:
nzhour[23:
20]=nzhour[23:
if(nzhour[23:
h24)nzhour[23:
//校时分处理部分
always@(negedgekey_done[5])
b101)//校时模式
jzhour[11:
8]=jzhour[11:
8]+1'
//分个位加一
if(jzhour[11:
8]==4'
jzhour[11:
8]=4'
jzhour[15:
12]=jzhour[15:
12]+1'
//分十位加一
end
if(jzhour[15:
8]==8'
h60)jzhour[15:
8]=8'
b011)//闹钟模式
nzhour[11:
8]=nzhour[11:
if(nzhour[11:
nzhour[11:
nzhour[15:
12]=nzhour[15:
if(nzhour[15:
h60)nzhour[15:
end
//计时处理部分
always@(posedgesecornegedgekey_done[0])//计时处理
if(!
key_done[0])//是清零键吗?
hour=24'
//是,则清零
elseif(modestate==3'
b101)//是校对时间模式吗?
hour=jzhour;
//是的话则让显示时间为校时的时间
elseif(modestate==3'
b011)//isalarmstate?
hour=nzhour;
//是的话则让显示时间为闹钟的时间
elseif((!
keyen)&
&
(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 数字 时钟 宁波 工程学院 verilogpld