实验 7 数字钟设计

这篇具有很好参考价值的文章主要介绍了实验 7 数字钟设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

7.1 实 验 目 的

设计一个具有时功能和校的数字钟。

7.2 实 验 仪 器 与 器 材

1. EDA 开发软件 一 套

2.微机 一 台

3.实验开发系统 一 台

4.打印机 一 台

5.其他器件与材料 若 干

7.3 实 验 说 明

用 数码管显示小时 、 分 钟 和 秒钟。 三 个 按键用于时钟校准。 K1 用 与切换 正 常 计 时 , 校 准 小 时 和 分 钟 。 K2 用 于 时钟的 “+”。 K3 用 于 时钟的 “-”。 校准相应 的刻度,该数码管闪烁。

7.4 实 验 要 求

1. 1 分 钟 =60 秒 ; 当 秒 钟 计时为 59 时 , 分 钟 计 数 +1;

 2. 1 小 时 =60 分 钟 ;当 分 钟 计时为 59,并且秒到分再次进位时,时钟计数个位 加 1;分钟计数置位为 0;

3. 显 示 为 24 小时制,当 时 钟计数十位 小 于 2 时 , 时钟个位计数到计数到 9 时 , 分钟到 时 钟 再次进位 时 , 十 位 加 1;

4. 24 小时制计满归零 ,23:59:59 时 ,秒 到 分 再 次 进 位 时 ,时 、分 、秒 三 部 分 计 数均归零。

7.5 实 验 报 告 要 求

1. 写出全部设计文件。

module clock(

input rst,

input clk0,

output reg [6:0] led1,

output reg [6:0] led2,

output reg [6:0] led3,

output reg [6:0] led4,

output reg [6:0] led5,

output reg [6:0] led6,

input wire k1, // 切换键

input wire k2, // 加键

input wire k3, // 减键

output reg led);

reg clk1;

wire clk;

reg [30:0] counter;

parameter COUNTER_MAX = 25000000;  // 计数器最大值,控制时钟频率

reg [5:0]s;

reg [5:0]f;

reg [5:0]m;

reg [5:0]count;

reg [5:0]m1;

reg [5:0]m2;

reg [5:0]f1;

reg [5:0]f2;

reg [5:0]s1;

reg [5:0]s2;

reg [23:0] blink_counter = 0; // 24位计数器用于闪烁

reg blink = 0;

reg k;

initial

       begin

              s=0;

              f=0;

              m=0;

              count=0;

              clk1=0;

              led=1;

       end

//时钟   

