当前位置:文档之家› EDA多功能彩灯 实验报告

EDA多功能彩灯 实验报告

黄冈师范学院物理科学与技术学院《EDA技术》课程设计题目:多功能彩灯设计学号:*************名:***班级:电信0902指导老师:**2011-12-25——2011-12-27一、实验目的本程序以计算机为工作平台,综合运用EDA软件工具开发环境,用硬件描述语言VHDL为设计语言,以ASIC来实现载体的设计。

通过在EDA中的编译、处理、仿真和调制分析,接受电子设计领域的初步训练,并使所学的知识和技能得到进一步巩固、深化和扩展,以达到可以运用EDA工具设计一些简单的电子产品,掌握使用EDA工具设计数字系统的设计思想和设计方法,为继续学习和认识电子设计知识打下良好的基础。

培养利用EDA技术知识,解决电子设计自动化中常见实际问题的能力,积累实际的EDA编程。

通过本课程设计的学习,复习所学的专业知识,使课堂学习的理论知识应用于实践。

培养综合运用以学知识解决实际工程技术问题的能力,查阅图书资料和各种工程书的能力、工程绘图能力、撰写技术报告和编制技术资料的能力,接受一次电子设计自动化方面的基本训练。

二、设计要求1,用EDA技术设计一个多功能彩灯控制器,使得彩灯(LED管)既能发出四种不同的花型(自拟),又能四种模式自动循环。

具体选择由按键一控制。

2,由按键二控制彩灯的频率,使得彩灯可以二分频、四分频、八分频。

3,要求7段数码管显示当前显示的花型和用的是几分频,如是二分频,则数码管一显示2;显示花型二,则数码管二显示2。

三、总体设计原理与内容3.1彩灯控制器放入设计原理分析:此设计的要求是连续发出四种花型且用数码管显示。

由此可知:要发出不同的花型,必须要由不同的输出频率来实现,所以应该要由一个分频器。

分频器部分的设计是利用计数器实现分频,将控制器的外接频率分为几个我们预先设计的值,即产生一个上升沿,从而实现分频。

显示部分的设计是利用分频器产生的低频信号计数,从而达到分频的目的。

利用分频器输出的不同信号,可以控制彩灯显示不同的花型。

四、设计环境QuartusⅡ简介QuartusⅡ是Altera公司提供的FPGA/CPLD集成开发软件,Altera是世界上最大的可编程逻辑器件供应商之一。

QuartusⅡ在21世初推出,是Altera 全一代FPGA/CPLD集成开发软件MAX+plus II的更新换代产品,其界面友好,使用便捷。

在QuartusⅡ上可以完成设计输入、HDL综合、布新布局(适配)、仿真和选择以及硬件测试等流程,它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、开始处理和器件编程。

QuartusⅡ提供了完整的多平台设计环境,能满足各种特定设计的需求,也是单片机可编程系统(SoPC)设计的综合环境和SoPC开发的基本设计工具,并为Altera DSP开发包进行系统模型设计提供了集成综合环境。

QuartusⅡ设计完全支持VHDL、Verilog的设计流程,其内部嵌有VHDL、Verilog逻辑综合器。

Quartus Ⅱ与可用利用第三方的综合工具(如Leonardo Spectrum、Synplify Pro、FPGA Complier II),并能直接调用这些工具。

同样 QuartusⅡ具备仿真功能,同时支持第三方的仿真工具(如ModelSin)。

此外, QuartusⅡ与MATLAB和DSP Builder结合,可用进行基于FPAG的DSP 系统开发,是DSP硬件系统实现的工具EDA工具。

