一.引言

E D A技术在当今社会为现代电子设计领域提供了可能性,这也是E D A 技术飞速发展的理由。现如今,E D A技术不再是某一门课程的分支,也不是某种新的技术,而是一门综合性学科。让计算机软件与计算机硬件相结合,他代表了电子设计技术的不断发展方向。

在当今社会EDA技术为现代电子设计领域提供了可能性,这也是E D A 技术飞速发展的理由。现如今,E D A技术不再是某一门课程的分支,也不是某种新的技术,而是一门综合性学科。通过计算机软件与计算机硬件相结合,代表了电子设计技术的不断发展方向。

数字钟的应用十分的广泛,每一个家庭,车站,教室等公共场所都应该会有数字钟的身影,给人们带来极大的方便和快捷。

随着科技的进步和人们生活水平的提高,我们对于时钟的要求也在不断的提高。现在时钟已经不再是一个简单的报时工具,在很多特殊的时刻我们还需要用到时钟的其他功能。在这种新形势下,制作数字电子钟成为时代的主流设计和发展方向。数字钟是利用数字电路实现时、分、秒的计时装备,较以往的机械钟具有更强的直观性和准确性,并且延长了时钟的使用寿命。

二.设计目的

12进制数字钟的计时装置的周期是12小时,显示满刻度为11小时59分59秒。

制作数字钟是为了了解数字钟的工作原理和工作过程,能够自主独立的编写和修改各种进制数字钟的语言。熟练使用EDA课程中使用的软件和将所学到的知识理论应用于实践中。并能因为此次实验对EDA程序设计产生浓厚兴趣,因为只有真正喜欢上这门课程,才能在未来的学习中不断进步。

三.实验内容

利用M A X+p l u s II 10.2软件设计12进制数字钟。

四.实验原理和思路

由于我设计的是12进制数字钟,所以在设计过程中我让数字钟在“时”上从0-11循环,在“分”和“秒”上依旧实现0-59的循环。

在《EDA技术与应用》这篇课本p205页中我们可以见到60进制的计数器,我设计的12进制数字钟原理其实和60进制计数器是一样的,不同之处只是12进制是十位在0时,个位实现0-9的循环,十位等于1时,个位实现0-1的循环。

五.数字钟模块设计

5.1“时”程序段设计

过程如下:

1.打开M A X+p l u sⅡ10.2,新建 Text Editor file

2.编写程序如图:

3.点击 ctrl + shift + j 将设计项目设置成工程文件,注意类型为.vhd。

