EDA数字钟实验报告


EDA技术实验报告

专业:通信工程

学号:201010001823

班级:075102-10

姓名:包仁智

指导老师:王巍

实验一   3/8译码器的实现

一. 实验目的

1. 学习QuartusⅡ 的基本操作;

2. 熟悉教学实验箱的使用

3. 设计一个3/8  译码器;

4. 初步掌握VHDL语言和原理图的设计输入,编译,仿真和调试过程;

二. 实验步骤

学习QuartusⅡ 软件的使用方法:

1.进入QuartusⅡ环境;

2.单击File  菜单下的New Project Wizard: Introduction  按照向导里面的介绍新建一

个工程并把它保存到自己的路径下面。(注意路径当中不要有中文和空格)

3.单击File菜单下的New,选择VHDL File,后单击OK,创建一个后缀名为.vhd的文件。此vhd文件名必须与设计实体名相同。

4. 输入完成后检查并保存,编译。

5. 改错并重新编译;

6. 建立仿真波形文件并进行仿真。单击 File 菜单下的New,选择 Vector Waveform File单击OK,创建一个后缀名为*.vwf 的仿真波形文件,按照课件上的方法编辑输入波形,保存,进行仿真,验证仿真结果是否正确;

7. 选择器件及分配引脚,重新编译;

8. 根据引脚分配在试验箱上进行连线,使用LED进行显示;

9. 程序下载,观察实验结果并记录;

三.  仿真波形:

四.心得体会

通过此次课堂的亲自操作,大致了解了quartus的工作流程和操作步骤,对数字电路中的38译码器和半加器的原理有了新的认识,其中,全加器可以通过之前半加器的原理图生成文件以及与门和或门结合来实现。同时对VHDL语言的语法结构和设计方法也有了初步认识,虽然还不能独立编写程序但是却可以看懂程序了,对这门编程语言有浓厚的兴趣!

实验二 4位计数器和BCD七段显示译码器实验

一. 实验目的

1.了解和熟悉组合逻辑电路的设计方法和特点;

2. 掌握LED显示器的工作原理;

3.设计一个4位计数器和BCD七段显示的译码器,并在实验箱上面实现你的译码器。

二. 实验说明

LED数码显示器是数字系统实验里面经常使用的一种显示器件,因为它经常显示的是十进制或十六进制的数,所以我们就要对实验里面所用到的二进制数进行译码,将它们转换成十进制的或是十六进制的数。LED数码显示器分为共阴和共阳两种,本实验使用的是共阴的连接,高电平有效。输入信号为D0,D1,D2,D3,相应的输出8段为a、b、c、d、e、f、g、Dp。输入信号D0~D4分别接4位计数器。使数码管实现从1~F显示。

下图为译码器逻辑图,请按图进行连线。

其中A,B,C,D 接拨号开关,a,b,c,d,e,f,g,dp和使能端AN(高电平工作)接数码显示接口,管脚映射均为I/O口,映射后,通过拨号开关改变输入二进4 / 9 制码,则输出数码管上显示相应的数值。

 

在实验中要注意显示器上面每一段LED 要和程序里面的对应。

  三 仿真波形:

      

四.心得体会

   对于我们刚熟悉QuartusⅡ的新手来说,这是一个比较大的实现程序了。通过多VHDL语句的掌握以及真值表的理解来控制LED的七段显示译码。先设计一个4位计数器,使其可以从1计数到15.分别用1~F表示,然后通过译码器显示。通过这次实验进一步增进了我们对VHDL语言的了解,提高了发现错误及纠错的能力。

实验三. 数字钟

基本要求:

1、24小时计数显示(时分秒);

2、具有校时功能(时,分) ;

附加要求:

实现闹钟功能(定时,闹响);

提示功能(如校时的字符闪烁);

整点报时

分析:

输入端口:有一个setup设置状态键,一个adjust调整键,一个clk1时钟脉冲,一个复位clr键

