已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于vhdl万年历设计eda技术实用教程基 于 vhdl 的 万 年 历 设 计(实验报告) 学 校: 苏州大学 院 部: 电子信息学院 年 级: 2010级 专 业: 通信工程 姓 名: 王国盛 2012年12月28日前言本设计为实现一个多功能的万年历,具有年、月、日、时、分、秒计时并显示的功能,顾名思义,其满量程计时为一万年;具有校对功能,能够对初始的时间进行人为的设定。本设计采用eda技术,以硬件描述语言vhdl为系统逻辑描述手段设计具有万年历功能的硬件电路,在quartusii软件设计环境下,采用自顶向下的设计思路,分别对各个基础模块进行创建,通过各个基础模块的组合和连接来构建上层原理图,完成基于vhdl万年历设计。 系统目标芯片采用ep1k30tc144-3,由时钟模块、控制模块、计时模块、数据译码模块、显示模块组成。经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,将硬件编写程序下载到试验箱上,选择模式3进行功能验证。本系统能够完成年、月、日和时、分、秒的分别显示,由按键输入进行万年历的校时功能。 目录1 实验概述41.1 eda技术41.2 quartusii的使用41.3 模块化设计41.4 分析、解决问题42 实验内容与要求52.1实验内容52.1实验说明52.3实验要求63 实验原理73.1设计思想73.2设计原理图83.3工作工程94 实验结果104.1vhdl程序与仿真10 4.1.1秒和分模块10 4.1.2小时模块114.1.3日(天)模块124.1.4月份模块154.1.5年模块174.1.6校时模块194.1.7显示模式切换模块214.2顶层设计与仿真234.3下载与验证254.3.1电路结构选择254.3.2端口配置264.3.3实际电路验证295 实验小结30参考文献311 、实验概述1.1 eda技术eda(electronic design automation),即电子设计自动化,是指利用计算机完成电子系统的设计。它的主要特征及核心是“自顶向下”的设计方法,这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证。然后用综合优化工具生成具体门电路的网表。由于设计的主要仿真和调试过程是在高层次上完成的,这不仅有利于早期发现结构设计上的错误,避免设计工作的浪费,而且也减少了逻辑功能仿真的工作量,提高了设计的一次成功率。1.2 quartusii的使用 通过实验,熟悉并掌握quartusii软件的使用,熟悉该软件工具的环境。除了学习利用vhdl语言编写程序实现硬件电路以外,还要熟练的使用原理图输入的方法进行硬件设计,具体是对每个模块形成一个功能元件,通过元件的连接来实现系统的功能,而不是通过vhdl语言的元件例化程序来完成,不仅提高了效率,而且思想原理也更加的清晰。1.3 模块化设计掌握年、月、日、时、分、秒以及控制部分的各功能模块程序设计的原理,进而理解万年历的设计原理,学习并理解模块化设计的方法与思想。用vhdl语言编写各模块程序,进一步了解和掌握各个程序语言,知道编程中的注意事项,提高编程的熟练程度。1.4 分析、解决问题通过本实验设计,理论联系实际,巩固所学理论知识,并且提高自己通过所学理论分析、解决实际问题的能力。进一步加深对vhdl设计的了解与认识,体会eda的巨大作用,了解进行硬件系统设计的整个流程,对生活工作中的电气设备有了更深一层次的了解,对电气工程专业有了更多兴趣。2、实验内容与要求2.1实验内容设计具有如下功能的万年历:1)能进行正常的年、月、日和时、分、秒的日期和时间计时功能,按键key1用来进行模式切换,当key1=1时,显示年、月、日;当key1=0时,显示时、分、 秒。2)能利用实验系统上的按键实现年、月、日和时、分、秒的校对功能。3)用层次化设计方法设计该电路,编写各个功能模块的程序。4)仿真报时功能,通过观察有关波形确认电路设计是否正确。5)完成电路设计后,用实验系统下载验证设计的正确性。2.2实验说明万年历的设计思路与多功能时钟的设计思路相似。多功能时钟的各功能模块及相互之间的连接如下图1所示 图1多功能时钟系统原理框图 年、月、日和时、分、秒的显示格式如图2所示。年、月、日同时显示,时、分、秒同时显示,通过显示模式切换来分别显示。 年/时 月/分 日/秒 图2万年历显示格式2.3实验报告要求1)分析系统的工作原理。 2)画出顶层原理图,写出顶层文件源程序。3)写出各功能模块的源程序。4)仿真各功能模块,画出仿真波形。5)书写实验报告应结构合理,层次分明。3、实验原理3.1设计思想按照模块化的设计思想,要实现万年历的基础功能,必定要包含年、月、日和时、分、秒的功能模块,其中秒和分可以用六十进制计数器来实现,时用二十四进制计数器实现,月用十二进制计数器来实现,年的低两位和高两位都是一百进制计数器,比较特殊的是天的计数器,因为它有四种情况,大月三十一天,小月三十天,平年二月二十八天,闰年二月有二十九天,所以年和月的模块对天的计数都有影响,需要从年和月的输出端引出控制信号来控制天的计数。同时每个计数器都有显示输出端和进位输出端,同时低级别(如秒)的进位输出要给较高级别(如分)的时钟输入端,以此类推,采用串行工作方式进行连接。从而完成了基础的计时和显示的功能。再按照由基础功能到增强功能的设计思路,要实现校时功能,要在之前电路的基础之上增加一个校时控制模块,增加两个按键来实现控制,按键1来选择校对哪一个模块,按键2选择校对到何值检测到按键2的一个上升沿,对应的计数器加1。除此之外还需要有显示模式的切换的功能,需要增加一个模式切换的控制模块,通过增加一个按键3来实现控制,是显示年月日还是时分秒。3.2实验原理图万年历时分秒部分的原理图如下图所示,年月日部分与之同理,通过控制可以进行切换。译码驱动译码驱动译码驱动译码驱动译码驱动译码驱动时十位计数时个位计数分十位计数分个位计数秒十位计数秒个位计数校时控制电路校分控制电路分频器电路分频器电路晶体振荡器电路1hz图3万年历实验原理图图4万年历实验结构框图图5万年历实验结构局部图原理图说明: 如图4、5所示,k1键是选择万年历工作的模式,k2键提供上升沿(时钟功能)来使各计数模块加一,从而实现校时的功能。led灯起指示作用。 模式0:正常计时显示 -k1不按,led1到led5都不亮 模式1:调整分增加 -k1按下一次,led1亮其余四个不亮 模式2:调整时增加 - k1按下两次,led2亮其余四个不亮 模式3:调整日增加 - k1按下三次,led3亮其余四个不亮 模式4:调整月增加 - k1按下四次,led4亮其余四个不亮 模式5:调整年增加 - k1按下五次,led5亮其余四个不亮 clk是外部1hz输入时钟,作为秒的时钟输入,驱动整个万年历工作运行。 k3键是显示模式的选择,显示时分秒时,ledshuchumoshi指示灯亮,显示年月日时,ledshuchumoshi指示灯灭。3.3工作过程 当1hz时钟信号从clk输入端输入时,k1,k2,k3都没有按下时,系统从零(闰年)开始处于正常的计时模式,显示时分秒部分,ledshuchumoshi指示灯亮。低位计满归零并且向高位进1,如果月份是二月,则天计满29就向月进1。如果按下按键3,ledshuchumoshi指示灯不亮,显示年月日部分。如果此时按一下按键1,那么万年历停止计时,工作于模式1,再通过按键2对分进行校时,通过同样的方法可以对时、日、月、年进行校时。当校时完毕,需要万年历重新计时工作时,通过按下键1使led1到led5都不亮时,系统工作与正常计时模式。4、实验结果4.1vhdl程序与仿真4.1.1秒与分模块秒与分模块为六十进制的计数器源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt60 isport(clk:in std_logic;q1,q2:out std_logic_vector(3 downto 0);cout:out std_logic);end cnt60;architecture one of cnt60 issignal q11,q22:std_logic_vector(3 downto 0);beginprocess(clk)beginif clkevent and clk=1 thenq11=q11+1;if q11=9 then q110);q22=q22+1;end if;if q22=5 and q11=9 then q22=0000;q11=0000;cout=1;else cout=0;end if;end if;end process;q1=q11;q2=q22;end;仿真结果:图6 60进制计数器仿真图如上图所示当q1、q2计满60时,q1、q2都归零同时有一个进位输出脉冲,完成了六十进制计数器的功能,设计正确。4.1.2小时模块时模块为24进制计数器。源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt24 isport(clk:in std_logic; q1,q2:out std_logic_vector(3 downto 0);cout:out std_logic);end cnt24;architecture one of cnt24 issignal q11,q22:std_logic_vector(3 downto 0);beginprocess(clk)beginif clkevent and clk=1 thenq11=q11+1;if q11=9 then q110);q22=q22+1;end if;if q22=2 and q11=3 then q22=0000;q11=0000;cout=1;else cout=0;end if;end if;end process;q1=q11;q2=q22;end;仿真结果: 图7 24进制计数器仿真图如上图所示当q1、q2计满24时,q1、q2都归零同时有一个进位输出脉冲,完成了六十进制计数器的功能,设计正确。4.1.3日(天)模块日模块有四种情况,大月为31进制计数器,小月为30进制计数器,平年二月为28进制计数器,闰年二月为29进制计数器,需要有一个二位判断输入信号来进行进制数的选择。源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity day isport( panduan :in std_logic_vector(1 downto 0);-两位判断输入信号 clk :in std_logic; cq1 :out std_logic_vector (3 downto 0); cq2 :out std_logic_vector (3 downto 0); cout :out std_logic);end;architecture one of day issignal cq3,cq4:std_logic_vector(3 downto 0);signal pan:std_logic_vector(1 downto 0);beginprocess(clk,panduan)beginif clkevent and clk=1 then -上升沿cq3=cq3+1;if cq3=9 then cq30);cq4=cq4+1;end if;panif cq3=0001 and cq4=0011 -判断信号为00时为31进 then cq3=0001;cq4=0000;cout=1; - 制计数器else coutif cq3=0000 and cq4=0011 -判断信号为01时为30进then cq3=0001;cq4=0000;cout=1; - 制计数器else coutif cq3=1000 and cq4=0010 -判断信号为10时为28进then cq3=0001;cq4=0000;cout=1; - 制计数器else coutif cq3=1001 and cq4=0010 -判断信号为11时为29进then cq3=0001;cq4=0000;cout=1; - 制计数器 else coutnull;end case;end if;cq1=cq3; cq2=cq4;end process;end;仿真结果:图8 判断信号为00时天模块仿真图图9 判断信号为01时天模块仿真图 图10 判断信号为10时天模块仿真图图11 判断信号为11时天模块仿真图如图8、9、10、11所示,仿真结果与设计要求一致,日模块的设计正确4.1.4月模块月模块为12进制计数器,同时其需要为天提供判断信号输出,其与天的判断输入信号相一致。由于二月的判断信号输出要受到平年和闰年的影响,平年时判断信号是10,闰年时判断信号为11,所以它要有接收来之年模块的判断平年闰年的输出信号(run=0时表平年,run=1时表闰年)。源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity month isport(clk :in std_logic; run :in std_logic; cout :out std_logic; pan :out std_logic_vector(1 downto 0); cq1,cq2 :out std_logic_vector(3 downto 0); end ;architecture behav of month issignal cq3,cq4: std_logic_vector (3 downto 0);signal cq5: std_logic_vector (7 downto 0);beginprocess(clk)beginif clkevent and clk=1 then cq3=cq3+1;if cq3=9 then cq4=cq4+1;cq3=0000; end if;if cq3=2 and cq4=1 then cq3=0001;cq4=0000;cout=1;else cout=0;end if;end if; -十二进制计数器cq5panif run=1 then pan=11;else panpanpanpanpanpanpanpanpanpanpannull;end case; cq1=cq3; cq2=cq4;end process;end;仿真结果:图12 平年(run=0)时月模块仿真图图13 闰年(run=1)时月模块仿真图如图12、13所示月模块为12进制计数器,并且1、3、5、7、8、10、12月(大月)判断信号为00,4、6、9平年(run=0)2月的判断输出信号为、11月(小月)判断信号为01,平年(run=0)2月的判断输出信号为10,闰年(run=1)2月的判断输出信号为11,与天模块的判断输入信号相一致,符合设计要求,模块的设计正确。4.1.5年模块年的高两位和低两位都为一百进制计数器,功能基本相同,不同的是低两位模块有闰年判断输出信号,要传送给月份模块,计满四次就产生一个闰年输出信号,因为闰年数值是4的整倍数。源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity year isport(clk:in std_logic;y1,y2:out std_logic_vector(3 downto 0);run,cout:out std_logic);end year;architecture one of year issignal q1,q2,q3:std_logic_vector(3 downto 0);beginprocess(clk)beginif clkevent and clk=1 then q1=q1+1;if q1=9 then q10);q2=q2+1;end if;if q2=9 and q1=9 then q2=0000;q1=0000;cout=1;else cout=0;end if;end if;end process;process(clk)beginif clkevent and clk=1 then q3=q3+1;if q3=3 then q30);run=1;else run =0;end if;end if;y1=q1;y2=q2;end process;end;仿真结果:图14 低两位年模块仿真图如图14所示,低两位年模块为100进制计数器当t2、t1表示的数为4的整数倍时,判断闰年输出信号就为高电平,与月模块的判断闰年输入信号相一致。符合设计的要求,设计正确。4.1.6校时模块 如原理图的说明部分所述,校时模块进行工作模式的选择,输入端设有控制按键k1,k2。k1进行模式的选择,k2的功能如同手动时钟脉冲,进行调时设置。源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jiaodui isport( k1,k2 :in std_logic; mi,fi,si,ti,yi:in std_logic; fo,so,tl,yo,no :out std_logic; l1,l2,l3,l4,l5 :out std_logic);end;architecture behav of jiaodui issignal a: std_logic_vector (3 downto 0);beginprocess(k1,k2)beginif k1event and k1=1 then a=a+1;if a=5 then afo=mi;so=fi;tl=si;yo=ti;no=yi; - 模式0正常及时 l1=0;l2=0;l3=0;l4=0;l5fo=k2;so=0;tl=0;yo=0;no=0; -选通分模块,调分 l1=1;l2=0;l3=0;l4=0;l5fo=0;so=k2;tl=0;yo=0;no=0; -选通时模块,调时 l1=0;l2=1;l3=0;l4=0;l5fo=0;so=0;tl=k2;yo=0;no=0; - 选通日模块,调日 l1=0;l2=0;l3=1;l4=0;l5fo=0;so=0;tl=0;yo=k2;no=0; - 选通月模块,调月 l1=0;l2=0;l3=0;l4=1;l5fo=0;so=0;tl=0;yo=0;no=k2; -选通年模块,调年 l1=0;l2=0;l3=0;l4=0;l5null;end case;end process;end;仿真结果:图15 校时模块仿真图图16 校时模块仿真图如图15、16,按键k1,k2能够完成万年历工作模式的选择与调时校对的功能,满足系统的设计要求,设计正确。4.1.7显示模式切换模块显示模式切换模块完成显示年月日和显示时分秒的相互切换,设置一个按键k3对其进行控制,通过检测按键的上升沿,对显示模式进行轮流切换。源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity control isport(sl,sh,fl,fh,hl,hh,dl,dh,ml,mh,yl,yh,y1l,y1h:in std_logic_vector(3 downto 0);k1:in std_logic;led:out std_logic;q1,q2,q3,q4,q5,q6,q7,q8:out std_logic_vector(3 downto 0);end control;architecture one of control issignal w:std_logic_vector(1 downto 0);beginprocess(k1)begin if k1event and k1=1 then w=w+1;if w=2 then wq8=y1h;q7=y1l;q6=yh;q5=yl;q4=mh;q3=ml;q2=dh;q1=dl;ledq8=0000;q7=0000;q6=hh;q5=hl;q4=fh;q3=fl;q2=sh;q1=sl;lednull;end case;end process;end;仿真结果:如图16所示,当按键k1没有按下时q1到q6显示的是年月日部分,此时的指示灯led为零(不亮),当按键k1按下一次,检测到一次上升沿,q1到q6显示的是时分秒部分,此时的指示灯led为1(亮),当k1键再次按下时,上升沿一到,显示年月日,这样通过按键k1可以实现显示模式的切换。设计符合系统的要求,设计正确。图17 显示模块仿真图4.2顶层设计与仿真顶层设计采样原理图输入方法,用以上的各模块的vhdl源程序分别生成元器件,在此基础上用“导线”对元器件进行连接,搭建原理图,完成系统的顶层设计,而不是利用元件例化程序去设计。对于较为复杂的系统而言,采用原理图输入的设计方法思路更加清晰,设计更加直观。顶层原理图的设计框架如图4所示,有年、月、日、时、分、秒计时模块,调时校对模块,显示模式切换模块,并且由以上讨论知万年历一共有六种工作模式。仿真结果:如图18所示,此时万年历工作于模式0,属于正常的计时状态,当低位计满时向高位进1,通过键k3,可以对显示模式进行切换,从显示时分秒转换到显示年月日,正确的实现了系统的计时功能。图18 万年历仿真图图19 万年历仿真图图20 万年历仿真图如图19、20所示,通过按键k1可以进行工作模式的选择,按键k2进行数值的校对设定,按键k3进行显示模式的切换,与设计的要求相符合。综上所述,整个系统设计正确,万年历能够正确的实现功能。4.下载验证4.3.1电路结构选择 程序、原理图仿真正确后,下一步通过把顶层原理图输入的设计程序下载到试验箱中的实际芯片中,完成硬件电路的设计搭建并验证其功能。输入的顶层原理图如图4所示。目标芯片选择ep1k30tc144-3,实验箱中的电路结构选择模式no.3,如图21所示,其本身附带了显示译码的功能,无需在程序、原理图中设计七段显示译码的模块就可以在数码管中进行显示,同时配置有8个按键输入端。图21 实验电路结构图no.34.3.2端口配置 将顶层原理图中输入输出端引脚与试验箱中的输入输出引脚进行匹配,才可以进行下载验证。表1 gw48ck/gk/ek/pk2 系统万能接插口与结构图信号/与芯片引脚对照表结构图上的信号名gw48-ccp,gwak100aep1k100qc208gw48-soc+/ gw48-dspep20k200/300eqc240gwak30/50ep1k30/50tqc144gwac3ep1c3tc144引脚号引脚名称引脚号引脚名称引脚号引脚名称引脚号引脚名称pio07i/o224i/o08i/o01i/o0pio18i/o225i/o19i/o12i/o1pio29i/o226i/o210i/o23i/o2pio311i/o231i/o312i/o34i/o3pio412i/o230i/o413i/o45i/o4pio513i/o232i/o517i/o56i/o5pio614i/o233i/o618i/o67i/o6pio715i/o234i/o719i/o710i/o7pio817i/o235i/o820i/o811dpclk1pio918i/o236i/o921i/o932vref2b1pio1024i/o237i/o1022i/o1033i/o10pio1125i/o238i/o1123i/o1134i/o11pio1226i/o239i/o1226i/o1235i/o12pio1327i/o2i/o1327i/o1336i/o13pio1428i/o3i/o1428i/o1437i/o14pio1529i/o4i/o1529i/o1538i/o15pio1630i/o7i/o1630i/o1639i/o16pio1731i/o8i/o1731i/o1740i/o17pio1836i/o9i/o1832i/o1841i/o18pio1937i/o10i/o1933i/o1942i/o19pio2038i/o11i/o2036i/o2047i/o20pio2139i/o13i/o2137i/o2148i/o21pio2240i/o16i/o2238i/o2249i/o22pio2341i/o17i/o2339i/o2350i/o23pio2444i/o18i/o2441i/o2451i/o24pio2545i/o20i/o2542i/o2552i/o25pio26113i/o131i/o2665i/o2667i/o26pio27114i/o133i/o2767i/o2768i/o27pio28115i/o134i/o2868i/o2869i/o28pio29116i/o135i/o2969i/o2970i/o29pio30119i/o136i/o3070i/o3071i/o30pio31120i/o138i/o3172i/o3172i/o31pio32121i/o143i/o3273i/o3273i/o32pio33122i/o156i/o3378i/o3374i/o33pio34125i/o157i/o3479i/o3475i/o34pio35126i/o160i/o3580i/o3576i/o35pio36127i/o161i/o3681i/o3677i/o36pio37128i/o163i/o3782i/o3778i/o37pio38131i/o164i/o3883i/o3883i/o38pio39132i/o166i/o3986i/o3984i/o39pio40133i/o169i/o4087i/o4085i/o40pio41134i/o170i/o4188i/o4196i/o41pio42135i/o171i/o4289i/o4297i/o42pio43136i/o172i/o4390i/o4398i/o43pio44139i/o173i/o4491i/o4499i/o44pio45140i/o174i/o4592i/o45103i/o45pio46141i/o178i/o4695i/o46105i/o46pio47142i/o180i/o4796i/o47106i/o47pio48143i/o182i/o4897i/o48107i/o48pio49144i/o183i/o4998i/o49108i/o49pio60202pio60223pio60137pio60131pio60pio61203pio61222pio61138pio61132pio61pio62204pio62221pio62140pio62133pio62pio63205pio63220pio63141pio63134pio63pio64206pio64219pio64142pio64139pio64pio65207pio65217pio65143pio65140pio65pio66208pio66216pio66144pio66141pio66pio6710pio67215pio677pio67142pio67pio6899pio68197pio68119pio68122pio68pio69100pio69198pio69118pio69121pio69pio70101pio70200pio70117pio70120pio70pio71102pio71201pio71116pio71119pio71pio72103pio72202pio72114pio7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 服务礼仪培训课件
- 服务老人课件
- 法务季度汇报课件
- 废物改造汇报课件
- 房屋构建课件
- 房屋布局介绍课件
- 肺通气操作课件
- 事业单位工程岗面试2026经典考题试卷及解析
- 事业单位护理岗面试经典考题专项考题题库及解析
- 事业单位护理岗面试2026专业面试强化训练试卷及解析
- 2026山东省防疫安全协管员招聘考试(畜牧兽医)历年参考题库含答案详解
- 2026健康管理师考试理论知识真题及答案
- 2025 含聚谷氨酸有机水溶肥料在马铃薯种植中的应用技术规程
- 2026-2027学年清华附中九年级上册化学期中真题卷
- GB/T 4982-2025真空技术夹紧型快卸连接器尺寸
- 2025-2026学年江西省赣州市大余县部分高中高三上学期11月期中考试英语试题
- 小区物业消防安全培训课件
- 探伤安全培训课件
- 胃病知识教学课件
- 金融企业价值创造
- 《中药免疫抑制剂的》课件
评论
0/150
提交评论