1.软件版本

quartusii12.1

2.系统描述

系统的整个结构框图:

然后,设置控制输入有5个脚,分析功能如下所示:

i_Function_Controller=0;显示年月日

i_sel:选择需要调整的某位数字。

i_set:计数器,调整需要调整的位置的数字。

具体调整的时候,首先选择i_sel,按键按一下,需要调整的位置会移动一次,然后移动到需要调整的位置上,然后松开i_sel,然后按下i_set,调整显示的数字。

i_run:不使用

i_Function_Controller=1;显示时间,小时,分,秒

i_sel:

i_set:

i_run:

正常工作的时候,上面三个设置分别输入0,0,1

当需要调整时间的时候,设置i_run=0,然后设置i_sel,选择对应的需要调整的数字位,然后设置i_set,设置具体的值,其中秒位置,如果设置i_set。那么秒直接清零。

注意,因为时间部分计数到24小时的时候,年月日才被加1,所以在年月日这里i_run不使用,他是靠日期模块来驱动的。

i_Function_Controller=2;闹钟设置模块

i_sel:

i_set:

i_run:不使用,

通过设置i_sel,选择需要被设置的数字位,然后通过i_set进行闹钟的设置。

i_Function_Controller=3;秒表的控制

i_sel:清零

i_set:暂停

i_run:开始秒表计时

整体的结构如下所示:

3.部分源码

