EDA课程设计数字时钟.docx

上传人:b****6 文档编号:8668974 上传时间:2023-02-01 格式:DOCX 页数:15 大小:119.25KB
下载 相关 举报
EDA课程设计数字时钟.docx_第1页
第1页 / 共15页
EDA课程设计数字时钟.docx_第2页
第2页 / 共15页
EDA课程设计数字时钟.docx_第3页
第3页 / 共15页
EDA课程设计数字时钟.docx_第4页
第4页 / 共15页
EDA课程设计数字时钟.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

EDA课程设计数字时钟.docx

《EDA课程设计数字时钟.docx》由会员分享,可在线阅读,更多相关《EDA课程设计数字时钟.docx(15页珍藏版)》请在冰豆网上搜索。

EDA课程设计数字时钟.docx

EDA课程设计数字时钟

泰山学院

2011级电子信息科学与技术本科班

EDA课程设计·数字时钟

 

姓名:

胡乃宽

学号:

2011080032

学院:

物电学院

班级:

2011级电本

任课老师:

王春玲

设计时间:

2013-11-21

摘要:

以现场可编程逻辑器件(FPGA)为设计载体,以硬件描述语言(VHDL)为主要表达方式,以QⅡ开发软件和EDA试验箱为设计工具,阐述了数字时钟的工作原理和软件实现方法。

并通过对所设计的数字时钟进行了时序仿真,使我们小组成员掌握综合性电路的设计、仿真、下载、调试方法,并能写出简单的EDA实验程序。

作为学习电子的本科生,我们必须不断接受先进的电子知识,这就要求我们努力学好EDA这门课程,并熟练掌握相关软件及硬件的操作。

除此之外,我们在课下还要不断练习,争取掌握一定的EDA编程方法,并且利用现有的条件不断实践。

这样一来,我们可以学好EDA这门课程。

此次课程设计不是我们EDA课程的结束,而是一个继续学习EDA相关课程的开始。

关键词:

QⅡ开发软件;数字时钟;EDA

Abstract:

Fieldprogrammablelogicdevice(FPGA)designsupport,hardwaredescriptionlanguage(VHDL)asthemainexpressiontoQⅡchamberforthedevelopmentofsoftwareandEDAdesigntools,digitalclockdescribestheworkingprincipleandsoftwareimplementation.

Ase-learningundergraduate,wemustcontinuetoacceptadvancedelectronicknowledge,whichrequiresustostrivetolearnEDAthiscourse,proficiencyinrelevantsoftwareandhardwareoperations.Inaddition,wealsocontinuetopracticeinclass,fightmastercertainEDAprogrammingmethods,andtheuseoftheexistingconditionsofcontinuouspractice.Inthisway,wecanlearnEDAthiscourse.

ThecoursedesignisnottheendofourEDAprograms,butacontinuingstudybeganEDArelatedcourses.

Keywords:

QⅡsoftwaredevelopment;digitalclock;EDA

一课程设计任务及要求

1.1实验目的

(1)掌握VHDL语言的简单运用

(2)掌握VHDL编程设计方法及会简单编程

(3)掌握QII的简单操作并会使用EDA实验箱

(4)掌握一个基本EDA课程设计的操作

(5)掌握综合性电路的设计、仿真、下载、调试方法

(6)学会使用试验箱

1.2功能设计

(1)有时、分、秒计数显示功能,小时为24进制,分钟和秒为60进制以24小时循环计时

(2)部分显示功能

(3)具有整点报时功能

1.3实验仪器

(1)PC机1台

(2)QII软件1套

二设计思想

1.1功能设计概述

(1)时、分、秒计时器

时、分、秒计时器分别有三个程序驱动,其中时计时器为一个24进制计数器,分、秒计时器均为60进制计数器。

当秒计时器接受到一个秒脉冲时,秒计数器开始从1计数到60,每当秒计数器数到00时,就会产生一个脉冲输出送至分计时器,此时分计数器数值在原有基础上加1;每当分计数器数到00时,就会产生一个脉冲输出送至时计时器,此时时计数器数值在原有基础上加1。

即当数字钟运行到23点59分59秒时,当秒计时器在接受一个秒脉冲,数字钟将自动恢复到00点00分00秒。

(2)部分显示功能

显示功能用一个子程序驱动,在这里我们只做了时间显示功能。

我们用的WHEN,CASE语句对两个LED灯管进行赋值(WHEN,ELSE无法实现)。

1.2可实现的原理图

(1)简单的数字时钟原理图

图一简单的数字时钟原理图

(2)具有显示功能的数字时钟原理图

图二具有显示功能的数字时钟原理图

(3)具有报警功能和显示功能的数字时钟原理图

_

图三具有报警功能和显示功能的数字时钟原理图

三实验步骤概述

1.打开QⅡ,单击“File”菜单,选择File→NewProjectWizard;分别输入项目的工作路径、项目名和实体名,单击Finish。

2.单击“File”菜单,选择New,弹出小对话框,双击“VHDLFile",即选中了文本编辑方式。