always @(posedge clk0 or  negedge rst) begin

    if (!rst) begin

        counter <= 0;

    end

        else begin

        if (counter == COUNTER_MAX -31'b1) begin

            counter <= 0;

            clk1 <= clk1+1;  // 每达到计数器最大值时,翻转时钟信号

        end else begin

            counter <= counter + 1;

                           

        end

    end

end

assign clk=clk1;

always@(posedge clk )

begin

led=~led;

end

//电子时钟

always@(posedge clk  )

begin

       if(count==6'b111100)

       begin

      

       count=6'b000001;

       end

       else

       count=count+6'b000001;

end

      

always @ (posedge k1) begin

  k <=  k+ 1;

    if (k == 3) begin

        k <= 0;

    end

end

      

always@(posedge clk  )

begin

       m=count;

      

        if(!rst)

              begin

                     s<=0;

                     f<=0;

                     m<=0;

              end

       else if(m==6'b111100)

              begin

                m=0;

                     if(m==0)f<=f+6'b1;

                     if(f==6'b111100)

                            begin

                                  

                                   f<=0;

                                   if(f==0)s<=s+6'b1;

                                   if(s==6'b011000)

                                          begin

                                                 f<=0;

                                                 m<=0;

                                                 s<=0;

                                          end

                            end

                end    

 case (k)

        1: begin // 校准时

            if (k2==1) begin // 加时

                s <= s + 6'b1;

                if (s == 6'b011000) begin

                   s <= 0;

                end

            end

            if (k3==1) begin // 减时

                if (s == 0) begin

                    s <= 6'b011000;

                end else begin

                    s <= s - 6'b1;

                end

            end

        end

        2: begin // 校准时

            if (k2==1) begin // 加时

                f <= f + 6'b1;

                if (f == 6'b111100) begin

                   f <= 0;

                end

            end

            if (k3==1) begin // 减时

                if (f == 0) begin

                    f<=6'b111100;

                end else begin

                    f <= f - 6'b1;

                end

            end

        end

    endcase

 end

// 闪烁逻辑

always @ (posedge clk0 or posedge rst)

begin

    if (rst)

        begin

        blink_counter <= 0;

        blink <= 0;

    end

        else

        begin

        if (k == 0)

                begin // 正常计时模式,不闪烁

            blink_counter <= 0;

            blink <= 0;

        end

                else

                begin // 校准模式,闪烁

            blink_counter <= blink_counter + 1;

            if (blink_counter == 500000)

                            begin // 闪烁频率为1Hz

                blink_counter <= 0;

                blink <= ~blink;

            end

        end

    end

end

//数码管

always @ ( posedge clk or negedge rst)

        begin

        m1=m%10;

              if (!rst)

                     led1 = 7'b0000000;

              else begin

              case (m1)

 6'b000000 : led1 = 7'b1000000;

 6'b000001 : led1 = 7'b1111001;

 6'b000010 : led1 = 7'b0100100;

 6'b000011 : led1 = 7'b0110000;

 6'b000100 : led1 = 7'b0011001;

 6'b000101 : led1 = 7'b0010010;

 6'b000110 : led1 = 7'b0000010;

 6'b000111 : led1 = 7'b1111000;

 6'b001000 : led1 = 7'b0000000;

 6'b001001 : led1 = 7'b0010000;

              default : led1 =7'b1000000;

              endcase

       end

end

always @ ( posedge clk or negedge rst)

        begin

        m2=m/10;

              if (!rst)

                     led2 = 6'b00000;

              else begin

              case (m2)

 6'b000000 : led2 = 7'b100_0000;

 6'b000001 : led2 = 7'b111_1001;

 6'b000010 : led2 = 7'b010_0100;

 6'b000011 : led2 = 7'b011_0000;

 6'b000100 : led2 = 7'b001_1001;

 6'b000101 : led2 = 7'b001_0010;

 6'b000110 : led2 = 7'b000_0010;

 6'b000111 : led2 = 7'b111_1000;

 6'b001000 : led2 = 7'b000_0000;

 6'b001001 : led2 = 7'b001_0000;

              default : led2 =7'b100_0000;

              endcase

       end

end

always @ ( posedge clk or negedge rst)

        begin

        f1=f%10;  

if (!rst)

                     led3 = 7'b0000000;

              else begin

              case (f1)

 6'b000000 : led3 = 7'b100_0000;

 6'b000001 : led3 = 7'b111_1001;

 6'b000010 : led3 = 7'b010_0100;

 6'b000011 : led3 = 7'b011_0000;

 6'b000100 : led3 = 7'b001_1001;

 6'b000101 : led3 = 7'b001_0010;

 6'b000110 : led3 = 7'b000_0010;

 6'b000111 : led3 = 7'b111_1000;

 6'b001000 : led3 = 7'b000_0000;

 6'b001001 : led3 = 7'b001_0000;

              default : led3 =7'b100_0000;

              endcase

      

 if (k == 1)

       begin // 校准时

              if (blink) led3 <= 7'b1111111;

       end

       end

end

always @ ( posedge clk or negedge rst)

        begin

        f2=f/10;

      

       if (!rst)

                     led4 = 7'b0000000;

              else begin

              case (f2)

 6'b000000 : led4 = 7'b100_0000;

 6'b000001 : led4 = 7'b111_1001;

 6'b000010 : led4 = 7'b010_0100;

 6'b000011 : led4 = 7'b011_0000;

 6'b000100 : led4 = 7'b001_1001;

 6'b000101 : led4 = 7'b001_0010;

 6'b000110 : led4 = 7'b000_0010;

 6'b000111 : led4 = 7'b111_1000;

 6'b001000 : led4 = 7'b000_0000;

 6'b001001 : led4 = 7'b001_0000;

              default : led4 =7'b100_0000;

              endcase

      

 if (k == 1)

       begin // 校准时

              if (blink) led4 <= 7'b1111111;

       end

end

end

always @ ( posedge clk or negedge rst)

        begin

        s1=s%10;

              if (!rst)

                     led5 = 6'b0000000;

              else begin

              case (s1)

 6'b000000 : led5 = 7'b100_0000;

 6'b000001 : led5 = 7'b111_1001;

 6'b000010 : led5 = 7'b010_0100;

 6'b000011 : led5 = 7'b011_0000;

 6'b000100 : led5 = 7'b001_1001;

 6'b000101 : led5 = 7'b001_0010;

 6'b000110 : led5 = 7'b000_0010;

 6'b000111 : led5 = 7'b111_1000;

 6'b001000 : led5 = 7'b000_0000;

 6'b001001 : led5 = 7'b001_0000;

              default : led5 =7'b100_0000;

              endcase 

   if (k == 1)

         begin // 校准时

               if (blink) led5 <= 7'b1111111;

         end

         end

end

always @ ( posedge clk or negedge rst)

        begin

        s2=s/10;

              if (!rst)

                     led6 = 7'b0000000;

              else begin

              case (s2)

 6'b000000 : led6 = 7'b100_0000;

 6'b000001 : led6 = 7'b111_1001;

 6'b000010 : led6 = 7'b010_0100;

 6'b000011 : led6 = 7'b011_0000;

 6'b000100 : led6 = 7'b001_1001;

 6'b000101 : led6 = 7'b001_0010;

 6'b000110 : led6 = 7'b000_0010;

 6'b000111 : led6 = 7'b111_1000;

 6'b001000 : led6 = 7'b000_0000;

 6'b001001 : led6 = 7'b001_0000;

              default : led6 =7'b100_0000;

              endcase

      

 if (k == 1)

       begin // 校准时

              if (blink) led6 <= 7'b1111111;

       end

end

end

endmodule

      

2.打印顶层电路图和主要模块的 HDL 文 件 。

实验 7 数字钟设计,fpga开发

 3.写出测试结果及分析

  `timescale 1ms / 1ms

module clocktb;

  reg clk, rst;

  wire[7:0]led1;

  wire[7:0]led2;

       wire[7:0]led3;

       wire[7:0]led4;

   wire[7:0]led5;

  wire[7:0]led6;

             

clock U1(.led1(led1),.clk(clk),.rst(rst),.led2(led2),.led3(led3),.led4(led4),.led5(led5),.led6(led6));

  initial begin

    {clk, rst} = 1'b0;

        #60000 rst=1'b1;

  

    forever #500 clk = ~clk;

  end

endmodule实验 7 数字钟设计,fpga开发

可用视频展示进位时的效果文章来源地址https://www.toymoban.com/news/detail-813706.html

到了这里,关于实验 7 数字钟设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于FPGA的可调数字钟设计

            在此特别感谢哔站up主 甘第 发布的FPGA企业实训课(基于FPGA的数字钟设计)教学视频,让一个FPGA小白开始了第一个FPGA设计开发流程。本设计参考了这个教学视频,在此基础上添加并修改了一些代码,完成了这个小小的不带任何功能的数字时钟。         初次学习

    2024年02月06日
    浏览(58)
  • 数电仿真实验-数字钟的设计

    1、掌握任意模值计数器的设计方法 2、掌握multisim仿真软件对电路进行仿真验证的方法。 3、掌握数字综合系统设计的方法,能够对整体电路进行功能测试及故障检测。

    2023年04月26日
    浏览(45)
  • FPGA-DE2-115-实验二-模块化多功能数字钟

    前言: 本文主要介绍了集成电路EDA这门课程的相关实验及代码。使用的软件是Quartus Ⅱ,该实验使用fpga芯片为cyclone IV EP4CE115F29C7。 本次实验我们需要实现生活中常见的电子手表的所有功能。 我们知道: 电子手表有五个功能,包括:时间显示功能,夜光模式功能,计时功能,闹钟功能

    2024年02月04日
    浏览(68)
  • 基于FPGA的多功能数字钟的设计

    摘要 数字钟是采用数字电路实现对时、分、秒数字显示的计时装置,是人们日常 生活中不可少的必需品。本文介绍了应用FPGA芯片设计多功能数字钟的•种方 案,并讨讨论了有关使用FPGA芯片和VHDL语言实现数字钟设计的技术问题。 数字钟、分频器、译码器、计数器、校

    2024年02月07日
    浏览(48)
  • 年轻人的第一个数字钟!适用于FPGA的数字钟Verilog实现

    因为闲。 当然也不是很闲,初衷是因为本科时上过的数电实验课最后的大作业就是在 FPGA 上实现一个数字钟,这个作业当时困扰了我们班的诸多同学(难以置信,我们只是学材料的弱小可怜又无助{{{(_)}}}。最终,大部分同学在 拷贝一位学长的代码 一位学长的帮助下顺利通过

    2024年02月11日
    浏览(44)
  • 【数字钟实验1】logisim

    数字逻辑大作业1.0,用logisim画数字钟(经典实验了属于是🧪) 开始做实验的时候也才刚刚学完时序逻辑那一章,计数器提都没提过(笑死我怀疑老师是特意这么安排的),而且logisim完全不会用,隧道什么的根本不懂【这也就导致了我后面没有力气做外观封装了,累了🤦‍♀️

    2024年02月11日
    浏览(41)
  • FPGA的数字钟带校时闹钟报时功能VHDL

    名称:基于FPGA的数字钟具有校时闹钟报时功能 软件:Quartus 语言:VHDL 要求:   1、计时功能:这是数字钟设计的基本功能,每秒钟更新一次,并且能在显示屏上显示当前的时间。   2、闹钟功能:如果当前的时间与闹钟设置的时间相同,则扬声器发出闹音。   3、校时设置:用户可

    2024年02月04日
    浏览(39)
  • 电子设计数字钟,multisim仿真·

    设计步骤(分模块叙述,并附上各模块与总体电路图) 1.计时模块,显示模块,调时模块设计 计数器模块由七片74LS160的芯片组成,两片为“秒”,两片为“分”,两片为“时”,还有一片作为“星期”,七个数码管显示器用来显示数字。‘秒’和‘分’采用60进制。通过异步

    2024年02月11日
    浏览(42)
  • 【verilog】多功能数字钟的设计

    掌握数字钟的工作原理。 掌握计数器级联构成更大模值计数器的方法。  能用verilog描述简单的时序逻辑电路。         多功能数字钟应该具有的基本功能有:显示时-分-秒、整点报时、小时和分钟可调等。首先要知道钟表的工作机理,整个钟表的工作应该是在1Hz信号的

    2024年02月04日
    浏览(56)
  • 【紫光同创盘古PGX-Lite 7K教程】——(盘古PGX-Lite 7K开发板/PGC7KD-6IMBG256第七章)数字钟实验例程

    本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处(www.meyesemi.com) 适用于板卡型号: 紫光同创PGC7KD-6IMBG256开发平台(盘古PGX-Lite 7K) 仅需一根TypcC线,插上即用,轻松操作。兼容下载器的一体版,配套资料丰富, 快速掌握国产

    2024年04月28日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包