数字钟数字逻辑

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字钟的设计
一、数字钟的功能描述
(1)、计时和显示功能
采用24小时制,以十进制数字显示时、分、秒(时从00-23,分、秒从00-59)。

(2)、校时功能。

当数字钟走时有偏差时,应能手动校时。

二、数字钟的设计思路
根据功能要求,整个数字钟分为计时和校时两个部分。

计时部分秒计时电路接收1Hz时基信号,进行60进制计数,计满后秒值归0,并产生1/60Hz时钟信号,分钟计时电路接收1/60Hz时钟信号,进行60进制计数,计满后秒值归0,并产生1/3600Hz时钟信号,,小时计时电路接收1/3600Hz 时钟信号,进行24小时计数,计满后小时、分、秒均归0,如此循环往复。

校时部分,采用两个瞬态按键配合实现,1号键产生单脉冲,控制数字在计时/校时/校分/校秒两种状态间转换,2号键通过控制计数使能端让时/分/秒计数器发生状态翻转发达到指定的数值。

总体原理电路如下图-1所示:
图-1数字钟的原理电路
三、采用原理图和HDL混合设计方式实现数字钟
(1)小时计时电路
小时计时电路需要24进制计数,其电路下图-2所示:
图-2 小时计时电路
该电路用两片74160(一位十进制加法计数器)采用同步连接构成24进制计数器,通过译码电路识别暂态“24”,输出低电平使计数器清零。

整个计数循环为00→01→02→……→23→00→……,共有24个稳定状态。

计数值采用BCD码形式,Q7-Q4表示小时的十位,Q3-Q0表示小时的个位。

EN输入端当正常计数状态时接收分钟计时电路的进位输出,而在校时状态时接收校时脉冲用于控制小时值的翻转。

小时计时模块的输入输出端口如下图-3所示:
图-3 小时计时电路的端口特征
(2)分钟、秒计时电路
分钟、秒计时需要60进制计数,其电路下图-4所示:
图-4 分钟计时电路
该电路用两片74160(一位十进制加法计数器)采用同步连接构成60进制计数器,通过译码电路识别暂态“59”,输出低电平使计数器清零。

整个计数循环为00→01→02→……→58→59→00→……,共有60个稳定状态。

计数值采用BCD 码形式,Q7-Q4表示分钟或秒的十位,Q3-Q0表示分钟或秒的个位。

EN输入端当正常计数状态时接收分钟计时电路的进位输出,而在校时状态时接收校时脉冲用于控制小时值的翻转。

计满进位输出端CO用于触发高一级计数器的计数动作(秒计满触发分钟的计数,分钟计满触发小时的计数)。

分钟、秒计时模块的输入输出端口如下图-5所示:
图-5 分钟/秒计时电路的端口特征
(1)计时/校时的切换由模块Count_control实现,其端口特征如下图-6所示:
图-6 计时/校时切换(计数控制)端口特征
期中,Func_sel输入端接收功能脉冲输入,维护内部一个模4计数器,以此控制数字钟在计时/校时/校分/校秒四种状态间转换;Setn输入端接收校时脉冲,负脉冲有效,每收到1个校时脉冲,对应的计数单元(时单元或分单元或秒单元)计数加1;Sec_co输出由秒计数单元的进位提供,Min_co输入输出由秒计数单元的进位提供;Sec_sn、Min_en、Hour_en提供三个计数单元所需要的使能信号(由此模块的内部逻辑在前级进位输出和校时脉冲之间作二选一)。

计数单元功能选择及相应信号的定义如下表-1 所示:
内部模4计数状
当前功能Sec_en取值Min_co取值Hour_en取值态Q1 Q0
00 计数高电平秒单元进位分单元进位
01 调时低电平低电平校时脉冲
10 调分低电平小时脉冲低电平
11 调秒小时脉冲低电平低电平Count_control模块的AHDL源码如下:
subdesign count_control
(
func_sel:input;
setn:input;
sec_co,min_co:input;
sec_en,min_en,hour_en:output;
)
variable
q[1..0]:dff;
begin
q[].clk=func_sel;
q[]=q[]+1;
if(q[]>3)then q[]=0;
end if;
case q[]is
when 0=>sec_en=vcc;
min_en=sec_co;
hour_en=min_co;
when 1=>sec_en=gnd;
min_en=gnd;
hour_en=!setn;
when 2=>sec_en=gnd;
min_en=!setn;
hour_en=gnd;
when 3=>sec_en=!setn;
min_en=gnd;
hour_en=gnd;
end case;
end;
以上述模块为基础,可以完成下图-1所示的顶层设计。

