数字电子时钟1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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