EDA论文基于VHDL的多路循环彩灯控制器的设计延安大学信息学院电子08林小兵1070208014002基于VHDL的多路循环彩灯控制器的设计林小兵(延安大学信息学院716000)摘要:本文应用EDA技术设计了一个多路彩灯控制器,6种花型循环变化,有清零开关,并且可以选择快慢两种节拍。给出彩灯控制器组成原理图、主要VHDL源程序及仿真波形图.关键字:EDA循环彩灯VHDLThemultiplecirculationlightsdesignbasedontheVHDLAbstract:ThisarticleappliedEDAtechnologywhichdesignedacirculationroadlightscontrollerand6kindsofdesigncyclechanges,andaresetswitch,withtwochoosebeats.Hadgivencompositionprinciplediagram,lightscontrollermainsourceprogramandsimulationVHDLwavefigures.Keywords:EDAcirculationlightsVHDL0引言VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。VHDL是一种标准的硬件电路设计语言,目前已成为广大电路设计人员设计数字系统首选的开发工具。基于VHDL硬件电路语言的编程与实际应用技巧,VHDL硬件电路语言在微机、通信、编码、存储器以及电子电路等方面的具体设计应用,具有实际的指导意义。1系统设计要求需设计一个十六路彩灯控制器,6种花型循环变化,有清零开关,并且可以选择快慢两种节拍。2系统设计方案根据系统设计要求可知,整个系统共有三个输入信号:控制彩灯节奏快慢的基准时钟信号CLK_IN,系统清零信号CLR,彩灯节奏快慢选择开关CHOSE_KEY;共有16个输出信号LED[15..0],分别用于控制十六路彩灯。据此,我们可将整个彩灯控制器CDKZQ分为两大部分:时序控制电路SXKZ和显示控制电路XSKZ,整个系统的组成原理图如图1所示。图1彩灯控制器组成原理图3主要VHDL源程序3.1时序控制电路的VHDL源程序--SXKZ.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSXKZISPORT(CHOSE_KEY:INSTD_LOGIC;CLK_IN:INSTD_LOGIC;CLR:INSTD_LOGIC;CLK:OUTSTD_LOGIC);ENDENTITYSXKZ;ARCHITECTUREARTOFSXKZISSIGNALCLLK:STD_LOGIC;BEGINPROCESS(CLK_IN,CLR,CHOSE_KEY)ISVARIABLETEMP:STD_LOGIC_VECTOR(2DOWNTO0);BEGINIFCLR='1'THEN--当CLR='1'时清零,否则正常工作CLLK='0';TEMP:=000;ELSIFRISING_EDGE(CLK_IN)THENIFCHOSE_KEY='1'THENIFTEMP=011THENTEMP:=000;CLLK=NOTCLLK;ELSETEMP:=TEMP+'1';ENDIF;--当CHOSE_KEY='1'时产生基准时钟频率的1/4的时钟信号,否则产生基准时钟--频率的1/8的时钟信号ELSEIFTEMP=111THENTEMP:=000;CLLK=NOTCLLK;ELSETEMP:=TEMP+'1';ENDIF;ENDIF;ENDIF;ENDPROCESS;CLK=CLLK;ENDARCHITECTUREART;3.2显示控制电路的VHDL源程序--XSKZ.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYXSKZISPORT(CLK:INSTD_LOGIC;CLR:INSTD_LOGIC;LED:OUTSTD_LOGIC_VECTOR(15DOWNTO0));ENDENTITYXSKZ;ARCHITECTUREARTOFXSKZISTYPESTATEIS(S0,S1,S2,S2,S4,S5,S6);SIGNALCURRENT_STATE:STATE;SIGNALFLOWER:STD_LOGIC_VECTOR(15DOWNTO0);BEGINPROCESS(CLR,CLK)ISCONSTANTF1:STD_LOGIC_VECTOR(15DOWNTO0):=0001000100010001;CONSTANTF2:STD_LOGIC_VECTOR(15DOWNTO0):=1010101010101010;CONSTANTF2:STD_LOGIC_VECTOR(15DOWNTO0):=0011001100110011;CONSTANTF4:STD_LOGIC_VECTOR(15DOWNTO0):=0100100100100100;CONSTANTF5:STD_LOGIC_VECTOR(15DOWNTO0):=1001010010100101;CONSTANTF6:STD_LOGIC_VECTOR(15DOWNTO0):=1101101101100110;--六种花型的定义BEGINIFCLR='1'THENCURRENT_STATE=S0;ELSIFRISING_EDGE(CLK)THENCASECURRENT_STATEISWHENS0=FLOWER=ZZZZZZZZZZZZZZZZ;CURRENT_STATE=S1;WHENS1=FLOWER=F1;CURRENT_STATE=S2;WHENS2=FLOWER=F2;CURRENT_STATE=S2;WHENS2=FLOWER=F2;CURRENT_STATE=S4;WHENS4=FLOWER=F4;CURRENT_STATE=S5;WHENS5=FLOWER=F5;CURRENT_STATE=S6;WHENS6=FLOWER=F6;CURRENT_STATE=S1;ENDCASE;ENDIF;ENDPROCESS;LED=FLOWER;ENDARCHITECTUREART;3.3整个电路系统的VHDL源程序--CDKZQ.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYCDKZQISPORT(CLK_IN:INSTD_LOGIC;CLR:INSTD_LOGIC;CHOSE_KEY:INSTD_LOGIC;LED:OUTSTD_LOGIC_VECTOR(15DOWNTO0));ENDENTITYCDKZQ;ARCHITECTUREARTOFCDKZQISCOMPONENTSXKZISPORT(CHOSE_KEY:INSTD_LOGIC;CLK_IN:INSTD_LOGIC;CLR:INSTD_LOGIC;CLK:OUTSTD_LOGIC);ENDCOMPONENTSXKZ;COMPONENTXSKZISPORT(CLK:INSTD_LOGIC;CLR:INSTD_LOGIC;LED:OUTSTD_LOGIC_VECTOR(15DOWNTO0));ENDCOMPONENTXSKZ;SIGNALS1:STD_LOGIC;BEGINU1:SXKZPORTMAP(CHOSE_KEY,CLK_IN,CLR,S1);U2:XSKZPORTMAP(S1,CLR,LED);ENDARCHITECTUREART;4系统仿真/硬件验证4.1系统的有关仿真时序控制电路SXKZ、显示控制电路XSKZ及整个电路系统CDKZQ的仿真图分别如图2、图3和图4所示。图2时序控制电路SXKZ仿真图图3显示控制电路XSKZ仿真图图4整个电路系统CDKZQ仿真图4.2系统的硬件验证系统通过仿真后,我们可根据自己所拥有的EDA实验开发系统进行编程下载和硬件验证。考虑到一般EDA实验开发系统提供的输出显示资源有限,我们可将输出适当调整后进行硬件验证。5设计技巧分析(1)在时序控制电路SXKZ的设计中,利用计数器计数达到分频值时,对计数器进行清零,同时将输出信号反向,这就非常简洁地实现了对输入基准时钟信号的分频,并且分频信号的占空比为0.5。(2)在显示控制电路XSKZ的设计中,利用状态机非常简洁地实现了六种花型的循环变化,同时利用六个十六位常数的设计,可非常方便地设置和修改六种花型。(3)对于顶层程序的设计,因本系统模块较少,既可使用文本的程序设计方式,也可使用原理图的设计方式。但对于模块较多的系统,最好使用文本的程序设计方式。6系统扩展思路(1)在彩灯的快慢节奏的控制上,若去掉快慢节奏控制开关,如何控制快慢节奏的交替变化。(2)设计外围电路:系统用方波信号源、直流工作电源、彩灯控制的驱动电路。(3)若为课程设计,除要求设计调试程序、外围电路外,还可要求设计、制作整个系统,包括PCB的制作。设计小结:本次设计的程序已经在硬件系统上得到了验证,实验表明。此设计方法能够满足6种不同花样彩灯的变化要求,并且该方法便于扩展不同变化模式的彩灯花样,各个不同花样的相互转变是手动切换实现的。其次它也锻炼了我们的实际动手设计能力,收获较大!