VHDL秒表实验报告论文.docx

上传人:b****8 文档编号:28789524 上传时间:2023-07-19 格式:DOCX 页数:20 大小:115.84KB
下载 相关 举报
VHDL秒表实验报告论文.docx_第1页
第1页 / 共20页
VHDL秒表实验报告论文.docx_第2页
第2页 / 共20页
VHDL秒表实验报告论文.docx_第3页
第3页 / 共20页
VHDL秒表实验报告论文.docx_第4页
第4页 / 共20页
VHDL秒表实验报告论文.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

VHDL秒表实验报告论文.docx

《VHDL秒表实验报告论文.docx》由会员分享,可在线阅读,更多相关《VHDL秒表实验报告论文.docx(20页珍藏版)》请在冰豆网上搜索。

VHDL秒表实验报告论文.docx

VHDL秒表实验报告论文

硬件描述语言期末实验报告

 

题目:

硬件描述语言实现秒表功能

 

姓名孙斌

学号2012

年级专业12级数电1班

指导教师伊开

 

2012年6月20日

河北大学本科生VHDL硬件实验论文(设计)

硬件描述语言实现秒表功能

摘要

应用VHDL语言设计数字系统,很多设计工作可以在计算机上完成,从而缩短了数字系统的开发时间。

我们尝试利用VHDL为开发工具设计数字秒表。

秒表的逻辑结构较简单,它主要由十进制计数器、六进制计数器、数据选择器、和显示译码器等组成。

在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲,除此之外整个秒表还需有一个启动信号,暂停信号和一个清零信号,以便秒表能随意停止及启动。

 

关键词:

VHDL语言数字秒表时序仿真图

 

目录

1、实验目的…………………………………………………………1

二、硬件要求…………………………………………………………1

三、引脚说明…………………………………………………………1

四、模块介绍…………………………………………………………2

4.1.计数器(六、十进制)…………………………………………2

4.2.蜂鸣器……………………………………………………………2

4.3.译码器……………………………………………………………3

4.4.控制器……………………………………………………………4

五、整体连接图………………………………………………………5

六、实验结果…………………………………………………………6

七、实验总结…………………………………………………………6

八、谢辞………………………………………………………………7

九、附录………………………………………………………………7

 

一实验目的

学习使用VHDL语言,以及EDA芯片的下载仿真。

二硬件要求

(1)主芯片EPF10K10LC84-4。

(2)蜂鸣器。

(3)8位八段扫描共阴极数码显示管。

(4)二个按键(暂停,开关)。

三引脚说明

3.1引脚设置

端口类型

端口名

数据类型

说明

in

clk,pause_clk,

std_logic

时钟信号

stop

开始,清零按钮

 

out

a,b,c,d,e,f,g,dp

 

std_logic

各个显示灯的连接

sr_out

蜂鸣器

d1,d2,d3,d4,d5,d6

控制数码管的信号

3.2信号说明

signalq:

std_logic_vector(3downto0);

--q是用于分频的信号。

signalstate:

std_logic_vector(3downto0);

--state为状态信号,state为1时为暂停记录状态,为0时为正常显示计数状态。

signalled:

std_logic_vector(3downto0);

--led为数码管扫描信号,通过对d1~d6的选择使数码管发光。

signaldata,data1,data2,data3,data4,data5,data6,data7,data8:

std_logic_vector(3downto0);

--data1~data8这些信号为计数器所记录的数值,data为传入译码器的变化值。

signalpause1,pause2,pause3,pause4,pause5,pause6:

std_logic_vector(3downto0);

--这些信号为实现暂停功能寄存信号。

signaloutput:

std_logic_vector(6downto0);

--output为译码输出的信号总线。

signalsound:

std_logic_vector(3downto0)

--sound为蜂鸣器的输入分频器。

signalsound_sout:

std_logic_vector(15downto0);

--data1~data4的总线。

signalsound_star:

std_logic;

--为蜂鸣器输入频率的开关。

四模块介绍

时钟的设计共化分为5个模块:

六进制计数电路,报时电路,扫描电路,译码电路。

下面具体分析各个模块的原理、内容和功能。

4.1计数器

if(count=X)then--‘X’为进制数,为5即为6进制,为9就是10进制。

count<="0000";

next_count_clk<='1';--为下一个计数器的时钟信号输入。

else

count<=count+'1';--实现计数功能。

next_count_clk<='0';

endif;

4.2蜂鸣器

process(data6,data5,data4,data3,data2,data1)

begin

sound_sout<=data4&data3&data2&data1;--实现整点报时的标识。

if(sound_sout=0)then

if(data5>=1)then

sound_star<='1';--开始报时的信号

elsif(data6>=1)then

sound_star<='1';

endif;

endif;

if(sound_star='1')then

if(sound=1)then

sr_out<='1';

else

sr_out<='0';

endif;

endif;

if(data3=5)then

sound_star<='0';--结束报时的信号

endif;

endprocess;

 

4.3译码器

process(data)

begin

case(data)is--低电平有效

when"0000"=>output<="0000001";--显示0

when"0001"=>output<="1001111";--显示1

