1、万年历实训报告EDA技术及其应用实 训 报 告班 级 电信一班 姓 名 xx 学 号 xx 指导教师 xx 2012年 05月 21 日 xxxx学院 10级机械电子工程系前言.4课题.4 实验的目的及意义.4 实验的内容及要求.4 实验的地点.41. 6 实验的器材.41. 7 实验设计思想.41.8各模块的设计程序和元件介绍.5感想. 前言随着电子技术的不断发展与进步,电子系统的设计方法发生了很大的变化,基于EDA技术的设计方法正成为电子系统设计的主流,EDA技术已成为许多高职高专院校电类专业学生必须掌握的一门重要技术。 此次基于EDA技术的万年历实训,加强了同学们对EDA工具Quartu
2、sII的使用方法、VHDL语言知识、FPGA开发技术的深入理解,通过万年历的功能实现和功能测试,详细介绍QuartusII的完整设计流程,在此基础上,进一步介绍面向复杂模块的使用方法。其中包括年、月、日、时、分、秒以及调整、控制等各个模块的功能实现和仿真测试,进一揭示VHDL语言在语句应用和电路功能描述上的特点及其特殊用法,使我们在很短的时间内快速掌握了EDA这门重要技术。实验的课题: 万年历实验的目的及意义:(1)掌握EDA技术及FPGA技术的开发流程。(2)掌握系统设计的方法和层次化设计的方法。(3)掌握QuartusII软件的使用方法。(4)掌握VHDL语言的程序设计、编写、编译和错误修
3、改。(5)掌握熟悉EDA实验箱的各个模块(6)掌握EDA试验箱与pc机的连接、下载和引脚绑定的全过程和方法,实现功能仿真。实验的内容及要求:(1)实现年、月、日、时、分、秒的显示并具有闰年判断计数的功能(2)在试验箱上通过按键实现年月日和时分秒的显示切换。 (3)利用试验箱和pc机进行功能测试并实现万年历的显示功能。实验的地点:xxx学院EDA实验室实验的器材:硬件:计算机、EDA试验箱 软件:QuartusII软件实验设计思想: 将万年历分为各个模块分项处理,每个小模块实现一个小的功能,最后在万年历的顶层文件中将各个模块整好在一起,实现万年历的整体功能。这是万年历实验设计的整体思想。 其中组
4、成模块有:秒计时模块cnt60、分计时模块cnt60、时计时模块cnt24、日计时模块tian、月计时模块yue、年计时模块nian、调整模块tz、控制模块mux21,然后在顶层文件中连接个各个模块组成万年历的完整连接图,之后再pc机上进行编译,完成引脚绑定再下载到实验箱上,根据程序内容及引脚绑定通过按键控制和led灯的显示最终完成测试。各模块设计:1、秒分时、年月日、调整控制模块设计程序(1)秒计时模块cnt60(六十进制计数器)程序:library ieee;use CNT60 isport(clk:in std_logic;CQ1,CQ2:out std_logic_vector(3 d
5、ownto 0);COUT:OUT std_logic);end entity CNT60;architecture art of CNT60 issignal s1,s2:std_logic_vector(3 downto 0);beginprocess(clk)beginIF clkevent AND clk=1 then S1=S1+1; IF S1=9 THEN S1=0000;S2=S2+1; END IF; IF s2=5 AND S1=9 then s1=0000;s2=0000; COUT=1; else COUT=0; end if; end if;CQ1=S1;CQ2=S2
6、;end process;END art;将程序用QuartusII软件编译之后生成的cnt60模块元件如下图所示: (此模块实现六十进制计数,用它实现分和秒功能)(2)分计时模块cnt60:(六十进制计数器)分计时模块和秒计时秒快一样,同样是用六十进制计数器cnt60,程序和生成元件同上所述。(3)时计时模块cnt24(二十四进制计数器)程序:library ieee;use CNT24 isport( clk:in std_logic;CQ1,CQ2:out std_logic_vector(3 downto 0);COUT:OUT std_logic);end entity CNT24;
7、architecture art of CNT24 issignal s1,s2:std_logic_vector(3 downto 0);beginprocess(clk)beginIF clkevent AND clk=1 then S1=S1+1;IF S1=9 THEN S1=0000; S2=S2+1; END IF;if s2=2 AND S1=3 then s1=0000;s2=0000;COUT=1;else COUT=1; end if; end if; CQ1=S1;CQ2=S2;end process;END art;将程序用QuartusII软件编译之后生成的cnt24
8、模块元件如下图所示:(此模块实现二十四进制计数,用它实现小时功能)(4)天计时模块tian程序:library ieee;use tian isport(clk:in std_logic; ab:in std_logic_vector(1 downto 0); CQ1,CQ2:out std_logic_vector(3 downto 0); COUT:OUT std_logic);end entity tian;architecture art of tian is signal s1,s2:std_logic_vector(3 downto 0);beginprocess(clk) beg
9、in IF clkevent AND clk=1 then S1=S1+1;IF S1=9 THEN S1=0000; S2IF S2=2 AND S1=8 THEN S1=0000;S2=0000;COUT=1; ELSE COUTIF S2=2 AND S1=9 THEN S1=0000;S2=0000;COUT=1; ELSE COUTIF S2=3 AND S1=0 THEN S1=0000;S2=0000;COUT=1; ELSE COUTIF S2=3 AND S1=1 THEN S1=0000;S2=0000;COUT=1; ELSE COUTNULL;END CASE; END
10、 IF;CQ1=S1;CQ2=S2;end process;END art;将程序用QuartusII软件编译之后生成的tian模块元件如下图所示:(此模块实现的是天的计数功能,其中ab用来控制计数的进制,分为四种情况:28天、29天、30天和31天,其具体信号由月模块判断输出)(5)月计时模块yue程序:library ieee;use yue isport( clk:in std_logic; ab:out std_logic_vector(1 downto 0); r: in std_logic; CQ1,CQ2:out std_logic_vector(3 downto 0); COU
11、T:OUT std_logic);end entity YUE;architecture art of yue is signal s1,s2:std_logic_vector(3 downto 0);beginprocess(clk) begin IF clkevent AND clk=1 then S1=S1+1; IF S1=9 THEN S1=0000; S2=S2+1; END IF; IF s2=1 and s1=2 then s1=0001;s2=0000; COUT=1; ELSE COUTabif r=0 then ab=00; else ababababababababab
12、ababNULL; END CASE;CQ1=S1;CQ2=S2;end process;END art;将程序用QuartusII软件编译之后生成的yue模块元件如下图所示:(此模块实现的是月的计数功能,在其输入信号中,r用来判断是否为闰年,且在该模块中判断月份,为:一、三、五、七、八、十、十二月份时,ab=11,每月为31天;为:四、六、九、十一月份时,ab=10,每月为30天;二月份单独判断,当为闰年时, ab=10,二月为28天,当为非闰年时, ab=01,二月为29天。)(6)年计时模块nian程序:library ieee;use nian isport( clk:in std_l
13、ogic; CQ1,CQ2:out std_logic_vector(3 downto 0); r: buffer std_logic);end entity nian;architecture art of nian is signal s1,s2,a:std_logic_vector(3 downto 0);begin process(clk) begin IF clkevent AND clk=1 then S1=S1+1;a=a+1; IF S1=9 THEN S1=0000; S2=S2+1; END IF; IF s2=9 and s1=9 then s1=0001;s2=0000
14、; END IF; IF a=3 then r=1;a=0000; else r=0; end if; END IF; CQ1=S1;CQ2=S2;end process;END art;将程序用QuartusII软件编译之后生成的nian模块元件如下图所示:(此模块实现的是年的计数功能,并判断是否为闰年)(7)调整模块tz程序:LIBRARY IEEE;USE tz IS PORT( fi,si,ti,yi,ni,l2,l3,l4,l5,l6:out STD_LOGIC; k2,k3:in STD_LOGIC; yo,too,soo,fo,mo:in STD_LOGIC);END tz ;a
15、rchitecture one of tz is signal a:std_logic_vector(3 downto 0);begin process(k3,k2)begin if k2event and k2=1 then a=a+1; if a=5 then afi=mo;si=fo;ti=soo;yi=too;ni=yo; l2=0;l3=0;l4=0;l5=0;l6fi=k3;si=0;ti=0;yi=0;ni=0;l2=1;l3=0;l4=0;l5=0;l6fi=0;si=k3;ti=0;yi=0;ni=0;l2=0;l3=1;l4=0;l5=0;l6fi=0;si=0;ti=k3
16、;yi=0;ni=0;l2=0;l3=0;l4=1;l5=0;l6fi=0;si=0;ti=0;yi=k3;ni=0;l2=0;l3=0;l4=0;l5=1;l6fi=0;si=0;ti=0;yi=0;ni=k3;l2=0;l3=0;l4=0;l5=0;l6null;end case;end process;end;将程序用QuartusII软件编译之后生成的tz模块元件如下图所示:(此模块实现调整各模块(不包括秒)的调数,通过按键k2、k3调整年月日时分秒的切换,从而控制实验箱上年月日时分秒相对应的led灯的亮灭,l2、l3、l4、l5、l6用来指示是否处于调数状态)(8)控制模块mux21
17、:(用来控制年月日和时分秒的切换)程序:LIBRARY IEEE;USE mux21 ISPORT(m1,m2,f1,f2,s1,s2: in STD_LOGIC_vector(3 downto 0);,t1,t2,n1,n2,y1,y2:in STD_LOGIC_vector(3 downto 0); k1:in STD_LOGIC; l1:out std_logic;a1,a2,b1,b2,c1,c2:out STD_LOGIC_vector(3 downto 0);END mux21 ;architecture one of mux21 isbegin process(k1)begin
18、if k1=0 then a1=m1;a2=m2; b1=f1;b2=f2; c1=s1;c2=s2; l1=1; else a1=t1;a2=t2; b1=y1;b2=y2; c1=n1;c2=n2; l1=0; end if;end process;end one;将程序用QuartusII软件编译之后生成的mux21模块元件如下图所示:(此模块用来显示年月日和时分秒之间内容的切换)2、万年历的顶层文件原理图:(将以上各个模块在顶层文件中用线连接起来构成万年历的原理图,从而使它万年历的功能)3、引脚绑定和下载: 编译通过之后,在pc机上完成各个引脚的绑定工作,绑定好之后再用数据线将pc机和实验箱上的USB接口连接起来,然后完成下载工作,即将程序下载到实验箱上,在实验箱上完成万年历功能的显示和实现。4、调试通过对应的按键和切换将数码管上的时间时分秒和日期年月日调整到当前时刻即可。直到万年历功能在实验箱上正确显示和实现。 实验感想 通过这次试验.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1