下面采用扫描显示方式实现时分秒的小时,其扫描显示驱动电路如下图-7所示:
图-7 扫描显示驱动电路
期中,Select_disp根据模6计数器Counter6的输出将待显示的6位十进制结果分时送给七段译码器Deled以产生显示字形,Counter6的输出同时可以用来将显示结果在6个数码管上展开,只要时钟Clk_scan的频率合适,就可以看到完整的时分秒显示结果。

模块Counter6的AHDL源码如下(其中使用了状态机描述方法):subdesign counter6
(
clk:input;
q[2..0]:output;
)
variable
ss:machine of bits(q[2..0])
with states
(
s0=0,
s1=1,
s2=2,
s3=3,
s4=4,
s5=5
);
begin
ss.clk=clk;
table
ss=>ss;
s5=>s4;
s4=>s3;
s3=>s2;
s2=>s1;
s1=>s0;
s0=>s5;
end table;
end;
✧模块select_disp的AHDL源码如下:subdesign select_disp
(
sel[2..0]:input;
in0[3..0]:input;
in1[3..0]:input;
in2[3..0]:input;
in3[3..0]:input;
in4[3..0]:input;
in5[3..0]:input;
out[3..0]:output;
)
begin
case sel[]is
when 0=>out[]=in0[];
when 1=>out[]=in1[];
when 2=>out[]=in2[];
when 3=>out[]=in3[];
when 4=>out[]=in4[];
when 5=>out[]=in5[];
end case;
end;
✧模块deled的AHDL源码如下:SUBDESIGN deled
(
num[3..0]:INPUT;
a,b,c,d,e,f,g:OUTPUT;
)
BEGIN
TABLE
num[3..0]=>a,b,c,d,e,f,g;
H"0" => 1,1,1,1,1,1,0;
H"1" => 0,1,1,0,0,0,0;
H"2" => 1,1,0,1,1,0,1;
H"3" => 1,1,1,1,0,0,1;
H"4" => 0,1,1,0,0,1,1;
H"5" => 1,0,1,1,0,1,1;
H"6" => 1,0,1,1,1,1,1;
H"7" => 1,1,1,0,0,0,0;
H"8" => 1,1,1,1,1,1,1;
H"9" => 1,1,1,1,0,1,1;
H"A" => 1,1,1,0,1,1,1;
H"B" => 0,0,1,1,1,1,1;
H"C" => 1,0,0,1,1,1,0;
H"D" => 0,1,1,1,1,0,1;
H"E" => 1,0,0,1,1,1,1;
H"F" => 1,0,0,0,1,1,1;
END TABLE;
END;
数字钟设计的层次关系如下图-8所示:
图-8 数字钟设计的层次关系图
四、软件仿真结果【截图】
A.时间从01:59:59→02:00:00的转变
B.时间从09:59:59→10:00:00的转变
C.时间从23:59:59→00:00:00的转变
五、硬件调试结果
六、设计心得与体会
通过数字钟的设计,体会到了数字逻辑理论在实际生产实践中的应用,学会了设计一个简单数字系统的全过程,熟练掌握了MAX+plus II的各种操作与应用,其中出现了各种大大小小的问题,学会了自己查找资料、查看英文版帮助文档的并解决问题的能力,体会到了研究与设计的乐趣。

学会了MAX+plus II的三种常用的逻辑设计输入方式:图形设计输入、文本设计输入、波形设计输入。

当然也初步掌握了AHDL语言的基本框架,会进行简单的语言描述。

七、参考资料
【1】《数字逻辑》(第二版). 张辉宜丁刚.中国科学技术大学出版社,合肥2010 【2】《电子技术课程设计指导》[M].彭介华.高等教育出版社,1996
【3】《数字电子技术》焦素敏 .北京:清华大学出版社,2007
【4】《数字系统设计与Verlog HDL》[M].王金明杨吉斌.北京:电子工业出版社,2002。

相关文档
最新文档