基于FPGA的数字钟设计

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

南昌大学实验报告

学生姓名:邓儒超学号:6100210045 专业班级:卓越通信101 实验类型:□验证□综合□√设计□创新实验日期:2012.10.28 实验成绩:

实验三数字钟设计

一、实验目的

(1)掌握数字钟的设计

二、实验内容与要求

(1)设计一个数字钟,要求具有调时功能和24/12进制转换功能

(2)进行波形仿真,并分析仿真波形图;

(3)下载测试是否正确;

三、设计思路/原理图

本次数字钟的设计采用了自顶向下分模块的设计。底层是实现各功能的模块,各模块由vhdl语言编程实现:顶层采用原理图形式调用。其中底层模块包括秒、分、时三个计数器模块、按键去抖动模块、按键控制模块、时钟分频模块、数码管显示模块,其中,时计数器模块又包括24进制计数模块、12进制计数模块、24/12进制转换模块。设计框图如下:

由图可以清晰的看到数字钟系统设计中各功能模块间连接关系。系统时钟1KHZ经过分频后产生1秒的时钟信号,1秒的时钟信号作为秒计数模块的输入信号,秒计数模块产生的进位信号作为分计数模块的输入信号,分计数模块的进位信号作为时计数模块的输入信号。秒计数模块、分计数模块、时计数模块的计数输出分别送到显示模块。由于设计中要使用按键进行调节时间,而按键的动作过程中存在产生得脉冲的不稳定问题,所以就牵扯到按键去抖动的问题,对此系统中设置了按键去抖动模块,按键去抖动模块产生稳定的脉冲信号送入按键控制模块,按键控制模块根据按键的动作对秒、分、时进行调节。

原理图如下:

四、实验程序(程序来源:参考实验室里的和百度文库的稍加改动,还有自己写的)

1、分频模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY fenpin IS

PORT(CLK:IN STD_LOGIC;

CLK1:OUT STD_LOGIC);

END fenpin;

ARCHITECTURE behav OF fenpin IS

SIGNAL X,CNT:STD_LOGIC_VECTOR(11 DOWNTO 0);

BEGIN

P1:PROCESS(CLK)

BEGIN

X<="001111101000";--1000分频

IF CLK'EVENT AND CLK = '1' THEN CNT<=CNT+1;

IF CNT=X-1 THEN CLK1<='1';CNT<="000000000000";

ELSE CLK1<='0';

END IF;

END IF;

END PROCESS;

END behav;

2、60进制计数器(秒、分计数器)模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY count60 IS

PORT(EN,RST,CLK1: IN STD_LOGIC;

Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

COUT: OUT STD_LOGIC);

END count60;

ARCHITECTURE behav OF count60 IS

SIGNAL J : STD_LOGIC_VECTOR(7 DOWNTO 0); --8位BCD计数值SIGNAL GW,SW : STD_LOGIC_VECTOR(3 DOWNTO 0);--计数器的个,十BEGIN

P2:PROCESS(EN,RST,CLK1)

BEGIN

GW<=J(3 downto 0);

SW<=J(7 downto 4);

IF RST='1' THEN J<=(others=>'0');

ELSIF CLK1'EVENT AND CLK1='1' THEN

IF EN='1' THEN

IF J<"01011001" THEN

IF GW=9 THEN --个位为9时加7调整

J<=J+7;

ELSE J<=J+1;

END IF;

ELSE J<=(others=>'0');

END IF;

END IF;

IF J ="01011001" THEN

COUT <='1'; ELSE COUT<='0';

END IF;

END IF;

Q<=J;

END PROCESS;

END behav;

3、24进制计数器模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY count24 IS

PORT(EN,RST,CLK1: IN STD_LOGIC;

Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

COUT: OUT STD_LOGIC);

END count24;

ARCHITECTURE behav OF count24 IS

SIGNAL J : STD_LOGIC_VECTOR(7 DOWNTO 0); --8位BCD计数值SIGNAL GW,SW : STD_LOGIC_VECTOR(3 DOWNTO 0);--计数器的个,十BEGIN

P2:PROCESS(EN,RST,CLK1)--计数

BEGIN

GW<=J(3 downto 0);

SW<=J(7 downto 4);

相关文档
最新文档