第一篇:燕山大学EDA课程设计数字跑表
一、设计题目及要求 设计题目:数字跑表
要求:1 具有暂停,启动功能;
具有重新开始功能; 用六个数码管分别显示百分秒,秒和分钟。
二、设计过程及内容 总体设计:
第一,对于要实现的暂停、启动和重新开始功能,需要有一个控制模块完成相关控制。第二由题意可知需要一个分频模块,将实验箱提供的频率转换为100HZ即数字跑表百分秒的频率。第三是计时模块,完成跑表的百分秒、秒和分钟的计时功能。第四由于实验箱提供的数码显示是扫描显示,这就需要一个选时模块。第五部分则是显示模块。详细设计过程:
根据要求,将设计分成五个模块:
1、控制模块:使跑表具有启动、暂停及重新开始的功能;
2、分频模块:将实验箱所提供的频率转换为设计题目所需要的100HZ的时钟脉冲;
3、计时模块:进行百分秒、秒、分的计时,并且将当前时间输出给选时模块;
4、选时模块:从计时器得到当前时间输出给显示模块;
5、显示模块:通过数码管显示时间。
总图如下:
仿真波形:
第一个模块:控制模块
控制模块主要运用了两个D触发器,输入到触发器的时钟信号CLK1频率为2.86Hz,对电路起到了防抖的功能。
START/STOP为启动暂停按钮,当跑表为START状态时CLK端为高电平,Q为1,时钟信号输出,当跑表为STOP状态时CLK端为低电平,Q为0,时钟信号不输出,从而实现开始和暂停的功能。与门可控制时钟信号是否被输出到下一级。
RESET端为全局清零按钮,接到控制模块和计时模块的清零端,负责将计数器清零。当RESET为低电平时,控制模块和总计数器模块清零,跑表重新开始工作。电路图如下:
仿真波形:
第二个模块:分频模块
为了将实验箱提供的1465HZ转换成实验需要的100HZ,我将74161接成15进制计数器,实现分频的功能,转换为100HZ的近似时钟信号。然后将输出的时钟接入到计时模块。电路图如下: 3
仿真波形:
第三个模块:计时模块
计时模块由一个100进制计数器和两个60进制计数器构成,从而实现百分秒向秒、秒向分的计数功能需求。100进制计数器和60进制计数器均采用两个74160,100进制采用并行进位方式,60进制采用整体置数方式。从100进制计数器和60进制计数器这三个输出端分别接出八个端口(百分秒、秒、分的个位及十位分别由四个二进制代码表示),将当前时间代码输送给选时模块,以实现时间的选择和显示。(百分秒个位:H0A,H0B,H0C,H0D;百分秒十位:H1A,H1B,H1C,H1D;秒个位:S0A,S0B,S0C,S0D;秒十位:S1A,S1B,S1C,S1D;分个位:M0A,M0B,M0C,M0D;分十位:M1A,M1B,M1C,M1D.)电路图如下:
仿真波形:
100进制计数器(count100): 仿真波形:
60进制计数器(count60):
仿真波形:
第四个模块:选时模块
选时模块由四个八选一数据选择器74LS151和一个地址选择器74LS161构成。
地址选择器74LS161接入一个1465 HZ的时钟信号,使能端和清零端接高电平,使其循环工作,产生的一组循环地址码接入到四个八选一数据选择器74LS151上,使其对地址相同的一组数据进行选择,产生四个二进制数CA,CB,CC,CD,即为数码管所要显示的数字的编码。同时,地址选择器74LS161产生一组循环地址码a、b、c,接到数码管的地址端,使其循环显示数字。
第一个74LS151上的输入端为百分秒、秒、分个位及十位的四位二进制的最低位(H0A, H1A ,S0A,S1A, M0A, M1A), 第二个74LS151上的输入端为百分秒、秒、分个位及十位的四位二进制的次低位(H0B,H1B ,S0B,S1B,M0B,M1B), 第三个74LS151上的输入端为百分秒、秒、分个位及十位的四位二进制的第二位(H0C,H1C ,S0C,S1C,M0C,M1C), 第四个74LS151上的输入端为百分秒、秒、分个位及十位的四位二进制的第一位(H0D,H1D ,S0D,S1D,M0D,M1D),通过这四个八位二进制数比较器74LS151选出同一组数(百分秒个位:H0A,H0B,H0C,H0D;百分秒十位:H1A,H1B,H1C,H1D;秒个位:S0A,S0B,S0C,S0D;秒十位:S1A,S1B,S1C,S1D;分个位:M0A,M0B,M0C,M0D;分十位:M1A,M1B,M1C,M1D)作为输出CA,CB,CC,CD,接到显示模块输入端。电路图如下:
仿真波形:
第五个模块:显示模块
显示模块采用BCD—七段显示译码器7448对实验板上数码管进行驱 动。由选时模块输出的显示数字编码CA,CB,CC,CD接至输入端A,B,C,D,使输出端产生七位译码连接到实验箱公共数据输入端ABCDEDG,从而显示出数据。电路图如下:
仿真波形:
三、设计结论
两周的课程设计很快就结束了,虽然时间很短,但是收获颇丰。通过这次课程设计,我学到了许多关于EDA的知识,学习到了很多EDA的实用功能,更重要的是锻炼了我的实践动手能力,使我深刻地认识到仅仅学习课本上的知识是远远不够的,要多思考,多实践,才能真正把学到的知识用到实际中,而且我也深刻认识到通信专业在各个领域是多么有用武之地,更加使我有了学习深造的动力。
在设计的过程中遇到诸多问题,一个接一个,总结下来还是软件没有学深刻,出了问题也不知道如何排查,波形图一直找不到自己想看到的,后来经过问同学和自己的总结才知道这个仿真的时间要足够长,才能看到自己所需要的部分。让我知道做一件事之前的准备工作是多么重要,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。遇到问题才去翻书查资料,这些都是我以后要改进的地方。
这次的EDA课程设计给了我一次非常重要也非常难得的实践机会,使我可以将平时课本上学习的理论知识应用于实际操作。设计过程多于我这个专业知识还不牢固的很困难,先前两天看了课本学习了软件,每个子模块和波形图出来的都比较顺利,但当做到总图的时候遇到了很多困难,经过询问老师后也都解决了。实验箱的部分比较顺利,由于粗心连错了线,频率也没选对,总之过程很艰难,但最终还是做出来了。最后感谢老师给与我这次宝贵的实践机会!
第二篇:数字电路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.能显示年、月、日、星期,如01.11.08 6,星期日显示8 2.年、月、日、星期可调 3.不考虑闰年
三、设计思路
为实现本电路要求,采取模块电路设计方法。本电路系统主要 包括以下三大模块:
1.计数模块 2.控制模块 3.译码器显示模块
四、设计过程
1.计数模块 1)星期计数模块
由于星期日要显示8,一般芯片难以实现,可通过四个JKFF触发器设计而成。电路图如下:
波形仿真图如下:
2)天计数模块
通过两个74160芯片作计数电路和DFF作去毛刺电路设计而成,若没有去毛刺电路,在硬件仿真时,月计数会出现连续计两次的情况。由于不同月份有不同天数(31、30、28),故需要三个输入端(C31、C30、C28)选择计数的进制,同一时刻只能有一个有效(输入高电平)。电路图如下:
C30端有效时的波形仿真图如下:
3)月计数模块
通过两个74160芯片设计而成,电路图如下:
波形仿真图如下:
4)月计数对天计数的反馈模块
通过画真值表列出逻辑表达式,从而设计出如下电路:
波形仿真图如下:
5)年计数模块
通过两个74160芯片设计而成,为了实现可调,将年个位对十位的进位输出端C先到控制模块上。电路图如下:
波形仿真图如下:
2.控制模块
时钟脉冲经CP端输入,K、Kweek、Kday、Kmonth、Kyear1、Kyear2为手动控制端。K端输入高电平时为调节状态,输入低电平时为自动计数状态。电路图如下:
3.译码器显示模块
该模块由一个74160芯片、四个数据选择74151和译码驱动器7449组成。电路图如下:
4.总图
连接控制模块和计数模块。电路图如下:
该部分波形仿真图如下:
在其中可以发现,月比天滞后1.5个时钟周期(其中1个时钟周期是由于天计数模块的去毛刺电路产生的),年个位比月滞后0.5个时钟周期,年十位比年个位滞后0.5个时钟周期。由于时间有限,知识经验不足等限制,在答辩前仍未解决该问题。
再连接译码器显示模块。电路图如下:
接通电源时,K端要先输入高电平,把月调到非0,才能在K端输入低电平后正常计数。
五、总结
第四篇:EDA课程设计——数字时钟
Hefei University
EDA课程综述
论文题目: EDA课程综述
专 业: 09通信(2)班
姓 名: 唐吉祥
学 号: 0905072035 指导老师: 查长军
前
言
随着基于PLD的EDA技术的发展和应用领域的扩大和深入,EDA技术在电子信息、通信、自动控制及计算机应用领域的重要性日益提高。
作为现在的大学生应熟练掌握这门技术,为以后的发展打下良好的基础,本实验设计是应用QuartusII环境及VHDL语言设计一个时间可调的数字时钟。使自己熟练使用QuartusII环境来进行设计,掌握VHDL语言的设计方法。要注重理论与实践之间的不同,培养自己的实践能力!
目录
一、课程设计任务及要求............................................................................................3
1.1实验目的..........................................................................................................3 1.2功能设计..........................................................................................................3
二、整体设计思想........................................................................................................3
2.1性能指标及功能设计......................................................................................3 2.2总体方框图......................................................................................................4
三、详细设计................................................................................................................4
3.1数字钟的基本工作原理:..............................................................................4
3.1.1时基T 产生电路..................................................................................4 3.1.2调时、调分信号的产生......................................................................4 3.1.3计数显示电路.......................................................................................5 3.2设计思路..........................................................................................................5 3.3设计步骤..........................................................................................................6
3.3.1工程建立及存盘...................................................................................6 3.3.2工程项目的编译...................................................................................7 3.3.3目标芯片的选择...................................................................................7 3.3.4时序仿真...............................................................................................8 3.3.5引脚锁定.............................................................................................10 3.3.6硬件测试.............................................................................................11 3.3.7实验结果.............................................................................................11
四、设计总结..............................................................................................................12
五、附录......................................................................................................................12
5.1 VHDL源程序..................................................................................................12 5.2配置符号图....................................................................................................17
一、课程设计任务及要求
1.1实验目的
1)掌握VHDL语言的基本运用
2)掌握QuartusII的简单操作并会使用EDA实验箱 3)掌握一个基本EDA课程设计的操作
1.2功能设计
1)有时、分、秒计数显示功能,小时为24进制,分钟和秒为60进制以24小时循环计时
2)设置复位、清零等功能
3)有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间 4)时钟计数显示时有LED灯显示
二、整体设计思想
2.1性能指标及功能设计
1)时、分、秒计时器
时计时器为一个24进制计数器,分、秒计时器均为60进制计数器。当秒计时器接受到一个秒脉冲时,秒计数器开始从1计数到60,此时秒显示器将显示00、01、02、...、59、00;每当秒计数器数到00时,就会产生一个脉冲输出送至分计时器,此时分计数器数值在原有基础上加1,其显示器将显示00、01、02、...、59、00;每当分计数器数到00时,就会产生一个脉冲输出送至时计时器,此时时计数器数值在原有基础上加1,其显示器将显示00、01、02、...、23、00。即当数字钟运行到23点59分59秒时,当秒计时器在接受一个秒脉冲,数字钟将自动显示00点00分00秒。2)校时电路
当开关拨至校时档时,电子钟秒计时工作,通过时、分校时开关分别对时、分进行校对,开关每按1次,与开关对应的时或分计数器加1,当调至需要的时与分时,拨动reset开关,电子钟从设置的时间开始往后计时。2.2总体方框图
三、详细设计
3.1数字钟的基本工作原理:
3.1.1时基T 产生电路
数字钟以其显示时间的直观性、走时准确性作为一种计时工具,数字钟的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。
由晶振产生的频率非常稳定的脉冲,经整形、稳定电路后,产生一个频率为1Hz的、非常稳定的计数时钟脉冲。
3.1.2调时、调分信号的产生
由计数器的计数过程可知,正常计数时,当秒计数器(60进制)计数到59 时,再来一个脉冲,则秒计数器清零,重新开始新一轮的计数,而进位则作为分计数器的计数脉冲,使分计数器计数加1。现在我们把电路稍做变动:把秒计数器的进位脉冲和一个频率为2Hz的脉冲信号同时接到一个2选1数据选择器的两个数据输入端,而位选信号则接一个脉冲按键开关,当按键开关不按下去时(即为0),则数据选择器将秒计数器的进位脉冲送到分计数器,此时,数字钟正常工作;当按键开关按下去时(即为1),则数据选择器将另外一个2Hz 的信号作为分计数 器的计数脉冲,使其计数频率加快,当达到正确时间时,松开按键开关,从而达到调时的目的。调节小时的时间也一样的实现。
3.1.3计数显示电路
由计数部分、数据选择器、译码器组成,是时钟的关键部分。
1、计数部分:由两个60进制计数器和一个24 进制计数器组成,其中60 进制计数器可用6 进制计数器和10 进制计数器构成;24 进制的小时计数同样可用6 进制计数器和10 进制计数器得到:当计数器计数到24 时,“2”和“4”同时进行清零,则可实现24 进制计数。
2、数据选择器:84 输入14 输出的多路数据选择器,因为本实验用到了8个数码管(有两个用来产生隔离符号‘—’)。
3、译码器:七段译码器。译码器必须能译出‘—’,由实验二中译码器真值表可得:字母F 的8421BCD 码为“1111”,译码后为“1000111”,现在如果只译出‘—’,即字母F的中间一横,则译码后应为“0000001”,这样,在数码管上显示的就为‘—’。
3.2设计思路
根据系统设计要求,系统设计采用自顶向下设计方法,由时钟分频部分、计时部分、按键部分调时部分和显示部分五个部分组成。这些模块都放在一个顶层文件中。
1)时钟计数:
首先下载程序进行复位清零操作,电子钟从00:00:00计时开始。sethour可以调整时钟的小时部分, setmin可以调整分钟,步进为1。
由于电子钟的最小计时单位是1s,因此提供给系统的内部的时钟频率应该大于1Hz,这里取100Hz。CLK端连接外部10Hz的时钟输入信号clk。对clk进行计数,当clk=10时,秒加1,当秒加到60时,分加1;当分加到60时,时加1;当时加到24时,全部清0,从新计时。
用6位数码管分别显示“时”、“分”、“秒”,通过OUTPUT(6 DOWNTO 0)上的信号来点亮指定的LED七段显示数码管。
2)时间设置:
手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。3)清零功能: reset为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。
3.3设计步骤
3.3.1工程建立及存盘
1.打开 QuartusⅡ,单击“File”菜单,选择 File→New Project Wizard,对话框如下:分别输入项目的工作路径、项目名和实体名,单击Finish。
2.单击“File”菜单,选择New,弹出小对话框,双击“VHDL File“,即选中了文本编辑方式。在出现的“Vhdl1.vhd”文本编辑窗中键入VHDL程序,输入完毕后,选择File→Save As,即出现“Save As”对话框。选择自己建立好的存放本文件的目录,然后在文件名框中键入文件名,按“Save”按钮。
3.建立工程项目,在保存VHDL文件时会弹出是否建立项目的小窗口,点击“Yes”确定。即出现建立工程项目的导航窗口,点击“Next”,最后在出现的屏幕中分别键入新项目的工作路径、项目名和实体名。注意,原理图输入设计方法中,存盘的原理图文件名可以是任意的,但VHDL程序文本存盘的文件名必须与文件的实体名一致,输入后,单击“Finish”按钮。3.3.2工程项目的编译
单击工具条上的编译符号开始编译,并随着进度不断变化屏幕,编译完成后的屏幕如图所示:
3.3.3目标芯片的选择
选择菜单 Assignments 选项的下拉菜单中选择器件 Device „,如图所示: 在弹出的对话框中的 Family(器件序列栏)对应的序列名,EP1C3 对应的是 Cyclone 系列。在 Available Devices里选择 EP1C3T144-C8(有时需要把 Show advanced devices的勾消去,以便显示出所有速度级别的器件)。注意:所选器件必须与目标板的器件型号完全一致。
在图中,单击“Device and Pin Options„”,在弹出的“Device and Pin Options„”窗口中,单击“Unused Pins”标签。选择“As output driving an unspecified signal ”(由于学习机的“FPGA”具有很多功能,为了避免使用引脚对其它器件造成影响,保证本系统可靠工作,将未使用引脚设定为输出不定状态)后,单击确定后,无误后单击“OK”。
3.3.4时序仿真
建立波形文件:选择 File→New,在New窗中选中“Other File”标签。在出现的屏幕中选择“Vector Waveform File”项出现一新的屏幕。在出现的新屏幕中,双击“Name”下方的空白处,弹出“Insert Nod or Bus”对话框,单击该对话框的“Node Finder„„”。在屏幕中的 Filter 中选择 Pins,单击“List”。而后,单击“>>”,所有输入/输出都被拷贝到右边的一侧,这些正是我们希望的各个引脚,也可以只选其中的的一部分,根据实际情况决定。然后单击屏幕右上脚的 “OK”。在出现的小屏幕上单击“OK”。
设定仿真时间宽度。选择 Edit → End time„选项,在End time选择窗中选择适当的仿真时间域,以便有足够长的观察时间。
波形文件存盘。选择File→Save as 选项,直接存盘即可。运行仿真器。在菜单中选择项,直到出现,仿真结束。
未曾编辑的仿真波形
仿真波形 3.3.5引脚锁定
将设计编程下载进选定的目标器件中,如EPF10K10,作进一步的硬件测试,将设计的所有输入输出引脚分别与目标器件的EPF10K10的部分引脚相接,操作如下:
1.选择 Assignments → Assignments Editor ,即进入 Assignments Editor编辑器。在Category 栏选择 Pin,或直接单击右上侧的 Pin 按钮。
2.双击 TO 栏的《new》,在出现的的下拉栏中选择对应的端口信号名(如 D[0]);然后双击对应的栏的《new》,在出现的下拉栏中选择对应的端口信号名的期间引脚号。
3.最后存储这些引脚锁定信息后,必须再编译(启动)一次,才能将引脚锁定信息编译进编程下载文件中。此后就可以准备将编译好的 SOF 文件下载到试验系统的FPGA中去了。
引脚锁定 3.3.6硬件测试
1.首先将下载线把计算机的打印机口与目标板(如开发板或实验板)连接好,打开电源,选择模式7。
2.打开编辑窗和配置文件。选择,弹出一个编辑窗。在Mode栏中选择JTAG,并在选项下的小方框打勾。注意核对下载文件路径与文件名。如果文件没有出现或者出错,单击左Add file侧按钮,手动选择配置文件 clock.sof。
3.最后单击下载标符Start,即进入对目标器件 FPGA 的配置下载操作。当 Progress 显示100%,以及在底部的处理栏中出现 Configuration Succeeded 时,表示编程成功,如图所示。注意,如果必要时,可再次单击 Start,直至编程成功。
4.下载完成后,通过硬件测试进一步确定设计是否达到所有的技术指标,如未达到,可逐步检查,哪部分出现问题。如果是代码出现问题,须修改代码;若是时序波形图有问题,须重新设置。
3.3.7实验结果
实验箱使用模式7,键8为复位按键,键8为1时正常工作。键4设置小时,键7设置分钟。
下载成功后,按下键8,及使六个LED复位清零,显示数秒的自动计时,可以通过4键设置小时数,7键设置分钟数。当秒数满60则进一位,分钟数满60进一位,当显示为23:59:59时,秒数在加一则显示00:00:00,之后从新计时。
四、设计总结
通过这次课程设计,我进一步加深了对电子设计自动化的了解。并进一步熟练了对QuartusII软件的操作。在编写程序的过程中,遇到了很多问题,使我发现自己以前学习上存在的不足。通过与同学探讨和请教老师,终于把问题都解决了,并加深了对数字时钟原理和设计思路的了解。
同时也掌握了做课程设计的一般流程,为以后的设计积累了一定的经验。做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。最后参照每个模块把输入和输出引脚设定,运用我们所学的VHDL语言进行编程。总之,通过这次的设计,进一步了解了EDA技术,收获很大,对软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。
在此,也感谢康老师的悉心指导,使自己学到了很多东西!
五、附录
5.1 VHDL源程序
Alert模块
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY alert IS
PORT(clk:IN STD_LOGIC;
dain:IN STD_LOGIC_VECTOR(6 DOWNTO 0);
speak:OUT STD_LOGIC;
lamp:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END alert;ARCHITECTURE fun OF alert IS
SIGNAL count:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL count1:STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN speaker:PROCESS(clk)
BEGIN
--speak<=count1(1);
IF(clk'event and clk='1')THEN
IF(dain=”0000000“)THEN
speak<=count1(1);
IF(count1>=”10“)THEN
count1<=”00“;--count1为三进制加法计数器
ELSE
count1<=count1+1;--speak<=count1(0);
END IF;
END IF;
END IF;
END PROCESS speaker;lamper:PROCESS(clk)
BEGIN
IF(rising_edge(clk))THEN
IF(count<=”10“)THEN
IF(count=”00“)THEN
lamp<=”001“;--循环点亮三只灯
ELSIF(count=”01“)THEN
lamp<=”010“;
ELSIF(count=”10“)THEN
lamp<=”100“;
END IF;
count<=count+1;
ELSE
count<=”00“;
END IF;
END IF;
END PROCESS lamper;END fun;Hour模块
LIBRARY IEEE;use IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY hour IS
PORT(clk,reset:IN STD_LOGIC;
daout:out STD_LOGIC_VECTOR(5 DOWNTO 0));END ENTITY hour;ARCHITECTURE fun OF hour IS SIGNAL count:STD_LOGIC_VECTOR(5 DOWNTO 0);
BEGIN
daout<=count;
PROCESS(clk,reset)
BEGIN
IF(reset='0')THEN count<=”000000“;--若reset=0,则异步清零
ELSIF(clk'event and clk='1')THEN
--否则,若clk上升沿到
IF(count(3 DOWNTO 0)=”1001“)THEN--若个位计时恰好到”1001“即9
IF(count<16#23#)THEN
--23进制
count<=count+7;
--若到23D则
else
count<=”000000“;
--复0
END IF;
ELSIF(count<16#23#)THEN
--若未到23D,则count进1
count<=count+1;
ELSE
--否则清零
count<=”000000“;
END IF;
--END IF(count(3 DOWNTO 0)=”1001“)
END IF;
--END IF(reset='0')
END PROCESS;END fun;Minute模块
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY minute IS
PORT(clk,clk1,reset,sethour:IN STD_LOGIC;
enhour:OUT STD_LOGIC;
daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END ENTITY minute;ARCHITECTURE fun OF minute IS SIGNAL count :STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL enhour_1, enhour_2: STD_LOGIC;--enmin_1为59分时的进位信号 BEGIN
--enmin_2由clk调制后的手动调时脉冲信号串
daout<=count;
enhour_2<=(sethour and clk1);--sethour为手动调时控制信号,高电平有效
enhour<=(enhour_1 or enhour_2);PROCESS(clk,reset,sethour)
BEGIN
IF(reset='0')THEN--若reset为0,则异步清零
count<=”0000000“;
ELSIF(clk'event and clk='1')THEN--否则,若clk上升沿到
IF(count(3 DOWNTO 0)=”1001“)THEN--若个位计时恰好到”1001“即9
IF(count <16#60#)THEN--又若count小于16#60#,即60
IF(count=”1011001“)THEN--又若已到59D
enhour_1<='1';--则置进位为1
count<=”0000000“;--count复0
ELSE
count<=count+7;--若count未到59D,则加7,即作”加6校正“
END IF;--使前面的16#60#的个位转变为8421BCD的容量
ELSE
count<=”0000000“;--count复0(有此句,则对无效状态电路可自启动)
END IF;
--END IF(count<16#60#)
ELSIF(count <16#60#)THEN
count<=count+1;--若count<16#60#则count加1
enhour_1<='0' after 100 ns;--没有发生进位
ELSE
count<=”0000000“;--否则,若count不小于16#60# count复0
END IF;--END IF(count(3 DOWNTO 0)=”1001“)
END IF;--END IF(reset='0')
END process;END fun;Second模块
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY second IS PORT(clk,reset,setmin:STD_LOGIC;
enmin:OUT STD_LOGIC;
daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END ENTITY second;ARCHITECTURE fun OF second IS SIGNAL count:STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL enmin_1,enmin_2:STD_LOGIC;
--enmin_1为59秒时的进位信号
BEGIN
--enmin_2由clk调制后的手动调分脉冲信号串
daout<=count;
enmin_2<=(setmin and clk);--setmin为手动调分控制信号,高电平有效
enmin<=(enmin_1 or enmin_2);--enmin为向分进位信号
PROCESS(clk,reset,setmin)
BEGIN
IF(reset='0')THEN count<=”0000000“;--若reset为0,则异步清零
ELSIF(clk 'event and clk='1')then--否则,若clk上升沿到
IF(count(3 downto 0)=”1001“)then
--若个位计时恰好到”1001“即9
IF(count<16#60#)then--又若count小于16#60#,即60H IF(count=”1011001“)then
--又若已到59D
enmin_1<='1';count<=”0000000“;--则置进位为1及count复0
ELSE
--未到59D
count<=count+7;--则加7,而+7=+1+6,即作”加6校正“
END IF;
ELSE
--若count不小于16#60#(即count等于或大于16#60#)
count<=”0000000“;
--count复0
END IF;
--END IF(count<16#60#)
ELSIF(count<16#60#)then--若个位计数未到”1001“则转此句再判
count<=count+1;
--若count<16#60#则count加1
enmin_1<='0'after 100 ns;--没有发生进位
ELSE
--否则,若count不小于16#60#
count<=”0000000“;
--则count复0
END IF;
--END IF(count(3 DOWNTO 0)=”1001")
END IF;
--END IF(reset='0')END PROCESS;END fun;5.2配置符号图
第五篇:EDA课程设计 数字时钟
EDA
课程设计报告
一·设计任务
使用硬件描述语言,在CPLD/FPGA上实现一个多功能数字钟。
二·设计要求
除按键、LED、扬声器、时钟信号外,整个数字钟的功能要求在一块芯片上实现。
a)具有时,分,秒,计数显示功能,以24小时循环计时; b)具有时间清零功能;
c)具有小时、分钟和秒钟调整功能(个位和十位分开调或合起来调)。
d)具有闹钟功能,能预设闹钟时间,精确到秒。
整个数字钟只设一个时钟输入端口,所需不同频率信
号在内部分频实现。(LED扫描频率设为50Hz以上)。
三·设计方案
设计采用模块方式,分别为分频模块:产生1Hz的脉冲作为秒的输入,和产生1kHz的脉冲作为数码管显示的动态扫描。计时模块:秒模块,分模块,时模块。闹钟模块,显示模块,控制模块。
四·模块端口设置
1.分频模块
输入:clkin :
本实验输入为50MHz晶振
输出:clk : 为显示模块及始终调节提供1KHz脉冲
clkt: 为计数器模块提供1Hz脉冲
2.计时模块
m 是模式按键,当m=0 时,进入计时模式,在计时模式下可以进行时间调整。num3,num4 产生加速调整时间,当其值为1 时,可以快速调整时间,该调整时间的频率由clk 提
供。counta,count1 是手动调节时间。Turn 接按键,可以改变当前调节的是小时还是分钟,长按turn 键还可以使秒钟信号清零。sec1,min1,hour1 输出的是计时的秒,分,时。
3.闹钟模块
原理:num1,num2 产生加速调整时间,当其值为1 时,可以快速调整时间,该调整时间的
频率由clk 提供。countb,count2 是手动调节闹钟时间。amin,ahour 是输出的闹钟的分钟和 小时 4.控制模块
m 是模式按键,当m=0 时,指当前输出的是计时功能;当m=1 时,指当前调整的是
闹钟时间;当m=2 时,指当前调整的是计时时间;当m=3 时,此时turn 按键可用于跑表的
暂停与开始。change 接按键,手动调整时,每按一次,计数器加1;如果长按,则连续快
速加1,用于快速调时和定时;turn 接按键,在手动校时功能时,选择是调整小时,还是分
钟;若长时间按住该键,还可使秒信号清零,用于精确调时。count1,count2,counta,countb 分
别是用来调节计时时间和闹钟时间。LD_min,LD_hour,指示当前调节的是分钟还是小时。5 显示模块
输入:clk--1kHz时钟,提供高频扫描
in0、in1…in5--分别为时、分、秒的个位与十位信号
输出:a、b…g--数码管输入
d0、d1…d5--数码管选通
五.程序。
分频模块
module fenpin(clk,clkt,clkin);input clkin;output clk,clkt;reg clk,clkt;reg [31:0]out,t1;
initial t1<=0;initial out<=0;initial clk<=0;initial clkt<=0;
always@(posedge clkin)begin
out<=out+1;
if(out==20000)
begin
out<=0;
clk<=!clk;
end end
always@(posedge clk)
begin
t1<=t1+1;
if(t1==1000)
begin
clkt<=1;
t1<=0;
end
else
clkt<=0;end endmodule
计时模块 module jishi(clk,clk_1Hz, turn,mode,count1,counta,sec1,min1,hour1,num3,num4);input clk,clkt,turn,num3,num4;input mode;input count1,counta;output [7:0] sec1,min1;output [7:0] hour1;wire clkt,ct1,cta,turn,num3,num4;reg [7:0] sec1=0,min1=0;reg [7:0] hour1=0;reg [1:0] m;wire count1,counta;reg minclk,hclk;always @(posedge mode)//mode 信号控制系统在三种功能间转换 begin if(m==4)m<=0;else m<=m+1;end /////秒钟计时模块////// always @(posedge clkt)
if((sec1==8'h59)|turn&(!m))///////若长时间按住该键,还可使秒信号清零,用于精确调时。begin sec1<=0;//按住“turn”按键一段时间,秒信号可清零,该功能用于手动精确调时
if(!(turn&(!m)))minclk<=1;///产生进位 end else begin if(sec1[3:0]==4'b1001)begin sec1[3:0]<=4'b0000;sec1[7:4]<=sec1[7:4]+1;end else sec1[3:0]<=sec1[3:0]+1;minclk<=0;end ////////分钟计时模?/// assign m_clk=minclk||count1;/////m_clk 产生进位或校正改变 assign ct1=(num3&clk)|(!num3&m_clk);//ct1 用于计时、校时中的分钟计数
always @(posedge ct1)begin if(min1==8'h59)begin min1<=0;hclk<=1;end else begin if(min1[3:0]==9)
begin min1[3:0]<=0;min1[7:4]<=min1[7:4]+1;end else min1[3:0]<=min1[3:0]+1;hclk<=0;end end ////////小时计时模块/// assign h_clk=hclk||counta;//////h_clk 产生进位或校正改变 assign cta=(num4&clk)|(!num4&h_clk);//cta 用于计时、校时中的小时计数
always @(posedge cta)if(hour1==8'h23)hour1<=0;else if(hour1[3:0]==9)begin hour1[7:4]<=hour1[7:4]+1;hour1[3:0]<=0;end else hour1[3:0]<=hour1[3:0]+1;Endmodule
闹钟模块
module alarm(clk,amin,ahour,num1,num2,count2,countb,LD_alert);input clk,num1,num2,count2,countb;output [7:0] amin;
output [7:0] ahour;output LD_alert;wire LD_alert;reg [7:0] amin=0;reg [7:0] ahour=0;assign ct2=(num1&clk)|(!num1&count2);//ct2 用于定时状态下调整分钟信号
assign LD_alert=(ahour|amin)?1:0;//指示是否进行了闹铃定时 always @(posedge ct2)if(amin==8'h59)amin<=0;else if(amin[3:0]==9)begin amin[3:0]<=0;amin[7:4]<=amin[7:4]+1;end else amin[3:0]<=amin[3:0]+1;assign ctb=(num2&clk)|(!num2&countb);////ctb 用于定时状态调节小时信号 always @(posedge ctb)if(ahour==8'h23)ahour<=0;else if(ahour[3:0]==9)begin ahour[3:0]<=0;ahour[7:4]<=ahour[7:4]+1;end else ahour[3:0]<=ahour[3:0]+1;Endmodule 控制模块
module ctrol(change,turn,count1,count2,counta,countb,pause,LD_min,LD_hour,mode);input change,mode,turn;output count1,count2,counta,countb,pause,LD_min,LD_hour;reg [1:0] m;reg fm=0,count1=0,count2=0,counta=0,countb=0,pause=0,LD_min=0,LD_hour=0;wire mode,turn,change;always @(posedge mode)//mode 信号控制系统在三种功能间转换 begin if(m==4)m<=0;else m<=m+1;end always @(posedge turn)//////////接按键,在手动校时功能时,选择是调整小时,还是分钟; begin fm<=~fm;end
always @(m or fm or change)begin case(m)2: begin ////////2:调节时间功能; if(fm)begin count1<=change;{LD_min,LD_hour}<=2;end//////指示当前调整的是分钟
Else
begin counta<=change;{LD_min,LD_hour}<=1;end/////指示当前调整的是小时 {count2,countb}<=0;end 1: begin //////1:调节闹钟功能 if(fm)begin count2<=change;{LD_min,LD_hour}<=2;end/////指示当前调整的是分 else begin countb<=change;{LD_min,LD_hour}<=1;end/////指示当前调整的是小时 {count1,counta}<=0;end
0: begin {count1,count2,counta,countb,LD_min,LD_hour}<=0;end ////0:计时功能 endcase end endmodule 显示模块
module show(min1,sec1,amin,hour1,ahour,MSH,MSL,SH,SL,MH,ML,min,sec,hour,mode);input [7:0] min1,sec1,amin;input [7:0] hour1,ahour;input[3:0] MSH,MSL,SH,SL,MH,ML;input mode;output [7:0] min,sec;output [7:0] hour;reg [7:0] min,sec;reg [7:0] hour;reg [1:0] m;always @(posedge mode)//mode 信号控制系统在三种功能间转换
begin if(m==4)m<=0;else m<=m+1;end always @(min1 or sec1 or amin or hour1 or ahour or m)begin case(m)0: begin hour<=hour1;min<=min1;sec<=sec1;end 1: begin hour<=ahour;min<=amin;sec<=8'hzz;end 2: begin hour<=hour1;min<=min1;sec<=8'hzz;end 3: begin
hour<={SH,SL};
min<={MSH,MSL};sec<={MH,ML};end endcase end Endmodule
六
实验分析 七
实验总结
八、参考资料
1、《EDA技术实用教程》
2、实验箱使用说明;