VHDL实验报告论文Word文档格式.docx
《VHDL实验报告论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《VHDL实验报告论文Word文档格式.docx(20页珍藏版)》请在冰点文库上搜索。
(4)二个按键(暂停,开关)。
三引脚说明
3.1引脚设置
端口类型
端口名
数据类型
说明
in
clk,pause_clk,
std_logic
时钟信号
stop
开始,清零按钮
out
a,b,c,d,e,f,g,dp
各个显示灯的连接
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:
--led为数码管扫描信号,通过对d1~d6的选择使数码管发光。
signaldata,data1,data2,data3,data4,data5,data6,data7,data8:
--data1~data8这些信号为计数器所记录的数值,data为传入译码器的变化值。
signalpause1,pause2,pause3,pause4,pause5,pause6:
--这些信号为实现暂停功能寄存信号。
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+'
--实现计数功能。
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<
--开始报时的信号
elsif(data6>
endif;
endif;
if(sound_star='
)then
if(sound=1)then
sr_out<
else
if(data3=5)then
sound_star<
--结束报时的信号
endprocess;
4.3译码器
process(data)
case(data)is--低电平有效
when"
=>
output<
="
0000001"
--显示0
0001"
1001111"
--显示1
0010"
0010010"
--显示2
0011"
0000110"
--显示3
0100"
1001100"
--显示4
0101"
0100100"
--显示5
0110"
0100000"
--显示6
0111"
0001111"
--显示7
1000"
0000000"
--显示8
1001"
0000100"
--显示9
whenothers=>
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"
data<
=data1;
--将百分秒位赋值于data。
d1<
d2<
d3<
d4<
d5<
d6<
dp<
--(从右到左)选择第一个数码管。
pause1<
--寄存现在的数值。
=data2;
--十分秒位
--第二个数码管
pause2<
--寄存
when"
=data3;
--秒低位
--第三个数码管
pause3<
=data4;
--秒高位
--第四个数码管
pause4<
=data5;
--分低位
--第五个数码管
pause5<
=data6;
--分高位
--第六个数码管
pause6<
whenothers=>
endcase;
process(pause_clk,stop)--状态控制器
if(pause_clk'
eventandpause_clk='
if(state="
state<
--计时显示状态
=state+1;
--暂停状态
五整体连接图
六实验结果
器件上六个数码管上各自显示这一个数值,当左侧第一个开关为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
signalstate,led,data:
signaldata1,data2,data3,data4,data5,data6,data7,data8:
signalpause1,pause2,pause3,pause4,pause5,pause6,sound:
signaloutput:
std_logic_vector(6downto0);
begin
process(pause_clk,stop)
if(sound=1)then
sound<
else
=sound+'
process(clk,stop)
if(stop='
data1<
data2<
data3<
data4<
data5<
data6<
data7<
data8<
else
if(clk'
eventandclk='
if(q=6)then
q<
if(data1="
data1<
if(data2="
data2<
if(data3="
data3<
if(data4="
data4<
if(data5="
data5<
if(data6="
data6<
if(data7="
data7<
if(data8="
data8<
else
=data8+'
endif;
elsif(data8="
anddata7="
data8<
else
=data7+'
endif;
else
=data6+'
endif;
else
=data5+'
endif;
else
=data4+'
endif;
else
=data3+'
endif;
else
=data2+'
endif;
else
=data1+'
endif;
=q+'
endif;
process(data6,data5,data4,data3,data2,data1)
if(sound_sout=0)then
if(data5>
sound_star<
elsif(data6>
if(sound_star='
)then
if(sound=1)then
sr_out<
if(data3=5)then
process(clk)
if(led="
led<
=led+1;
process(led,data7)
if(state="
case(led)is
when"
=pause1;
=pause2;
=pause3;
=pause4;
=pause5;
=pause6;
whenothers=>
endcase;
if(data7="
anddata8<
case(led)is
when"