输出端口:有一个speak闹铃,一个speaking整点报时,一个段选dout和一个位选selout。

控制模块: 数字钟要满足题目要求,必须有5种状态:正常计时、校小时、校分钟、闹铃设置小时、闹铃设置分钟,所以至少用三个二进制数字表示这5种状态,“000”、“001”、“010”、“011”、“100”,当setup为低电平时,状态在这五种状态之间转换,当setup为高电平时,就停在该状态,等待其他操作。主控组合进程程序:

分频模块:由于要LED动态显示,所以选择clk1输入的是1024HZ,分频出1HZ的clk用于正常计时的时钟脉冲,以1HZ为例,当计数到达511时就回到0,否则就自动加1,于是分频出1HZ。(用原理图形式包括在计数模块里)

计数模块:时钟是一种计数器,它兼有60进制和24进制两种计数模式。本次设计中,以1Hz时钟信号驱动“秒”位的计数,当“秒”位达到59时,若检测到时钟上升沿到来,则将“秒”位置零,同时产生一个时钟信号,驱动“分”位加一,到此“秒”位的计数过程即结束。“分”位和“时”位的计数过程与此类似,此处不再赘述。校时功能也在计数模块中,通过低位向高位进位和时钟脉冲相与得到

秒计数

分计数

小时计数

显示模块:可以运用上次实验的内容直接编写代码,该部分的主要功能是向数码管提供显示信号。本设计采用的是动态扫描方案,即利用人眼的视觉惰性,轮流为数码管的每一位提供显示信号。该部分需要输出10个信号,其中的7个用于驱动数码管(段选),另外三个用于数码管选择(位选)。

整点报时部分:该部分的功能与闹钟闹响的部分比较接近,区别在于闹响的时间不是由用户设定,而是事先确定并且不能改变的。

闹钟部分:该部分的主要内容是进行比较,当时钟时间与设定时间一置的时候,即调用发声部分,从而发出声响。波形图和报时类似。

三、总体方框图

本系统可以由计数模块、整点报时模块、闹铃模块、显示模块和一个顶层文件构成。采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。

 

.心得体会

EDA课程设计是对平时学习情况的检验,也是对动手能力的磨练。这次EDA课程设计,使我对EDA技术的认识又提高到了一个新的层次,现在能够较为熟练地使用QuterusII、利用VHDL语言编写简单实用的程序。这次EDA课程设计使我完整的体验了使用EDA完成具体设计的过程,这增强了我的动手能力。

课程设计开始之初,我通过网络和图书馆获得了许多资料,通过对这些资料的研究,我在设计过程中少走了许多弯路,同时也在一定程度上提升了自己搜集资料的能力。但是,仅仅依靠别人的资料,不可能解决自己面对的现实问题。在VHDL代码的编写过程中,我不断的进行调整和补充,同时,还积极向指导老师和同学们请教,在较短的时间内编写出了比较满意的程序。

但是在编写一些复杂的程序时,遇到了不少问题,特别是多个功能的组合,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误,排除困难后,程序编译就通过了,心里终于舒了一口气。在波形仿真时,虽然编译通过了,但是如果波形显示不正确,我就知道,程序的逻辑表达有错误,然后回头去检查程序的逻辑表达,经过细心检查之后,总是能发现这样那样的错误,这也是我们平时需要注意的地方。在连接引脚的时候,要注意一些向量的引脚次序问题,比如说bcd七段显示器里的输出,第一次没接对,接反了,反过来接那7个点,就显示正确了。

 

第二篇:EDA课程设计数字钟

北 华 航 天 工 业 学 院

《EDA技术综合设计》

课程设计报告

报告题目:  利用VHDL语言进行数字钟的设计  

作者所在系部:     电子工程系              

作者所在专业:       自动化                

作者所在班级:       B08221                

作 者 姓 名 :       刘一霖                 

指导教师姓名:       崔瑞雪                 

完 成 时 间 :       20##-11-30                

