基于Verilog HDL设计的数字时钟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
深圳大学考试答题纸
(以论文、报告等形式考核专用)
二○18 ~二○19 学年度第一学期
课程编
1602080001 课程名称
号
学
姓名李思豪专业年级电子科学与技术16级1班号
题目: 基于Verilog HDL设计的数字时钟
摘要:本文利用Verilog HDL语言自顶向下的设计方法设计多功能数字钟,突出了其作为硬件描述语言的良好的可读性、可移植性与易理解等优点,并通过Altera QuartusⅡ6、0与cyclnoe II EP2C35F672C6完成综合、仿真。此程序通过下载到FPGA芯片后,可应用于实际的数字钟显示中
关键词:Verilog HDL;硬件描述语言;FPGA
目录
一、实验任务 (3)
实验目的 (3)
实验要求 (3)
二、设计思路 (3)
三、实验结果 (10)
四、总结与收获 (14)
一、实验任务
实验目的
1.深入了解基于quartus ii工具的复杂时序逻辑电路的设计。
2.理解并熟练利用EDA工具进行综合设计。
3.熟练掌握芯片烧录的流程及步骤。
4.掌握Verilog HDL 语言的语法规范及时序电路描述方法。
实验要求
设计一个带秒表功能的24 小时数字钟,它包括以下几个组成部分:
①显示屏,由6 个七段数码管组成,用于显示当前时间(时:分,秒)或设置的秒表时间;
②复位键复位所有显示与计数
③设置键,用于确定新的时间设置,三个消抖按键分别用于时分秒的设置
④秒表键,用于切换成秒表功能
基本要求
(1) 计时功能:这就是本计时器设计的基本功能,每隔一秒计时一次,并在显示屏上显示当前时间。
(2) 秒表功能:设置时间,进行倒计时功能
(3) 设置新的计时器时间:按下设置键后,用户能通过时分秒三个消抖按键对时间进行设置。
二、设计思路
1、总原理框图:
原理如上图所示,时钟由分频器模块,数码管显示模块,计时器模块三个模块构成,每个模块实现如下的不同功能,最后通过在顶层模块的调用,来实现时钟功能。
2.顶层模块:
顶层模块调用三个字模块,并且定义输入输出口,代码输入所示:
module
myclock2(daojishi,stop,clk,reset,shi,fen,miao,miaoout1,miaoout2,fenout1,fenout2,shiout1,shiout2) ;
input clk,reset,stop,shi,fen,miao,daojishi;
output[6:0] miaoout1,miaoout2,fenout1,fenout2,shiout1,shiout2;
wire[3:0] miao1,miao2,fen1,fen2,shi1,shi2;
wire clk_1hz;
divider_1HZ divider1hz(clk_1hz,reset,clk);
count count1(daojishi,shi,fen,miao,stop,miao1,miao2,fen1,fen2,shi1,shi2,reset,clk_1hz); decode4_7 d0(miaoout1,miao1);
decode4_7 d1(miaoout2,miao2);
decode4_7 d2(fenout1,fen1);
decode4_7 d3(fenout2,fen2);
decode4_7 d4(shiout1,shi1);
decode4_7 d5(shiout2,shi2);
endmodule
输入输出端口类型功能表:
三个子模块的原理与代码:
(1)分频模块:
分频模块的作用主要就是要获得各种频率的时钟信号。输入信号27MHZ的信号,要想获得1HZ的信号作为秒脉冲计时,则要对27MHZ信号分频。通过计数
的方式,当计数从0开始到时,1HZ信号取反一次,计数又从0开始,如此循环,就可以得到1HZ脉冲信号。对于其她信号也就是如此,只就是计数值不一样,得到的分频信号不同。
模块代码如下:
module divider_1HZ(clk_1hz,reset,clk);
output clk_1hz;
input reset,clk;
reg clk_1hz;
reg[23:0] count;
always @(posedge clk)
begin
if(reset)
begin
count<=0;
clk_1hz<=0;
end
else
begin
if(count==)
begin
count<=0;
clk_1hz<=~clk_1hz;
end
else
count<=count+1;//计数
end
end
endmodule
(2)译码显示模块:
一、数码管显示:通过传入响应的十进制数,运用case语句转换输出相应的7位二进制显示码,送入数码管显示。
代码如下:
module decode4_7(temp,indec);
output[6:0] temp;
input[3:0] indec;
reg[6:0] temp;
always @(indec)
begin
case(indec) //用case 语句进行译码
4'd0:temp[6:0]=7'b1000000;
4'd1:temp[6:0]=7'b1111001;
4'd2:temp[6:0]=7'b0100100;
4'd3:temp[6:0]=7'b0110000;