一、【课题要求】
、秒、分、时的12小时数字钟。
。
、六十进制、十二进制等所需进制的计数器。
。
<注意>
1、。
2、设置两个按钮,一个供“开始”及“停止”使用,一个供系统“复位”用。
3、时钟显示使用数码管显示。
4、“时显示”部分注意12点后显示1点。
5、注意各部分的关系,由低位到高位逐级设计、调试。
二、【分析与设计】
数字钟是计数器的综合应用,数字钟由十分之一秒、秒钟、分钟、时钟组成,十分之一秒由十进制计数器74160组成,秒钟由六十进制计数器构成,分钟由六十进制计数器,时钟由十二进制计数器构成。
该数字钟程序的底层文件主要有六进制计数器模块、六十进制计数器模块和十二进制模块,对各模块进行封装,供顶层文件调用,各模块有VHDL文本设计及原理图设计。
输入端clk是连续脉冲,clrn是高电平系统复位,en是高电平使能端,输出端是十分之一秒位、秒钟个位、秒钟十位、分钟个位、分钟十位、时钟个位、时钟十位,最后由7个数码管显示各位的值。
该数字钟程序的底层文件主要有六进制计数器模块、六十进制计数器模块和十二进制模块,对各模块进行封装,供顶层文件调用,各模块有VHDL文本设计及原理图设计。
程序框图:
进位
进位
六进制计数器
六十进制计数器
十进制计数器
十分之一秒秒钟分钟小时
进位
进位
进位
十进制计数器
六十进制计数器
十二进制计数器
六十进制计数器
三、【程序代码及原理图】
1、六进制计数器
VHDL代码:
LIBRARY IEEE;
USE ;
USE ;
ENTITY cout6 IS
PORT(clk,en,clrn,load:IN STD_LOGIC;
date:IN STD_LOGIC_VECTOR(2 DOWNTO 0);
cnt:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
co:OUT STD_LOGIC );
END cout6;
ARCHITECTURE behave OF cout6 IS
SIGNAL q:STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
co<='1' WHEN((q="101")AND(en='1'))ELSE'0';
PROCESS(en,clk)
BEGIN
IF clrn='0' THEN
q<="000";
ELSIF(clk'event and clk='1') THEN
IF load='0' THEN
q<=date;
ELSIF en='1' THEN
q<=q+1;
IF(q="101")THEN
q<="000";
END IF;
END IF;
END IF;
END PROCESS;
cnt<=q;
END behave;
波形仿真:
2、六十进制计数器
原理图:
波形仿真:
3、十二进制计数器
VHDL代码:
LIBRARY IEEE;
USE ;
USE ;
ENTITY cout12 IS
PORT(clk,clrn,ldn,en:IN STD_LOGIC;
ha:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
hb:IN STD_LOGIC;
qa:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
qb:out STD_LOGIC);
END cout12;
ARCHITECTURE behav OF cout12 IS
SIGNAL q:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL b:STD_LOGIC;
SIGNAL a:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(en,clk)
BEGIN
IF clrn='0' THEN
q<="0000";
ELSIF(clk'event and clk='1') THEN
IF ldn='0' THEN
b<=hb;
a<=ha;
ELSIF en='1' THEN
q<=q+1;
IF(q="1011")TH
EDA课程设计报告数字电子钟 来自淘豆网www.taodocs.com转载请标明出处.