实验十七 数字时钟
一、实验目的
设计一个可以计时的数字时钟,其显示时间范围是00:00:00~23:59:59,且该时钟具有暂停计时、清零等功能。
二、实验器材
1、SOPC实验箱
2、计算机(装有Quartus II 7.0软件)
三、实验预习
1、了解时钟设计原理和各主要模块的设计方法。
2、提前预习,编写好主模块的verilog程序。
四、实验原理
一个完整的时钟应由 4部分组成:秒脉冲发生电路、计数部分、译码显示部分和时钟调整部分。
1、秒脉冲发生:一个时钟的准确与否主要取决秒脉冲的精确度。可以设计分频电路对系统时钟50MHz进行50000000分频从而得到稳定的1Hz基准信号。定义一个50000000
进制的计数器,将系统时钟作为时钟输入引脚clk,进位输出即为分频后的1Hz信号。
2、计数部分:应设计1个60进制秒计数器、1个60进制分计数器、1个24进制时计数器用于计时。秒计数器应定义clk(时钟输入)、rst(复位)两个输入引脚,Q3~Q0(秒位)、Q7~Q4(十秒位)、Co(进位位)9个输出引脚。分、时计数器类似。如需要设置时间可再增加置数控制引脚Set和置数输入引脚d0~d7。
3、译码显示部分:此模块应定义控制时钟输入、时分秒计数数据输入共25个输入引脚。
8位显示码输出(XQ7-XQ0)、6位数码管选通信号(DIG0-DIG5)共12个输出引脚。在时钟信号的控制下轮流选择对时分秒输入信号进行译码输出至XQ7-XQ0,并通过DIG0-DIG5输出相应的选通信号选择数码管。每位显示时间控制在1ms左右。时钟信号可由分频电路引出。
五、实验内容
1、启动Quartus II建立一个空白工程并命名。
2、新建VHDL 源程序文件,输入程序代码并保存,进行综合编译,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。并生成图形符号文件。
代码:
module shizhong(CLK,RST,EN,S1,S2,HOURH,HOURL,MINH,MINL,SECH,SECL);
input CLK,RST,EN,S1,S2;
output[3:0] HOURH,HOURL,MINH,MINL,SECH,SECL;
reg[3:0] SECL,SECH,MINL,MINH,HOURL,HOURH;
always @(posedge CLK or negedge RST)
if(!RST) begin
SECL<=0;SECH<=0;MINL<=0;MINH<=0;HOURL<=0;HOURH<=0;
end//系统复位
else if(EN) //EN为低电平时时钟暂停
begin
if(!S1) //调节小时
begin
if(HOURL==9)
begin HOURL<=0; HOURH<=HOURH+1;
end
else
begin
if(HOURH==2&&HOURL==3)
begin
HOURL<=0;HOURH<=0;
end
else HOURL<=HOURL+1;
end
end
else if(!S2) //调节分钟
begin
if(MINL==9)
begin
MINL<=0;
if(MINH==5) MINH<=0;
else MINH<=MINH+1;
end
else MINL<=MINL+1;
end
else if(SECL==9) //时钟正常跳动状态
begin
SECL<=0;
if(SECH==5)
begin SECH<=0;
if(MINL==9)
begin
MINL<=0;
if(MINH==5)
begin
MINH<=0;
if(HOURL==9) begin HOURL<=0;HOURH<=HOURH+1;end
else if(HOURH==2&&HOURL==3) begin HOURL<=0; HOURH<=0;end
else HOURL<=HOURL+1;
end
else MINH<=MINH+1;
end
else MINL<=MINL+1;
end
else SECH<=SECH+1;
end
else SECL<=SECL+1;
end
else
begin
HOURH<=HOURH;
HOURL<=HOURL;
MINH<=MINH;
MINL<=MINL;
SECH<=SECH;
SECL<=SECL;
end
endmodule
3、波形仿真验证。
正常计数
正常调时调分
末尾正常跳转
清零
暂停
六、实验小结
1、在做实验前应该先充分理解实验原理,并根据原理编写语言。
2、编写语言时要在注意语法错误的同时注意逻辑错误。
3、实验波形中存在毛刺,是因为存在竞争冒险现象。
因篇幅问题不能全部显示,请点此查看更多更全内容