基于VerilogHDL设计的数字时钟.docx

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

基于VerilogHDL设计的数字时钟.docx

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

基于VerilogHDL设计的数字时钟.docx

基于VerilogHDL设计的数字时钟

基于Verilog-HDL设计的数字时钟

 

 

————————————————————————————————作者:

————————————————————————————————日期:

 

深圳大学考试答题纸

(以论文、报告等形式考核专用)ﻫ二○ 18 ~二○19 学年度第 一  学期

课程编号

1602080001

课程名称

硬件描述语言与逻辑综合

主讲教师

刘春平

评分

学号

姓名

李思豪

专业年级

电子科学与技术16级1班 

教师评语:

题目:

基于VerilogHDL设计的数字时钟

摘要:

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

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

关键词:

VerilogHDL;硬件描述语言;FPGA

一、实验任务3

实验目的ﻩ3

实验要求ﻩ3

二、设计思路ﻩ3

三、实验结果ﻩ10

四、总结与收获ﻩ14

 

1、实验任务

实验目的

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

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

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

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

实验要求

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

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

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

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

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

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

基本要求

(1)计时功能:

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

(2) 秒表功能:

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

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

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

二、设计思路

1、总原理框图:

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

2.顶层模块:

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

modulemyclock2(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_7 d2(fenout1,fen1);

decode4_7d3(fenout2,fen2);

decode4_7d4(shiout1,shi1);

decode4_7d5(shiout2,shi2);

endmodule 

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

引脚名

类型

      功能

daojishi

input

秒表倒计时模式

stop

input

暂停按键

clk

input

晶振脉冲

reset

input

复位按键

shi

input

小时调节按键

fen

input

分钟调节按键

miao

input

秒调节按键

miaoout1

output

秒个位数码管输出

miaoout2

output

秒十位数码管输出

fenout1

output

分个位数码管输出

fenout2

output

分十位数码管输出

shiout1

output

时个位数码管输出

shiout2

output

时十位数码管输出

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

(1)分频模块:

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

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

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

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

模块代码如下:

moduledivider_1HZ(clk_1hz,reset,clk);

outputclk_1hz;

inputreset,clk;

reg clk_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; 

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后在下一个脉冲的作用下清零,从新计时。

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

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

部分代码如下:

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

inputreset,clk_1hz,stop,daojishi;

inputshi,fen,miao;

output miao1,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

          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 

ﻩ  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 

         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

 

3.引脚排布:

如下所示:

     引脚分布图

二、实验结果

(1)波形仿真

在Quartus II中利用仿真波形进行功能或时序仿真的基本步骤如下:

(1)创建新的矢量波形文件(*.vwf).

(2)添加输入、输出节点。

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

(4)完成矢量波形文件的创建之后,用户即可以对设计进行功能或时序仿真。

(5)仿真启动后,状态窗口会同时自动打开,在状态窗口中显示仿真进度及所用时间。

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

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

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

      分频器仿真图

仿真分析:

我们取时钟信号的周期是20ns,为了让仿真结果更明显,取每三个时钟周期让秒脉冲clk_1hz翻转一次,而不是1349999翻转一次。

并且让reset复位信号在仿真的160ns-300ns有效。

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

 

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

    数码管输出数字8仿真图

  数码管输出数字8仿真图

仿真结果分析:

 indec是我们要输出的十进制数,temp是连接7段数码的7位二进制数,已知数码管为共阴极数码管。

我们设定indec为8,从图中可以看见temp[7:

0]都是0;所以7个数码管都会被点亮,就是显示8。

我们再设定indec为1,可以预见1在数码管中应该是亮两个,如第二图所示只有temp[1]和temp[2]是0,所以就是亮两个灯,显示1。

仿真结果符合设计要求。

 

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

   计数器计数仿真图

     计数器复位测试仿真图

仿真结果:

miao1,miao2,fen1,fen2,shi1,shi2分别是秒分时的个位和十位,时钟脉冲clk_1hz每一个上升沿,miao1就加1,miao1再依次进位给更高的为。

如图所示,当miao1计数到9的时候,miao2加1,当miao2计数到5的时候,fen1加1,时钟计数功能实现,仿真符合设计要求。

图二是复位信号reset的测试,当reset为1有效时,累计的时间清零。

如图所以,当reset=1时,miao1,miao2,fen1,fen2,shi1,shi2全部变0,仿真符合技术要求。

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

 

(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软件的使用有了更进一步的了解,同时也积累了一些经验。

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

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

当前位置:首页 > 人文社科 > 设计艺术

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

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