数字钟河南工业大学EDA课程设计

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

课程设计
课程设计名称:EDA课程设计
专业班级电科1301
学生姓名:
学号: 201316030
指导教师:焦素敏
课程设计时间: 2016-6-20~2016-7-2
1 设计任务及要求
用VHDL语言在FPGE/CPLD上实现数字钟的设计。

掌握各类计数器的设计方法;掌握多个数码管显示的原理与方法;掌握VHDL语言的设计思想;掌握EDA 技术的层次化设计方法;对整个系统的设计有一个初步了解。

数字钟的设计要求如下:
(1)具有正确的时、分、秒计时功能。

(2)计时结果要有6个数码管分别显示时、分、秒的个位和十位。

(3)有校时功能,当Key3键按下时,分计数器以秒脉冲的速度递增,并按60min循环,即计数到59min后再回00。

当按下Key1键时,时计数器以秒脉冲的速度递增,并按24h循环,即计数到23h后再回00。

(4)利用扬声器整点报时。

2设计原理及总体框图
数字钟的顶层电路原理图如图1所示:
(图1 数字钟的顶层电路原理图)
Clky引脚输入1Hz秒脉冲,输入一个60进制秒计数器,60进制计数器外接输出引脚,输出到秒数码管上显示。

当计满60位时,输出引脚CO产生进位输出电平,输入到60进制分计数器上。

60进制分计数器接受来自60进制秒计数器的进位电平开始计数,并由输出引脚将所计数字输出到分数码管上显示。

当计满60个数后,产生进位输出电平,由进位输出CO引脚输出到20进制时计数器上。

20进制时计数器接受来自60进制分计数器的进位电平开始计数,并由输出引脚将所计数字输出到时数码管上显示。

当计满20个数后,产生进位输出电平,由进位输出CO引脚输出到异步清零引脚Key3上,整个系统清零,从00:00:00开始重新计数。

整点报时模块,当是整点显示时,蜂鸣器报时,key1、key2、key3、引脚分别接开关。

key3负责清零,key1引脚接1Hz秒脉冲时实现以秒频率校准分功能,key2引脚接1Hz秒脉冲实现以秒频率校准时功能。

3 程序设计
60进制BCD码计数器的源程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY cnt60 IS
PORT( clr:IN STD_LOGIC;
clk:IN STD_LOGIC;
ten:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
one:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
co:OUT STD_LOGIC );
END cnt60;
ARCHITECTURE behav OF cnt60 IS
SIGNAL cin:STD_LOGIC;
BEGIN
PROCESS(clk,clr)
VARIABLE cnt0:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN IF clr='1' THEN
cnt0:="0000";
ELSIF clk'EVENT AND clk='1' THEN
IF cnt0="1000" THEN
cnt0:=cnt0+1;cin<='1';
ELSIF cnt0="1001" THEN
cin<='0';cnt0:="0000";
ELSE
cnt0:=cnt0+1;
cin<='0';
END IF;
END IF;
one<=cnt0;
END PROCESS;
PROCESS(clk,clr,cin)
VARIABLE cnt1:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
IF clr='1' THEN
cnt1:="0000";
ELSIF clk'EVENT AND clk='1' THEN
co<='0';
IF cin='1' THEN
IF cnt1="0101"THEN
cnt1:="0000";co<='1';
ELSE
cnt1:=cnt1+1;co<='0';
END IF;
END IF;
ELSE
cnt1:=cnt1;
END IF;
ten<=cnt1;
END PROCESS;
END behav;
24进制计数器的VHDL源程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY cnt24 IS
PORT( clr:IN STD_LOGIC;
clk:IN STD_LOGIC;
ten:OUT STD_LOGIC_VECTOR(7 DOWNTO 4);
one:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
co:OUT STD_LOGIC
);
END cnt24;
ARCHITECTURE behav OF cnt24 IS
SIGNAL t10:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL o1:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL cin:STD_LOGIC;
BEGIN
ten<=t10;
one<=o1;
p1:PROCESS(clk,clr)
BEGIN
IF(clr='1') THEN
o1<="0000";
ELSIF clk'EVENT AND clk='1' THEN
IF(o1="1001") OR (t10="0010" AND o1="0011")THEN
o1<="0000";cin<='0';
ELSIF(o1="1000")THEN
o1<=o1+1;cin<='1';
ELSE
o1<=o1+1;cin<='0';
END IF;
END IF;
END PROCESS p1;
p2:PROCESS(clk,clr,cin)
BEGIN
IF(clr='1') THEN
t10<="0000";
ELSIF clk'EVENT AND clk='1' THEN
IF(t10="0010" AND o1="0011")THEN
t10<="0000";co<='1';
ELSE co<='0';
END IF;
IF cin='1' THEN
t10<=t10+1;
END IF;
END IF;
END PROCESS p2;
END behav;
二选一模块VHDL源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY twoxuan1 IS
PORT(
A:IN STD_LOGIC;
B:IN STD_LOGIC;
C:IN STD_LOGIC;
Y:OUT STD_LOGIC
);
END twoxuan1;
ARCHITECTURE behav OF twoxuan1 IS
BEGIN
PROCESS(C)
BEGIN
IF C='0' THEN
Y<=A;
ELSE
Y<=B;
END IF;
END PROCESS;
END behav;
整点报时源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY zhengdianbaoshi IS
PORT(
clk:IN STD_LOGIC;
miaog,miaos,feng,fens:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
qout:OUT STD_LOGIC
);
END zhengdianbaoshi;
ARCHITECTURE behav OF zhengdianbaoshi IS
signal A:STD_LOGIC;
BEGIN
PROCESS(clk)
BEGIN
IF clk'EVENT AND clk='1' THEN
IF miaos="0000" AND fens="0000" AND feng="0000" AND miaog="0000" THEN
qout<='1';
ELSIF miaos="0010" THEN
qout<='0';
END IF;
END IF;
END PROCESS ;
END behav;
4 编译及仿真
Quartus II 是Alter公司推出的第四代EDA开发工具软件,同第三代设计工具MAX+PLUS II相比,其功能更加完善,特别适合大规模逻辑电路的设计。

