基于Verilog HDL设计的数字时钟.docx

上传人:b****5 文档编号:7884016 上传时间:2023-01-26 格式:DOCX 页数:16 大小:23.81KB
下载 相关 举报
基于Verilog HDL设计的数字时钟.docx_第1页
第1页 / 共16页
基于Verilog HDL设计的数字时钟.docx_第2页
第2页 / 共16页
基于Verilog HDL设计的数字时钟.docx_第3页
第3页 / 共16页
基于Verilog HDL设计的数字时钟.docx_第4页
第4页 / 共16页
基于Verilog HDL设计的数字时钟.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

基于Verilog HDL设计的数字时钟.docx

《基于Verilog HDL设计的数字时钟.docx》由会员分享,可在线阅读,更多相关《基于Verilog HDL设计的数字时钟.docx(16页珍藏版)》请在冰豆网上搜索。

基于Verilog HDL设计的数字时钟.docx

基于VerilogHDL设计的数字时钟

深圳大学考试答题纸

(以论文、报告等形式考核专用)

二○18~二○19学年度第一学期

课程编

1602080001评分刘春平课程名称主讲教师硬件描述语言与逻辑综合号

学电子科学与技术16级1班姓名李思豪专业年级号

教师评语:

设计的数字时钟VerilogHDL基于题目:

摘要:

本文利用VerilogHDL语言自顶向下的设计方法设计多功能数字钟,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点,并通过AlteraQuartusⅡ6.0和cyclnoeII

EP2C35F672C6完成综合、仿真。

此程序通过下载到FPGA芯片后,可应用于实际的数字钟显示中

关键词:

VerilogHDL;硬件描述语言;FPGA1

一、实验任务..............................................................................3

实验目的..............................................................................3

实验要求..............................................................................3

二、设计思路..............................................................................3

三、实验结果............................................................................10

四、总结与收获........................................................................14

2

一、实验任务

实验目的

1.深入了解基于quartusii工具的复杂时序逻辑电路的设计。

理解并熟练利用EDA工具进行综合设计。

2.熟练掌握芯片烧录的流程及步骤。

3.

掌握VerilogHDL语言的语法规范及时序电路描述方法。

4.

实验要求

设计一个带秒表功能的24小时数字钟,它包括以下几个组成部分:

①显示屏,由6个七段数码管组成,用于显示当前时间(时:

分,秒)或设置的秒表时间;

②复位键复位所有显示和计数

③设置键,用于确定新的时间设置,三个消抖按键分别用于时分秒的设置

④秒表键,用于切换成秒表功能

基本要求

(1)计时功能:

这是本计时器设计的基本功能,每隔一秒计时一次,并在显示屏上显示当前时间。

(2)秒表功能:

设置时间,进行倒计时功能

(3)设置新的计时器时间:

按下设置键后,用户能通过时分秒三个消抖按键对时间进行设置。

二、设计思路

、总原理框图:

13

原理如上图所示,时钟由分频器模块,数码管显示模块,计时器模块三个模块构成,每个模块实现如下的不同功能,最后通过在顶层模块的调用,来实现时钟功能。

2.顶层模块:

顶层模块调用三个字模块,并且定义输入输出口,代码输入所示:

module

myclock2(daojishi,stop,clk,reset,shi,fen,miao,miaoout1,miaoout2,fenout1,fenout2,shiout1,shiout2);

inputclk,reset,stop,shi,fen,miao,daojishi;

output[6:

0]miaoout1,miaoout2,fenout1,fenout2,shiout1,shiout2;

wire[3:

0]miao1,miao2,fen1,fen2,shi1,shi2;

wireclk_1hz;

divider_1HZdivider1hz(clk_1hz,reset,clk);

countcount1(daojishi,shi,fen,miao,stop,miao1,miao2,fen1,fen2,shi1,shi2,reset,clk_1hz);

decode4_7d0(miaoout1,miao1);

decode4_7d1(miaoout2,miao2);

decode4_7d2(fenout1,fen1);

decode4_7d3(fenout2,fen2);

decode4_7d4(shiout1,shi1);

decode4_7d5(shiout2,shi2);

endmodule

输入输出端口类型功能表:

引脚名类型功能daojishistopclkresetshifenmiaomiaoout1miaoout2fenout1fenout2shiout1shiout2

input秒表倒计时模input暂停按input晶振脉input复位按input小时调节按input分钟调节按input秒调节按output秒个位数码管输output秒十位数码管输output分个位数码管输output分十位数码管输output时个位数码管输output时十位数码管输

三个子模块的原理和代码:

(1)分频模块:

分频模块的作用主要是要获得各种频率的时钟信号。

