基于VHDL实现多路彩灯控制器设计应用
发布时间:2009/2/2 0:00:00 访问次数:2580
一、多路彩灯控制器设计原理
设计一个彩灯控制程序器。可以实现四种花型循环变化,有复位开关。整个系统共有三个输入信号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<=
一、多路彩灯控制器设计原理
设计一个彩灯控制程序器。可以实现四种花型循环变化,有复位开关。整个系统共有三个输入信号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<=
上一篇:空内存控制块链表