
《EDA技术实用教程》基 于 VHDL 的 万 年 历 设 计(EDA实验报告) 学 校:苏州大学院 部:电子资料学院年 级:2010级专 业:通信工程姓 名:王国盛2012年12月28日前言本设计为实现一个的万年历,具有年、月、日、时、分、秒计时并表明的系统,顾名思义,其满电压计时为一万年;具有校对系统,能够对初始的时间进行人为的设定。本设计采用EDA技术,以硬件描述语言VHDL为功能观点描述方式设计具备万年历系统的算法电路,在QuartusII软件设计环境下,采用自顶向下的设计逻辑eda万年历程序下载,分别对各个基础系统进行创建,通过各个基础系统的组合和连接来建构上层原理图,完成基于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试验方法图万年历时分秒部分的原理图如下图所示,年月日部分与之同理,通过控制可以进行转换。图3万年历实验方法图图4万年历实验结构框图图5万年历实验结构局部图原理图说明: 如图4、5所示,K1键是选择万年历工作的模式,K2键提供上升沿(时钟系统)来使各计数系统加一,从而实现校时的系统。LED灯起指示效果。模式:正常计时显示 --K1不按,LED1到LED5都不亮模式1:调整分增强 --K1按下一次,LED1亮其他四个不亮模式2:调整时增强 -- K1按下两次,LED2亮其他四个不亮模式3:调整日增强 -- K1按下三次,LED3亮其他四个不亮模式4:调整月增强 -- K1按下四次,LED4亮其他四个不亮模式5:调整年增强 -- K1按下五次,LED5亮其他四个不亮 CLK是内部1Hz输入时钟,作为秒的分针输入eda万年历程序下载,驱动整个万年历工作运行。 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 );COUT:OUT STD_LOGIC);END CNT60;ARCHITECTURE ONE OF CNT60 ISSIGNAL Q11,Q22:STD_LOGIC_VECTOR(3 DOWNTO );BEGINPROCESS(CLK)BEGINIF CLK'EVENT AND CLK='1' THENQ11<=Q11+1;IF Q11=9 THEN Q11<=(OTHERS=>'');Q22<=Q22+1;END IF;IF Q22=5 AND Q11=9 THENQ22<="0000";Q11<="0000";COUT<='1';ELSE COUT<='';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 );COUT:OUT STD_LOGIC);END CNT24;ARCHITECTURE ONE OF CNT24 ISSIGNAL Q11,Q22:STD_LOGIC_VECTOR(3 DOWNTO );BEGINPROCESS(CLK)BEGINIF CLK'EVENT AND CLK='1' THENQ11<=Q11+1;IF Q11=9 THEN Q11<=(OTHERS=>'');Q22<=Q22+1;END IF;IF Q22=2 AND Q11=3 THENQ22<="0000";Q11<="0000";COUT<='1';ELSE COUT<='';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 );--两位分析输入讯号CLK :IN STD_LOGIC;CQ1 :OUT STD_LOGIC_VECTOR (3 DOWNTO );CQ2 :OUT STD_LOGIC_VECTOR (3 DOWNTO );COUT :OUT STD_LOGIC);END;ARCHITECTURE ONE OF DAY ISSIGNAL CQ3,CQ4:STD_LOGIC_VECTOR(3 DOWNTO );SIGNAL PAN:STD_LOGIC_VECTOR(1 DOWNTO );BEGINPROCESS(CLK,PANDUAN)BEGINIF CLK'EVENT AND CLK='1' THEN--上升沿CQ3<=CQ3+1;IF CQ3=9 THEN CQ3<=(OTHERS=>'');CQ4<=CQ4+1;END IF;PAN<=PANDUAN;CASE PAN ISWHEN "00"=>IF CQ3="0001" AND CQ4="0011"--判断讯号为00时为31进 THEN CQ3<="0001";CQ4<="0000";COUT<='1';-- 制计数器ELSE COUT<='';END IF; WHEN "01"=>IF CQ3="0000" AND CQ4="0011"--判断讯号为01时为30进THEN CQ3<="0001";CQ4<="0000";COUT<='1';-- 制计数器ELSE COUT<='';END IF;WHEN "10"=>IF CQ3="1000" AND CQ4="0010"--判断讯号为10时为28进THEN CQ3<="0001";CQ4<="0000";COUT<='1';-- 制计数器ELSE COUT<='';END IF;WHEN "11"=>IF CQ3="1001" AND CQ4="0010"--判断讯号为11时为29进THEN CQ3<="0001";CQ4<="0000";COUT<='1';-- 制计数器ELSE COUT<='';END IF;WHEN OTHERS=>NULL;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进制计数器,同时其需要为天提供判断讯号输出,其与天的判断输入讯号相一致。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-119425-1.html
撞吧