多路彩灯控制器的VHDL的实现

EDA/IC设计

1063人已加入

描述

  一、多路彩灯控制器设计原理

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

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

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

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

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

  二、多路彩灯控制器的VHDL的实现

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

  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 cnt《999 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。

  四、结束语

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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分