数字电子时钟1

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

数字电子时钟表

一题目分析及系统结构划分

本实验要求用MAX+PLUS 11设计一数字电子时钟表,具体要求如下:

(1)有完整和准确的记数功能,即能显示从00-00-00到23-59-59。

(2)可对时,分,秒进行调整,有整点报时功能。

为使设计出来的电子表满足MAX+PLUS的要求,需要所设计思路尽可能的清楚,使设计尽可能的简洁,故将系统划分为如下五个模块:状态选择模块---StateSelec;时,分,秒调整和记时模块---Hcount ,Scount,Mcount;Bcd—Led 转换即显示模块---Bcdled;分频模块---Divide;记数与调整模块---Enaselect 这五个模块的连接由下图实现:

二各模块功能描述

(一)Stateselect

设计思想为:由Set信号的上升沿来选择四种工作状态:电子时钟正常工作状态,时调整状态,分调整状态,秒调整状态。当然只有Sel信号的上升沿且Up信号有上升沿到来时,才由Stateselect将选择的状态送下一级模块。即Stateselect 模块可控时钟在上述四种状态的切换,实现为:当Set未被按下时,Setmodel 输出为0,此时时钟工作于正常记时状态;当Set第一次被按下时,Setmodel 输出变为1,且一直维持到Set第四次按下。此时为秒调整状态,当Up信号有上升沿来临时,秒值递加;当Set第二次被按下时,变为分调整状态,当Up信号有上升沿来临时,分值递加;当Set第三次被按下时,变为时调整状态,当Up信号有上升沿来临时,时值递加;当Set第四次按下时,Setmodel输出又变为0,时钟完成调整工作进入正常工作状态。次后当Set再次按下时将重复上述工作状态的转换。

Verilog代码为:

module stateselect(set,up,sup,mup,hup,setmode,clk);

input set,up,clk;

output sup,mup,hup,setmode;

reg sup,mup,setmode,hup;

reg [1:0]selc;

always@(posedge set)

begin

selc=selc+1;

end

always @(posedge clk)

begin

case(selc)

0: setmode=0;

1: begin

setmode=1;

sup=up;

end

2:mup=up;

3: hup=up;

endcase

end

endmodule

用MAX+PLUS仿真的波形:

(二)Enaselect:

设计思想:由Stateselect模块的Setmodel作为Enaselect的Sel输入信号的上一级来源,当Sel为0时Enaout选择Ena0,为正常记时状态;当Sel为1时,Enaout选择Ena1,时,分,秒调整状态。

Verilog代码为:

module enaselect(ena0,ena1,sel,enaout);

input ena0,ena1,sel;

output enaout;

assign enaout=(sel==0)?ena0:ena1;

endmodule

用MAX+PLUS仿真的波形:

(三)Scount:

设计思想:本模块实现秒调整和记时功能。有00到59的记数功能。当Clk 上升沿来临时,此时若Ena有效时,判断如果为秒值为58时,则秒的低位Lbcd 变成9,且使进位信号Cin为1;如果为秒值为59时,则使秒值为00,且使进位信号Cin变为0,其他情况下,秒值低位逢十进一,即当秒值为9时,秒值高位进一位,当秒值不为9时,秒值加一。

Verilog代码为:

module scount(ena,lbcd,hbcd,cin,clk);

input ena,clk;

output [3:0] lbcd,hbcd;

output cin;

reg cin;

reg [3:0] lbcd,hbcd;

always @(posedge clk)

begin

if(ena)

begin

if(lbcd==8&&hbcd==5)

begin

lbcd=9; cin=1;

end

else if (lbcd==9&&hbcd==5)

begin

lbcd=0;hbcd=0;

cin=0;

end

else if (lbcd==9)

begin

lbcd=0;

hbcd=hbcd+1;

end

else

lbcd=lbcd+1;

end

end

endmodule

用MAX+PLUS仿真的波形:

(四)Mcount

设计思路:Mcount模块与Scount模块大致上是一致的唯一的差别就是比Scount模块多了Sound也就是整点报时信号的输出。当分值为00时Sound有上升沿持续到分值变成01,也就是有一分的报时时间。

Verilog代码为:

module mcount(ena,lbcd,hbcd,cin,clk,sound);

input ena,clk;

output [3:0] lbcd,hbcd;

output cin,sound;

reg cin,sound;

reg [3:0] lbcd,hbcd;

always @(posedge clk)

begin

if(ena)

begin

if(lbcd==8&&hbcd==5)

begin

lbcd=9; cin=1;

end

else if (lbcd==9&&hbcd==5)

begin

lbcd=0;hbcd=0;

cin=0;sound=1;

end

else if (lbcd==9)

begin

lbcd=0;

hbcd=hbcd+1;

end

相关文档
最新文档