新闻中心

EEPW首页 > EDA/PCB > 设计应用 > 基于VHDL实现多路彩灯控制器设计应用

基于VHDL实现多路彩灯控制器设计应用

作者:时间:2012-09-12来源:网络收藏

一、原理

本文引用地址:http://www.amcfsurvey.com/article/189948.htm

设计一个彩制程序器。可以实现四种花型循环变化,有复位开关。整个系统共有三个输入信号CLK,RST,SelMode,八个输出信号控制八个彩灯。时钟信号CLK脉冲由系统的晶振产生。各种不同花样彩灯的变换由SelMode控制.硬件电路的设计要求在彩灯的前端加74373锁存器。用来对彩灯进行锁存控制。此彩制系统设定有四种花样变化,这四种花样可以进行切换,四种花样分别为:

(1)彩灯从左到右逐次闪亮。然后从右到左逐次熄灭。

(2)彩灯两边同时亮两个,然后逐次向中间点亮。

(3)彩灯从左到右两个两个点亮,然后从右到左两个两个逐次点亮。

(4)彩灯中间两个点亮。然后同时向两边散开。

二、彩灯控制器的的实现

本控制电路采用语言设计。运用自顶而下的设计思想,按功能逐层分割实现层次化设计。根据彩灯控制器的设计原理,将整个控制器分为四个部分,分别对应彩灯的四种变化模式、利用语言实现该功能程序如下:

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

USE IEEE.std_loglc_ARITH.ALL;

USE IEEE.std_logic_UNSIGNED.ALL;

ENTITY CaiDeng IS

port(CLK:IN std_logic;

RST:in std_logic;

SelMode:in std_logic_vector(1 downto 0);--彩灯花样控制

Light:out std_logic_vector(7 downto 0));

END CaiDeng;

ARCHIteCTURE control OF CaiDeng IS

SIGNAL clk1ms:std_logic:='0';

SIGNAL cnt1:std_logic_vector(3 downto 0):=0000;

SIGNAL ent2:std_logic_vector(1 downto 0):=00;

SIGNAL cnt3:std_logic_vector(3 downto 0):=0000;

SIGNAL cnt4:std_logic_vector(1 downto 0):=00;

BEGIN

P1:PR0CESS(clk1ms)

BEGIN

if(clk1ms'EVENT AND clk1ms='1')then

if selmode=00 then --第一种彩灯花样的程序

if cnt1=1111 then

cnt1=0000;

else cnt1= cnt1+1;

end if;

case cnt1 is

when 0000=>light=10000000;

when 0001=>light=11000000;

when 0010=>light=11100000;

when 0011=>light=11110000;

when 0100=>light=11111000;

when 0101=>light=11111100;

when 0110=>light=11111110;

when 0111=>light=11111111;

when 1000=>light=11111110;

when 1001=>light=11111100;

when 1010=>light=11111000;

when 1011=>light=11110000;

when 1100=>light=11100000;

when 1101=>light=11000000;

when 1110=>light=10000000;

when others=>light=00000000;

end case;

eLSIf selmode=01 then -- 第二种彩灯花样的程序

if cnt2=11 then

cnt2=00;

else cnt2= cnt2+1;

end if;

case cnt2 is

when 00=>light=10000001;

when 01=>light=11000011;

when 10=>light=11100111;

when 11=>light=11111111;

when others=>light=00000000;

end ease;

elsif selmode=10 then --第三种彩灯花样的程序

if cnt3=1111 then

cnt3=0000;

else cnt3=cnt3+1;

end if;

case cnt3 is

when 0000=>light=11000000;

when 0001=>light=01100000;

when 0010=>light=00110000;

when 0011=>light=00011000;

when 0100=>light=00001100;

when 0101=>light=00000110;

when 0110=>light=00000011;

when 0111=>light=00000110;

when 1000=>light=00001100;

when 1001=>light=00011000;

when 1010=>light=00110000;

when 1011=>light=01100000;

when 1100=>light=11000000;

when others=>light=00000000;

end case;

elsif selmode=11 then -- 第四种彩灯花样的程序

if cnt4=11 then

cnt4=00;

else cnt4= cnt4+1;

end if;

case cnt4 is

when 00=>light=00011000;

when 01=>light=00111100;

when 10=>light=01111110;

when 11=>light=11111111;

when others=>light=00000000;

end ease;

end if;

end if;

END PROCESS P1;

P2:PROCESS(clk) --分频进程

variable cnt:integer range 0 to 1000;

BEGIN

IF(RST='0')then

cnt:=0:

ELSIF(clk'EVENT AND clk='1')then

if cnt999 then

cnt:=cnt+1;

clk1ms='0';

else

cnt:=0;

clk1ms='1';

end if;

end if;

end PROCESS P2;

end cONtrol;

三、功能仿真及下载验证

各模块VHDL程序经过编译优化后,选择合适的目标芯片进行综合、管脚配置。本电路选用ALTERA公司的可编程逻辑芯片EPM7128SLC84-6,由MAX+Plus II进行仿真,从仿真波形可以看出,此程序可以实现四种不同花样彩灯的相互变换,每种花样彩灯可以循环变化。但是如果系统的固有频率很大,彩灯的闪烁速度非常快,看到的现象是每个花样的八个彩灯同时被点亮,为了实现绚丽多彩的景象,必须要在程序中加一个分频进程如上述程序的进程P2。

四、结束语

本次设计的程序已经在硬件系统上得到了验证,实验表明。此设计方法能够满足四种不同花样彩灯的变化要求,并且该方法便于扩展不同变化模式的彩灯花样,各个不同花样的相互转变是手动切换实现的。自动切换的方法笔者不再累述。



评论


相关推荐

技术专区

关闭