数字钟verilogWord文档格式.docx
《数字钟verilogWord文档格式.docx》由会员分享,可在线阅读,更多相关《数字钟verilogWord文档格式.docx(33页珍藏版)》请在冰点文库上搜索。
设计的流程框图如下图2所示
图2数字钟整体部分设计框图
3.1.1小时计数器
在verilog程序设计中,小时计数器为hour_counter模块,其中hour_data0为24进制计数器的低位,即4进制计数器,hour_data1则为高位,2进制计数器。
编程用always语句实现,并且用clk上升沿触发实现计数。
EN为使能端,高电平有效。
ZOX为显示早上、下午的标志位,其中小于12点之前为早上,zox为0,否则zox输出为1表示下午。
其QuartusU仿真波形如下图
3所示,由于verilogHDL程序显示不便,均附在附件上,下面各模块相同
*"
1
clk
:
i1i'
i:
'
iiii!
I'
jwLruMnjirLrLruuvVvLrLrLrU
|T
£
hair」斌
(!
:
:
\\d
\ii
1111El1111
1iiiiiiiiiii
1
■■iiia■■■■i
1■1
图3小时计数器仿真
从仿真图中可以看出,当使能信号信号为高电平且始终上升沿到来时计数
器开始计时,hour_dataO计数为0—1—2—3—0•••的计数规律,即4进制计数器,同理hour_data1为2进制计数器,zox信号由图中看出当小于12小时的时候输出为0,大于12小时时输出为1,与预计效果相同。
3.1.2分、秒计数器
由于分、秒计数器均为60进制计数器,所以以分计数器作为示例说明其编程思想。
其中分计数器模块在程序中为minute_counter程序段,由上面分析得
分计数器由一个十进制计数器与一个六进制计数器组成,程序中有
minute_data0表示分计数器低位即10进制计数器,minute_data1表示分计数器的高位为一个六进制计数器(秒计数器的低位、高位分别由second_data0、
second_data1表示,其余均与分计数器相同)。
其它信号定义与小时计数器相同,clk为时钟信号,时钟周期为1HZ,即1s,与小时计数器不同的是,EO为进
位信号,即到60s后自动进位。
Minute_data0、minute_data1、second_data0、
second_data1位宽均为4位reg型变量。
仿真示意图如下图4所示。
阴L.U甜tLVUWUUWU粘”川聲二型川序RU川專31'
U.IUC4猟屮站&
LV.U;
|51
IIII||IIkill
即*
11
即
y
TmmnrLnn."
_nnnnrLnnrLrmnnnn^
huiu13nnstpnisxon
ins;
(r.unncd12
图4分计数器仿真结果
由图中可以看出,当使能端信号端EN变为1的时候,计数器开始计时,
minute_dataO计数规律为0—1—2—3—4—5—6—7—8—9—0—1•••当计数到9的时候,minute_data1力卩1,minute_data1计数规则为0—1—2—3—4—5—0—1•••当高位minute_data1计数到5的时候,进位信号EO变为1。
秒计数器second_counter模块与分计数器完全一样,这里不再赘述。
3.2分频部分
分频器的功能主要有三个:
一是产生计时用的标准秒脉冲1HZ信号;
二是
提供仿电台用的1kHZ高音频信号和500HZ低音频信号;
三是闹钟设置时用的200HZ闪烁信号和闹钟响铃用的500HZ音频信号。
所用输入信号为1kHZ的高频信号。
根据分析可知,1kHZ方波信号经过2分频可以得到500HZ方波,经过5分频得到200HZ信号,最后将分频得到的200HZ信号作为分频1HZ的时钟,经过200分频得到1HZ的信号。
设计框图如下图5所示。
图5分频信号框图
在程序设计的过程中,在复位信号rst为高电平时分频器工作,输入信号
为1kHZ的高频信号,分别经过2分频、5分频、200分频得到f500HZ的500HZ信号、f200HZ的200HZ信号和f1HZ的1HZ信号。
仿真结果如下图6所示
Vs-1IIPsj
Dr8007.i刚丄皿浹Da320Ju蚊0砧4801m560.Du&
<
3Im72DCmKQDnt3BD0
111111111111
Df/
0K
J
di
ElLi
BC
...laBt
jirmTATAVrr*
丁jirjuuwjiTLmjrrArr
rstD0
,.加BC
j
111
|iI■
1:
1I
H1■
!
n■■l
ici■■i
1ri■■1
ini■i
i1■ai
1[|9■1
injii
■Si\
1[I■IIII
id|I■1
1S1I■1
1[|■II1i
10■II1
1[|■II11
in1ii
一L
1d1hIil
」」
II
i<
11■11
1>
1■■I
1[1■■1
iii■ai
I1i
III
11II■■11
1R1111
i~i..i~r
1111tl■I1
1II11IIII1
iiiiia■■i
■■i
图6分频信号结果仿真图
从仿真图中可以看到,在rst为高电平时分频过程开始,f500HZ、f200HZ和f1HZ也与预期的输出结果一样。
3.3秒表模块
秒表模块实现秒表功能,在实现的过程中,通过改变自动工作模式下的时钟频率来实现秒表的功能。
即按动start键闹钟开始工作,再次按动start键,闹钟便停止工作。
由于秒表模块比较简单,流程图在此省略。
根据分析,在verilogHDL实现过程中,elk作为时钟正常工作时候的频
由图中可以看出,根据start高低电平的变化,时钟在正常工作与秒表之间相互转换。
3.4闹钟模块
闹钟模块实现的是闹钟的设置及闹钟所设定的时间到之后的响铃提示。
闹钟模块的设置主要思想是由控制键来设置数字钟的闹钟响的时间,经过与当前数字钟实时时间的比较,来决定闹钟提醒的时间。
设计框图如下图8所示。
图8闹钟模块设计框图
在verilogHDL实现的过程中,由SW1SW2两个调整键来实现,其中SW1
为移位控制键,即按SW1—次,将移位一次,闪烁显示当前设置为数字,SW2
为当前位的闹钟数字设置,每按SW2—次,当前数字设置位数字增加1,每一
位上数字变化范围由当前位循环上限决定,不会超出范围。
EN为设置使能端,
为1有效。
Hourl、hourO、minutel和minuteO分别为当前时间每个位上显示的数字,hour_set1、hour_set0、minute_set1和minute_setO为与当前时间所对应的每一位上设置的时间显示,f200hz为闹钟设置过程中显示闪烁的频率。
Con_alarm为闹钟响铃的控制键,其值为1时,表示闹钟已设置,并且在闹钟
响的时候,如果设置其值为0,则闹钟关闭。
Alarm为闹钟响铃提示输出,即设定时间到时alarm值为1,否则为0。
Alarmclock_disp_select为闹钟设置中
位选信号,为4位reg型变量,其值采用独热编码,为1000、0100、0010和
0001分别表示设置过程中hour1、hour0、minute1和minute0四个位。
其仿真结果如下图9所示。
reBa:
tC.SBrti
JJrcr*e«
i)tilr-a*d1CS3ru
GUt
[d
16S
1严
锁仏叫叩川呗皿皿w
11)
Um160.0wsISQlOas
的
IES
5itsJI
EH
敢
9
E
srz
SI
■i
BOL
7-mi:
0101)
JLI.
…MX
n
u
—
LrLrLrLrLrLrLrLnrLrLnrLrLrLrLTLnLrLrLrLn
国
BIX
co
□c
am
[
DOL(
BCC
COM
QrismUD
BK
(
0.u.aclD
BOC
oc:
DCD
SL.itU
ba
LUJJ
3...sciO
Etc
woo
■setl
Ba
on)
.rIlf■
Ei
图9闹钟模块仿真示意图
由于设置波形输入的时候如果调整过多,将不容易看出仿真结果的正确与
否,所以图中输入比较简单,以便可以更好地分析仿真结果。
由图中可以看出,
经过SW1的两次调整,位选信号alarmclock_disp_select的值为0010,表示此时的设置位为hour_set0位,SW2键将其值设置为0001,其他位均为0000,然后在与当前时钟时间相等的情况下,并且在con_alarm值为1的时候闹钟响,即alarm值输出为1,在当前时间与闹钟时间仍然相等的情况下,将闹钟控制
键con_alarm值设置为0,闹钟停止,即alarm值为0。
很好的完成了闹钟的功
3.5时间设置模块
时间设置模块实现的功能为通过按键调节可以对当前时间进行手动控制。
其主要是在时间设置使能端有效地情况下通过SW1和SW2两个按键对数字钟的
小时和分钟数进行调节。
Disp_drive为设置中的显示控制,即通过SW1对位的调整,Disp_drive随之变化。
SW2为对每一位上的数字在其范围内进行加1调
节,其调节过程与闹钟模块相同。
Disp_drive取值000、001、010和011分别
对应hour1、hour0、minute1和minute0的设置。
Quartus下仿真结果如图10所示。
g.UI1JL3
二2.'
77-VJU
ULF*_l
16迈LS
r
一
1-1
」11丨1丨1-1
TineSbOH
[£
(ooo
ooi>
0W
■DCX
Ehurt
c
DC10
0IkziTirJ
DCO厂
oooo
00LC
OlOI
匡nimileC
匚
1COO
Eniauatil
Q10J
国nijtuh_矣匸
1000
X0031X
0010
[+_niujtE_zetl
0000
uno
图10时间设置模块仿真效果
图中,hour_set0、hour_set1、minute_set0和minute_set1为设置后的时间。
可以看到,当前给的hour0为0010,hour1的值0001,在SW1经过一次高电平之后,disp_drive的值变为001,对hour0进行设置,加1之后
hour_set0变为0001,SW1再按一下,变为0010,在SW2两次高电平之后,SW1的值变为1,此时对分的高位进行加1设置,依此类推。
3.6报时模块
整点报时模块的主要功能为仿中央人民广播电台整点报时信号,即从59分
50秒起每隔2秒发出一次低音“嘟”信号,将其定义为500HZ的低频信号,到达整点(00分00秒时),发一次高音“哒”信号,其响声为高频1kHZ信号。
由于整点报时程序比较简单,所以框图省略。
为了程序简化又与其他模块
有较好的兼容性,用minute、second分别表示minute1、minute0和second1,second0经过位拼接之后的分和秒的当前显示时间。
F1khz为到达整点之后的高
音频率,f500hz为59分50秒、52秒、54秒、56秒和58秒时的低音频率,radio则为到达时间时的报时输出。
仿真图如下图11所示。
3?
=
血9g
3—
叫3
UQ-I
Nine
IT,1
17,1TiS
..adjCi
_rxJ
r~L
nn
rikkz
Bi
Lrin
LI
LrLr_nn
-TLTL-LTTLn
LTLTLTLr
LTLn
E5COI1Z
B
n—
FlBinate
If:
丨59
IB
HE
t49X50J
J51X5EX53X5^1*55工毋丫閒
0(t01i
(02
图11整点报时模块仿真效果图
从图中可以看出,从59分50秒开始,输出的radio开始以f500hz的频率报时,当到达00分00秒时,输出信号频率为flkhz,到达00分01秒的时候之后便变为0,符合设计要求。
3.7控制显示模块
控制显示模块在整个数字钟的设计中起着非常重要的作用。
它的作用是将时间等数据用数码管显示的控制和数据传输模块,包括数据的传输以及BCD码
译码等。
通过几个控制使能端将其不同功能时的时间在数码管上显示出来。
本模块中端口定义比较多,下面是其所对应的功能。
Time_EN时间自动模式工作使能信号;
Timeset_EN:
时间设置使能信号;
Stopwatch_EN:
秒表使能信号;
Alarmclock_EN:
闹钟设置使能信号;
Radio_EN整点报时使能信号;
Time_disp_select:
时间显示位选信号;
Alarmclock_disp_select:
闹钟设置的显示位选信号;
Disp_select:
显示位选信号输出;
Disp_data:
经过译码之后显示的数据。
程序设计中,各使能端信号为1表示执行该功能,以时间自动工作模式使
能信号有效为例说明,当Time_EN为1时,首先将时间显示位选信号isp_select的值赋给显示位选信号disp_select输出,定义time_disp_select的状态一共有6个,分别为100000、010000、001000、000100、000010和000001,其在各状态下分别依次表示将hour0、hour1、minute0、minute1、
second0和second1的值赋给data,用case语句来实现,其实现语句如下:
if((Time_EN==1'
b1)
begin
disp_select<
=time_disp_select;
case(time_disp_select)6'
b100000:
Data<
=hourl;
6'
b010000:
=hour0;
b001000:
=minute1;
b000100:
=minute0;
b000010:
=second1;
b000001:
=second0;
default:
=4'
b0;
endcase
在quartusU下仿真图12如下:
从图中可以看出,在第一个时钟周期内,时间显示位选信号time_disp_select的值为000000,此时应执行case语句的default,Data的值为0;
在第二个时钟周期内,time_disp_select的值为000001,此时对应其最后一种状态,将second0的值赋给Data,即Data的值为0110,从图中看,仿真结果正确,disp_data表示的是将当前数据译码显示之后七段数码管的显示,所以在第一个周期内值为1111110,表示值为0,与Data所表示的数对应。
依次类推,可将Data的值全部表示出来。
显示译码数据段主要程序如下:
case(Data)
4'
b0000:
disp_data<
=7'
b1111110;
b0001:
b0110000;
b0010:
b1101101;
b0011:
b1111001;
b0100:
b0110011;
b0101:
b1011011;
b0110:
b1011111;
b0111:
b1110000;
b1000:
b1111111;
b1001:
b1111011;
default:
显示译码程序说明了0到9十个数在7段数码管中所对应的值,在case语句里面最重要的是一定不能忘了default,否则仿真会发生所不希望看到的结果。
下图13为闹钟设置使能有效时仿真结果。
呵R
gCt
>
khj.u>
wum和¥
1<
I1
inuDif
m:
]ioJI
OODIDO1
]DHID1}
000030\00311]
OOlOOO
a“
3CI0
3hmrl
OOOl
0QI1
Qnimkl
DCID
t册I
TLiie_EN
XLsnxlock.lK
国_iEp_-E41<
C
ODOIDQ:
IDi)
OO011O\DQ311I
E妙i
託肿讪JI
Tim刍tEB
图13控制显示模块当闹钟设置使能信号有效时译码显示
从图中可以看出,当只有闹钟使能信号alarmclock_EN有效时,其七段数
码管显示结果,与数字钟自动工作使能端的区别为闹钟设置使能端有效时只需对hour0、hour1、minute0和minute1进行设置,所以闹钟设置显示位选信号alarmclock_disp_select的状态只有4个,由于其同样需要将值赋给disp_select,为了统一期间,其值也设为6位,其4个状态分别为100000、010000、001000和000100。
其他与自动工作模式相同。
3.8顶层模块
仿真结果。
将以上设计的各个模块组合起来,就可以得到多功能数字钟的整体仿真结果。
其主要作用是将各个模块衔接起来,图14为时钟正常工作模式下
工
1_r
.10:
yniai:
r
IEDU
imi
XJj»
■【LLtin
umr.nruiTMiiriirurimuHmwiuv.iirnnrunrrmirtjirTjiKinruEM.Tinr.Tr血wr.tMrr從
I_nnr~i_r~i_r
DOilnDXO