第一篇:基于EDA技术的数字电路课程设计
基于EDA技术的数字电路课程设计
摘要:EDA技术结合数字电路课程设计课程是新教育改革的体现,创新的教学模式开启了学生的智慧,增强实践性与逻辑思维,激发学生热情。在阐述了EDA的特征及优势的同时,探究了它与数字电路课程设计的过程,最后对以新课程改革的观点分析课程设计的优势。
关键词:EDA技术 数字电路设计课 新课程改革
引言
随着社会科学技术不断发展,培养四有新人的重任略显重要。在日常生活中随处可见EDA技术的应用,电子信息时代,逐渐被HTML描述性语言代替。传统的理念及设计手段已经不能完全满足现代企业和社会的需求。在EDA(EleCTRonICs Design Automation)技术基础上,融入到数字电路课程是教育时代的要求,也是教学改革的新课程的要求。国家不仅重视创新发展,更注重培养人才,课程设计,直接影响学生的思想和培育。
1.EDA技术的特征及优势
1.1简单易于操作
计算机行业中,软件硬件的应用是相互结合的。那么,关于EDA技术应用的性质特征为整个设计过程简单可操作性强。在此方面涉及方面比较广泛,内容相对丰富,通过硬件描述与软件开发工具,实现特定的测试电路设计,在修改方面也达到便利的效果。
1.2产品的互换性强
EDA技术在设计上实现了逻辑编程器件,应用上可以自动的检测、编辑,以及对一些程序的重新建构,对其进行修改。设计芯片方法灵活性强,有别于传统的设计思路,在使用效率方面得到显而易见的效果。因而,产品的互换性较强。
1.3自动性能高
在传统的设计上,需要技术人员的操作,在人员辅助下操作完成设计。EDA技术设计突破以往的多人操作的难点,实现自动化设计。这不仅在人员调动方面节约了成本,而且实现了自动化设计。在性能上达到优化,测试全过程及及结果将会自动完成。
2.基于EDA技术结合数字电路课程设计的探究
2.1设计方法与要求
EDA在设计方法上遵循技术改革创新方式,将其传统的设计概念中,加入新的焊接模式的转变,达到了计算机自动化的性能;在设计要求上,运用于数字系统中,例如,在设计数字闹钟的过程中,增加了计时、整点报时等功能。在设计流程上,使用芯片也比传统芯片更实用。
2.2适配器件如何应用
这时代,EDA设计的特点,在底层配件上都尽显完善,适配对象包括布局线都进行了逻辑性操作。这增加了仿真设计的效果。根据所需要的设计文件类型,完成自动化设计过程。若设计有误,可自动下载编程,进行修改。可见器件的适配设计在实际应用中发挥其明显作用。
2.3编码电路与译码电路共占195个逻辑单元
数字电路课程设计应用在EDA中,通过目标系统,使用描述性编码完成设计工作,编译码电路在出错后会自动改错,编码电路与译码电路共同实现了逻辑性的功能,这个过程,体现了EDA技术在数字电路中越来越重要。
3.突破传统教学教程,注重能力的培养
3.1跟上时代脚步,注重教程改革
电路数字课程设计是电子信息专业的一门基础课程。教学课程方面,比以往的教学方案中增加更多互动模式,传教方式灵活简单易懂,注重培养学生的实践能力。目前,EDA技术涉及的领域遍布全国,它的发展已经步入科技前沿。
3.2根据社会需要,学以致用
数字电路课程设计,应用于实际生活的每个层面。在学校、医院、楼层、社区、企业、家庭、交通等领域中,随处可见,例如在医院里,病床疾病呼叫,还有密码解锁、楼层内的控灯、触摸延时灯、数字钟、还有循环彩灯以及在交通运输方面使用的交通灯等,要结合实际需求,达到教学与实践相结合。
3.3技术与课程设计相结合,利于能力的培养
DEA技术与数字电路课程设计的结合,在给学生逻辑思维上的灌输通通明朗。不论在教学教程上还是培育学生上都得到了实质性的提高。传统的数字电路课程设计制约了学生的分析能力,固定的教学模式,限制了学习设计思路,及其独立设计与组装的能力。因此,注重教学课程改革与培养实践技能成为发展趋势。
4高校开展EDA技术课程,教育教学不断完善
就目前状况来看,EDA技术的课程与实践课开展的十分普遍,对于高职电子专业人员来说,综合EDA技术的数字电路课程设计综合的实现了学生的应用能力,这是技术理论上的一场革命性的训练。新课程的培养目标理念深厚,这种教学方式,贯彻了“三个代表”的重要思想。
在课程上新改革,例如以往的法务部与税务部的分割线比较明显,而在大时代背景下,需要新型人才,也需要在企业中事倍功半,在以往的教程上综合了法务与税务的知识,在新课程的推动下,出现法务税务师,这不仅节约了人才,而且自身能力提高,实现个人独特的价值。基于EDA技术的数字电路课程设计理念也是如此,为节约人才与新型技术人员的培养提供可行性的策略。
总结
数字电路课程设计思路有两个,一个是仿真电路设计,一个是应用设计印刷电路板。课程设计的教程实践将会实现个人的独立设计与创新能力。能够培养具有逻辑性的思考和解决问题的高素质人才,提高学生积极性与学校热情,是实现基于EDA技术的数字电路课程设计的关键所在。
参考文献
[1] 李彩.科技视界.浅谈时序逻辑电路.2013(3)[2] 王璐,于冠龙,马永强.浅析航空电子元器件的质量控制.黑龙江科技信息.2015(32)
第二篇:数字电路EDA课程设计数字跑表
EDA课程设计报告书
题目: 数字跑表
姓名: 班级: 学号: 成绩:
一、设计题目及要求 设计题目:数字跑表
要求:1 具有暂停,启动功能。
具有重新开始功能。用六个数码管分别显示百分秒,秒和分钟。
二、设计过程及内容
拿到题目后,我在图书馆进行了相关书籍的查阅,首先明确了题目中设计项目要实现的功能,再进一步确定实现其功能的组成部分和使用器件,对于本次设计的总体思路,首先是设计一个控制模块,可以使跑表具有启动、暂停及重新开始的功能;然后,利用一个分频模块即15进制计数器得到100HZ的时钟脉冲,接入到一个100*60*60三个计数器的模块中,完成对时间的计时工作和对选时模块的输出工作,使选时模块得到对应的时间,其次将选时模块与显示模块连接,使数码管显示选中的当前时间,从而完成了这次课程设计的设计工作,进入到实现过程中去。
根据课程设计要求将设计分为5个模块:
1、控制模块,使跑表具有启动、暂停及重新开始的功能;
2、分频模块,用于得到频率为100HZ的时钟脉冲;
3、计时模块,进行时间的计时,同时将当前时间输出给选时模块;
4、选时模块,从计时器得到当前时间输出给显示模块;
5、显示模块,进行时间的显示。总图如下: 第一个模块:控制器模块
与门可控制时钟信号的输出与否,当跑表为START状态时CLK端为高电平,QA为1,时钟信号输出,当跑表为STOP状态时CLK端为低电平,QA为0,时钟信号不输出,从而实现开始和暂停的功能。REST是清零按钮,REST接到控制模块和总计时器模块的清零端,当REST为高电平时,控制模块和总计数器模块清零,跑表重新开始工作。
第二个模块:分频器模块
将74161接成15进制计数器,将1465HZ的时钟频率转换成近似于100HZ的时钟信号即所需的输入时钟信号,从而实现分频功能。将得到的时钟信号输入到总计数器模块中去。第三个模块:计时模块
计时模块
本模块由两个60进制计数器和一个100进制计数器构成,从而实现百分秒向秒、秒向分的计数功能需求。60进制计数器及100进制计数器均采用两个74LS160,采用整体置数方式接成。从60进制计数器和100进制计数器这三个输出端分别印出八个端口(秒、分、时的个位及十位分别由四个二进制代码表示),将当前时间编码传送给选时模块,实现时间的选择和显示。(秒个位:S0A,S0B,S0C,S0D;秒十位:S1A,S1B,S1C,S1D;分个位:M0A,M0B,M0C,M0D;分十位:M1A,M1B,M1C,M1D;百分秒个位:H0A,H0B,H0C,H0D;百分秒十位:H1A,H1B,H1C,H1D.)
100进制计数器
60进制计数器
第四个模块:选时模块
本模块由四个八选一数据选择器74LS151和地址选择器74LS161构成。
地址选择器74LS161接入一个1465 HZ的时钟信号,使能端和清零端接高电平,使其循环工作,产生一组循环地址码A、B、C,接到数码管的地址端,使其循环显示数字。同时,地址选择器74LS161产生的一组循环地址码接入到四个八选一数据选择器74LS151上,使其对地址相同的一组数据进行选择,产生四个二进制数A0,A1,A2,A3,即为数码管所要显示的数字的编码。
第一个74LS151上的输入端为秒、分、百分秒个位及十位的四位二进制的最低位(S0A,S1A, M0A, M1A, H0A, H1A), 第二个74LS151上的输入端为秒、分、百分秒个位及十位的四位二进制的次低位(S0B,S1B,M0B,M1B,H0B,H1B), 第三个74LS151上的输入端为秒、分、百分秒个位及十位的四位二进制的第二位(S0C,S1C,M0C,M1C,H0C,H1C), 第四个74LS151上的输入端为秒、分、百分秒个位及十位的四位二进制的第一位(S0D,S1D,M0D,M1D,H0D,H1D),通过这四个八位二进制数比较器74LS151选出同一组数(秒个位:S0A,S0B,S0C,S0D;秒十位:S1A,S1B,S1C,S1D;分个位:M0A,M0B,M0C,M0D;分十位:M1A,M1B,M1C,M1D;百分秒个位:H0A,H0B,H0C,H0D;百分秒十位:H1A,H1B,H1C,H1D.)作为输出A0,A1,A2,A3,接到显示模块输入端。
选时模块
第五个模块:显示模块
本模块采用BCD—七段显示译码器7448对实验板上数码管进行驱动。由选时模块输出的显示数字编码A0,A1,A2,A3接至输入端A,B,C,D,使输出端产生七位译码连接到实验箱公共数据输入端ABCDEDG,从而进行数据的显示。
显示模块
三、设计结论
两周的课程设计很快就结束了,虽然时间很短,但是收获颇丰。通过这次课程设计,我学到了许多关于EDA的知识,认识到了EDA的强大功能,更重要的是增强了我的实践动手能力,使我深刻地认识到仅仅学习课本上的知识是远远不够的,必须要多多动手,多多实践,才能真正理解并掌握所学的知识,达到学以致用的目的。同时我也深深地感受到严谨的态度对于科学研究的重要性。由于在设计的过程中,一点点的马虎都可能造成整个系统的瘫痪,所以每一个细节都要认真思考,认真操作,不能有丝 百分的大意。这使我认识到要想做一个科研工作者是多么的不易!自己身上的缺点还有很多,要靠以后艰苦的努力来克服!
这次的EDA课程设计给了我一次非常重要也非常难得的实践机会,使我可以将平时课本上学习的理论知识应用于实际操作。设计的过程是十分艰苦的,由于从未接触过类似的领域,所以刚开始的时候一片茫然,不知道该干些什么。随着研究的逐渐深入,自己渐渐的摸出头绪,掌握了一些规律和方法,设计的成果也逐步成型,最终按照要求完成了设计。在实际操作的过程中,碰到了许多的困难,但最终在老师的耐心指导和同学的热情帮助下,按时完成了任务。在此对老师和同学们表示衷心的感谢!
最后感谢老师给与我这次宝贵的实践机会!
第三篇:《EDA技术》课程设计教学大纲
成都大学课程设计教学大纲
课程设计名称: 《EDA技术课程设计》 课程代码: 学 分: 1 总学时/周数: 1周
适用专业: 电子工程、通信工程、自动化等专业
一、课程设计目的与任务
本课程设计是在学完EDA技术课程后的必修课程,它的教学目的和任务是综合利用所学EDA技术知识完成一个具有完整功能的电子系统设计,从系统顶层模块的划分、各功能模块的硬件语言描述(编程)、各模块及整体电路仿真、到最后下载到可编程器件实现真实的电路,让学生亲自体验一次采用现代电子设计自动化技术完成一个电子系统设计的全过程。让学生得到一次自主使用VHDL语言描述电路功能的训练机会,从而提高对VHDL语言的使用能力,加深对仿真在设计中的重要作用的认识,提高对使用Max+plus2EDA软件工具的熟练程度,最终获得初步的电子系统设计经验,为毕业设计和将来从事电子设计的相关工作打下基础
二、课程设计基本要求
本课程设计,采用以学生自主设计为主教师指导为辅的原则,让学生有一个充分发挥自我想像的空间,设计分阶段进行,在独立力完成了方案设计后,组织一次交流讨论会,互相启发开阔设计思路,尽可能使学生在这个具有创新思维、难度最高的设计环节获得更多的收益,通过该课程设计更深入更全面地提高使用Max+plus2软件工具完成设计全过程的熟练程度,尤其是要提高仿真和试验开发系统的使用能力,设计最终要做出真实电路并上电检测其功能和性能指标是否达到了预定的目标,最后写出课程设计报告。
三、课程设计选题原则
所选题目应是社会生活、生产中常见的、学生易于理解和把握且感兴趣的、对所学知识尽可能综合全面派上用场的、难易程度适中的、一周时间能够完成的的题目。
四、课程设计内容及时间安排
1.设计内容:根据具体设计题目和提出的功能性能指标要求,查阅相应参考资料,将所设计的电路系统划分成若干功能模块完成顶层结构设计(方案设计),对各功能模块用硬件描述语言描述以完成程序设计,对个功能模块及电路系统整体做仿真设计以验证其正误,将设计文件下载至可编程逻辑器件在实验开发装置上检测功能性能指标以完成真实电路的设计。写出课程设计报告,其中要有顶层结构图,各功能模块的程序,各功能模块和整个电路系统的仿真波形图,并对这些设计图纸和设计程序所表达的逻辑思想、工作原理给以说明,写出设计步骤和设计心得。2.课程设计时间:开始设计的前一周公布设计题目下达设计任务,用半周时间完成方案设计、程序设计,另外半周完成仿真、下载、测试。
五、课程设计主要参考资料
潘松 黄继业 编著《EDA技术使用教程》(第二版)科学出版社 2005。
王振红主编《VHDL数字电路设计与应用实践教程》机械工业出版社,2006年。
六、课程设计考核方式及成绩评定
考核成绩由两部分组成:现场检测设计出的真实电路占50%,课程设计报告占50%。
大纲撰写人: 杨显富 系(教研室):(签字)学院学术委员会意见:(签字)
学院审核:(签字、盖章)年 月 日
注:请在黄色显示的区域里用“仿宋 五号”字体填写。
第四篇:数字电路课程设计
一、设计报告书的要求: 1.封面
2.课程设计任务书(题目,设计要求,技术指标等)
3.前言(发展现状、课程设计的意义、设计课题的作用等方面)。3.目录
4.课题设计(⑴ 写出你考虑该问题的基本设计思路,画出一个实现电路功能的大致框图。
⑵ 画出框图中的各部分电路,对各部分电路的工作原理应作出说明。⑶ 画出整个设计电路的原理电路图,并简要地说明电路的工作原理。⑷ 用protel画原理电路图。
(5)用Multisim或者Proteus画仿真图。
5.总图。
6.课题小结(设计的心得和调试的结果)。7.参考文献。
二、评分依据:
①设计思路,②单元电路正确与否,③整体电路是否完整,④电路原理说明是否基本正确,⑤报告是否清晰,⑥答辩过程中回答问题是否基本正确。
三、题目选择:(三人一组,自由组合)(设计要求,技术指标自己选择)
1、基于DC4011水箱水位自动控制器的设计与实现
水箱水位自动控制器,电路采用CD4011四与非门作为处理芯片。要求能够实现如下功能:水箱中的水位低于预定的水位时,自动启动水泵抽水;而当水箱中的水位达到预定的高水位时,使水泵停止抽水,始终保持水箱中有一定的水,既不会干,也不会溢,非常的实用而且方便。
2、基于CD4011声控、光控延时开关的设计与实现
要求电路以CD4011作为中心元件,结合外围电路,实现以下功能:在白天或光线较亮时,节电开关呈关闭状态,灯不亮;夜间或光线较暗时,节电开关呈预备工作状态,当有人经过该开关附近时,脚步声、说话声、拍手声等都能开启节电开关。灯亮后经过40秒左右的延时节电开关自动关闭,灯灭。
3、基于CD4011红外感应开关的设计与实现
在一些公共场所里,诸如自动干手机、自动取票机等,只要人手在机器前面一晃,机器便被启动,延时一段时间后自动关闭,使用起来非常方便。要求用CD4011设计有此功能的红外线感应开关。
4、基于CD4011红外线对射报警器的设计与实现
设计一款利用红外线进行布防的防盗报警系统,利用多谐振荡器作为红外线发射器的驱动电路,驱动红外发射管,向布防区内发射红外线,接收端利用专用的红外线接收器件对发射的红外线信号进行接收,经放大电路进行信号放大及整形,以CD4011作为逻辑处理器,控制报警电路及复位电路,电路中设有报警信号锁定功能,即使现场的入侵人员走开,报警电路也将一直报警,直到人为解除后方能取消报警。
5、基于CD4069无线音乐门铃的设计与实现
音乐门铃已为人们所熟知,在一些住宅楼中都装有音乐门铃,当有客人来访时,只要按下门铃按钮,就会发出“叮咚”的声音或是播放一首乐曲,然而在一些已装修好的室内,若是装上有线门铃,由于必须布线,从而破坏装修,让人感到非常麻烦。采用CD4069设计一款无线音乐门铃,发射按键与接收机间采用了无线方式传输信息。
6、基于时基电路555“叮咚”门铃的设计与实现
用NE555集成电路设计、制作一个“叮咚”门铃,使该装置能够发出音色比较动听的“叮咚”声。
7、基于CD4511数显八路抢答器的设计与实现
CD4511是一块含BCD-7段锁存、译码、驱动电路于一体的集成电路。设计一款基于CD4511八路抢答器,该电路包括抢答,编码,优先,锁存,数显和复位。
8、基于NE555+CD4017流水彩灯的设计与实现 以NE555和CD4017为核心,设计制作一个流水彩灯,使之通过调节电位器旋钮,可调整彩灯的流动速度。
9、水位指示的设计与实现
电路的功能是检测容器内的水位。把探头分别装在容器的底部、中部和顶部。通过3根导线与电路板连接,而3个LED分别代表不同的水位。
10、基于数字电路双向炫彩流水灯的设计与实现
电路由无稳态多谢振荡器、可逆计数器、三八线译码器和发光二极管组成;实现流水灯正反向循环旋转。
11、基于数字电路六位数字钟的设计与实现
设计一款纯数字电路打造的6位数字时钟。数字钟是采用数字电路对“时”、“分”、“秒”数字显示的计时装置。
12、八路声光报警器的设计与实现
八路声光报警器中八位优先编码器CD4532将输入D0~D7的八路开关量译成三位BCD码,经BCD锁存/七段译码/驱动器CD4511译码,驱动共阴极数码管显示警报电路0—7,路输入开关中的任一路开路,显示器即显示该路号,发出数码光报警;同时优先编码器CD4532的GS段输出高电平,使开关三极管饱和导通,启动声报警电路工作。声报警电路由时基集成电路NE555和六反相器CD4069组成。
13、基于CD4060梦幻灯的设计与实现(基于proteus仿真)
设计一款电路,使其具有多种美丽的声光效果,三种颜色的LED随机组合,五彩斑斓,配有生日快乐音乐芯片,闪光的同时有生日快乐音乐播放,蜂鸣器发生,音乐芯片直接可以装到电路板上,备有电源开关,方便控制,可以外接交流电源或电池。可作生日礼物相送。
14、变音警笛电路的设计与实现 设计一款电路,该电路采用两片NE555时基集成电路构成的变音警笛电路,能发出“呜-哇-呜-哇”的警笛声。
15、魔幻LED摇摇棒的设计与制作
“摇摇棒”是一种利用我们的“视觉暂留效应”工作的高科技电子玩具。接通电源后,它上面的一列LED(发光二极管)不停地闪烁,当你摇动它时,会看见空中梦幻般的浮现一个个笑脸、爱心等图案或者文字。“摇摇棒”使用了一块单片机。通过编写程序,在它内部存储若干幅图形和文字,用一只轻触按钮来选择要显示的内容,并且使用一只动作传感器开关来确保显示正常。
16、基于数字电路NE555、CD4017LED骰子的设计与实现
由555组成的多谐振荡器和CD4017十进制计数器/脉冲分配器构成。7个发光二极管模拟骰子的点数,当按下按钮1秒以上,骰子上的发光二极管高速循环点亮,之后循环速度越来越慢并最终随机停止于某个点上。
17、数显计数器的设计与实现
不需要编程的计数器模块,有3个数码管显示,使用14553和14511芯片进行控制驱动。
18、基于555简易催眠器的设计与制作
时基电路555构成一个极低频振荡器,输出一个个短的脉冲,使扬声器发出类似雨滴的声音
19、基于数字电路电动机转速表的设计与实现
在电动机转动时,人眼无法统计电动机单位时间转转的圈数,即使电动机每秒钟只转动几圈,我们也无法准确的数数来得到电动机每分钟的转动圈数。设计一款电动机转速表来计数,最大可以显示999,如果需要显示更大的数字,还可以自行增加CD40110和数码管,每增加一级,计数可增大10倍再加上9。
20、基于CD4011路灯开关模拟电路的设计与实现
从节约用电的角度出发,路灯开关在每天傍晚时全部灯亮,后半夜行人稀少,路灯关掉一半,第二天清早路灯全部关闭。
21、数字秒表的设计与实现
单稳态触发器,时针发生器及计时器,译码显示单元电路的应用
22、基于CD4011声光控带灯头开关的设计与实现
开关选用CD4011集成块为延时电路,选用1A单向可控硅以及性能稳定的光敏电阻和优质的驻极体组成的声光控动作电路
23、基于数字电路两位计数器的设计与实现
两位自动计数器两位数码管自动显示0-99,数字可清零。电路主要由NE555,4518,4511实现。上电后,电路自动计数.由0增至99,不断循环计数.24、数字频率计的设计与实现
电路通过时基电路NE555,十进制计数/译码器CD4017,六与非门CD4011,十进制计数/译码/锁存/驱动器CD40110以及两个共阴数码管实现被测信号频率测试。
25、基于数字电路自动温控报警电路的设计与实现
现实生活中,常常需要进行温度控制。当温度超出某一规定的上限值时,需要立即切断电源并报警。待恢复正常后设备继续运行。设计一款温度控制电路,电路采用LM324作比较器,NE555作振荡器,十进制计数/译码器CD4017以及锁存/译码/驱动电路CD4511作译码显示达到上述要求。
26、基于数字电路两位自动计数器的设计与实现
两位自动计数器两位数码管自动显示0-99,数字可清零。电路主要由NE555,4518,4511实现。上电后,电路自动计数.由0增至99,不断循环计数.数字上升速度快慢由NE555振荡频率决定.S1为计数清零按键.NE555构成时钟信号发生器,CD4518为二/十进制加法计数器,CD4511为译码驱动器,调节R17可调节NE555的振荡频率.C1为充放电电容,电容容量愈大,充电时间愈长,则振荡频率愈低。
27、基于数字电路数字显示频率计电路的设计与实现
电路通过时基电路NE555,十进制计数/译码器CD4017,六与非门CD4011,十进制计数/译码/锁存/驱动器CD40110以及两个共阴数码管实现被测信号频率测试。
28、基于CD4017流水灯的设计与实现
CD4017流水灯由555组成的多谐振荡器和CD4017十进进制计数/译码电路组成。
29、基于CD4017六路回闪灯的设计与实现 电路通电后,六个发光管先依次点亮,再全部熄灭,然后反方向依次点亮,完成一个循环,接着进行下一个循环。电路由555组成的多谐振荡器和CD4017十进进制计数/译码电路组成。
30、基于CD4017摩托车闪灯的设计与实现
电路由多谐振荡电路和CD4017构成,实现三组发光管循环显示。
31、基于CD401712路回闪灯的设计与实现
电路由555组成的多谐振荡器和CD4017十进制计数/译码电路构成。
32、基于CD4518/4511数字钟的设计与实现
第五篇:EDA课程设计
考试序号:28
自动打铃系统设计说明书
学 生 姓 名:周文江
学
号:14112502521
专 业 班 级:1102
报告提交日期:2013.11.26
湖 南 理 工 学 院 物 电 学 院
目录
一、题目及要求简介……………3 1.设计题目…………………3 2.总体要求简介……………3
二、设计方案说明……………3
三、系统采用器件以及模块说明………3 1.系统框图…………4 2.选择的FPGA芯片及配置………4 3.系统端口和模块说明…………5
四、各部分仿真结果………5
五、调试及总结………6
六、参考文献……7
七、附录………7
一、题目及要求简介
1、设计题目
设计一个多功能自动打铃系统
2、总体要求简介
① 基本计时和显示功能(24小时制显示),包括:
1.24小时制显示 2.动态扫描显示; 3.显示格式:88-88-88 ② 能设置当前时间(含时、分)③ 能实现基本打铃功能,规定:
06:00起床铃,打铃5s
二、设计方案说明
本次设计主要采用Verilog HDL硬件描述性语言、分模块法设计的自动打铃系统。由于这次用的开发板提供的是50M晶振。首先要对时钟进行分频,当计时到2FA_F07F时完成1s分频,通过计时到60s产生分钟进位信号,再通过60分钟产生时钟进位信号。最后通过6个寄存器对时分秒进行锁存最终输出到8个数码管上完成显示。当显示时钟和默认闹钟时钟相等时,驱动打铃模块。通过key_mode,key_turn,key_change查看闹钟,时钟显示,调整时钟。
三、系统采用器件以及模块说明
1.系统框图如下:
:下如图框统系
2.选择的FPGA芯片及配置:本次系统设计采用的FPGA芯片是Alter公司生产的Cyclone II EP2C8Q208C8。该芯片是208个管脚,138个IO,并且具有两个内部PLL,而且内嵌乘法器,8K的逻辑门,资源相当丰富。完成这次自动打铃系统的设计总共消耗250个LE单元,22个IO口,131个寄存器。经过综合后,本系统最高能实现145M的运行速度。通过Quartus II 软件观察到内部的RTL图如下
3.系统端口和模块说明
(1)分频部分
分频器的作用是对50Mhz的系统时钟信号进行分频,得到频率为1hz的信号,即为1S的计时信号。
(2)按键部分
按键key_mode--0为显示计时,1为闹钟显示,2为调整时间。按键key_turn—0为调整小时,1为调整分钟。按键key_change—每按一次加1(3)计时部分
通过sec_L,sec_H,min_L,min_H,hour_L,hour_H 6个寄存器对时分秒进行锁存然后送入数码管显示
(4)闹钟模块
当设定的闹钟时间和数码管上显示的时间相等时驱动闹钟,完成打铃,持续时间5s。
(5)数码管显示模块
显示模块是由8个位选8个段选构成的显示模块,利用人眼的余晖效果完成动态扫描,显示时间。
四、各部分仿真结果
测试文件如下:
module clock_tb;reg sysclk,rst_b;reg key_mode,key_turn,key_change;wire buzzer;
wire [7:0] led_sel,led_data;clock I_clock(.sysclk(sysclk),.rst_b(rst_b),.key_mode(key_mode),.key_change(key_change),.key_turn(key_turn),.buzzer(buzzer),.led_sel(led_sel),.led_data(led_data));initial begin sysclk = 1'b1;rst_b = 1'b0;//复位信号
#30 rst_b = 1'b1;end always #10 sysclk = ~sysclk;//输入的系统时钟,20ns的周期 endmodule
五、调试及总结
本次课程设计总共花费了四天左右的时间,设计了自动打铃系统。通过这次的设计更加熟悉了对EDA技术的了解和认识,在中也发现许多不足的地方。使用了自顶而下的设计方法,使得设计更加的简单和明了。在调试过程中,有些代码的设计不规范性,导致时序相当缓慢,甚至编译综合都会报错。在不断的修改下,发现时序电路和组合逻辑最好分开写,这样便于查错,和修改代码。毕竟Verilog HDL语言不同于C语言,不能以软件的思想来设计,而是要利用电路的思想来编程,这样可以更好的节省资源,使得时序也比较的简单明了。在以后的学习及程序设计当中,我们一定要倍加小心,在程序出现不正常运行的情况下要耐心调试,尽量做到精益求精。
最后通过这次EDA方面的课程设计,提高了我们对EDA领域及通信电路设计领域的认识,有利于培养我们在通信电路EDA方面的设计能力。有利于锻炼我们独立分析问题和解决问题的能力。
六、文献参考
[1].王金明、左自强 编,《EDA技术与Verilog设计》科学出版社
2008.8 [2].杜慧敏、李宥谋、赵全良 编,《基于Verilog的FPGA设计基础》 西安电子科技大学出版社 2006.2 [3].韩彬 编,《从零开始走进FPGA世界》杭州无线电爱好者协会出版社 2011.8.20
七、附录(实物图及源码)
module clock(//Input
sysclk,rst_b,key_mode,key_change,key_turn,//Output
buzzer,led_sel,led_data);
input sysclk,rst_b;//sysclk--global system clock,rst_b--global reset signal input key_mode;//mode choose.0--Timing function.1--Alarm clock function.2--adjust function input key_turn;//choose adjust minute or hour input key_change;//count add 1 output buzzer;//device buzzer output [7:0] led_sel;//led tube bit choose
output [7:0] led_data;//led_tube 8 bit data choose
parameter init_hour = 8'h12;parameter init_min = 8'h59;parameter init_sec = 8'h50;//initial time :12:59:50 parameter init_alarm_hour = 8'h06;parameter init_alarm_min = 8'h30;//initial alarm time : 06:30:0 parameter Count_1s = 28'h2FA_F07F;//count time 1s;
reg [7:0] sec;reg [7:0] min;reg [7:0] hour;reg [3:0] min_L;//minute low 4 bit reg [3:0] min_H;//minute high 4 bit reg [3:0] hour_L;//hour low 4 bit reg [3:0] hour_H;//hour high 4 bit reg [23:0] key_time;//press key away shake reg key_mode_n;//press key_mode next state reg key_change_n;//press key_change next state reg key_turn_n;//press key_turn next state wire key_mode_press;//sure Button press key_mode wire key_turn_press;//sure button press key_turn wire key_change_press;//sure button press key_change
always @(posedge sysclk)key_mode_n <= key_mode;assign key_mode_press =(!key_mode)&&(key_mode_n);always @(posedge sysclk)key_turn_n <= key_turn;assign key_turn_press =(!key_turn)&&(key_turn_n);always @(posedge sysclk)key_change_n <= key_change;assign key_change_press =(!key_change)&&(key_change_n);
always @(posedge sysclk or negedge rst_b)begin if(!rst_b)key_time <= 24'h0;else if(key_time!= 24'h0)
key_time <= key_time + 24'h1;else if((key_time == 24'h0)&&(key_mode_press || key_change_press || key_turn_press))key_time <= key_time + 24'h1;
end
reg [1:0] mode_num;//key mode..0--Timing function.1--Alarm clock function.2--adjust function always @(posedge sysclk or negedge rst_b)begin if(!rst_b)mode_num <= 2'b00;else if(mode_num == 2'h3)mode_num <= 2'h0;else if(key_mode_press &&(key_time == 24'h0))
mode_num <= mode_num + 2'h1;end
always @(*)begin if(mode_num == 2'h1)begin
min = init_alarm_min;hour = init_alarm_hour;end else begin
min = {min_H,min_L};hour = {hour_H,hour_L};end end
reg fm;//choose turn hour or minute always @(posedge sysclk or negedge rst_b)begin if(!rst_b)fm <= 1'b0;else if(key_turn_press &&(mode_num == 2'h2)&&(key_time == 24'h0))
fm <= ~fm;end
reg [27:0] time_cnt;///count time reg [27:0] time_cnt_n;//count time next state always @(posedge sysclk or negedge rst_b)begin if(!rst_b)time_cnt <= 28'h0;else time_cnt <= time_cnt_n;end
always @(*)begin if(time_cnt == Count_1s)time_cnt_n <= 28'h0;else if(mode_num!= 2'h0)time_cnt_n <= time_cnt;else time_cnt_n <= time_cnt + 28'h1;end
reg [3:0] sec_L;//second low 4 bit reg [3:0] sec_H;//second high 4 bit wire sec_cb;//second carry bit signal assign sec_cb =(sec_L == 4'h9)&&(sec_H == 4'h5);always @(posedge sysclk or negedge rst_b)begin if(!rst_b)begin
sec_L <= init_sec[3:0];sec_H <= init_sec[7:4];end else if((sec_L == 4'h9)&&(sec_H!= 4'h5)&&(time_cnt == Count_1s))begin
sec_L <= 4'h0;sec_H <= sec_H + 4'h1;end else if(sec_cb &&(time_cnt == Count_1s))begin
sec_L <= 4'h0;sec_H <= 4'h0;end else if(time_cnt == Count_1s)
sec_L <= sec_L + 4'h1;end
wire min_cb;//minute carry bit signal assign min_cb =(min_L == 4'h9)&&(min_H == 4'h5);always @(posedge sysclk or negedge rst_b)begin if(!rst_b)begin
min_L <= init_min[3:0];min_H <= init_min[7:4];end else if((sec_cb)&&(min_L!=4'h9)&&(time_cnt == Count_1s))
min_L <= min_L + 4'h1;else if((sec_cb)&&(min_L == 4'h9)&&(min_H!= 4'h5)&&(time_cnt == Count_1s))begin
min_L <= 4'h0;min_H <= min_H + 4'h1;end else if((sec_cb)&&(min_cb)&&(time_cnt == Count_1s))begin
min_L <= 4'h0;min_H <= 4'h0;end else if((fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(min_L!= 4'h9))
min_L = min_L + 4'h1;else if((fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time ==
24'h0)&&(min_L == 4'h9)&&(min_H!=4'h5))begin
min_L = 4'h0;min_H = min_H + 4'h1;end else if((fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(min_L == 4'h9)&&(min_H ==4'h5))begin
min_L = 4'h0;min_H = 4'h0;end end
always @(posedge sysclk or negedge rst_b)begin if(!rst_b)begin
hour_L <= init_hour[3:0];hour_H <= init_hour[7:4];end else if((sec_cb)&&(min_cb)&&(hour_L!= 4'h9)&&(hour_H!= 4'h2)&&(time_cnt == Count_1s))
hour_L <= hour_L + 4'h1;else if((sec_cb)&&(min_cb)&&(hour_L!= 4'h3)&&(hour_H == 4'h2)&&(time_cnt == Count_1s))
hour_L <= hour_L + 4'h1;else if((sec_cb)&&(min_cb)&&(hour_L == 4'h9)&&(hour_H!= 4'h2)&&(time_cnt == Count_1s))begin
hour_L <= 4'h0;hour_H <= hour_H + 4'h1;end else if((sec_cb)&&(min_cb)&&(hour_L == 4'h3)&&(hour_H == 4'h2)&&(time_cnt == Count_1s))begin
hour_L <= 4'h0;hour_H <= 4'h0;end else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(hour_L!= 4'h9)&&(hour_H!=4'h2))
hour_L <= hour_L + 4'h1;else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(hour_L!= 4'h3)&&(hour_H ==4'h2))
hour_L <= hour_L + 4'h1;else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(hour_L == 4'h9)&&(hour_H!=4'h2))begin
hour_L <= 4'h0;hour_H <= hour_H + 4'h1;end else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time ==
24'h0)&&(hour_L == 4'h3)&&(hour_H ==4'h2))begin
hour_L <= 4'h0;hour_H <= 4'h0;end end
wire buzzer_en;assign buzzer_en =(init_alarm_min == {min_H,min_L})&&(init_alarm_hour == {hour_H,hour_L});
led_tube I_led_tube(.sysclk(sysclk),.rst_b(rst_b),.scan_time(24'h1F090),.data0({1'h1,sec_L}),.data1({1'h1,sec_H}),.data2({1'h1,4'hA}),.data3({1'h1,min[3:0]}),.data4({1'h1,min[7:4]}),.data5({1'h1,4'hA}),.data6({1'h1,hour[3:0]}),.data7({1'h1,hour[7:4]}),.led_data(led_data),.led_sel(led_sel));buzzer I_buzzer(.sysclk(sysclk),.rst_b(rst_b),.buzzer_en(buzzer_en),.buzzer(buzzer));endmodule