输入信号27MHZ的信号,要想获得1HZ的信号作为秒脉冲计时,则要对27MHZ信号分频。

通过计数4

的方式,当计数从0开始到13999999时,1HZ信号取反一次,计数又从0开始,如此循环,就可以得到1HZ脉冲信号。

对于其他信号也是如此,只是计数值不一样,得到的分频信号不同。

模块代码如下:

moduledivider_1HZ(clk_1hz,reset,clk);

outputclk_1hz;

inputreset,clk;

regclk_1hz;

reg[23:

0]count;

always@(posedgeclk)

begin

if(reset)

begin

count<=0;

clk_1hz<=0;

end

else

begin

if(count==13499999)

begin

count<=0;

clk_1hz<=~clk_1hz;

end

else

count<=count+1;//计数

end

end

endmodule

(2)译码显示模块:

一、数码管显示:

通过传入响应的十进制数,运用case语句转换输出相应的7位二进制显示码,送入数码管显示。

代码如下:

moduledecode4_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;

5

4'd4:

temp[6:

0]=7'b0011001;

4'd5:

temp[6:

0]=7'b0010010;

4'd6:

temp[6:

0]=7'b0000010;

4'd7:

temp[6:

0]=7'b1111000;

4'd8:

temp[6:

0]=7'b0000000;

4'd9:

temp[6:

0]=7'b0010000;

default:

temp=7'bz;

endcase

end

endmodule

(3)、计时器模块:

秒计数:

在1HZ脉冲下进行秒计时,当计时达到59秒后,在下一个脉冲来临变0,并发出一个脉冲信号,可供下面分钟计数作为输入脉冲信号计时。

分钟计数:

在输入脉冲下,分钟开始计时,当计时达到59后,在下一个脉冲来临变0,并发出一个脉冲,供小时计数的输入脉冲新号。

小时计数:

脉冲信号来临时,计数加1,达到23后在下一个脉冲的作用下清零,从新计时。

如果有复位信号,则时分秒全部清零。

计时器模块还包含了设置时间和秒表切换的功能

部分代码如下:

modulecount(daojishi,shi,fen,miao,stop,miao1,miao2,fen1,fen2,shi1,shi2,reset,clk_1hz);

inputreset,clk_1hz,stop,daojishi;

inputshi,fen,miao;

outputmiao1,miao2,fen1,fen2,shi1,shi2;

reg[3:

0]miao1,miao2,fen1,fen2,shi1,shi2;

always@(posedgeclk_1hz)

begin

if(reset)

begin

miao1<=0;miao2<=0;fen1<=0;fen2<=0;shi1<=0;shi2<=0;

end

if(stop==1)

begin//秒调节

if(miao==0)

begin

miao1<=miao1+1;

if(miao1==9)

begin

miao1<=0;

miao2<=miao2+1;

if(miao2==5)

begin

6

miao2<=0;

end

end

end

if(fen==0)//分调节

begin

fen1<=fen1+1;

if(fen1==9)

begin

fen1<=0;

fen2<=fen2+1;

if(fen2==5)

begin

fen2<=0;

end

end

end

if(shi==0)//时调节

begin

shi1<=shi1+1;

if(shi1==9||((shi1==3)&&(shi2==2)))

begin

shi1<=0;

shi2<=shi2+1;

if(shi2>=2)

begin

shi2<=0;

end

end

end

end

if((!

reset)&&(stop==0))

begin

if(daojishi==0)//时钟程序

begin

miao1<=miao1+1;

if(miao1==9)

begin

7

miao1<=0;

miao2<=miao2+1;

if(miao2==5)

begin

miao2<=0;

fen1<=fen1+1;

if(fen1==9)

begin

fen1<=0;

fen2<=fen2+1;

if(fen2==5)

begin

fen2<=0;

shi1<=shi1+1;

if((shi1==9)||((shi1==3)&&(shi2==2)))

begin

shi1<=0;

shi2<=shi2+1;

if(shi2==2)

begin

shi2<=0;

end

end

end

end

end

end

end

else//倒计时程序

begin

if(!

((shi1==0)&&(shi2==0)&&(fen1==0)&&(fen2==0)&&(miao2==0)&&(miao1==0)))

begin

miao1<=miao1-1;

if(miao1==0)

begin

miao1<=9;

miao2<=miao2-1;

if(miao2==0)

begin

miao2<=5;

fen1<=fen1-1;

if(fen1==0)

begin

8

fen1<=9;

fen2<=fen2-1;

if(fen2==0)

begin

fen2<=5;

shi1<=shi1-1;

if(shi1==0)

begin

shi1<=9;

shi2<=shi2-1;

if(shi2==0)

begin

shi2<=0;

end

end

