《EDA技术及其应用》实训报告班级电信一班姓名 xx学号 xx 指导教师 xx2012年05月21 日xxxx学院10级机械电子工程系目录1.1前言 (4)1.2课题 (4)1.3 实验的目的及意义 (4)1.4 实验的内容及要求 (4)1.5 实验的地点 (4)1. 6 实验的器材 (4)1. 7 实验设计思想 (4)1.8各模块的设计程序和元件介绍 (5)1.9感想……………………………………………………….1.1 前言随着电子技术的不断发展与进步,电子系统的设计方法发生了很大的变化,基于EDA技术的设计方法正成为电子系统设计的主流,EDA技术已成为许多高职高专院校电类专业学生必须掌握的一门重要技术。
此次基于EDA技术的万年历实训,加强了同学们对EDA 工具QuartusII的使用方法、VHDL语言知识、FPGA开发技术的深入理解,通过万年历的功能实现和功能测试,详细介绍QuartusII的完整设计流程,在此基础上,进一步介绍面向复杂模块的使用方法。
其中包括年、月、日、时、分、秒以及调整、控制等各个模块的功能实现和仿真测试,进一揭示VHDL语言在语句应用和电路功能描述上的特点及其特殊用法,使我们在很短的时间内快速掌握了EDA这门重要技术。
1.2实验的课题:万年历1.3实验的目的及意义:(1)掌握EDA技术及FPGA技术的开发流程。
(2)掌握系统设计的方法和层次化设计的方法。
(3)掌握QuartusII软件的使用方法。
(4)掌握VHDL语言的程序设计、编写、编译和错误修改。
(5)掌握熟悉EDA实验箱的各个模块(6)掌握EDA试验箱与pc机的连接、下载和引脚绑定的全过程和方法,实现功能仿真。
1.4实验的内容及要求:(1)实现年、月、日、时、分、秒的显示并具有闰年判断计数的功能(2)在试验箱上通过按键实现年月日和时分秒的显示切换。
(3)利用试验箱和pc机进行功能测试并实现万年历的显示功能。
1.5实验的地点:xxx学院EDA实验室1.6实验的器材:硬件:计算机、EDA试验箱软件:QuartusII软件1.7实验设计思想:将万年历分为各个模块分项处理,每个小模块实现一个小的功能,最后在万年历的顶层文件中将各个模块整好在一起,实现万年历的整体功能。
这是万年历实验设计的整体思想。
1.8其中组成模块有:秒计时模块cnt60、分计时模块cnt60、时计时模块cnt24、日计时模块tian、月计时模块yue、年计时模块nian、调整模块tz、控制模块mux21,然后在顶层文件中连接个各个模块组成万年历的完整连接图,之后再pc机上进行编译,完成引脚绑定再下载到实验箱上,根据程序内容及引脚绑定通过按键控制和led灯的显示最终完成测试。
各模块设计:1、秒分时、年月日、调整控制模块设计程序(1)秒计时模块cnt60(六十进制计数器)程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNT60 isport(clk:in std_logic;CQ1,CQ2:out std_logic_vector(3 downto 0);COUT:OUT std_logic);end entity CNT60;architecture art of CNT60 issignal s1,s2:std_logic_vector(3 downto 0);beginprocess(clk)beginIF clk'event 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;end process;END art;将程序用QuartusII软件编译之后生成的cnt60模块元件如下图所示:(此模块实现六十进制计数,用它实现分和秒功能)(2)分计时模块cnt60:(六十进制计数器)分计时模块和秒计时秒快一样,同样是用六十进制计数器cnt60,程序和生成元件同上所述。
(3)时计时模块cnt24(二十四进制计数器)程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNT24 isport( clk:in std_logic;CQ1,CQ2:out std_logic_vector(3 downto 0);COUT:OUT std_logic);end entity CNT24;architecture art of CNT24 issignal s1,s2:std_logic_vector(3 downto 0);beginprocess(clk)beginIF clk'event 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模块元件如下图所示:(此模块实现二十四进制计数,用它实现小时功能)(4)天计时模块tian程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity 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 issignal s1,s2:std_logic_vector(3 downto 0);beginbeginIF clk'event AND clk='1' then S1<=S1+1;IF S1=9 THEN S1<="0000"; S2<=S2+1; END IF; End if;CASE AB ISwhen"00"=>IF S2=2 AND S1=8 THENS1<="0000";S2<="0000";COUT<='1';ELSE COUT<='0';END IF;when"01"=>IF S2=2 AND S1=9 THENS1<="0000";S2<="0000";COUT<='1';ELSE COUT<='0';END IF;when"10"=>IF S2=3 AND S1=0 THENS1<="0000";S2<="0000";COUT<='1';ELSE COUT<='0';END IF;when"11"=>IF S2=3 AND S1=1 THENS1<="0000";S2<="0000";COUT<='1';ELSE COUT<='0';END IF;WHEN OTHERS=>NULL;END CASE;END IF;CQ1<=S1;CQ2<=S2;END art;将程序用QuartusII软件编译之后生成的tian模块元件如下图所示:(此模块实现的是天的计数功能,其中ab用来控制计数的进制,分为四种情况:28天、29天、30天和31天,其具体信号由月模块判断输出)(5)月计时模块yue程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity 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);COUT:OUT std_logic);end entity YUE;architecture art of yue issignal s1,s2:std_logic_vector(3 downto 0);beginbeginIF clk'event 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 COUT<='0'; END IF;END IF;CASE s2&s1 iswhen"00000001"=>ab<="11";when"00000010"=>if r='0' thenab<="00"; else ab<="01"; end if;when"00000011"=>ab<="11";when"00000100"=>ab<="10";when"00000101"=>ab<="11";when"00000110"=>ab<="10";when"00000111"=>ab<="11";when"00001000"=>ab<="11";when"00001001"=>ab<="10";when"00010000"=>ab<="11";when"00010001"=>ab<="10";when"00010010"=>ab<="11";WHEN OTHERS=>NULL;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天。