【verilog】多功能数字钟的设计

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

实验目的

  1. 掌握数字钟的工作原理。
  2. 掌握计数器级联构成更大模值计数器的方法。 
  3. 能用verilog描述简单的时序逻辑电路。

实验原理

        多功能数字钟应该具有的基本功能有:显示时-分-秒、整点报时、小时和分钟可调等。首先要知道钟表的工作机理,整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,但是需要注意的是,小时的范围是从0~23时。

        在实验中为了显示的方便,由于分钟和秒钟显示的范围都是从0~59,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD码)显示个位,对于小时因为它的范围是从0~23,所以可以用一个2位的二进制码显示十位,用4位二进制码(BCD码)显示个位。

        实验中由于七段数码管是动态扫描的方式显示,虽然时钟需要的是1Hz时钟信号,但是扫描却需要一个频率比较高的时钟信号。因此,可以输入一个高频的时钟信号(系统板上的10KHz时钟信号或者核心板上的50M时钟信号),并通过分频得到准确的1Hz时钟信号。

        对于整点报时功能,根据系统的硬件结构自由发挥来设计。可以设计为当进行整点的倒计时5秒时,让LED来闪烁进行整点报时的提示。也可以使用led点阵来显示整点报时。或者让数码管闪烁来进行整点报时。

实验内容

        本实验的任务就是设计一个多功能数字钟,要求显示格式为“小时-分钟-秒钟”,整点报时,报时时间为5秒,即从整点前5秒钟开始进行报时提示,LED、LED点阵或者数码管开始闪烁,过整点后,停止闪烁。时钟选择系统板时钟模块的10KHz或者核心板的50MHz时钟信号。要得到1Hz时钟信号,必须对系统时钟进行104次或者5*107次分频。调整时间的的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时,S2调整分钟,每按下一次,分钟增加一分钟。另外用S12按键作为系统时钟复位,复位后全部显示00-00-00。

        实验箱中用到的数字时钟模块、按键开关、LED、数码管与FPGA的接口电路,以及数字时钟源、按键开关、LED、数码管与FPGA的管脚连接可参考数字逻辑EDA实验箱《CVT-SOPC-IV用户手册》。

设计思路

        把电路分成时间计数器模块、数码管显示模块和状态机控制器模块。状态机控制器模块根据按键输入和时间计数器是否差5秒整点,从正常计时状态转换到调整时间状态或者整点报时状态,并发出对应的控制信号,完成调整时间计数器计数值或者整点报时的功能。数码管显示模块用于显示当前时间或者调整时间,可使用实验三中设计完成的模块。时间计数器由秒、分、时三个计数器级联构成,对1Hz的时钟进行计数,分别产生秒、分、时的计数值。

实验过程

  1. 打开QUARTUSII软件,新建一个工程。
  2. 建完工程之后,再新建一个verilog File,打开verilog编辑器对话框。
  3. 按照实验原理和自己的想法,在verilog编辑窗口编写verilog程序,用户可参照光盘中提供的示例程序。
  4. 编写完verilog程序后,保存起来。方法同实验一。
  5. 对自己编写的verilog程序进行编译并仿真,对程序的错误进行修改,直到完全通过编译和仿真。
  6. 编译仿真无误后,依照按键开关、数码管、LED灯与FPGA的管脚连接表或参照附录进行管脚分配。表4-1是示例程序的管脚分配表。分配完成后,再进行全编译一次,以使管脚分配生效。
  7. 用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。观察实验结果是否与自己的编程思想一致。

管脚分配

端口名

使用模块信号

对应FPGA管脚

说       明

CLK

系统板时钟或

核心板时钟

Pin_K7或Pin_G1

时钟为10KHZ

或50MHz

S1

按键开关S1

Pin_B12

调整小时

S2

按键开关S2

Pin_B11

调整分钟

RESET

按键开关S12

Pin_T1

复位

LED0

LED灯模块LED1

Pin_V10

整点倒计时

LED1

LED灯模块LED2

Pin_W8

LED2

LED灯模块LED3

Pin_W10

LED3

LED灯模块LED4

Pin_Y10

DISPLAY0

数码管A段

Pin_H15

时间显示

DISPLAY 1

数码管B段

Pin_H14

DISPLAY 2

数码管C段

Pin_H16

DISPLAY 3

数码管D段

Pin_N16

DISPLAY 4

数码管E段

Pin_P16

DISPLAY 5

数码管F段

Pin_R15

DISPLAY 6

数码管G段

Pin_R14

DISPLAY7

数码管DP段

Pin_T13

SEG-SEL0

位选DEL0

Pin_N17

SEG-SEL1

位选DEL1

Pin_P17

SEG-SEL2

位选DEL2

Pin_R16

Verilog代码

module YY911(Clk,Rst,S1,S2,Display,Sel,Spk);
    input Clk,Rst,S1,S2;
    output Spk;
    output[2:0] Sel;
    output[6:0] Display;
    reg Spk;
    reg[2:0] Sel;
    reg[6:0] Display;
    reg[13:0]Clk_Count1;
    reg Clk_1HZ;
    reg[2:0]Music_Count;
    reg[3:0]SECL,SECH;
    reg[3:0]MINL,MINH;
    reg[3:0]HOURL,HOURH;
    reg[3:0]Disp_Temp;
    always@(posedge Clk)
        begin
            if(Clk_Count1==9999)
                begin
                    Clk_Count1<=0;
                    Clk_1HZ<=~Clk_1HZ;
                end
            else 
                Clk_Count1<=Clk_Count1+1;
            end

    always@(posedge Clk_1HZ or negedge Rst)
        if(!Rst)
            begin
                SECL<=0;
                SECH<=0;
                MINL<=0;
                MINH<=0;
                HOURL<=0;
                HOURH<=0;
            end
        else
            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

