新聞中心

EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 基于VHDL實(shí)現(xiàn)多路彩燈控制器設(shè)計(jì)應(yīng)用

基于VHDL實(shí)現(xiàn)多路彩燈控制器設(shè)計(jì)應(yīng)用

作者: 時(shí)間:2012-09-12 來(lái)源:網(wǎng)絡(luò) 收藏

一、原理

本文引用地址:http://butianyuan.cn/article/189948.htm

設(shè)計(jì)一個(gè)彩制程序器??梢詫?shí)現(xiàn)四種花型循環(huán)變化,有復(fù)位開(kāi)關(guān)。整個(gè)系統(tǒng)共有三個(gè)輸入信號(hào)CLK,RST,SelMode,八個(gè)輸出信號(hào)控制八個(gè)彩燈。時(shí)鐘信號(hào)CLK脈沖由系統(tǒng)的晶振產(chǎn)生。各種不同花樣彩燈的變換由SelMode控制.硬件電路的設(shè)計(jì)要求在彩燈的前端加74373鎖存器。用來(lái)對(duì)彩燈進(jìn)行鎖存控制。此彩制系統(tǒng)設(shè)定有四種花樣變化,這四種花樣可以進(jìn)行切換,四種花樣分別為:

(1)彩燈從左到右逐次閃亮。然后從右到左逐次熄滅。

(2)彩燈兩邊同時(shí)亮兩個(gè),然后逐次向中間點(diǎn)亮。

(3)彩燈從左到右兩個(gè)兩個(gè)點(diǎn)亮,然后從右到左兩個(gè)兩個(gè)逐次點(diǎn)亮。

(4)彩燈中間兩個(gè)點(diǎn)亮。然后同時(shí)向兩邊散開(kāi)。

二、彩燈控制器的的實(shí)現(xiàn)

本控制電路采用語(yǔ)言設(shè)計(jì)。運(yùn)用自頂而下的設(shè)計(jì)思想,按功能逐層分割實(shí)現(xiàn)層次化設(shè)計(jì)。根據(jù)彩燈控制器的設(shè)計(jì)原理,將整個(gè)控制器分為四個(gè)部分,分別對(duì)應(yīng)彩燈的四種變化模式、利用語(yǔ)言實(shí)現(xiàn)該功能程序如下:

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) --分頻進(jìn)程

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;

三、功能仿真及下載驗(yàn)證

各模塊VHDL程序經(jīng)過(guò)編譯優(yōu)化后,選擇合適的目標(biāo)芯片進(jìn)行綜合、管腳配置。本電路選用ALTERA公司的可編程邏輯芯片EPM7128SLC84-6,由MAX+Plus II進(jìn)行仿真,從仿真波形可以看出,此程序可以實(shí)現(xiàn)四種不同花樣彩燈的相互變換,每種花樣彩燈可以循環(huán)變化。但是如果系統(tǒng)的固有頻率很大,彩燈的閃爍速度非常快,看到的現(xiàn)象是每個(gè)花樣的八個(gè)彩燈同時(shí)被點(diǎn)亮,為了實(shí)現(xiàn)絢麗多彩的景象,必須要在程序中加一個(gè)分頻進(jìn)程如上述程序的進(jìn)程P2。

四、結(jié)束語(yǔ)

本次設(shè)計(jì)的程序已經(jīng)在硬件系統(tǒng)上得到了驗(yàn)證,實(shí)驗(yàn)表明。此設(shè)計(jì)方法能夠滿足四種不同花樣彩燈的變化要求,并且該方法便于擴(kuò)展不同變化模式的彩燈花樣,各個(gè)不同花樣的相互轉(zhuǎn)變是手動(dòng)切換實(shí)現(xiàn)的。自動(dòng)切換的方法筆者不再累述。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