VHDL数字钟设计报告

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

VHDL数字钟设计报告

一. 数字钟总体设计方案:

1.1设计目的

①正确显示时、分、秒;

②可手动校时,能分别进行时、分的校正;

③整点报时功能;

1.2设计思路

数字钟的设计模块包括:分频器、去抖动电路、校时电路、“时、分、秒”计数器、校时闪烁电路、

整点报时和译码显示电路。

每一个功能模块作为一个实体单独进行设计,最后再用VHDL的例化语句将各个模块进行整合,生成

顶层实体top。

该数字钟可以实现3个功能:计时功能、设置时间功能和报时功能。

二.数字钟模块细节

2.1 分频器(fenpin)

本系统共需3种频率时钟信号(1024Hz、512Hz、1Hz)。为减少输入引脚,本系统采用分频模块,只需由外部提供1024Hz基准时钟信号,其余三种频率时钟信号由分频模块得到。

分频原理:为以1024Hz基准时钟经1024分频得到512Hz,1Hz频率时钟信号。

分频器管脚

代码:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity fenpin is

port(clk1024:in std_logic;

clk1,clk512:out std_logic

);

end fenpin ;

architecture cml of fenpin is

begin

process (clk1024)

variable count1: integer range 0 to 512; variable q1: std_logic;

begin

if clk1024' event and clk1024='1' then if count1=512 then

q1:=not q1;

count1:=0;

else

count1:=count1+1;

end if;

end if;

clk1<=q1;

end process;

process(clk1024)

variable count512: integer range 0 to 1; variable q512: std_logic;

begin

if clk1024' event and clk1024='1' then

if count512=1 then

q512:=not q512;

count512:=0;

else

count512:=count512+1;

end if;

end if;

clk512<=q512;

end process;

end cml;

2.2 校时电路(jiaoshi)

本模块要实现的功能是:正常计时、校时、校分在每个状态下都会产生不同控制信号实现相应的功能。

校时管脚图

代码:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity jiaoshi is

port(rst,rvs,select_rvs,mtime,mclkin,hclkin:in std_logic;

hclkout,mclkout:out std_logic

);

end jiaoshi;

architecture cml of jiaoshi is

signal h_m:std_logic;

begin

p1:process(rst,rvs,hclkin,mclkin,h_m,mtime)

begin

if rst='0' then

null;

elsif rvs='1' then

hclkout<=hclkin;

mclkout<=mCLKin;

elsif h_m='0' then

hclkout<=hclkin;

mclkout<=mtime;

else

hclkout<=mtime;mclkout<=mclkin;

end if;

end process;

p2:process(select_rvs)

begin

if select_rvs'event and select_rvs='1' then

h_m<=not h_m;

end if;

end process ;

end cml;

管脚图

仿真图

2.3 时计数器(hour)分计数器(mine)秒计数器(second)

时计数器管脚图

时代码:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity hour is

port(rst,hclk:in std_logic;

hour0,hour1:buffer std_logic_vector(3 downto 0 )

);

end hour;

architecture cml of hour is

begin

process(rst,hclk,hour0,hour1)

begin

if rst='0' then

hour0<="0000";

hour1<="0000";

elsif hclk'event and hclk='1' then

if hour0="0011" and hour1="0010" then

hour0<="0000";

hour1<="0000";

elsif hour0="1001" then

hour0<="0000";

hour1<=hour1+1;

else

hour0<=hour0+1;

end if;

end if;

end process ;

相关文档
最新文档