歡迎您光臨本站 登入註冊首頁

VHDL實現多路彩燈控制器

admin @ 2014-03-26 , reply:0

概述

   本文介紹應用美國ALTERA公司的MAX+PlusII平台,使用VHDL硬體描述語言實現的多路彩燈控制器。一、多路彩燈控制器設計原理  &nbs……

    本文介紹應用美國ALTERA公司的MAX+Plus II平台,使用VHDL硬體描述語言實現的多路彩燈控制器。

一、多路彩燈控制器設計原理
    設計一個彩燈控制程序器。可以實現四種花型循環變化,有複位開關。整個系統共有三個輸入信號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。

四、結束語
    本次設計的程序已經在硬體系統上得到了驗證,實驗表明。此設計方法能夠滿足四種不同花樣彩燈的變化要求,並且該方法便於擴展不同變化模式的彩燈花樣,各個不同花樣的相互轉變是手動切換實現的。自動切換的方法筆者不再累述。


[admin via 研發互助社區 ] VHDL實現多路彩燈控制器已經有2313次圍觀

http://cocdig.com/docs/show-post-43002.html