在出现的“Vhdl1.vhd”文本编辑窗中键入VHDL程序,输入完毕后,选择File→SaveAs,即出现“SaveAs”对话框。

选择自己建立好的存放本文件的目录,然后在文件名框中键入文件名,按“Save”按钮。

3.建立工程项目,在保存VHDL文件时会弹出是否建立项目的小窗口,点击“Yes”确定。

即出现建立工程项目的导航窗口,点击“Next”,最后在出现的屏幕中分别键入新项目的工作路径、项目名和实体名。

注意,原理图输入设计方法中,存盘的原理图文件名可以是任意的,但VHDL程序文本存盘的文件名必须与文件的实体名一致,输入后,单击“Finish”按钮。

4.单击工具条上的编译符号开始编译

5.开始进行时序仿真。

建立波形文件:

选择File→New,在New窗中选中“OtherFile”标签。

在出现的屏幕中选择“VectorWaveformFile”项出现一新的屏幕。

在出现的新屏幕中,双击“Name”下方的空白处,弹出“InsertNodorBus”对话框,单击该对话框的“NodeFinder……”。

在屏幕中的Filter中选择Pins,单击“List”。

而后,单击“>>”,所有输入/输出都被拷贝到右边的一侧,这些正是我们希望的各个引脚,也可以只选其中的的一部分,根据实际情况决定。

然后单击屏幕右上脚的“OK”。

在出现的小屏幕上单击“OK”。

6.设定仿真时间宽度。

选择Edit→Endtime…选项,在Endtime选择窗中选择适当的仿真时间域,以便有足够长的观察时间。

7.波形文件存盘。

选择File→Saveas选项,直接存盘即可。

8.运行仿真器。

在菜单中选择项,直到出现,仿真结束。

四实验步骤

1.1单元模块设计

(1)秒计数模块

试验程序(根据参考程序修改而成)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYsecondIS

PORT(clk1,reset1:

STD_LOGIC;

enmin:

OUTSTD_LOGIC;

daout1:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDENTITYsecond;

ARCHITECTUREfunOFsecondIS

SIGNALcount:

STD_LOGIC_VECTOR(6DOWNTO0);

BEGINdaout1<=count;

PROCESS(clk1,reset1)

BEGIN

IF(reset1='0')THENcount<="0000000";

ELSIF(clk1'eventandclk1='1')then

IF(count<16#3C#)then

IF(count="0111011")then

enmin<='1';

count<="0000000";

ELSE

count<=count+1;

enmin<='0';

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

ENDfun;

仿真结果:

图四秒计数模块仿真结果

(2)分计数模块

试验程序(根据参考程序修改而成)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYminuteIS

PORT(clk2,reset2:

INSTD_LOGIC;

enhour:

OUTSTD_LOGIC;

daout2:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDENTITYminute;

ARCHITECTUREfunOFminuteIS

SIGNALcount:

STD_LOGIC_VECTOR(6DOWNTO0);

BEGIN--enmin_2由clk调制后的手动调时脉冲信号串

daout2<=count;

PROCESS(clk2,reset2)

BEGIN

IF(reset2='0')THEN--若reset为0,则异步清零

count<="0000000";

ELSIF(clk2'eventandclk2='1')THEN--否则,若clk上升沿到

IF(count<16#3C#)THEN--又若count小于16#60#,即60

IF(count="0111011")THEN--又若已到59D

enhour<='1';--则置进位为1

count<="0000000";--count复0

ELSE

count<=count+1;--若count未到59D,则加7,即作"加6校正"

enhour<='0';

ENDIF;--使前面的16#60#的个位转变为8421BCD的容量

ENDIF;--ENDIF(reset='0')

ENDIF;

ENDprocess;

ENDfun;

仿真结果:

图五分计数模块仿真结果

(3)时计数模块

试验程序(根据参考程序修改而成)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYhourIS

PORT(clk3,reset3:

INSTD_LOGIC;

daout3:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDENTITYhour;

ARCHITECTUREfunOFhourIS

SIGNALcount:

STD_LOGIC_VECTOR(6DOWNTO0);

BEGIN

daout3<=count;

PROCESS(clk3,reset3)

BEGIN

IF(reset3='0')THEN--若reset为0,则异步清零

count<="0000000";

ELSIF(clk3'eventandclk3='1')THEN--否则,若clk上升沿到

IF(count<16#18#)THEN--又若count小于16#60#,即24

IF(count="0010111")THEN--又若已到23

count<="0000000";--count复0

ELSE

count<=count+1;

ENDIF;--使前面的16#60#的个位转变为8421BCD的容量

ENDIF;

ENDIF;

ENDprocess;

ENDfun;

仿真结果:

图六时计数模块仿真结果

(4)显示模块程序

试验程序(根据参考程序修改而成)

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityxianshiis

port(hour1:

instd_logic_vector(6downto0);

led1:

outstd_logic_vector(6downto0);

led2:

outstd_logic_vector(6downto0));

endxianshi;

architectureartofxianshiis

signalaaa:

std_logic_vector(6downto0);

begin

aaa<=hour1;

process(aaa)

begin

caseaaais

when"0000000"=>led2<="1111110";led1<="1111110";

when"0000001"=>led2<="1111110";led1<="0110000";

when"0000010"=>led2<="1111110";led1<="1101101";

when"0000011"=>led2<="1111110";led1<="1111001";

when"0000100"=>led2<="1111110";led1<="0110011";

when"0000101"=>led2<="1111110";led1<="1011011";

when"0000110"=>led2<="1111110";led1<="1011111";

when"0000111"=>led2<="1111110";led1<="1110000";

when"0001000"=>led2<="1111110";led1<="1111011";

when"0001001"=>led2<="1111110";led1<="1110111";

when"0001010"=>led2<="0110000";led1<="1111110";

when"0001011"=>led2<="0110000";led1<="0110000";

when"0001100"=>led2<="0110000";led1<="1101101";

when"0001101"=>led2<="0110000";led1<="1111001";

when"0001110"=>led2<="0110000";led1<="0110011";

when"0001111"=>led2<="0110000";led1<="1011011";

when"0010000"=>led2<="0110000";led1<="1011111";

when"0010001"=>led2<="0110000";led1<="1110000";

when"0010010"=>led2<="0110000";led1<="1111011";

when"0010011"=>led2<="0110000";led1<="1110111";

when"0010100"=>led2<="1101101";led1<="1111110";

when"0010101"=>led2<="1101101";led1<="0110000";

when"0010110"=>led2<="1101101";led1<="1101101";

when"0010111"=>led2<="1101101";led1<="1111001";

whenothers=>null;

endcase;

endprocess;

endart;

仿真结果:

图七显示模块仿真结果

(5)报时模块

试验程序(根据参考程序修改而成)

libraryieee;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYshizhong1IS

PORT(in1,in2,in3:

inSTD_LOGIC_vector(6downto0);

clk4:

instd_logic;

alert:

outstd_logic;

out1:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDENTITYshizhong1;

architecturefunOFshizhong1IS

begin

process(in1,in2,in3)

begin

IF(clk4'eventandclk4='1')then

out1<=in3;

if(in1="0000000"andin2="0000000")then

alert<='1';

elsealert<='0';

endif;

endif;

endprocess;

endfun;

仿真波形

图八报时模块仿真结果

1.2顶层模块设计

(1)简单的数字时钟

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYshizhongIS

PORT(clk,reset:

STD_LOGIC;

out1,out2,out3:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDENTITYshizhong;

ARCHITECTUREfunOFshizhongIS

--SIGNALcount:

STD_LOGIC_VECTOR(6DOWNTO0);

componentsecond

port(clk1,reset1:

instd_logic;

enmin:

outstd_logic;

daout1:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

endcomponent;

componentminute

port(clk2,reset2:

instd_logic;

enhour:

outstd_logic;

daout2:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

endcomponent;

componenthour

port(clk3,reset3:

instd_logic;

daout3:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

endcomponent;

signala,b:

std_logic;

begin

u1:

secondportmap(clk1=>clk,reset1=>reset,daout1=>out1,enmin=>a);

u2:

minuteportmap(clk2=>a,reset2=>reset,daout2=>out2,enhour=>b);

u3:

hourportmap(clk3=>b,reset3=>reset,daout3=>out3);

endARCHITECTUREfun;

仿真波形:

图九顶层仿真结果一

(2)带有显示功能的数字时钟

试验程序(根据参考程序修改而成)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYshizhongIS

PORT(clk,reset:

STD_LOGIC;

out1,out2,out3,out4:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDENTITYshizhong;

ARCHITECTUREfunOFshizhongIS

--SIGNALcount:

STD_LOGIC_VECTOR(6DOWNTO0);

componentsecond

port(clk1,reset1:

instd_logic;

enmin:

outstd_logic;

daout1:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

endcomponent;

componentminute

port(clk2,reset2:

instd_logic;

enhour:

outstd_logic;

daout2:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

endcomponent;

componenthour

port(clk3,reset3:

instd_logic;

daout3:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

endcomponent;

componentxianshi

port(hour1:

inSTD_LOGIC_VECTOR(6DOWNTO0);

led2,led1:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

endcomponent;

signala,b:

std_logic;

signalc:

std_logic_VECTOR(6downto0);

begin

u1:

secondportmap(clk1=>clk,reset1=>reset,daout1=>out1,enmin=>a);

u2:

minuteportmap(clk2=>a,reset2=>reset,daout2=>out2,enhour=>b);

u3:

hourportmap(clk3=>b,reset3=>reset,daout3=>c);

u4:

xianshiportmap(hour1=>c,led1=>out3,led2=>out4);

endARCHITECTUREfun;

仿真结果

图十仿真结果二

(3)具有报警功能和显示功能的数字时

试验程序(根据参考程序修改而成)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYshizhongIS

PORT(clk,reset:

inSTD_LOGIC;

out2:

outstd_logic;

out3,out4:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDENTITYshizhong;

ARCHITECTUREfunOFshizhongIS

--SIGNALcount:

STD_LOGIC_VECTOR(6DOWNTO0);

componentsecond

port(clk1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1