`timescale 1ns / 1psmodule tops(i_clk,i_rst,i_Function_Controller,i_sel,i_set,i_run,o_Num1,o_Num2,o_Num3,o_Num4,o_Num5,o_Num6,o_Num7,o_Num8,o_digit,o_en);input      i_clk;
input      i_rst;
input[1:0] i_Function_Controller;
input      i_sel;
input      i_set;
input      i_run;
output[3:0]o_Num1;
output[3:0]o_Num2;
output[3:0]o_Num3;
output[3:0]o_Num4;
output[3:0]o_Num5;
output[3:0]o_Num6;
output[3:0]o_Num7;
output[3:0]o_Num8;
output[7:0]o_digit;
output[7:0]o_en;wire Clock_mb;
wire Clock;clock_div clock_div_u(.i_clk    (i_clk), .i_rst    (i_rst), .i_sel    (1'b0), .o_clock1 (Clock_mb), .o_clock2 (Clock));//======================================================================
wire CLK_Year;
wire[3:0]ym_Num1;
wire[3:0]ym_Num2;
wire[3:0]ym_Num3;
wire[3:0]ym_Num4;
wire[3:0]ym_Num5;
wire[3:0]ym_Num6;
wire[3:0]ym_Num7;
wire[3:0]ym_Num8;
year_month year_month_u(.i_clk  (CLK_Year), .i_rst  (i_rst), .i_sel  (i_sel), .i_set  (i_set), .o_Num1 (ym_Num1), .o_Num2 (ym_Num2), .o_Num3 (ym_Num3), .o_Num4 (ym_Num4), .o_Num5 (ym_Num5), .o_Num6 (ym_Num6), .o_Num7 (ym_Num7), .o_Num8 (ym_Num8));//======================================================================
wire[3:0]tm_Num1;
wire[3:0]tm_Num2;
wire[3:0]tm_Num3;
wire[3:0]tm_Num4;
wire[3:0]tm_Num5;
wire[3:0]tm_Num6;
wire[3:0]tm_Num7;
wire[3:0]tm_Num8;
times times_u(.i_clk      (Clock), .i_rst      (i_rst), .i_run      (i_run), .i_sel      (i_sel), .i_set      (i_set), .o_Num1     (tm_Num1), .o_Num2     (tm_Num2), .o_Num3     (tm_Num3), .o_Num4     (tm_Num4), .o_Num5     (tm_Num5), .o_Num6     (tm_Num6), .o_CLK_Year (CLK_Year), .CNT        ());assign tm_Num7 = 4'd0;
assign tm_Num8 = 4'd0;//======================================================================
wire[3:0]be_Num1;
wire[3:0]be_Num2;
wire[3:0]be_Num3;
wire[3:0]be_Num4;
wire[3:0]be_Num5;
wire[3:0]be_Num6;
wire[3:0]be_Num7;
wire[3:0]be_Num8;beer beer_u(.i_clk  (Clock), .i_rst  (i_rst), .i_sel  (i_sel), .i_set  (i_set), .i_N1   (tm_Num3), .i_N2   (tm_Num4), .i_N3   (tm_Num5), .i_N4   (tm_Num6), .o_N1   (be_Num3), .o_N2   (be_Num4), .o_N3   (be_Num5), .o_N4   (be_Num6), .o_bear (o_bear));
assign be_Num1 = 4'd0;
assign be_Num2 = 4'd0;
assign be_Num7 = 4'd0;
assign be_Num8 = 4'd0;//======================================================================
wire[3:0]mb_Num1;
wire[3:0]mb_Num2;
wire[3:0]mb_Num3;
wire[3:0]mb_Num4;
wire[3:0]mb_Num5;
wire[3:0]mb_Num6;
wire[3:0]mb_Num7;
wire[3:0]mb_Num8;
miaobiao miaobiao_u(.i_clk   (Clock_mb), .i_rst   (i_rst), .i_run   (i_run), .i_pause (i_set), .i_clear (i_sel), .o_Num1  (mb_Num1), .o_Num2  (mb_Num2), .o_Num3  (mb_Num3), .o_Num4  (mb_Num4), .o_Num5  (mb_Num5), .o_Num6  (mb_Num6));
assign mb_Num7 = 4'd0;
assign mb_Num8 = 4'd0;//=====================================================================
reg[3:0]o_Num1;
reg[3:0]o_Num2;
reg[3:0]o_Num3;
reg[3:0]o_Num4;
reg[3:0]o_Num5;
reg[3:0]o_Num6;
reg[3:0]o_Num7;
reg[3:0]o_Num8;
always @(posedge i_clk or posedge i_rst)
beginif(i_rst)begino_Num1 <= 4'd0;o_Num2 <= 4'd0;o_Num3 <= 4'd0;o_Num4 <= 4'd0;o_Num5 <= 4'd0;o_Num6 <= 4'd0;o_Num7 <= 4'd0;o_Num8 <= 4'd0;end
else beginif(i_Function_Controller == 2'b00)begino_Num1 <= ym_Num1;o_Num2 <= ym_Num2;o_Num3 <= ym_Num3;o_Num4 <= ym_Num4;o_Num5 <= ym_Num5;o_Num6 <= ym_Num6;o_Num7 <= ym_Num7;o_Num8 <= ym_Num8;endif(i_Function_Controller == 2'b01)begino_Num1 <= tm_Num1;o_Num2 <= tm_Num2;o_Num3 <= tm_Num3;o_Num4 <= tm_Num4;o_Num5 <= tm_Num5;o_Num6 <= tm_Num6;o_Num7 <= tm_Num7;o_Num8 <= tm_Num8;            endif(i_Function_Controller == 2'b10)begino_Num1 <= be_Num1;o_Num2 <= be_Num2;o_Num3 <= be_Num3;o_Num4 <= be_Num4;o_Num5 <= be_Num5;o_Num6 <= be_Num6;o_Num7 <= be_Num7;o_Num8 <= be_Num8;               end        if(i_Function_Controller == 2'b11)begino_Num1 <= mb_Num1;o_Num2 <= mb_Num2;o_Num3 <= mb_Num3;o_Num4 <= mb_Num4;o_Num5 <= mb_Num5;o_Num6 <= mb_Num6;o_Num7 <= mb_Num7;o_Num8 <= mb_Num8;               end                 end
end======================================================================
//digit8 digit8_u(
//    .i_clk  (i_clk),
//    .i_rst  (i_rst),
//    .i_num1s (o_num1),
//    .i_num2s (o_num2),
//    .i_num3s (o_num3),
//    .i_num4s (o_num4),
//    .i_num5s (o_num5),
//    .i_num6s (o_num6),
//    .i_num7s (o_num7),
//    .i_num8s (o_num8),
//    .o_digit(o_digit),
//    .o_en   (o_en)
//    );endmodule

4.仿真结论

第一个模块:秒表模块:

这个模块是一个秒表计数器,技术最大到60分钟,最小为0.01秒。这个模块可以暂停,计时以及清零三个功能。

这个模块的仿真结果如下所示:

当输入的i_run信号为1的时候,秒表开始运行,从上面我们可以看到最高位Num6的计数结果,其余几位由于速度很快,所以被缩小了,看不清楚,当pause为1的时候,秒表停留在14:22:63,即14分22秒63.然后最后clear为高的时候,直接清零。

第二个模块:时间模块:

这个模块主要是一个以秒为计数单位的计数器,秒计数满60,分累加1,分计数满60的时候,小时累加1,小时计数满24的时候,产生一个时钟信号,用来确定日期加1。这个模块的仿真结果如下所示:

第三个模块:年月日模块:

这个模块主要是一个计数器,当计数器计数到24小时的时候,年月日模块计数器会自动加1,表示日期往前累积1日。并系统能够区分大小月和特殊的2月,以及年份的闰年或者非闰年。

这里我们分两个小模块来设计,一个是日月模块,一个是年模块,当计数器计数到12月31日的时候,那么年模块则进一。即年份增加一。

然后日月模块需要进行进行一个大的循环,技术满4年,则2月需要变为29天,否则为28天。

这里,月份的仿真效果如下所示:

从上面的仿真结果可知,当月份技术到12:31日的时候,会产生一个技术的时钟高电平,这个电平用来确定年份的计数器。

关于年份的计数。就是当月份慢12-31的时候,年份计数器加1.这个模块比较简单,具体仿真效果如下所示:

闹钟模块:

这个模块,通过键盘输入,设置需要闹钟的时间,然后当系统的时钟模块的分和小时和闹钟模块的预设值匹配的时候,该模块会驱动蜂鸣器发出闹钟声音。

闹钟模块,即通过设置闹钟的具体时间,然后后输入的时间进行对比,如果一直,那么输出一个高电平信号给蜂鸣器。发出声音。

数码管输出模块:

根据各个模块的数值,分别驱动8个数码管,进行数据的显示。这个模块只能在实际测试的时候使用,所以这里不给出仿真模块。

全局模块:

这个模块是对各个子模块的调用。

分频模块:

这个模块主要将系统的时钟进行分频,得到和实际时间相关的时钟频率,具体流程为通过设置一个是计数器,当计数器计数到一个预设值得时候,新的时钟频率输出1,其余时间输出0。通过这个过程,实现时钟的分频。

A02-46

基于FPGA的电子万年历设计相关推荐

  1. 基于FPGA的电子计算器设计(下)

    今天给大侠带来基于FPGA的电子计算器设计,由于篇幅较长,分三篇.今天带来第三篇,下篇,话不多说,上货. 导读 本篇介绍了一个简单计算器的设计,基于 FPGA 硬件描述语言 Verilog HDL,系 ...

  2. 基于FPGA的电子计算器设计(上)

    今天给大侠带来基于FPGA的电子计算器设计,由于篇幅较长,分三篇.今天带来第一篇,上篇,话不多说,上货. 导读 本篇介绍了一个简单计算器的设计,基于 FPGA 硬件描述语言 Verilog HDL,系 ...

  3. 基于单片机的电子万年历设计与实现

    基于单片机的电子万年历设计与实现 <嵌入式与单片机>课程设计报告 摘要 万年历作为日常生活中重要的时间显示设备,在人们的外出旅游和日常生活中都发挥了重要的作用.本文针对目前的万年历产品中存 ...

  4. 万年历设计单片机c语言,基于单片机的电子万年历设计(含电路图,Proteus仿真程序)...

    基于单片机的电子万年历设计(含电路图,Proteus仿真程序)(论文11000字,Proteus仿真程序) 摘    要 万年历作为日常生活中重要的时间显示设备,在人们的外出旅游和日常生活中都发挥了重 ...

  5. 基于单片机的电子万年历设计与制作系统(设计报告+开题中期报告+仿真文件+程序)

    摘要:本文设计实现了一种基于单片机的电子万年历设计与制作系统.该系统通过单片机的控制,实现了日期.时间和节假日等信息的显示,同时提供了闹钟.定时器和温度显示等功能.实验结果表明,该系统具有较好的稳定性 ...

  6. 画出c语言流程图 万年历,基于ARM7的电子万年历设计

    基于ARM7的电子万年历设计 成 绩 评 定 表 学生姓名 匡克新 班级学号 专 业 通信工程 课程设计题目 基于ARM7的电子万年历设计 评 语 组长签字: 成绩 日期 2015 年 7 月19 日 ...

  7. c语言万年历开题报告,基于单片机的电子万年历设计开题报告

    综述国内外对本课题的研究动态,说明选题的依据和意义: 现在是一个知识爆炸的新时代,新产品.新技术层出不穷,电子技术的发展更是日新月异.可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我 ...

  8. 基于FPGA的电子日历设计

    本设计是本学期的课程设计,也没有正式上过课,全凭自学摸索完成本课程设计,在摸索的过程中也看了csdn上众多博客,给予了本人很大的帮助,本人做完也前来分享.若有不对错误之处也请大家多多理解指正.本设计可 ...

  9. 电子万年历设计原理图+pcb+仿真+leil程序

    基于STM32的电子万年历设计\n\n摘 要\n\n随着社会的发展,我们生活中充满了电子产品,我们IT信息人才就是要解决问题的.我们日常生活中需要了解时间,日期温度等模拟量,那么我们平时也可以看手机, ...

最新文章

  1. 笔记 | PyTorch张量Tensor的一些必备操作
  2. 8年面试官问到:数据库自增 ID 用完了会咋样?
  3. 重磅图书——PHP MySQL开发新圣经
  4. centos 6.3安装libmcrypt-2.5.8不成功解决方案
  5. java多线程模拟实现12306售票
  6. java代码调用python_java调用python代码-阿里云开发者社区
  7. 【安全】安装phpLDAPadmin管理LDAP
  8. Ubuntu 配置vsftpd实现FTP服务器
  9. linux键盘修改工具,Linux 键盘映射的修改(Console)
  10. 极速PDF打开文件后工具栏不显示怎么办
  11. DS1302时钟芯片(SPI协议)
  12. 微信公众号首次关注自动回复图文信息
  13. 嵌入式系统上电,程序的运行过程
  14. java map put map_关于Java中有关Map中put方法理解
  15. 爬虫如何利用session方法保持登陆状态(selenium)
  16. 全国女人都当妓女的古代神秘国(转载)
  17. 微信小程序时间加法_微信小程序获取系统时间、时间戳、时间时间戳加减
  18. 嵌入式开发--CubeMX使用入门教程
  19. key redis 遍历_解惑:Redis的HSCAN命令中COUNT参数的quot;失效quot;场景
  20. Mac下Aria2安装与使用

热门文章

  1. 基于Self-Hosted模式搭建K8S可观测平台Pixie(内附填坑方法)
  2. 塔米狗2022年地方国企名单,总计816家企业
  3. 一个简单的JS(盒子移动)
  4. C语言二进制、八进制、十进制、十六进制深入探究
  5. 什么是论坛域名?论坛域名适用在哪些地方?
  6. 苹果手机无法验证应用怎么办_苹果关闭iOS 14.0.1验证,用户将无法降级_
  7. [iOS]仿微博视频边下边播之滑动 TableView 自动播放
  8. 计算机网络云技术是什么,什么是云计算 云计算的技术原理介绍【详解】
  9. 十个优质编程网站,程序员们赶紧看过来!
  10. homepod怎么设置为中文_HomePod终于能听懂中文了,但它真能搞定智能家居吗?