VHDL_电子时钟的设计

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告书

实验项目名称:数字电子钟的设计

实验项目性质:普通试验

所属课程名称:VHDL程序设计

实验计划学时:4学时

一、实验目的

掌握VHDL程序设计方法

二、实验内容和要求

能够实现小时(24进制)、分钟和秒钟(60进制)的计数功能

具有复位功能

功能扩展:具有复位、整点报时提示、定时闹钟等功能

在软件工具平台上,进行VHDL语言的各模块编程输入、编译实现和仿真验证。

三、实验主要仪器设备和材料

计算机

四、实验方法、步骤及结果测试

1、设计思路:

根据实验要求,将设计分为3个主要部分,时钟功能模块、整点报时模块和闹钟功能模块在时钟模块中,包括复位和预置数,分为时、分和秒三个进程,其主要思路如下:

秒钟的模块:设计一个60进制的计数器,以clk为其时钟信号,每60个clk后产生一个进位信号AOUT给分钟模块,作为分钟进程的响应信号。

分钟的模块:同理于秒钟的模块,设计一个60进制的计数器,以AOUT为其时钟信号,每60个AOUT后产生一个进位信号BOUT给小时模块,作为小时模块进程的响应信号。小时的模块:为24进制计数器,在分的进位信号BOUT的激发下计数,从0到23的时候产生一个信号COUT,全部清0,重新开始计时。

闹钟模块:同INPUT作为闹钟的设定,当时钟信号等于INPUT设定的时候,N为高电平,即是闹钟信号。

整点报时模块:用两个信号M,F,当M,F同时为0的时候,Z产生高电平,即是当做报时信号。

在时钟模块中,如有复位信号,则各小模块在复位信号的激励下进行各位置零;

共有5个进程。

2.程序代码:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY lyk IS

PORT(CLK,RST,EN,SET:IN STD_LOGIC;

INPUT:IN STD_LOGIC_VECTOR(10 DOWNTO 0);

HA,HB:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);

HC:OUT STD_LOGIC_VECTOR(4 DOWNTO 0);

Z,N:OUT STD_LOGIC

);

SIGNAL AOUT,BOUT,COUT :STD_LOGIC;

END ENTITY lyk;

ARCHITECTURE CLOCK OF lyk IS

SIGNAL M,F:STD_LOGIC_VECTOR(5 DOWNTO 0);

SIGNAL S:STD_LOGIC_VECTOR(4 DOWNTO 0);

BEGIN

PROCESS(CLK,RST,EN) ---------秒钟进程

V ARIABLE GOD:STD_LOGIC_VECTOR(5 DOWNTO 0);

BEGIN

IF RST='1'

THEN GOD:=(OTHERS =>'0');

ELSIF CLK'EVENT AND CLK='0'

THEN IF EN='1'

THEN IF GOD<59

THEN GOD:=GOD+1;

ELSE GOD:=(OTHERS =>'0');

END IF;

END IF;

END IF;

IF GOD=59

THEN AOUT <='1';

ELSE AOUT <='0';

END IF;

HA<=GOD;

M<=GOD;

END PROCESS;

PROCESS(AOUT,RST,EN) -----------------分钟进程

V ARIABLE DOG:STD_LOGIC_VECTOR(5 DOWNTO 0);

BEGIN

IF RST='1'

THEN DOG:=(OTHERS =>'0');

ELSIF AOUT'EVENT AND AOUT='0'

THEN IF EN='1'

THEN IF DOG<59

THEN DOG:=DOG+1;

ELSE DOG:=(OTHERS =>'0');

END IF;

END IF;

END IF;

IF DOG=59

THEN BOUT <='1';

ELSE BOUT <='0';

END IF;

HB<=DOG;

F<=DOG;

END PROCESS;

PROCESS(BOUT,RST,EN) ------------小时进程

V ARIABLE OGD:STD_LOGIC_VECTOR(4 DOWNTO 0);

BEGIN

IF RST='1'

THEN OGD:=(OTHERS =>'0');

ELSIF BOUT'EVENT AND BOUT='0'

THEN IF EN='1'

THEN IF OGD<23

THEN OGD:=OGD+1;

ELSE OGD:=(OTHERS =>'0');

END IF;

END IF;

END IF;

IF OGD=23

THEN COUT <='1';

ELSE COUT <='0';

END IF;

HC<=OGD;

S<=OGD;

END PROCESS;

PROCESS(F,S,SET,INPUT) -------------闹钟进程

BEGIN

IF SET='1' AND (S&F=INPUT)

THEN N<='1';

ELSE N<='0';

END IF;

END PROCESS;

PROCESS(M,F) -------整点报时进程

相关文档
最新文档