when"0010"=>output<="0010010";--显示2

when"0011"=>output<="0000110";--显示3

when"0100"=>output<="1001100";--显示4

when"0101"=>output<="0100100";--显示5

when"0110"=>output<="0100000";--显示6

when"0111"=>output<="0001111";--显示7

when"1000"=>output<="0000000";--显示8

when"1001"=>output<="0000100";--显示9

whenothers=>output<="0000110";

endcase;

endprocess;

a<=output(6);

b<=output(5);

c<=output(4);

d<=output(3);

e<=output

(2);

f<=output

(1);

g<=output(0);

4.4控制器

--输出控制器

case(led)is

when"0000"=>data<=data1;--将百分秒位赋值于data。

d1<='0';d2<='1';d3<='1';d4<='1';d5<='1';d6<='1';dp<='1';--(从右到左)选择第一个数码管。

pause1<=data1;--寄存现在的数值。

when"0001"=>data<=data2;--十分秒位

d1<='1';d2<='0';d3<='1';d4<='1';d5<='1';d6<='1';dp<='1';--第二个数码管

pause2<=data2;--寄存

when"0010"=>data<=data3;--秒低位

d1<='1';d2<='1';d3<='0';d4<='1';d5<='1';d6<='1';dp<='0';--第三个数码管

pause3<=data3;--寄存

when"0011"=>data<=data4;--秒高位

d1<='1';d2<='1';d3<='1';d4<='0';d5<='1';d6<='1';dp<='1';--第四个数码管

pause4<=data4;--寄存

when"0100"=>data<=data5;--分低位

d1<='1';d2<='1';d3<='1';d4<='1';d5<='0';d6<='1';dp<='0';--第五个数码管

pause5<=data5;--寄存

when"0101"=>data<=data6;--分高位

d1<='1';d2<='1';d3<='1';d4<='1';d5<='1';d6<='0';dp<='1';--第六个数码管

pause6<=data6;--寄存

whenothers=>data<="1000";

endcase;

 

process(pause_clk,stop)--状态控制器

begin

if(pause_clk'eventandpause_clk='1')then

if(state="0001")then

state<="0000";--计时显示状态

else

state<=state+1;--暂停状态

endif;

endif;

endprocess;

五整体连接图

六实验结果

器件上六个数码管上各自显示这一个数值,当左侧第一个开关为1时便清零停止,为0时便开始计数,从00.00.00开始,记录到59.59.99时会变为01.00.00,此时记录为时位、分位和秒位,直到23.59.59时才会自动清零,又从头开始计数。

另外该器件上还有另一个按钮,为暂停记录按钮,该按钮的作用是对正在计数显示的秒表进行数值显示上的暂停功能,再暂停之后再按这个按钮时,则是继续进行显示,其中计数功能并没有终断,只是在输出显示上暂停而已。

另外,当分位为整时本秒表会进行报时蜂鸣。

充分满足了老师的要求。

七实验总结

本次VHDL课程设计历时一个学期,从开始接触到现在结束已经经历了一个学期的日子,因为很多东西都不了解,可以说是苦多于甜,但是后来我学到了很多东西,而且通过实验我还学到了很多在书本上所没有学到过的知识。

这次设计,是对这一学期来所学知识的检验,也是进一步加深对VHDL的了解,我对它有浓厚的兴趣。

但是在编调试程序时,也遇到了不少问题,特别是各元件之间的连接,以及各种语法,总是有错误,在细心的检查下,终于找出了错误,排除困难后,程序编译就通过了。

在硬件实验时,也遇到了一点困难:

想要的结果不能在数码管上得到正确的显示;在设定输入的时钟信号后,数字秒表开始计数,但是始终是乱码等。

后来,经过多次调试之后,才发现是因为输入的时钟信号出了问题。

经过屡次调试,终于找到了比较合适的输入脉冲,时钟周期设置在100hz秒左右比较合适。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

总的来说,这次设计的数字秒表还是比较成功的,虽然在实际的过程中曾经遇到了大量的问题,但是经过自己的努力,都给妥善解决了,这样的积累对于现在大学生来说是十分宝贵的。

希望以后能有更多的动手实践机会,在硬件中发现自己的不足,弥补自己的不足,最终成为一个合格的大学生。

最后,特别感谢老师对我的帮助。

 

谢辞

本论文的完成,得益于伊开和张芳老师传授的知识,使本人有了完成论文所要求的知识积累,更得益于两位老师从选题的确定、论文资料的收集、论文框架的确定、开题报告准备及论文初稿与定稿中对字句的斟酌倾注的大量心血,在此对两位老师表示感谢!

感谢和我一起生活四年的室友,是你们让我们的寝室充满快乐与温馨,“君子和而不同”,我们正是如此!

愿我们以后的人生都可以充实、多彩与快乐!

感谢我的同学们,谢谢你们给予我的帮助。

回首本人的求学生涯,父母的支持是本人最大的动力。

父母不仅在经济上承受了巨大的负担,在心里上更有思子之情的煎熬与望子成龙的期待。

忆往昔,每次回到家时父母的欣喜之情,每次离家时父母的依依不舍之眼神,电话和信件中的殷殷期待和思念之语,皆使本人刻苦铭心,目前除了学习成绩尚可外无以为报,希望以后的学习、工作和生活能使父母宽慰。

通过这一阶段的努力,我的论文《硬件描述语言实现秒表功能》终于完成了。

在这个阶段,我在学习上和思想上都受益非浅,这除了自身的努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的。

时间的仓促及自身专业水平的不足,整篇论文肯定存在尚未发现的缺点和错误。

恳请阅读此篇论文的老师、同学,多予指正,不胜感激!

在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!

最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们!

愿把我的幸福和快乐都送给关心和支持过我的人,也愿他们一切如意。

附录

--QuartusIIVHDLTemplate

--BasicShiftRegister

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityminute_clockis

port

clk,pause_clk,stop:

instd_logic;

a,b,c,d,e,f,g,dp,sr_out:

outstd_logic;

d1,d2,d3,d4,d5,d6:

outstd_logic

);