五、多功能彩灯设计5.1 .1分频控制电路的VHDL设计及实现程序如下:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY SX ISPORT(CLK:IN STD_LOGIC;K:IN STD_LOGIC_VECTOR(3 DOWNTO 0); CLK_OUT:OUT STD_LOGIC);END SX;ARCHITECTURE bhv OF SX ISSIGNAL Q :STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINPROCESS(K)ISBEGINCASE K ISWHEN "0000"=> Q <="00000001";--2分频WHEN "0001"=> Q <="00000011";--4分频WHEN "0010"=> Q <="00000111";--8分频WHEN "0011"=> Q <="00001111";--16分频WHEN "0100"=> Q <="00011111";--32分频WHEN "0101"=> Q <="00111111";--64分频WHEN "0110"=> Q <="01111111";--128分频WHEN "0111"=> Q <="11111111";--256分频WHEN OTHERS=> Q <="00000001";END CASE;END PROCESS;PROCESS (CLK,Q)V ARIABLE QA:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINIF CLK'EVENT AND CLK='1' THENIF QA=Q THEN QA:="00000000";CLK_OUT<='1';ELSE QA:=QA+1; CLK_OUT<='0';END IF;END IF;END PROCESS;END BHV;5.1.2分频控制电路封装图5.1.3分频控制电路仿真图5.2.1彩灯控制器的VHDL设计及实现程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cdzt ISPORT (CLK :IN STD_LOGIC;H:IN STD_LOGIC_VECTOR(3 DOWNTO 0);led :OUT STD_LOGIC_VECTOR(15 DOWNTO 0));END;ARCHITECTURE BHV OF cdzt ISTYPE ST IS(S0,S1,S2,S3);SIGNAL CURRENT_STATE:ST;SIGNAL E : STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL Q : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK,Q)BEGINIF H="0000" then E<="01";ELSE E<="00";END IF;IF CLK'EVENT AND CLK='1' THENIF E="00" THEN current_state<=s0;case current_state iswhen s0=>if H="0010" then current_state<=s1;else current_state<=s0;end if;when s1=>if H="0011" then current_state<=s2;else current_state<=s1;end if;when s2=>if H="0100" then current_state<=s3;else current_state<=s2;end if;when s3=>if H="0101" then current_state<=s0;else current_state<=s3;end if;when others =>current_state<=s0;end case;END IF;IF E="01" THEN current_state<=s0;case current_state iswhen s0=> if Q="1111" then current_state<=s1;else current_state<=s0;end if ;when s1=> if Q="1111" then current_state<=s2;else current_state<=s1;end if ;when s2=> if Q="1111" then current_state<=s3;else current_state<=s2;end if ;when s3=> if Q="1111" then current_state<=s0;else current_state<=s3;end if ;when others =>current_state<=s0;end case;END IF;END IF;end process;PROCESS(current_state,CLK,Q)BEGINIF CLK'EVENT AND CLK='1' THENQ<=Q+1;END IF;case current_state isWHEN s0=>CASE Q ISwhen"0000" =>led<="0000000000000001";when"0001" =>led<="0000000000000010";when"0010" =>led<="0000000000000100";when"0011" =>led<="0000000000001000";when"0100" =>led<="0000000000010000";when"0101" =>led<="0000000000100000";when"0110" =>led<="0000000001000000";when"0111" =>led<="0000000010000000";when"1000" =>led<="0000000100000000";when"1001" =>led<="0000001000000000";when"1010" =>led<="0000010000000000";when"1011" =>led<="0000100000000000";when"1100" =>led<="0001000000000000";when"1101" =>led<="0010000000000000";when"1110" =>led<="0100000000000000";when"1111" =>led<="1000000000000000";when others=>led<="0000000000000000"; END CASE;WHEN s1=>CASE Q ISwhen"0000" =>led<="0000000000000001";when"0001" =>led<="0000000000000011";when"0010" =>led<="0000000000000111";when"0011" =>led<="0000000000001111";when"0100" =>led<="0000000000011111";when"0101" =>led<="0000000000111111";when"0110" =>led<="0000000001111111";when"0111" =>led<="0000000011111111";when"1000" =>led<="0000000111111111";when"1001" =>led<="0000001111111111";when"1010" =>led<="0000011111111111";when"1011" =>led<="0000111111111111";when"1100" =>led<="0001111111111111";when"1101" =>led<="0011111111111111";when"1110" =>led<="0111111111111111"; when"1111" =>led<="1111111111111111"; when others=>led<="0000000000000000"; END CASE;WHEN s2=>CASE Q ISwhen"0000" =>led<="0000000000001111"; when"0001" =>led<="0000000000011110"; when"0010" =>led<="0000000000111100"; when"0011" =>led<="0000000001111000"; when"0100" =>led<="0000000011110000"; when"0101" =>led<="0000000111100000"; when"0110" =>led<="0000001111000000"; when"0111" =>led<="0000011110000000"; when"1000" =>led<="0000111100000000"; when"1001" =>led<="0001111000000000"; when"1010" =>led<="0011110000000000"; when"1011" =>led<="0111100000000000"; when"1100" =>led<="1111000000000000"; when"1101" =>led<="1110000000000001"; when"1110" =>led<="1100000000000011"; when"1111" =>led<="1000000000000111"; when others=>led<="0000000000000000"; END CASE;WHEN s3=>CASE Q ISwhen"0000" =>led<="1000000000000001"; when"0001" =>led<="0100000000000010"; when"0010" =>led<="0010000000000100"; when"0011" =>led<="0001000000001000"; when"0100" =>led<="0000100000010000"; when"0101" =>led<="0000010000100000"; when"0110" =>led<="0000001001000000"; when"0111" =>led<="0000000110000000"; when"1000" =>led<="0000000110000000"; when"1001" =>led<="0000001001000000"; when"1010" =>led<="0000010000100000"; when"1011" =>led<="0000100000010000"; when"1100" =>led<="0001000000001000"; when"1101" =>led<="0010000000000100"; when"1110" =>led<="0100000000000010"; when"1111" =>led<="1000000000000001"; when others=>led<="0000000000000000"; END CASE;END CASE;END PROCESS;END BHV;程序中共有4种模式,第一种为从LED1到LED16依次闪亮,第二种为16盏灯逐一点亮……程序中不按H键时,H的值为0000,此时内部信号E为01,彩灯状态为4种模式自动循环。

相关主题