always@(posedge Clk)
    begin
        Music_Count<=Music_Count+1;
        Sel<=Sel+1;
        if(MINH==5&&MINL==9&&SECH==5)
            begin
                if((SECL%2)==0)
                    Spk<=Music_Count[2];
                else Spk<=0;
            end
        else if(MINH==0&&MINL==0&&SECH==0&&SECL==0)
            Spk<=Music_Count[1];
        else Spk<=0;
    end

always@(Sel)
    begin
        case(Sel)
            3'b000:Disp_Temp=HOURH;
            3'b001:Disp_Temp=HOURH;
            3'b010:Disp_Temp=4'b1010;
            3'b011:Disp_Temp=MINH;
            3'b100:Disp_Temp=MINL;
            3'b101:Disp_Temp=4'b1010;
            3'b110:Disp_Temp=SECH;
            3'b111:Disp_Temp=SECL;
        endcase
    end

always@(Disp_Temp)
    begin
        case(Disp_Temp)
            4'b0000:Display=7'b0111111;
            4'b0001:Display=7'b0000110;
            4'b0010:Display=7'b1011011;
            4'b0011:Display=7'b1001111;
            4'b0100:Display=7'b1100110;
            4'b0101:Display=7'b1101101;
            4'b0110:Display=7'b0111101;
            4'b0111:Display=7'b0000111;
            4'b1000:Display=7'b1111111;
            4'b1001:Display=7'b1101111;
            4'b1010:Display=7'b1000000;
            default:Display=7'b0000000;
        endcase
    end
endmodule

仿真结果

【verilog】多功能数字钟的设计

【verilog】多功能数字钟的设计 

源码获取

多功能数字钟

实验总结

在做本次实验的过程中,我们了解了数码管的工作原理,掌握了计数器级联构成更大模值计数器的方法。虽然能够实现基本的功能,但是一开始的编译一直不能成功,后来请教同学,终于把正确的Verilog代码改了出来,这个过程是艰辛的,也是充满成就感的,在以后的学习过程中我们更应该注重平时的练习,巩固知识,这样才能将这种硬件课程学习的更好。实验太难,一个人太难完成,得依靠团队的力量来完成。文章来源地址https://www.toymoban.com/news/detail-440241.html

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

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

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

相关文章

  • EDA技术Verilog HDL语言完成数字钟设计

    Quartus Ⅱ安装包 链接:https://pan.baidu.com/s/12NbAX8J6XBZ7SQAxSj4H_A 提取码:cokm 主要内容: 1.数字钟系统具有时钟、清零和校准输入信号; 2.在系统时钟信号(1Hz)作用下,能显示时、分、秒; 3.时/分/秒计数器为24进制/60进制/60进制; 4.系统可以对时、分校准。校准信号有两

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

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

    2024年02月11日
    浏览(46)
  • 【数字电子技术课程设计】多功能数字电子钟的设计

    摘要 1  设计任务要求 2  设计方案及论证 2.1  任务分析 2.1.1 晶体振荡器电路 2.1.2 分频器电路 2.1.3 时间计数器电路 2.1.4 译码驱动电路 2.1.5 校时电路 2.1.6 整点报时/闹钟电路 2.2  方案比较 2.3  系统结构设计 2.4  具体电路设计 3  电路仿真测试及结论分析 3.1  电路仿真测

    2024年02月03日
    浏览(61)
  • 基于FPGA的多功能数字时钟设计报告

    作品基于intel Cyclone IV E EP4CE10F17C8 FPGA板卡,主要开发环境为Quartus Ⅱ,编程并实现了多功能温湿度电子钟。本作品在实现显示实时时间的基础上,设计并完成了设置闹钟、改变闹钟铃声、显示实时温度和实时湿度、基于以太网通信协议的实时视频传输等功能。在未设置闹钟时

    2024年02月05日
    浏览(51)
  • 实验 7 数字钟设计

    7.1 实 验 目 的 设计一个具有时功能和校的数字钟。 7.2 实 验 仪 器 与 器 材 1. EDA 开发软件 一 套 2.微机 一 台 3.实验开发系统 一 台 4.打印机 一 台 5.其他器件与材料 若 干 7.3 实 验 说 明 用 数码管显示小时 、 分 钟 和 秒钟。 三 个 按键用于时钟校准。 K1 用 与切换

    2024年01月22日
    浏览(41)
  • 基于FPGA的数字钟设计

    这篇文章通过VHDL代码实现数字钟的功能,绑定引脚就可以看到实际的效果。 代码运行成功,就可以实现了计时(年月日/时分秒)、秒表、倒计时、闹钟的全部功能。

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

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

    2024年02月11日
    浏览(43)
  • eda verilog 24h 制数字钟,显示时,分,秒,并可手动调整时和分(简单实用消抖)

    基本要求 :基于DE2-115开发板在Quartus13.1平台上用verilog设计一个24h制数字钟,要求能显示时,分,秒,并可手动调整时和分。 实验分析: 利用两个60进制,一个24进制模块,用1Hz分频模块给秒模块自动计时,以秒模块进位信号为分模块时钟,以分模块进位信号为时模块时钟,

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

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

    2024年02月04日
    浏览(42)
  • 【基于FPGA的可调数字钟设计】

    近年来由于美国对我国芯片行业的封锁,我国芯片行业迎来了一波发展的浪潮,FPGA这款小众而又实用的芯片也被划在制裁名单中。 (1)、能在开发板的数码管上显示时间功能 (2)、正常显示时、分、秒 (3)、4个按键:一个作为rst复位,1个作为数字钟调节时的切 换,1个

    2024年02月09日
    浏览(56)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包