要(重写摘要)

设计一个数字钟:

要求:

1、具有时,分,秒,计数显示功能,以24小时循环计时。

2、具有清零,调节小时、分钟功能。

3、具有整点报时功能,整点报时的同时LED灯花样显示。

原理:

在同一芯片EPF10K10上集成了如下电路模块:

1.时钟计数: 秒——60进制BCD码计数,分——60进制BCD码计数, 时——24进制BCD码计数,同时整个计数器有清零,调分,调时功能,在接近整数时间能提供报时信号。

2.具有驱动8位八段共阴扫描数码管的片选驱动信号输出和八段字形译码输出。

3.蜂鸣器在整点时有报时驱动信号产生。

4.LED灯在整点时有花样显示信号产生。

关键词:

EDA、可编程逻辑器件、计数器、译码器


目  录(页码不对)

一.概述-----------------------------------------------------------------------------5

二.各模块设计--------------------------------------------------------------------5

⒈秒计数器--------------------------------------------------------------------------5

⒉分计数器--------------------------------------------------------------------------7

⒊小时计数器-----------------------------------------------------------------------8

⒋报警模块--------------------------------------------------------------------------9

⒌时间数据扫描分时选择模块文本-------------------------------------------12

⒍译码器----------------------------------------------------------------------------13

⒎程序下载及硬件调试----------------------------------------------------------15

三.心的体会----------------------------------------------------------------------15

课程设计任务书

一.概述:设计一个数字钟。

要求:

1、具有时,分,秒,计数显示功能,以24小时循环计时。

2、具有清零,调节小时、分钟功能。

3、具有整点报时功能,整点报时的同时LED灯花样显示。

原理:

在同一芯片EPF10K10上集成了如下电路模块:

1.时钟计数:   秒——60进制BCD码计数,分——60进制BCD码计数, 时——24进制BCD码计数,同时整个计数器有清零,调分,调时功能,在接近整数时间能提供报时信号。

2.具有驱动8位八段共阴扫描数码管的片选驱动信号输出和八段字形译码输出。

3.蜂鸣器在整点时有报时驱动信号产生。

4.LED灯在整点时有花样显示信号产生。

二.各模块设计

⒈秒计数器模块:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity second is

port(clk,reset,setmin:in std_logic;

enmin:out std_logic;

qh:buffer std_logic_vector(2 downto 0);

ql:buffer std_logic_vector(3 downto 0)

);

end second;

architecture fun of second is

signal enmin_1,enmin_2:std_logic;

begin

enmin_2<=(setmin and clk);

enmin<=(enmin_1 or enmin_2 );

process(clk,reset,setmin)

begin

if(reset='0')then

ql<="0000";qh<="000";