endentity;

architecturertlofminute_clockis

signalq:

std_logic_vector(3downto0);

signalstate,led,data:

std_logic_vector(3downto0);

signaldata1,data2,data3,data4,data5,data6,data7,data8:

std_logic_vector(3downto0);

signalpause1,pause2,pause3,pause4,pause5,pause6,sound:

std_logic_vector(3downto0);

signaloutput:

std_logic_vector(6downto0);

signalsound_sout:

std_logic_vector(15downto0);

signalsound_star:

std_logic;

begin

process(pause_clk,stop)

begin

if(sound=1)then

sound<="0000";

else

sound<=sound+'1';

endif;

if(pause_clk'eventandpause_clk='1')then

if(state="0001")then

state<="0000";

else

state<=state+1;

endif;

endif;

endprocess;

process(clk,stop)

begin

if(stop='1')then

data1<="0000";

data2<="0000";

data3<="0000";

data4<="0000";

data5<="0000";

data6<="0000";

data7<="0000";

data8<="0000";

else

if(clk'eventandclk='1')then

if(q=6)then

q<="0000";

if(data1="1001")then

data1<="0000";

if(data2="1001")then

data2<="0000";

if(data3="1001")then

data3<="0000";

if(data4="0101")then

data4<="0000";

if(data5="1001")then

data5<="0000";

if(data6="0101")then

data6<="0000";

if(data7="1001")then

data7<="0000";

if(data8="0010")then

data8<="0000";

else

data8<=data8+'1';

endif;

elsif(data8="0010"anddata7="0011")then

data7<="0000";

data8<="0000";

else

data7<=data7+'1';

endif;

else

data6<=data6+'1';

endif;

else

data5<=data5+'1';

endif;

else

data4<=data4+'1';

endif;

else

data3<=data3+'1';

endif;

else

data2<=data2+'1';

endif;

else

data1<=data1+'1';

endif;

else

q<=q+'1';

endif;

endif;

endif;

endprocess;

process(data6,data5,data4,data3,data2,data1)

begin

sound_sout<=data4&data3&data2&data1;

if(sound_sout=0)then

if(data5>=1)then

sound_star<='1';

elsif(data6>=1)then

sound_star<='1';

endif;

endif;

if(sound_star='1')then

if(sound=1)then

sr_out<='1';

else

sr_out<='0';

endif;

endif;

if(data3=5)then

sound_star<='0';

endif;

endprocess;

process(clk)

begin

if(clk'eventandclk='1')then

if(led="0101")then

led<="0000";

else

led<=led+1;

endif;

endif;

endprocess;

process(led,data7)

begin

if(state="0001")then

case(led)is

when"0000"=>data<=pause1;d1<='0';d2<='1';d3<='1';d4<='1';d5<='1';d6<='1';dp<='1';

when"0001"=>data<=pause2;d1<='1';d2<='0';d3<='1';d4<='1';d5<='1';d6<='1';dp<='1';

when"0010"=>data<=pause3;d1<='1';d2<='1';d3<='0';d4<='1';d5<='1';d6<='1';dp<='0';

when"0011"=>data<=pause4;d1<='1';d2<='1';d3<='1';d4<='0';d5<='1';d6<='1';dp<='1';

when"0100"=>data<=pause5;d1<='1';d2<='1';d3<='1';d4<='1';d5<='0';d6<='1';dp<='0';

when"0101"=>data<=pause6;d1<='1';d2<='1';d3<='1';d4<='1';d5<='1';d6<='0';dp<='1';

whenothers=>data<="1000";

endcase;

else

if(data7="0000"anddata8<="0000")then

case(led)is

when"0000"=>data<=data1;d1<='0';d2<='1';d3<='1';d4<='1';d5<='1';d6<='1';dp<='1';pause1<=data1;

when"0001"=>data<=data2;d1<='1';d2<='0';d3<='1';d4<='1';d5<='1';d6<='1';dp<='1';pause2<=data2;

when"0010"=>data<=data3;d1<='1';d2<='1';d3<='0';d4<='1';d5<='1';d6<='1';dp<='0

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

当前位置:首页 > 解决方案 > 工作计划

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

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