Quartus II的设计流程与其他工具软件一样,也可以概括为设计输入,设计编译,设计仿真和设计下载等过程,Quartus II支持图形输入,文本输入等多种输入方法。

Alter公司的Quartus II是一个全面的,易于使用且具有独立解决问题能力的软件,可以完成设计流程中的输入综合,布局布线,时序分析,仿真和编程下载等所有功能。

数字钟仿真波形为图2所示:
(图2数字钟仿真波形)
由波形图可以看出,clk为输入1Hz秒脉冲,One为输出秒的个位,ten为输出秒的十位。

Ne1为输出分的个位,ten为输出分的十位。

One2为输出时的个位,ten为输出时的十位。

SOUND为整点报时输出。

由最后一行,可以看出,波形总共为两端,分别为第一段对应12个整点报时,每个整点报时对应一个分钟十位的进位。

由此图可见,波形仿真正确。

图3为数字钟仿真波形为局部放大图
(图3 数字钟仿真波形为局部放大图)
60进制计数器的仿真波形如图4:
(图4 60进制计数器的仿真波形)
第一行为输入的1Hz的秒脉冲,由波形图可以看出,最后一行对应的60进制计数器的十位从0变化到5倒数第二行对应的个位,从0变化到9,每个十位数字变化时,对应10个个位数字从0变化到。

由此可以看出,波形仿真成功。

24进制计数器的仿真波形如下图5所示:
(图5 24进制计数器的仿真波形)
第一行为输入的1Hz的秒脉冲,由波形图可以看出,最后一行对应的24进制计数器的十位从0变化到2,十位数字0和1对应10个个位数字从0变化到9,十位数字2对应个位数字从0变化到3。

倒数第二行对应的个位。

由此可以看出,波形仿真成功。

5 硬件调试与结果分析
按照正确的方法进行引脚锁定后进行编程下载,下载成功后按照引脚锁定的管脚进行连线。

可以看到数码管从00;00;00;开始显示计数,秒计满60秒后分进一位,分计满60为后时进一位,时计满24后从00:00:00开始计数。

整点时报时声音响起。

按下key1键时,将1Hz秒脉冲信号送到分计数器,可以实现快速校分功能。

当按下key2键时,分计数器以秒脉冲的速度递增,并按24h循环,即计数到23h 后再回到00.
硬件验证成功。

6 参考文献
[1] 焦素敏.EDA课程设计指导书.郑州:河南工业大学,2008
[2] 焦素敏.EDA技术基础.北京:清华大学出版社,2014
[3]边肇祺.模式识别(第二版).北京:清华大学出版社,1988,25~35
[4]李永忠.几种小波变换的图像处理技术.西北民族学院学报(自然科学版),2001.6,22(3),15~18
心得体会
通过这次课程设计,我进一步加深了对EDA编程的了解。

并进一步熟练了对QuartusII软件的操作,更为重要的是时隔一年以后有一次认真地复习了EDA所学的知识,加深了对所学知识的理解与应用。

在编写程序的过程中,遇到了很多问题,使我发现自己以前学习上存在的不足。

通过与同学探讨和请教老师,终于把问题都解决了,并加深了对数字时钟原理和设计思路的了解。

同时我也掌握了做课程设计的一般流程,为以后的电子设计这块积累了一定的经验,为以后从事相关工作一些帮助。

刚开始做时,仅仅做了一个比较简单的数字钟,没有做整点报时与校对分、时的功能。

在第一次验收时,老师帮忙指出了其中的不足之处,在课下,我又对其进行了修改,增加了整点报时与校对分、时的功能。

做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。

最后参照每个模块把输入和输出引脚设定,运用我们所学的VHDL语言进行编程。

总之,通过这次的设计,进一步了解了EDA技术,收获很大,对软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。

电子信息科学与技术专业课程设计任务书。

相关文档
最新文档