end

end

end

end

end

end

end

end

endmodule

9

3.引脚排布:

如下所示:

引脚分布图

二、实验结果

)波形仿真(1QuartusII中利用仿真波形进行功能或时序仿真的基本步骤如下:

在.*.vwf)

(1)创建新的矢量波形文件()添加输入、输出节点。

(2)编译输入节点的波形。

(3用户即可以对设计进行功能或时序仿真。

)(4完成矢量波形文件的创建之后,在状态窗口中显示仿真进度及状态窗口会同时自动打开,)(5仿真启动后,10

所用时间。

(6)默认情况下,仿真器报告窗口内在仿真过程中会显示仿真波形部分,其中还包括当前仿真器的设置信息和仿真信息等。

下面我们单独对三个子模块分别进行仿真并分析仿真结果:

(1)分频器模块仿真结果:

分频器仿真图

为了让仿真结果更明显,取每三个时20ns,仿真分析:

我们取时钟信号的周期是复位信号在并且让reset翻转一次。

钟周期让秒脉冲clk_1hz翻转一次,而不是1349999有效。

结果如图所示,在每三个时钟信号出现时,秒脉冲都会翻转仿真的160ns-300ns信号有效时,秒脉冲无输出,仿真结果符合预计要求。

reset一次,在

11

(2)显示译码模块仿真结果:

仿真图8数码管输出数字

仿真图数码管输出数字8

位二7段数码的7temp仿真结果分析:

indec是我们要输出的十进制数,是连接temp[7:

0]8,从图中可以看见为进制数,已知数码管为共阴极数码管。

我们设定indec1,可以预见。

我们再设定indec为1个数码管都会被点亮,就是显示都是0;所以78,所以就是亮两个temp[2]是0在数码管中应该是亮两个,如第二图所示只有temp[1]和。

仿真结果符合设计要求。

1灯,显示

12

(3)计时器模块仿真结果:

计数器计数仿真图

计数器复位测试仿真图

分别是秒分时的个位和十位,miao1,miao2,fen1,fen2,shi1,shi2仿真结果:

再依次进位给更高的miao1就加1,时钟脉冲clk_1hz每一个上升沿,miao15miao2计数到1计数到9的时候,miao2加,当为。

如图所示,当miao1,时钟计数功能实现,仿真符合设计要求。

1的时候,fen1加有效时,累计的时间清零。

1的测试,当reset为reset图二是复位信号仿真符合,0reset=1如图所以,当时,miao1,miao2,fen1,fen2,shi1,shi2全部变技术要求。

此模块还有设置时间和倒计时的功能,但是在波形仿真中不够直观,所以不做波形仿真。

13

(2)DE2开发板实现

将开发板插入电脑中,烧录进程序,进行各项功能测试,包括计时功能,时间调节功能,秒表功能,复位功能,暂停功能。

实验过程记录:

(1)烧录程序完成,DE2立刻开始从0秒计数,依次向分钟,小时进位,当时间为

23:

59:

59时,下一秒全部跳0;时钟功能实现。

(2)复位功能测试:

switch0为复位信号按键,拨下该按键,时间清零,复位功能实现。

(3)暂停功能测试:

switch1为暂停信号按键,拨下该按键,时间暂停,暂停功能实现。

(4)时间设置测试:

消抖按钮key0,key1,key2,分别是秒分时设置键。

按下暂停键,

计数停止,每按一下key0,秒加一;每按一下key1,分加一;每按一下key2,小时加一。

时间设置完成,回拨暂停键,时钟从设置的时间开始计时。

时间设置功能实现。

(5)秒表倒计时功能测试:

switch2为倒计时信号按键,拨下该键后,时钟开始倒计时,倒计时功能实现。

测试完成,所有测试结果符合设计要求,完成verilong时钟设计。

四、总结与心得体会

在QuartusII开发环境下,采用自顶向下的设计方法有利于在早期发现结构设计中的错误,避免不必要的重复设计。

再结合基于FPGA的可编程实验板,轻轻松松就能实现各种电子产品的设计,现场观察实验测试结果。

大大缩短了产品的设计周期和调试周期,提高了设计的可靠性和成功率,充分体现了可编程逻辑器件在数字电路设计中的优越性。

在经过了四个星期的编写和仿真后,终于完成了设计要求,这次设计,我克服了很多关于设计问题方面的困难,特别是对verilog语法和规则的不熟悉导致很多困难,最后使我对QuartusII软件的使用有了更进一步的了解,同时也积累14

了一些经验。

很多时候我们想要的功能,写出来的代码,并不是正确的,需要不断的调试,要理论联系实际,这样才能更快的完成设计任务。

15

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 中医中药

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1