4.点击M A X + p l u s Ⅱ下的compiler进行编译

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity shi is
port(clk,rst,ena,load:in std_logic;d:in std_logic_vector(7 downto 0);ah:buffer std_logic_vector(3 downto 0);a1:buffer std_logic_vector(3 downto 0));
end shi;
architecture behave of shi is
begin
process(clk,rst)
begin
if(rst='1')then
ah<="0000";
a1<="0000";
elsif(clk'event and clk ='1')thenif(load ='1')thenah<= d(7 downto 4);a1<= d(3 downto 0);elsif(ena='1')thenif(ah<2) then             if(a1=9) then                  a1<="0000";               ah<=ah+1;        elsea1<=a1+1;           end if;elseif(a1=3)then a1<="0000";            else ah<="0000";           a1<=a1+1;              end if; end if; end if;
end if;
end process;
end behave;

接下来是“分”设计和“秒”设计原理和“时”是一样的。

5.2“分”程序段设计

“分”的设计过程同上,我们要知道上一个“时”时0-33之间循环。“分”不同在于0-59之间循环。我们仅仅要修改一小部分程序。

用和“时”一样的编写方法编写“分”程序。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity fen is
port(clk,rst2,ena2,load2:in std_logic;rco2:out std_logic;d2:in std_logic_vector(7 downto 0);ah2:buffer std_logic_vector(3 downto 0);a12:buffer std_logic_vector(3 downto 0));
end fen;
architecture behave2 of fen is
begin
rco2<='1' when (ah2= "0101" and a12="1001" and ena2 ='1')else'0';
process(clk,rst2)
begin
if(rst2='1')then
ah2<="0000";
a12<="0000";
elsif(clk'event and clk ='1')thenif(load2 ='1')thenah2<= d2(7 downto 4);a12<= d2(3 downto 0);elsif(ena2='1')then             if(a12=9) then                  a12<="0000";                       if(ah2=5)thenah2<="0000";elseah2<=ah2+1;end if;elsea12<=a12+1;end if;end if;
end if;
end process;
end behave2;

5.3“秒”程序段设计

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity miao is
port(clk,rst1,ena1,load1:in std_logic;rco1:out std_logic;d1:in std_logic_vector(7 downto 0);ah1:buffer std_logic_vector(3 downto 0);a11:buffer std_logic_vector(3 downto 0));
end miao;
architecture behave1 of miao is
begin
rco1<='1' when (ah1= "0101" and a11="1001" and ena1 ='1')else'0';
process(clk,rst1)
begin
if(rst1='1')then
ah1<="0000";
a11<="0000";
elsif(clk'event and clk ='1')thenif(load1 ='1')thenah1<= d1(7 downto 4);a11<= d1(3 downto 0);elsif(ena1='1')then             if(a11=9) then                  a11<="0000";                       if(ah1=5)thenah1<="0000";elseah1<=ah1+1;end if;elsea11<=a11+1;end if;end if;
end if;
end process;
end behave1;

秒”程序和“分”程序设计是一样的,都可以当成60进制计数来编译,在课本中有详细的介绍,我可以参考课本,不断改进我所编写的程序。

5.4七段显示译码器程序段设计

library ieee;
use ieee.std_logic_1164.all;
entity shuma is
port(shu:in std_logic_vector(3 downto 0);
led:out std_logic_vector(6 downto 0));
end shuma;
architecture yima of shuma is
beginprocess(shu)begincase shu(3 downto 0) iswhen"0000" =>led<="0111111";when"0001" =>led<="0000110";when"0010" =>led<="1011011";when"0011" =>led<="1001111";when"0100" =>led<="1100110";when"0101" =>led<="1101101";when"0110" =>led<="1111101";when"0111" =>led<="0000111";when"1000" =>led<="1111111";when"1001" =>led<="1101111";when others => null;end case;end process;
end yima;

六.数字钟的系统设计

建立完数字钟的“时”“分”“秒”三部分的程序描述,接下来就是设计顶层。我们可以通过点击file下的create default symbol 将我们所编写的三个程序进行封装。将“时”“分”“秒”三个程序组成电路。

1.打开原理图编译器,完成数字钟的设计。

设计图如下:

2.点击ctrl+shift+j将设计项目设置成工程文件。

3.完成数字钟编译.

  • 数字钟仿真调试过程

7.1“时”计数器

继续上面编译继续仿真,过程如下:

5.新建一个 Waveform Editor file ,准备仿真

6.点击NODE下的Enter Nodes form SNF,在弹出的窗口中点击list,这时将左窗口列出的设计所有信息节点利用中间的=>转移到右边

7.设置结束时间和时钟脉冲,点击ctrl+shift+j将设计项目设置成工程文件。

8.开始仿真

在时计数器的clk端口加入一个 1000ns的时钟信号;reset为高电平;进行仿真

“时”计数器在0-33之间循环,符合之前设计的程序,由此可见,我前面设计的程序是没有问题的。

                                                                7.2“分”计时器

7.3“秒”计时器

7.4七段显示译码器

7.5系统总调试

由最终的仿真结果可以看出我做的数字钟是正确的,当“时”到11时跳转为00,重新开始执行程序,构成循环。“分”和“秒”都是为59时跳转。ena,load,reset是使能端,这三个端口为1时,程序执行。为0时,清零。

  • 心得体会

8.1数字钟存在的问题

1 .数字钟采用的是静态译码显示方式,一个数码管需要8根I/O线,八个数码管,会占用很多的I/O线,导致I/O口资源不够用,同时会是成本加大,LED数码管的功耗较大,热量高,浪费资源。

2.随着累加计数的增加,延时的误差会一点点的累加,累加次数越多,技术误差就会越明显。

8.2数字钟改进意见

  1. 建议把LED静态显示改成动态显示,动态显示方式是通过一位一位地轮流点亮每位LED数码管,即每个数码管的位选被轮流选中,多个数码管公用一组段选,片选数据仅对位选选中的数码管有效。对于每一位数码管来说,每隔一段时间点亮一次。显示器的亮度通过导通电流,点亮时间和间隔时间的控制。通过调整电流和时间参数,可以既保证亮度,又保证显示。
  2. 增加自动校时模块,每隔一段时间对累加计数器进行校时,减少累加计数器误差的积累。

8.3数字钟开发过程中遇到的问题及解决的办法

刚开始做数字钟这个实验时,我认为这个实验做起来会很轻松,脑子中一下子出现了许多设计念头,刚开始的时候我认为的数字钟无非就是三个计数器分层累加实现计数,当听完安老师讲解之后,我发现数字钟需要设计复位,预置,使能的功能,在顶层如何将三级计数器连接嵌套问题 ,数码管如何显示问题都没有细细考虑到。

对于数字钟的复位,预置,使能的功能,通过对EDA这门课程的学习,根据参考书上的计数器例题,学习掌握了计数器的复位,预置,使能各种功能的嵌套,并通过if语句将各功能分层嵌套起来,最终实现了计数器各功能的实现和运用。

对于三级计数器如何在顶层连接问题,通过请教老师,一共有两种方式可以实现顶层的连接,第一种就是每一级的进位给到下一级的CLK上,通过每一级的进位,就会使下一级的CLK产生一个矩形脉冲,下一级通过产生的矩形脉冲进行计数,当每产生一个进位,下一级就会计数一次,以此循环,完成三级累加计数器。第二种是通过每一级的进位给到下一级的使能,通过将三级的CLK端口并联,构造分频器原理,就会使下一级的使能为1,计数一次,当每产生一个进位,下一级的使能为1,计数一次,以此循环,完成三级累加计数器。

对于数码管如何显示问题,通过译码器可以有两种实现方式,分别为静态显示和动态显示。静态显示主要的优点是显示稳定,在发光二极管导通电流一定的情况下显示器的亮度大,系统运行过程中,在需要更新显示内容时,CPU才去执行显示更新子程序,这样既节约了CPU的时间,又提高了CPU的工作效率。动态显示优点就是一位一位地轮流点亮各位显示器,对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。调整电流和时间参数,可以实现亮度较高、较稳定地显示、如果显示器的位数不大于8位,则控制显示器公共极点位只需一个8位口,控制各位显示器所显示的字形也需一个8位口。通过比较,我选择的是静态显示译码方式。

通过本次实验,我不仅学到了关于EDA的许多专业知识,同时也让我感觉到了思考的重要性。

不管是现在还是未来,我们不要遇到一点困难就退缩,就去向老师同学寻求帮助,自己是自己最好的老师,只有我们靠自己的不断修改出正确结果,才会对这个只是掌握的更加透彻,我们不要惧怕犯错,只有不断的犯错,从错误中发现问题,改正错误,才能取得进步通过思考、发问、自己解惑并动手、改进的过程,才能真正的完成课题。

  • 参考文献

EDA技术与应用(第2版) 清华大学出版社

V H D L实用教程    电子科技大学出版社

基于FPGA的数字钟设计实验报告相关推荐

  1. [SystemVerilog] 基于 FPGA 的数字钟设计

    本文使用 SystemVerilog 语言在 Basys3 开发板上实现了带时钟.倒计时.闹钟.秒表.日期.日期/时间设定功能的数字钟. 整体思路上,为避免除法器的使用,每个数位设置一个寄存器.有五套 ...

  2. 基于FPGA的数字时钟设计

    基于FPGA的数字时钟设计 芯片与开发板 技术指标 1.具有正常的日时分秒技术显示功能,用七个数码管分别显示日,时,分,秒. 2.有按键校日,校时,校分,校秒. 3.利用led模拟整点报时功能. 4. ...

  3. 基于FPGA的数字钟(四)——时钟控制模块

    一.需求分析 时钟控制模块,需要生成秒,分,时三路信号,需要有外部信号能对其进行控制. 按照正常时钟逻辑: 秒满60归零: 分在秒满60时进1,分满60归零: 时在分满60时进1,时满24归零. 外部 ...

  4. 基于FPGA的数字钟——(三)时钟显示模块(数码管)

    基于FPGA的数字钟--(三)数码管显示模块 一.硬件原理 本设计中使用 6 个共阳数码管,可以显示 6 个数字(包含小数点) .电路用 PNP管来反向驱动并且控制列扫描信号来选择哪个数码管.而且所有 ...

  5. 大倾角DJC50DJC波状挡边输送机 轮式移动机器人结构设计 单片机定时闹钟设计 基于单片机的数字钟设计 圆皮带输送机 悬吊式升降机 倍速链条输送机…设计

    汽车输送线改装的链条机 DTII(A)B1000车式拉紧皮带机 翻斗上煤机示意图 180m2烧结机总装配图(左式)2清理后 MSB20dsz-60加湿机(cad2004) 机箱电源生产线方案图 DTⅡ ...

  6. CASE_02 基于FPGA的数字钟万年历

             该系类博客序言和资源简介可浏览该博客:PREFACE FPGA经典案例序言 快速了解该系列博客的内容与可用 资源. 目录 1 简介 2 数字钟计数方案 2.1 计数方案一 2.2 计 ...

  7. 基于FPGA的数字秒表设计

    VHDL实现数字秒表 1设计要求 (1) 能对0秒-59分59.99秒范围进行计时,显示最长时间是59分59秒: (2) 计时精度达到10ms: (3) 设计复位开关和启停开关,复位开关可以在任何情况 ...

  8. 基于FPGA的数字秒表设计(含程序)

    目录 题目要求: 时钟部分程序如下: 工程RTL原理图 全部模块图 题目要求: (1)利用6位数码管显示时钟分钟秒钟: (2)具备启停功能: (3)具备按键消抖功能: (4)具备按键时间修改功能. 单 ...

  9. 基于FPGA的数字钟 ——最终实现

    我手里只有一块黑金的AX4010板子,板载的是Altera公司的Cyclone IV E系列 EP4CE10F17C8芯片.亲测成功,目前没发现bug 自己敲代码也不容易啊,虽说工程很简单,但所有代码 ...

最新文章

  1. 一个好的网站,应该用什么样的空间or服务器?建站基础知识普及
  2. C# 全选中数字文本框内容
  3. 一般函数指针和类(非MFC)的成员函数指针
  4. python智能办公系统_用 Python 自动化办公能做到哪些有趣或有用的事情?
  5. Python基础day06【匿名函数lambda、列表生成式、集合set、文件读写】
  6. The Common Language Runtime (CLR)
  7. 使用Area(区域)会遇到的问题
  8. 【转】WPF从我炫系列4---装饰控件的用法
  9. 怎么用vc采集ni卡数据_8bit,200MS/s 低成本模拟输入高速采集卡FCFR-PCI9850
  10. python QTreeWidgetItem下面有几个子tree_python-nlp ch1笔记:nlp的基础应用、高级应用、python优势、nltk环境搭建...
  11. halcon学习笔记——图像的预处理
  12. HTML网页设计制作大作业(div+css)~ 环境保护(5个页面)
  13. 装修后才知道的79件事,无数网友真金白银砸出来...
  14. 随机抽样java_java实现从一个群体中随机抽样一定数量样本
  15. 【正点原子MP157连载】第二十八章 A7和M4联合调试-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南
  16. 使用python在已存在的excel数据表中的特定位置写入数据
  17. JS/Jquery版本的俄罗斯方块(附源码分析)
  18. 电子科技大学计算机科学与技术专业排名,电子科技大学最好的专业是什么(10大热门专业排名)...
  19. 打领带全教程(附领带与衬衣搭配技巧)
  20. [Swin Transformer] Swin Transformer: HierarchicalVision Transformer using Shifted Windows

热门文章

  1. xp电脑对ajax的兼容性,xp系统iE11兼容性问题的详细技巧
  2. 自动生成python接口文档_Django自动生成Swagger接口文档
  3. 产品公司解决方案、解决方案公司解决方案,可能你做了一辈子IT你也不知道...
  4. js 递归创建文件夹
  5. 2021年3月7日 蚂蚁金服的OceanBase Java后端开发实习面经(一面)
  6. Matlab之图像平移(七)
  7. 【历史上的今天】10 月 12 日:C 语言之父逝世;西门子诞生;乔布斯推出 NeXT 电脑
  8. java 仓库类_仓库类型和功能分别是什么?
  9. as3 同屏1000+动画,不掉帧。解决方案。
  10. 路由器R473g虚拟服务器设置,TL-R473G上网方式配置详解 路由器