EDA课程设计报告数字电子钟.docx

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

EDA课程设计报告数字电子钟.docx

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

EDA课程设计报告数字电子钟.docx

EDA课程设计报告数字电子钟

数字钟

一、【课题要求】

1.设计一个能显示1/10秒、秒、分、时的12小时数字钟。

2.熟练掌握各种计数器的使用。

3.能用计数器构成十进制、六十进制、十二进制等所需进制的计数器。

4.能用低位的进位输出构成高位的计数脉冲。

<注意>

1、时钟源使用频率为0.1HZ的连续脉冲。

2、设置两个按钮,一个供“开始”及“停止”使用,一个供系统“复位”用。

3、时钟显示使用数码管显示。

4、“时显示”部分注意12点后显示1点。

5、注意各部分的关系,由低位到高位逐级设计、调试。

二、【分析与设计】

数字钟是计数器的综合应用,数字钟由十分之一秒、秒钟、分钟、时钟组成,十分之一秒由十进制计数器74160组成,秒钟由六十进制计数器构成,分钟由六十进制计数器,时钟由十二进制计数器构成。

该数字钟程序的底层文件主要有六进制计数器模块、六十进制计数器模块和十二进制模块,对各模块进行封装,供顶层文件调用,各模块有VHDL文本设计及原理图设计。

输入端clk是连续脉冲,clrn是高电平系统复位,en是高电平使能端,输出端是十分之一秒位、秒钟个位、秒钟十位、分钟个位、分钟十位、时钟个位、时钟十位,最后由7个数码管显示各位的值。

该数字钟程序的底层文件主要有六进制计数器模块、六十进制计数器模块和十二进制模块,对各模块进行封装,供顶层文件调用,各模块有VHDL文本设计及原理图设计。

程序框图:

十分之一秒秒钟分钟小时

三、【程序代码及原理图】

1、六进制计数器

VHDL代码:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYcout6IS

PORT(clk,en,clrn,load:

INSTD_LOGIC;

date:

INSTD_LOGIC_VECTOR(2DOWNTO0);

cnt:

OUTSTD_LOGIC_VECTOR(2DOWNTO0);

co:

OUTSTD_LOGIC);

ENDcout6;

ARCHITECTUREbehaveOFcout6IS

SIGNALq:

STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

co<='1'WHEN((q="101")AND(en='1'))ELSE'0';

PROCESS(en,clk)

BEGIN

IFclrn='0'THEN

q<="000";