elsif(clk'event and clk='1')then

If(ql=9)then

ql<="0000";

if(qh=5)then

qh<="000";

enmin_1<='1';

else qh<=qh+1;

end if;

else ql<=ql+1;

enmin_1<='0'after 100 ns;

end if;

end if;

end process;

end fun;

⒉分计数器模块:

    library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity minute is

  port(

  clk,clk1,reset,sethour:in std_logic;

  enhour:out std_logic;

  qh:buffer std_logic_vector(2 downto 0);

ql:buffer std_logic_vector(3 downto 0));

end entity;

architecture fun of minute is

signal enhour_1,enhour_2:std_logic;

  begin

  enhour_2<=(sethour and clk1);

  enhour<=(enhour_1 or enhour_2);

  process(clk,reset,sethour)

  begin

  if(reset='0')then

  qh<="000";ql<="0000";

  elsif(clk'event and clk='1')then

If(ql=9)then ql<="0000";

if(qh=5)then qh<="000";

enhour_1<='1';

else qh<=qh+1;

end if;

else ql<=ql+1;

enhour_1<='0' after 10 ns;

end if;

end if;

end process;

end fun;

⒊小时计数器模块:

    library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity hour is

port(clk,reset:in std_logic;

qh:buffer std_logic_vector(1 downto 0);

ql:buffer std_logic_vector(3 downto 0));

end entity hour;

architecture fun of hour is

begin

process(clk,reset)

begin

if(reset='0')then

qh<="00";ql<="0000";

elsif(clk'event and clk='1')then

if(qh=2 and ql=3)then

qh<="00";ql<="0000";

elsif(ql=9)then

ql<="0000";qh<=qh+1;

else ql<=ql+1;

end if;

end if;

end process;

end fun;

⒋报警模块:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity alert1 is

port(clk:in std_logic;

  speak:out std_logic;

  dain1:in std_logic_vector(2 downto 0);

  dain2:in std_logic_vector(3 downto 0);

  lamp:out std_logic_vector(2 downto 0)

);

end alert1;

architecture fun of alert1 is

signal count:std_logic_vector(1 downto 0);

signal count1:std_logic_vector(1 downto 0);

begin

process(clk)

begin

speak<=count1(1);

if(clk'event and clk='1')then

if(dain2="0000"and dain1="000")then

if(count1>="10")then

count1<="00";

else count1<=count1+1;

end if;

end if;

end if;

end process;

process(clk)

begin

if(clk'event and clk='1')then

if(dain2="0000"and dain1="000")then

if(count<="10")then

if(count="00")then

lamp<="001";

elsif(count="01")then

lamp<="011";

elsif(count="10")then

lamp<="111";

end if;

count<=count+1;

else count<="00";

end if;

end if;

end if;

end process;

end fun;

⒌时间数据扫描分时选择模块文本:

    library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity seltime is

   port(clk1,reset:in std_logic;

  dp:out std_logic;

  daout:out std_logic_vector(3 downto 0);

  sel:buffer std_logic_vector(2 downto 0);

  sec1,min1,hou1:in std_logic_vector(3 downto 0);

  sec2,min2:in std_logic_vector(2 downto 0);

  hou2:in std_logic_vector(1 downto 0)

);

end seltime;

architecture fun of seltime is

begin

process(clk1,reset)

begin

if(reset='0')then

sel<="000";

elsif(clk1'event and clk1='1')then

if(sel>="101")then

sel<="000";

else sel<=sel+1;

end if;

end if;

case sel is

when"000"=>daout<=sec1;dp<='0';

when"001"=>daout(2 downto 0)<=sec2; daout(3)<='0';dp<='0';

when"010"=>daout<=min1;dp<='1';

when"011"=>daout(2 downto 0)<=min2; daout(3)<='0';dp<='0';

when"100"=>daout<=hou1; dp<='1';

when others=>daout(3 downto 2)<="00"; daout(1 downto 0)<=hou2;dp<='0';

end case;

end process;

end fun;

⒎译码器文本

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity deled is

port (num:in std_logic_vector(3 downto 0);

  led:out std_logic_vector(6 downto 0));

end deled;

architecture fun of deled is

begin

--abcdefg

with num select

led<="1111110" when "0000",

     "0110000" when "0001",

     "1101101" when "0010",

     "1111001" when "0011",

         "0110011" when "0100",

"1011011" when "0101",

         "1011111" when "0110",

     "1110000" when "0111",

     "1111111" when "1000",

     "1111011" when "1001",

     "0000000" when others;

end fun;

三.程序下载及硬件调试

将编译仿真好的文件现在到实验箱上的FPGA芯片中进行硬件调试,同过硬件实际的运行情况来验证软件的正确性,以达到最终目的。

四.心得体会

       通过本次实验我学会了使用maxplus-Ⅱ进行EDA的设计过程及方法,掌握了VHDL语言的设计思路,学会了软硬件相结合的调试方法。在编写程序时我发现了自己的许多不足,通过与同学的讨论最终解决的问题,也使我懂得了团队工作的总要性,在今后的学习生活中我会不断的要求自己使自己的综合素质得到提高。

相关推荐