EDA自动值更器课程设计.docx
- 文档编号:8625786
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:25
- 大小:1.31MB
EDA自动值更器课程设计.docx
《EDA自动值更器课程设计.docx》由会员分享,可在线阅读,更多相关《EDA自动值更器课程设计.docx(25页珍藏版)》请在冰豆网上搜索。
EDA自动值更器课程设计
一绪论
1在信息产业中EDA产生的影响
随着大规模集成电路技术和计算机技术的不断发展,在涉及通信、国防、航天、医学、工业自动化、计算机应用、仪器仪表等领域的电子系统设计工作中,EDA技术的含量正以惊人的速度上升;电子类的高新技术项目的开发也逾益依赖于EDA技术的应用。
即使是普通的电子产品的开发,EDA技术常常使一些原来的技术瓶颈得以轻松突破,从而使产品的开发周期大为缩短、性能价格比大幅提高。
不言而喻,EDA技术将迅速成为电子设计领域中的极其重要的组成部分。
2中国国内EDA发展情况
从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用文泛、工具多样、软件功能强大。
中国EDA市场已渐趋成熟,不过大部分设计工程师面向的是PC主板和小型ASIC领域,仅有小部分(约11%)的设计人员工发复杂的片上系统器件。
为了与台湾和美国的设计工程师形成更有力的竞争,中国的设计队伍有必要购入一些最新的EDA技术。
在信息通信领域,要优先发展高速宽带信息网、深亚微米集成电路、新型元器件、计算机及软件技术、第三代移动通信技术、信息管理、信息安全技术,积极开拓以数字技术、网络技术为基础的新一代信息产品,发展新兴产业,培育新的经济增长点。
要大力推进制造业信息化,积极开展计算机辅助设计(CAD)、计算机辅助工程(CAE)、计算机辅助工艺(CAPP)、计算机机辅助制造(CAM)、产品数据管理(PDM)、制造资源计划(MRPII)及企业资源管理(ERP)等。
有条件的企业可开展“网络制造”,便于合作设计、合作制造,参与国内和国际竞争。
开展“数控化”工程和“数字化”工程。
自动化仪表的技术发展趋势的测试技术、控制技术与计算机技术、通信技术进一步融合,形成测量、控制、通信与计算机(M3C)结构。
在ASIC和PLD设计方面,向超高速、高密度、低功耗、低电压方向发展。
3课程设计目的
(1)加深对VHDL语言设计的理解。
(2)通过对自动值更器的设计加深对EDA课程的理解
(3)熟悉MAX+PLUS
仿真软件的工作方法及应用技术
4课题设计内容
本次课程设计的主要目的旨在通过独立完成一个“自动值更器”的设计,达到对EDA技术的熟练掌握,提升对《EDA技术及应用》课程所学内容的掌握和应用。
1、计数24小时的时钟
2、六位数码管显示“时-分-秒”
3、五个功能键
(1)Timer从其它状态放回时钟状态
(2)Alarm切换到定时时间的设定
(3)Set按一下,跳到下一个设置区
(4)Down按一下,所设置区的数字减1
(5)Up按一下,所设置区的数字加1
4、带有定时功能;
5、键盘的设定值要求在LED上显示。
一设计的总体方案
流程图:
本自动值更器由三个模块组成:
(1)时间显示:
24小时制显示时间:
小时用8与7数码管,分钟用5与4位数码管,秒由2与1位数码管表示,小时与分钟之间、分钟与秒之间用3和6位数码管显示“—”,总计八位七段数码显示管。
此模式下显示当前时间。
(2)校时模式:
将time键置于‘0’,运用功能键set键对八位数码管进行选择,并由功能键up键进行+1与down键进行-1操作,通过此4个功能键进行校时设置。
Set->数码管7->Set->数码管6->Set->数码管5->Set->数码管4->Set->数码管3->Set->数码管2->Set->数码管1
Up->+1;down->-1;
(3)定时设定模式:
将time键置于‘1’,设定模式与校时时设定一样,运用功能键set键对八位数码管进行选择,并由功能键up键进行+1与down键进行-1操作,通过此4个功能键进行校时设置。
Set->数码管7->Set->数码管6->Set->数码管5->Set->数码管4->Set->数码管3->Set->数码管2->Set->数码管1
Up->+1;down->-1;
二设计的详细原理
此多自动值更器是由多个模块组成,各个模块实现各自不同的作用,综合起来,便是自动值更器。
1、主要模块如下:
(1)输入一个250KHZ的方波信号
(2)计时模块:
将time键置于‘0’,用软件设计,当脉冲累计2500000次时secondl自动+1,以此类推,可得出数字时钟,并用8位7段对各时间进行显示。
输入:
250KHz脉冲,控制键time等
输出:
秒、分、小时
(3)校时模块:
将time键置于‘0’,运用功能键set键对八位数码管进行选择,并由功能键up键进行+1与down键进行-1操作,通过此4个功能键进行校时设置。
输入:
time状态转换键,set数码管选定键,up+1键,down-1键
输出:
设定后的秒,分,小时
(4)设定定时模块:
与校时操作类似,只是先将time键置于‘1’,再运用功能键set键对八位数码管进行选择,并由功能键up键进行+1与down键进行-1操作,通过此4个功能键进行校时设置
输入:
time状态转换键,set数码管选定键,up+1键,down-1键
输出:
所定的时间秒,分,小时
(5)整点蜂鸣报时
运用软件进行设置,当minuteH与minuteL均为零时,蜂鸣器响,也就是没次整点时,蜂鸣器自动响一分钟,如果想设置响的时间,可以手动改即可。
并且可以手动按下功能键naozhong,这样就可以手动关闭蜂鸣器。
输入:
naozhong关闭蜂鸣器键
输出:
蜂鸣器发出蜂鸣声
2、功能概述
输入一个250KHZ的方波信号,运用VHDL语言对其进行编译,用计数器对方波信号进行技术,当cnt=2500000时,secondl自动+1,不断进行累加,可以达到实现数字钟自动计时功能。
并且此自动值更器设有5个功能键,
(1)time键控制显示状态,可以选择时钟状态与定时状态的转换
(2)naozhong键可以手动关闭蜂鸣器(3)set键可以选择需要改变的数码管,以便进行调时与设定定时时间(4)up键对对应的数据进行+1操作(5)down键对对应的数据进行-1操作。
通过次5个功能键,便可实现自动值更器,拥有计时/校时功能,设定定时功能,自动值更功能。
四设计的步骤和过程
1计时模块:
ifclk_1k'eventandclk_1k='1'then
cnt:
=cnt+1;
ct:
=ct+1;
ifct=1000then--1秒计时。
ct:
=0;
secondL:
=secondL+1;
ifsecondL=10then--10秒计时。
secondL:
=0;
secondH:
=secondH+1;
endif;
ifsecondH=6then--1分钟计时。
secondH:
=0;
minuteL:
=minuteL+1;
endif;
ifminuteL=10then--10分钟计时。
minuteL:
=0;
minuteH:
=minuteH+1;
endif;
ifminuteH=6then--1小计时时。
minuteH:
=0;
hourL:
=hourL+1;
endif;
ifhourL=10then--10小时计时。
hourL:
=0;
hourH:
=hourH+1;
endif;
ifhourH=2andhourL=4then--24小时计时
hourH:
=0;
hourL:
=0;
endif;
次模块的主要作用是完成24小时的即时显示。
2校时模块
ifclk'eventandclk='1'then
d<=set;
k<=up;
p<=down
iftime='0'then
if(d='0'andset='1')then
stat<=stat+1;
endif;
casestatis
when1=>
if(k='0'andup='1')then
hourH<=hourH+1;
elsif(p='0'anddown='1')then
hourH<=hourH-1;
endif;
when2=>if(k='0'andup='1')then
hourL<=hourL+1;
elsif(p='0'anddown='1')then
hourL<=hourL-1;
endif;
when3=>if(k='0'andup='1')then
minuteH<=minuteH+1;
elsif(p='0'anddown='1')then
minuteH<=minuteH-1;
endif;
when4=>if(k='0'andup='1')then
minuteL<=minuteL+1;
elsif(p='0'anddown='1')then
minuteL<=minuteL-1;
endif;
when5=>
if(k='0'andup='1')then
secondH<=secondH+1;
elsif(p='0'anddown='1')then
secondH<=secondH-1;
endif;
when6=>if(k='0'andup='1')then
secondL<=secondL+1;
elsif(p='0'anddown='1')then
secondL<=secondL-1;
endif;
whenothers=>null;
endcase;
endif;
此模块的主要功能是进行时钟初始时间的设置。
3、设定定时模块:
ifclk'eventandclk='1'then
d<=set;
k<=up;
p<=down;
iftime='1'then
if(d='0'andset='1')then
stat<=stat+1;
endif;
casestatis
when1=>
if(k='0'andup='1')then
alarm_hourH<=alarm_hourH+1;
elsif(p='0'anddown='1')then
alarm_hourH<=alarm_hourH-1;
endif;
when2=>if(k='0'andup='1')then
alarm_hourL<=alarm_hourL+1;
elsif(p='0'anddown='1')then
alarm_hourL<=alarm_hourL-1;
endif;
when3=>if(k='0'andup='1')then
alarm_minuteH<=alarm_minuteH+1;
elsif(p='0'anddown='1')then
alarm_minuteH<=alarm_minuteH-1;
endif;
when4=>if(k='0'andup='1')then
alarm_minuteL<=alarm_minuteL+1;
elsif(p='0'anddown='1')then
alarm_minuteL<=alarm_minuteL-1;
endif;
when5=>
if(k='0'andup='1')then
alarm_secondH<=alarm_secondH+1;
elsif(p='0'anddown='1')then
alarm_secondH<=alarm_secondH-1;
endif;
when6=>if(k='0'andup='1')then
alarm_secondL<=alarm_secondL+1;
elsif(p='0'anddown='1')then
alarm_secondL<=alarm_secondL-1;
endif;
whenothers=>null;
endcase;
endif;
此模块完成闹钟的设定。
4、显示模块设计
if(time='0')then
ahourH<=hourH;
ahourL<=hourL;
aminuteH<=minuteH;
aminuteL<=minuteL;
asecondH<=secondH;
asecondL<=secondL;
elsif(time='1')then
ahourH<=alarm_hourH;
ahourL<=alarm_hourL;
aminuteH<=alarm_minuteH;
aminuteL<=alarm_minuteL;
asecondH<=alarm_secondH;
asecondL<=alarm_secondL;
endif;
casecntis--Todisplaythetime.
when0=>L<="000";--Enabletheleftmostdisplay.
caseahourHis
when0=>dled<=X"FC";--0
when1=>dled<=X"60";--1
when2=>dled<=X"DA";--2
whenothers=>null;
endcase;
when1=>L<="001";--Enabletheseconddisplay.
caseahourLis
when0=>dled<=X"FC";--0
when1=>dled<=X"60";--1
when2=>dled<=X"DA";--2
when3=>dled<=X"F2";--3
when4=>dled<=X"66";--4
when5=>dled<=X"B6";--5
when6=>dled<=X"BE";--6
when7=>dled<=X"E0";--7
when8=>dled<=X"FE";--8
when9=>dled<=X"F6";--9
whenothers=>null;
endcase;
when2=>L<="010";--Enablethethirddisplay.
dled<=X"01";--Blanked.
when3=>L<="011";--Enablethefourthdisplay.
caseaminuteHis
when0=>dled<=X"FC";--0
when1=>dled<=X"60";--1
when2=>dled<=X"DA";--2
when3=>dled<=X"F2";--3
when4=>dled<=X"66";--4
when5=>dled<=X"B6";--5
whenothers=>null;
endcase;
when4=>L<="100";--Enablethefifthdisplay.
caseaminuteLis
when0=>dled<=X"FC";--0
when1=>dled<=X"60";--1
when2=>dled<=X"DA";--2
when3=>dled<=X"F2";--3
when4=>dled<=X"66";--4
when5=>dled<=X"B6";--5
when6=>dled<=X"BE";--6
when7=>dled<=X"E0";--7
when8=>dled<=X"FE";--8
when9=>dled<=X"F6";--9
whenothers=>null;
endcase;
when5=>L<="101";--Enablethesixthdisplay.
dled<=X"01";--Blanked.
when6=>L<="110";--Enabletheseventhdisplay.
caseasecondHis
when0=>dled<=X"FC";--0
when1=>dled<=X"60";--1
when2=>dled<=X"DA";--2
when3=>dled<=X"F2";--3
when4=>dled<=X"66";--4
when5=>dled<=X"B6";--5
whenothers=>null;
endcase;
when7=>L<="111";--Enabletherightmostdisplay
caseasecondLis
when0=>dled<=X"FC";--0
when1=>dled<=X"60";--1
when2=>dled<=X"DA";--2
when3=>dled<=X"F2";--3
when4=>dled<=X"66";--4
when5=>dled<=X"B6";--5
when6=>dled<=X"BE";--6
when7=>dled<=X"E0";--7
when8=>dled<=X"FE";--8
when9=>dled<=X"F6";--9
whenothers=>null;
endcase;
endcase;
此模块实现数字钟的显示及定时时间设定值的显示。
五、蜂鸣器模块设计
if((hourH=alarm_hourH)and(hourL=alarm_hourL)and(minuteH=alarm_minuteH)and(minuteL=alarm_minuteL))or((minuteH=0)and(minuteL=0))then
sound<='1';
endif;
if(naozhong='1')then
sound<='0';
endif;
此模块实现闹钟蜂鸣以及整点蜂鸣报时。
四、设计的仿真和运行结果
(1)将time键置于‘0’,输入clk信号,可以得到时钟输出波形为:
此时时钟自动计时,并且将计时数据传送至显示管显示。
如上图asecond=second;
(2)将time键置于‘0’,输入clk信号,并将set改为20分频信号,up与down信号交叉为1,得到时钟输出波形为:
如图所示此时时间不是正常变化,因为有手动设置进行up(+1)操作和down(-1)操作,并且将时间由数码管显示。
(3)将time键置于‘1’,则显示闹钟初始调节状态:
此时secondl,secondH,minuteL,minuteH,hourL,hourH不受影响,均自动计时,但是并不由数码管进行显示,此时显示的是闹钟初定时间,这时均为0。
由于set变化,stat顺序发生变化。
(4)将time置于‘1’,并可以改变set键进行数码管选择,并用up(+1)操作和down(-1)操作,进行闹钟的初步设定。
此时可以得到时钟的初步设定。
(5)外部硬件的链接方法如图
(6)时钟显示如下图
时钟图如上
闹钟初定时间如上图
五课程设计的心得体会
EDA的课程设计持续了两周,但我却觉得仿佛还是当日,真是挥指之间,时光已匆匆流逝。
在这整整两个星期的日子里,我感受到了既是成功做出一个模块的欢喜,也是修改那无限errors时的忧愁,可以说是无数次的苦尽甘来,换来了最后的成功。
本身我就对动手的实验相当有兴趣,这次能够拥有两周的课程设计时间,我甚是欣慰。
从第一天开始知道我的多功能时钟课题开始,我就第一时间跑去图书馆借资料,回去反复研究,从看懂程序开始入手。
虽然开始有些棘手,但我觉得特别的兴奋,我不把困难当成拦路虎,反而成为我前进的动力,遇到困难不会就翻书,找不到就问同学,再不行就上网搜,实在不行再问老师,总之想尽一切办法找到解决方案。
可是事与愿违,我的设计总是出那么一点点的小问题,有时候编译只出现1个error,但一改就成了20个errors了,真是让人哭笑不得,望天兴叹呀!
经过两三天的基础训练,我终于能够完整的看懂程序。
首先我将老师给我们基本的时钟程序进行编译,封锁引脚,然后在硬件上得到正确的数码管显示。
通过这个最基本的操作,我将大体流程映入脑海,可以举一反三,再困难的程序也不怕。
整点报时自然是最简单的,我首先就加到程序内部,其次我在网上找到了闹钟程序,因为跟要求差距过大,所以我先读懂程序,然后根据自己理解,一步步的加进初始的时钟程序。
这个看似很简单的过程,却整整费了4天的时间,期间错误百出。
我先是运用了多个process,进行模块化的处理,通过这里面出现的问题我才知道敏感参数列表是不能乱设置的,single是全局变量,而variable只能在一个process中使用等等。
后来慢慢理解了其中的原委,发现我的程序竟如此之长,我决定要大量的删减,于是我又把多个process改成了一个,看似好像我是又回到了出发点,但我觉得这绝对是一次质的飞跃,是我能够依照我的想法自由变换程序的映照。
当我自认为要成功的时候,我却遇到了一个相当棘手的问题,此时error显示unkownprobleminternalerror:
”widthemismatchinrelationopreator”inebuildbinaryopanline1347offile,虽然只有一个问题,但这个问题却无法定位,以至于我找了很久都没找到。
那几天我心里很压抑,明明对的程序,为什么就出现这样的问题,让我真的很头疼,差点绝望放弃。
直至周二,我决定从新回到起点,再写一次,一个模块一个模块往里加。
终于在我不倦的努力下,我找出了错误的语句,并用其他语句替换了它,然后轻松地加入比较简单的校时模块、蜂鸣模块。
终于在周四之前将程序顺利的完成,本想再将秒表加进来,但看到程序比较繁琐,就此作罢。
看到最后程序的各个模块正确的运行,心情真是无法言语…
通过这次独立的课程设计,我学到了很多书本上学不到的东西,尤其是在改正错误的时候,我能更加深入的了解VHDL语言的精妙之处。
比如同一个process下不能使用不同信号进行event跳变,single与variable之间的差别等等等等。
通过这一次一次的亲身体验,我仿佛发生了一次洗礼,经过了一个质的飞跃。
现在的我已经基本能看懂VHDL程序,改正其中出现的错误。
希望以后能多多进行这样的实习,让自己的能力越来越高。
参考书目:
[1]阎石主编,《数字电子技术基础》,高等教育出版社,1998
[2]谭会生等主编,《EDA技术及应用》,西安电子科技大学出版社,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 自动 值更器 课程设计