ELSIF(clk'eventandclk='1')THEN

IFload='0'THEN

q<=date;

ELSIFen='1'THEN

q<=q+1;

IF(q="101")THEN

q<="000";

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

cnt<=q;

ENDbehave;

波形仿真:

2、六十进制计数器

原理图:

波形仿真:

3、十二进制计数器

VHDL代码:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYcout12IS

PORT(clk,clrn,ldn,en:

INSTD_LOGIC;

ha:

INSTD_LOGIC_VECTOR(3DOWNTO0);

hb:

INSTD_LOGIC;

qa:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

qb:

outSTD_LOGIC);

ENDcout12;

ARCHITECTUREbehavOFcout12IS

SIGNALq:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALb:

STD_LOGIC;

SIGNALa:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

PROCESS(en,clk)

BEGIN

IFclrn='0'THEN

q<="0000";

ELSIF(clk'eventandclk='1')THEN

IFldn='0'THEN

b<=hb;

a<=ha;

ELSIFen='1'THEN

q<=q+1;

IF(q="1011")THEN

q<="0000";

ENDIF;

ENDIF;

ENDIF;

CASEqIS

WHEN"0000"=>b<='1';a<="0010";

WHEN"0001"=>b<='0';a<="0001";

WHEN"0010"=>b<='0';a<="0010";

WHEN"0011"=>b<='0';a<="0011";

WHEN"0100"=>b<='0';a<="0100";

WHEN"0101"=>b<='0';a<="0101";

WHEN"0110"=>b<='0';a<="0110";

WHEN"0111"=>b<='0';a<="0111";

WHEN"1000"=>b<='0';a<="1000";

WHEN"1001"=>b<='0';a<="1001";

WHEN"1010"=>b<='1';a<="0000";

WHEN"1011"=>b<='1';a<="0001";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

qa<=a;

qb<=b;

ENDARCHITECTUREbehav;

波形仿真:

4、数字钟

原理图:

波形仿真:

四、【结果与测试】

根据六进制的波形图判断出六进制的设计正确,实现了0~5的计数,并且在5处产生进位,将六进制进行封装与十进制74160根据原理图设计成六十进制计数器,然后将它进行封装,根据六十进的波仿真图可以看出实现了0~59的计数,并且在59处产生进位,然后将它进行封装。

根据十二进制的波形仿真图可以看出实现了0~11的计数,最后根据顶层原理图实现数字钟的设计,根据波形仿真图,由于要给clk赋很多的脉冲才会计到小时,所以我只测试到了一分钟,十分之秒计到9产生进位,秒开始计数,当秒计到59,产生进位,分钟开始计数,因为秒和分钟都是调用的六十进制计数器,秒钟功能是正确的,同理分钟也是可行的,只要来足够的脉冲,就可以实现数字钟,由于纸的限制,数字钟的波形仿真图只计到了一部分,但是根据现有的判断可以断定数字钟的设计是正确的。

接下来是做硬件测试,先选Device,EPF10K10LC84-4,然后进行引脚锁定,由于是简单的数字钟,我就没有对预置端进行引脚锁定。

根据数字钟功能要求可以选实验电路结构图NO.5。

时钟源clk接clock0,引脚号2;使能端en用键7接PIO6,引脚号11;清零端clrn用键6接PIO5,引脚号10;

时钟十位qb用数码管8接PIO44,引脚号72。

时钟个位qa[3..0]用数码管7,qa3接PIO43,引脚号71;qa2接PIO42引脚号70;qa1接PIO41,引脚号67;qa0接PIO40,引脚号66。

分钟十位qmb[2..0]用数码管6,qmb2接PIO38,引脚号64;qmb1接PIO37,引脚号62;qmb0接PIO36,引脚号61。

分钟个位qma[3..0]用数码管5,qma3接PIO35,引脚号60,qma2接PIO34,引脚号59;qma1接PIO33,引脚号58;qma0接PIO32,引脚号54.

秒钟十位qsb[2..0]用数码管4,qsb2接PIO30,引脚号52;qsb1接PIO29,引脚号51;qsb0接PIO28,引脚号50。

秒钟个位qsa[3..0]用数码管3,qsa3接PIO27,引脚号49;qsa2接PIO26,引脚号48;qsa1接PIO25,引脚号47;qsa0接PIO24,引脚号39。

十分之一秒m[3..0]用数码管2,m3接PIO23,引脚号38;m2接PIO22,引脚号37;m1接PIO21,引脚号36;m0接PIO20,引脚号35。

五、【日志与调试记录】

第一周周二:

今天老师分了组,发了课题,是数字电子钟。

我先是好好地研究了一下课题要求,了解设计的要求,跟同组的同学一起讨论了设计要求后,大概对设计有了个清楚的概念,在脑子中也理出了头绪。

因为有一段时间没有用过MAXPLUS2这个软件,我们首先熟悉了一下软件的环境,复习了一下EDA编程的大概步骤,经过一段时间的练习,对这软件慢慢熟悉起来了。

在设计之初,我们首先建立总的文件夹clock,准备将所以的文件保存在这个文件夹下。

然后我们开始了数字钟的设计,第一步,先是六进制计数器的设计,因为在学习EDA课的时候做过类似计数器的实验,不一会儿我们用VHDL语言编好了程序,在进行编译的时候出现了很多的语法问题,还有库选择有所遗漏等等问题,经过修改,编译通过之后,进行波形仿真,第一遍仿真结果没有达到预期的效果,于是我们又重新在程序里找问题,然后重新仿真后,发现进位位在产生进位后没有立即清零,后来对程序进行修改后,最后的波形仿真达到六进制计数器的结果,最后将六进制计数器封装好,以便给六十进制计数器调用。

第一天只做到这些。

第一周周五:

因为六进制计数器已经做好,将它与十进制计数器74160根据原理图设计实现六十进制计数器。

我们用原理图设计,重点就是把十进制计数器的进位位送到六进制计数器的使能端,其他的输入输出端根据需要加端子就好了,考虑到要把六十进制计数器的计数值分两位设计,所以在画原理图的时候将输出端分成两个端子。

然后开始波形仿真的时候,我发现六十进制计数器不能够计数,对着原理图看了很久,一直觉得没有什么错误,后来发现总线的连接有点问题,所以就把总线那边的线再重新画了一次,再次进行波形仿真时,六十进制计数器的功能实现了,最后对六十进制进行封装,供顶层的数字钟调用。

接着,我们想还是用VHDL语言编写十二进制计数器。

十二进制计数器的编写在计数方面跟六进制文本设计类似,就是在输出的时候需要有两个输出端口,分别为十位和个位。

除了这个问题,还有就是十二进制计数器的计数是从0开始计到11,然后再从0又开始新一轮的计数。

而我们的十二进制计数器的要求是从1计到12,再跳回12,所以我们刚开始的时候在想怎么解决这个问题,后来翻看EDA课本,我们想到用case语句,就是当计到0时,运用case语句显示12,其余的就是当计到1,用case语句显示1就好了,剩下来的类推,就这样就把十二进制的编好了,在进行波形仿真时也跟预期的结果一样,最后进行封装。

到今天为止,把数字钟要用的底层的六十进制计数器和十二进制计数器完成好了。

第二周周二:

因为第一周的时候,我们已经把数字钟要用的那些底层的计数器都做好,并且仿真结果也对了,所以,今天就是把那些底层文件用原理图连接起来就好了。

在连接原理图的时候,最主要的就是调用一个十进制计数器74160,两个六十进制计数器,一个十二进制计数器,从74160开始,将它的进位位连接到第一个六十进制的使能端,再将第一个六十进制计数器的进位位连接到第二个六十进制计数器的使能端,最后将六十进制计数器的进位位连接到十二进制计数器的使能端,其余的clk,clrn都是共用一个clk和clrn以达到同步计数和系统复位,由于第一次画原理图的时候画总线那边出现问题,这次在画原理图的时候特别注意了总线那边的连接,还有就是有些输入输出端子是几位的,要在分线的那边对应标号端子,画好原理图后基本没有什么错误,在进行波形仿真的时候,因为要计到小时的话需要来很多的脉冲,所以我们就大概计到了分钟,因为秒钟和分钟调用的同样的计数器,应该不会有错,最后发现在计到59秒的时候没有向分钟进位,在查看了一下原理图后觉得没有什么问题,所以把问题转向我们设计的底层文件,后来发现六进制计数器的进位位在计到5的时候没有进位而在下个0的时候产生的进位,在翻看书上的计数器的编写的程序后发现我们的进位编写在进位里面,而他的却是编在architecture里面的,所以我们将co的那条语句放在了结构体里面,重新保存在进行仿真的时候,我发现进位位这次是出现在计到5的时候,然后就立刻清零了,再将六十进制计数器重新封装,在六十进制计数器的原理图中也重新调用,再进行封装,最后将顶层的原理图重新调用六十进制计数器,在保存之后,进行波形仿真的时候,发现原来的问题没有了,当秒钟计到59时,分钟开始计数,由此判断我们的数字钟的设计应该是可以了。

在完成这些的基础之上,我们开始进行引脚的锁定,因为数字钟的输出需要用到7个数码管,所以我们选定了N0.5这张图。

clk,clrn,en的锁定都没有什么问题,在锁定输出的,因为我们的输出有的是4位,有的是3位的,还有的是2位的,所以在锁定引脚时注意3位直接锁数码管的低3位,2位的直接锁数码管的低2位,按照这样的方法,经过仔细的锁定之后就完成了,今天的任务到此结束,我们就等着硬件测试了。

第二周周五:

因为之前的工作都已做好,我们就找了一台实验箱开始测试,在下载之前打开实验箱的电源,

并且选择模式5,然后在电脑上进行下载,下载完成后,找个小帽插在clock0上的1HZ,也可以选择其他clock0的频率,然后按下键7和键6,因为clrn是低电平清零,en是高电平使能。

按下之后发现数码管上的数在杂乱无章地跳着,系统复位之后重新再次测试一下,发现还是不行,后来我们想可能是clock的问题,换了一下其他的,并且重新锁了一下,还是不能实现数字钟的功能。

之前我们也将底层的那些计数器锁定引脚测试了一下,是能够计数的,但是计数计的不是很稳定。

最后我们换了几台实验箱终于开始计数了,不过有时还是会不稳定,系统复位后,多试几次之后发现数字钟的功能实现了。

六、【心得与体会】

在进行EDA课程设计的过程中,我发现像我们的课题数字钟就是需要调用多个底层文件,所以在设计底层文件的时候,必须要思路清晰,理清头绪,熟练掌握EDA中VHDL语言的编程方法才能够实现底层文件的设计,以免在顶层文件设计的时候出现错误。

EDA课程设计是对我们学习EDA的一种提升,让我们在自己编程的过程中发现问题和解决问题。

因为是上个学期学的EDA,这个学期做课程设计,这时的我们对EDA没有以前没有熟悉了,在刚开始的时候经常犯些低级错误,自己的编译的时候也不怎么能发现问题,所以同组的同学的互相合作至关重要。

因为大家可能关注的点不同,在编程的时候也有不同的思路,当我们在某个地方卡住做不下去的时候,同学的提醒显得非常重要,所以说EDA课程设计不仅是考的我们EDA知识的掌握也是在帮助我们培养与同学互相协作的能力。

通过EDA课程设计,我们能够对EDA这门课有了更加深刻的认识和掌握,对我们以后的职业规划也是有所帮助的。

虽然说这次的数字钟只是个稍微简单的项目,课题的要求也不是很严格,只是一个简单的数字钟,没有数字钟其他的功能,例如整点报时、闹钟、校准等,所以说我们的设计还是存在缺陷的,但是已达到此次课程设计的要求。

通过这次的课程设计,我懂得任何的一个项目都离不开一个团队合作,并且一个看似复杂的项目,要是可以分好模块,从简单开始,再慢慢地在此基础之上加上多些的功能,就可以完成的了。

总而言之,这次的课程设计收获匪浅,是个很好的锻炼自己能力的机会,也磨炼了一下自己的耐心,让我能够静下心来好好的做好一个课题,是个很值得的事!

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

当前位置:首页 > PPT模板 > 图表模板

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

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