资源描述
可编程逻辑器件及应用课程设计
题 目: 数字电子钟设计和实现
姓 名: 11111
学 号:
班 级:
同组人员: 1111
指导老师: 1111
完成日期:
目录
一、 设计目标
二、 设计内容
三、 设计原理
四、 设计方法
4.1分频器(输入1024Hz频率,输出1Hz和512Hz信号)
4.2六十进制计数器
4.3二十四进制计数器
4.4整点报时模块(数据选择器)
4.5校时校分模块
4.6完整数字钟
4.7开发平台及硬件显示结果
五、 课程设计总结
一、 设计目标
1. 熟练利用数字系统设计方法进行数字系统设计
2. 掌握较复杂数字系统设计
3. 掌握原理图设计方法和VHDL语言设计方法
二、 设计内容
分别用原理图和VHDL语言设计
1. 显示时、分、秒数字钟,显示格式以下:
含有清零、校时、校分、整点报时等功效
三、 设计原理
该系统由振荡器、分频器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路等组成。石英晶体振荡器和分频器产生整个系统时基信号,它直接决定计时系统精度。“秒计数器”采取六十进制计数器,每累计60秒向“分计数器”进位;“分计数器”采取六十进制计数器,每累计60分向“时计数器”进位;“时计数器”采取二十四进制计数器,根据“24翻1”规律计数。“时、分、秒”计数器输出经译码器送显示器显示。校时电路用来当计时出现误差时对“时、分、秒”进行校对调整。整点报时电路是依据计时系统输出状态产生一脉冲信号,然后去触发音频发生器实现报时。
四、设计方法
4.1 分频器(输入1024Hz频率,输出1Hz和512Hz信号)
数字钟系统中需要1Hz、512Hz、1024Hz三种脉冲信号。1Hz信号用于计数秒信号,也用于校时、校分信号,1024Hz和512Hz用于整点报时。因为系统板上提供1024Hz信号,用分频器可得到这些信号。
1) 原理图设计
原理图设计时,可用三个16进制计数器74161串接后得到1Hz、512Hz两种脉冲信号。
分频器原理图:
分频器仿真波形:
由仿真波形能够看出,输入为1024Hz(试验仿真时没有正确计算周期)信号,512Hz输出端频率变为输入二分之一,1Hz输出端频率变为输入1/1024,可知所设计分频器含有将1024Hz信号分频得到512Hz和1Hz信号功效。
2) VHDL语言设计
VHDL语言设计分频器是,可做一个10位二进制计数器,其中输出512Hz=out(0),1Hz=out(9)。
分频器VHDL语言:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY fenpin is
PORT(
clk: IN STD_LOGIC;
out1: OUT STD_LOGIC;
out512: OUT STD_LOGIC);
END fenpin;
ARCHITECTURE a OF fenpin IS
SIGNAL count: STD_LOGIC_VECTOR(9 DOWNTO 0);
BEGIN
PROCESS(clk)
BEGIN
if(clk'event AND clk='0') then
count <= count + 1;
end if;
END PROCESS;
out512 <= count(0);
out1 <= count(9);
END a;
4.2 六十进制计数器
1) 原理图设计
74160分别设计一个带清零功效10进制计数器和6进制计数器,然后串联起来就是六十进制计数器。
60进制计数器原理图以下:
60进制计数器仿真波形:
由仿真波形可看出,在计数脉冲作用下,输出端高四位[q60H3,q60H2,q60H1,q60H0]bcd码在0~5之间循环,而低四位[q60L3,q60L2,q60L1,q60L0]在0~9之间循环,这么完成了0~59计数功效。
2) VHDL语言设计
VHDL语言设计时,整体设计一个带清零功效60进制计数器BCD码计数器。输出低四位为outbcd[3..0],高四位为outbce[7..0]。
60进制计数器VHDL语言:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY bcd60 is
PORT(
clk: IN STD_LOGIC;
reset: IN STD_LOGIC;
c: OUT STD_LOGIC;
daout: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END bcd60;
ARCHITECTURE a OF bcd60 IS
SIGNAL count: STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS(clk,reset)
BEGIN
if(reset = '1') then
count <= "00000000";
elsif (clk'event AND clk='1') then
if(count < "01011001") then
if(count(3 downto 0)="1001")then
count <= count+7;
else
count <= count + 1;
c <= '0';
end if;
else
count <= "00000000";
c <= '1';
end if;
end if;
END PROCESS;
daout <= count;
END a;
4.3 二十四进制计数器
1) 原理图设计
原理图设计时,用74160设计一个带清零功效24进制BCD码计数器。
[q24H3,q24H2,q24H1,q24H0] 为输出高四位,其在0000~0010即0~2之间循环, [q24L3, q24L2,q24L1,q24L0]为输入低四位,其在0000~1001即在0~9之间循环。后一个74160在计数脉冲作用下计数,当到9后,再一个脉冲便产生进位信号,RCO端产生一个脉冲送到前一个74160使之加一。目前一个74160为2,后有一个74160为3时产生清零信号,使两个计数器同时清零。这么便完成24进制计数。
24进制计数器原理图:
24进制计数器仿真波形
2) VHDL语言设计
VHDL语言设计时,,整体设计一个带清零功效24进制BCD码计数器。
24进制BCD码VHDL语言代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY bcd24 is
PORT(
clk: IN STD_LOGIC;
reset: IN STD_LOGIC;
c: OUT STD_LOGIC;
daout: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END bcd24;
ARCHITECTURE a OF bcd24 IS
SIGNAL count: STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS(clk,reset)
BEGIN
if(reset = '1') then
count <= "00000000";
elsif (clk'event AND clk='1') then
if(count(3 downto 0)="1001") then
if(count < "00100011") then
count <= count+7;
else
count <= "00000000";
end if;
elsif (count < "00100011") then
count <= count + 1;
c<= '0';
else
count <= "00000000";
c<= '1';
end if;
end if;
END PROCESS;
daout <= count;
END a;
4.4整点报时模块(数据选择器)
1)原理图
整点报时是数字钟最基础功效电路之一。要求在离整点10s时进行报时,即当初间在59:51、59:53、59:55、59:57时以低音512Hz信号连续1s发出整点报时预警声,在59:59时以高音1024Hz信号连续1s发出整点报时声。
当59:5X时,小时输出八位数是01011001,分八位数是0101XXXX。将其中高电平对应得管脚接到和非门,当计数器抵达59:5X时和非门输出为0,将4选1数据选择器打开。将秒信号个位sLa、sLd分别接到4选1数据选择器地址端A、B。图:
从真值表看出:
mLd
mLc
mLb
mLa
显示十进制数
mLd mLa组合
0
0
0
0
0
00
0
0
0
1
1
01
0
0
1
0
2
00
0
0
1
1
3
01
0
1
0
0
4
00
0
1
0
1
5
01
0
1
1
0
6
00
0
1
1
1
7
01
1
0
0
0
8
00
1
0
0
1
9
01
当59:51、59:53、59:55、59:57时,mLa、mLd为01,从上图看出选中2C1端口,喇叭发出512Hz低音信号。
当59:59是,mLa、mLd为11.从上图看出选中端口2C3,喇叭发出1024Hz高音信号。
2) VHDL语言代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY baoshi is
PORT(
clock: IN STD_LOGIC;
clk1024,clk512:IN STD_LOGIC;
tm,tc:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
speaker:OUT STD_LOGIC
);
END baoshi;
ARCHITECTURE a OF baoshi IS
BEGIN
PROCESS(tm,tc,clock)
begin
if(tm = "01011001" AND tc(7 downto 4)="0101" AND tc(0)='1')then
if(tc(3 downto 0) = "1001")then
speaker <= clk1024;
else
speaker <= clk512;
end if;
else
speaker <= '0';
end if;
END PROCESS;
END a;
4.5校时校分模块
校时校分电路中用到2选1电路进行信号选择。
原理图:
仿真波形:
VHDL语言代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux21 is
PORT(
a,b: IN STD_LOGIC;
s: IN STD_LOGIC;
y: OUT STD_LOGIC);
END mux21;
ARCHITECTURE one OF mux21 IS
BEGIN
PROCESS(a,b,s)
BEGIN
if(s='0') then
y<=a;
else
y<=b;
end if;
END PROCESS;
END one;
2选1数据选择器顶层文件
2选1电路接在前级向后间进位信号之间。2选1电路输入信号一个是前级向后级进位信号,另一个是1Hz信号。当SEL信号等于1时选择A端信号,输入下级时钟端信号为1Hz信号,实现校时、校分;当SEL信号等于0时选择B端信号,输入下级时钟端信号为正常进位信号,实现正常计时。
4.6完整数字钟
1)原理图设计
2)仿真图
VHDL语言顶层文件:
总体仿真:
从仿真图能够看出,所设计时钟含有校时、校分、清零、整点报时功效,符合课程设计要求。
4.7开发平台及硬件显示结果
开发平台:
GW48-CK EDA 试验开发系统 编号 00067058
带MAX+PLUSII 软件PC机
硬件显示结果:
五、课程设计总结
此次可编程逻辑电路课程设计在设计系统和画原理图和编写程序过程当中,因为对可编程逻辑电路不太熟悉和对MAX+PLUSII软件利用也很生疏,我们碰到了很多问题,而且对碰到问题也只能在网上搜索或请教老师,不过最终在和队友协作下我们顺利完成了课程设计任务,总来说并不顺利。
此次课程设计任务——数字电子钟设计和实现,是将本学期VHDL硬件描述语言和数字逻辑电路设计和上学期所学数字电路中所学知识利用实践中去,提升了自己理论和实践相结合能力,使我深入掌握本专业各项知识,为以后专业学习打下良好基础。
在设计中还是需要注意部分常见问题,比如实体名、项目名等,还有在编写VHDL文件时,部分文件名也是需要注意。
最终,感谢老师在我们做课程设计过程当中耐心指导和辛勤付出,也感谢队友悉心帮助。
展开阅读全文