基于FPGA的数字钟设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);