當前位置:編程學習大全網 - 編程語言 - EDA課程設計:彩燈控制器

EDA課程設計:彩燈控制器

以前做的設計,粘貼時圖形沒出來,參考壹下,記得給分啊

壹.設計目的

1、學習EDA開發軟件和MAX+plus Ⅱ的使用方法,熟悉可編程邏輯器件的使用,通過制作來了解彩燈控制系統。

2、進壹步掌握數字電路課程所學的知識。

3、了解數字電路設計的壹般思路,進壹步解決和分析問題。

4、培養自己的編程和謹慎的學習態度

二、.設計題目內容和要求

(1)課題內容:

用EDA技術設計壹個彩燈控制器,使彩燈(LED管)能連續發出三種以上不同的花型(自擬);

隨著彩燈顯示圖案的變化,發出不同的音響聲。

要求使用7段數碼管顯示當前顯示的花型,如第壹種花型顯示A1,第二種花型顯示b2,第三種花型顯示C3

(2)主要任務:完成該系統的硬件和軟件的設計,並利用實驗箱制作出實物演示,調試好後並能實際運用(指導教師提供制作所需的器件),最後就課程設計本身提交壹篇課程設計報告。

三、總體方案設計與選擇

1 總體方案的設計

方案壹:電路分為三個部分:彩燈花型模塊、聲音模塊,時鐘模塊。用時鐘控制聲音和花型,整體使用相同的變量與信號,主體框圖如下;

圖三—1-1方案壹的的流程圖

方案二:電路分為五個模塊:分頻器模塊、16進制計數器、4進制計數器,4選1選擇器、彩燈控制器。其中彩燈控制器是用來輸出不同的花樣,彩燈控制器的輸出則是用壹個16進制的計數器來控制,揚聲器的輸出時用不同的頻率來控制,所以用了壹個集成分頻器來使輸入的頻率被分為幾種不同的頻率,不同頻率的選擇性的輸出則是用壹個4選壹的選擇器來控制。整體框圖如下:

圖三—1-2方案二的流程圖

2、方案的選擇

方案壹是將融合在壹起,原理思路簡單,元件種類使用少,但是在編程時要使用同壹變量和信號,這樣就會給編程帶來很大的困難,另外中間單元連線較多,不容易檢查,門電路使用較多,電路的抗幹擾能力會下降。

方案二將彩燈花型控制與聲音控制分開,各單元電路只實現壹種功能,電路設計模塊化,且編程時將工作量分開,出現錯誤時較容易檢查,連線較少且容易組裝和調試。

結合兩個方案的優缺點,我選擇容易編程、組裝和調試的方案二。

四、模塊電路的設計

1、分頻器模塊

設計要求顯示不同的彩燈的時候要伴隨不同的音樂,所以設計分頻器來用不同的頻率控制不同的音樂輸出。

模塊說明:

Rst:輸入信號 復位信號 用來復位分頻器的輸出使輸出為“0”,及沒有音樂輸出。

Clk:輸入信號 模塊的功能即為分頻輸入的頻率信號。

Clk_4、clk8、clk_12、clk_16:輸出信號 即為分頻模塊對輸入信號clk的分頻,分別為1/4分頻輸出、1/8分頻輸出、1/12分頻輸出、1/16分頻輸出。不同的頻率會發出不同的聲音。如圖

圖四-1分頻器電路圖

2、16進制計數器

16進制模塊用來控制彩燈輸出模塊,即確定彩燈控制器的不同的輸出。

Rst:輸入信號 復位信號 用來復位16進制使其輸出為“00000”,即彩燈不亮。

Clk1:輸入信號 用來給模塊提供工作頻率。

Count_out[3..0]:輸出信號 即為16進制計數器的輸出,此輸出信號作為彩燈的輸入信號。

如圖四-2

圖四-2 16進制計數器電路圖

3、4進制計數器模塊

4進制計數器作為選擇器的輸入來控制選擇器選擇不同的頻率作為輸出控制揚聲器工作。

Clk2:輸入信號 來為計數器提供工作頻率。

Rst:輸入信號 復位信號 使計數器的輸出為“00”。

如圖四-3

圖四-3 4進制計數器電路圖

4、4選1選擇器模塊

Rst:輸入信號復位信號使選擇器的輸出為“0”。

In1、in2、in3、in4:輸入信號接分頻器的輸出。

Inp[1..0]:輸入信號接4進制計數器的輸出用來控制選擇器的選擇不同的輸入選擇不同的輸出。

Output2:輸出信號直接接揚聲器即輸出的是不同的頻率來控制揚聲器播放聲音

如圖四—4

圖四—4 4選1選擇器電路圖

5、彩燈控制模塊

彩燈控制采用的模式6來進行顯示。

圖四—5—1模式6結構圖

彩燈控制模塊用來直接控制彩燈的輸出,使彩燈表現出不同的花樣。

Rst:輸入信號 使彩燈控制模塊的輸出為“00000000”,即讓彩燈無輸出。

Input[4..0]:輸入信號 不同的輸入使彩燈控制模塊有不同的輸出即彩燈顯示出不同的花樣。

Output3[7..0]:輸出信號 直接與數碼管相連來控制數碼管。

如圖四—5—2

圖四-5-2 彩燈控制電路圖

五、EDA設計與仿真

1、源程序:

----------------------------------------------分頻器模塊-----------------------------------------

LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYfenpinqi IS

PORT

(

clk2,rst :IN std_logic;

clk_12,clk_4,clk_16,clk_8 : OUT std_logic

);

ENDfenpinqi;

ARCHITECTUREcd OF fenpinqi IS

begin

p1:process(clk2,rst)

variable a:integer range 0 to 20;

begin

if rst='1' then

clk_4<='0'; ----- 復位信號控制部分

else

if clk2'event and clk2='1'then

if a>=3 then

a:=0;

clk_4<='1';

else

a:=a+1;

clk_4<='0';

end if;

end if;

end if;

endprocess p1;

p2:process(clk2,rst)

variable b:integer range 0 to 20;

begin

if rst='1' then

clk_16<='0'; ----- 復位信號控制部分

else

if clk2'event and clk2='1'then

if b>=15 then

b:=0;

clk_16<='1';

else

b:=b+1;

clk_16<='0';

end if;

end if;

end if;

endprocess p2;

p3:process(clk2,rst)

variable c:integer range 0 to 20;

begin

if rst='1' then

clk_8<='0'; ----- 復位信號控制部分

else

if clk2'event and clk2='1'then

if c>=7 then

c:=0;

clk_8<='1';

else

c:=c+1;

clk_8<='0';

end if;

end if;

end if;

endprocess p3;

p4:process(clk2,rst)

variable d:integer range 0 to 40;

begin

if rst='1' then

clk_12<='0'; ----- 復位信號控制部分

else

if clk2'event and clk2='1'then

if d>=11 then

d:=0;

clk_12<='1';

else

d:=d+1;

clk_12<='0';

end if;

end if;

end if;

endprocess p4;

endcd;

----------------------------------------------4選1選擇器---------------------------------------

LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYxzq4_1 IS

PORT

(

rst:in std_logic;

inp:in integer range 0 to 3;

in1,in2,in3,in4 : In std_logic;

output2 :OUT std_logic

);

ENDxzq4_1;

ARCHITECTUREa OF xzq4_1 IS

BEGIN

PROCESS (rst,inp)

BEGIN

if(rst='1') then output2<='0';

else

case inp is

when 0=>output2<=in1;

when 1=>output2<=in2;

when 2=>output2<=in3;

when 3=>output2<=in4;

when others=>null;

end case;

end if;

END PROCESS;

ENDa;

-------------------------------------------彩燈控制模塊----------------------------------------

LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYcaideng IS

PORT

(

input :

IN INTEGER RANGE

0 TO 15;

rst:in std_logic;

output3 :OUT std_logic_vector(7 downto 0);

sm :out std_logic_vector(6 downto 0)

);

ENDcaideng;

ARCHITECTUREa OF caideng IS

BEGIN

PROCESS (input)

BEGIN

if rst='1' thenoutput3<="00000000";sm<="0000000";

else

case input is

when 0=>output3<="00111000";sm<="0000110";

when1=>output3<="00001111";sm<="0000110";

when2=>output3<="00111110";sm<="0000110";

when3=>output3<="01111111";sm<="0000110";

when4=>output3<="01011011";sm<="1011011";

when5=>output3<="01110110";sm<="1011011";

when6=>output3<="00001111";sm<="1011011";

when7=>output3<="01111111";sm<="1011011";

when8=>output3<="01101101";sm<="1001111";

when9=>output3<="00000111";sm<="1001111";

when10=>output3<="01110111";sm<="1001111";

when11=>output3<="01111011";sm<="1001111";

when12=>output3<="00111000";sm<="1100110";

when13=>output3<="00111111";sm<="1100110";

when14=>output3<="00111110";sm<="1100110";

when 15=>output3<="01111001";sm<="1100110";

when others=>null;

end case;

end if;

end process;

end a;

--------------------------------------------16進制計數器模塊-----------------------------------

LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYcounter_16 IS

PORT

(

clk,rst :IN std_logic;

count_out :

OUT INTEGER RANGE

0 TO 15);

ENDcounter_16;

ARCHITECTUREa OF counter_16 IS

BEGIN

PROCESS (rst,clk)

variable temp:integer range 0 to 16;

BEGIN

IF rst='1' THEN

temp:=0;

ELSIF (clk'event and clk='1') THEN

temp:=temp+1;

if(temp=15) then

temp:=0;

end if;

END IF;

count_out<=temp;

END PROCESS;

ENDa;

-------------------------------4進制計數器模塊----------------------------------

LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYcounter_4 IS

PORT

(

clk,rst :IN std_logic;

count_out :OUT integer range 0 to 3 );

ENDcounter_4;

ARCHITECTUREa OF counter_4 IS

BEGIN

PROCESS (rst,clk)

variable temp:integer range 0 to 16;

BEGIN

IF rst='1' THEN

temp:=0;

ELSIF (clk'event and clk='1') THEN

temp:=temp+1;

if(temp=4) then

temp:=0;

end if;

END IF;

count_out<=temp;

END PROCESS;

ENDa;

-------------------------------------------主程序----------------------------------

LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYproject IS

PORT (clk1,rst,clk2: IN std_logic;

Out1: OUT std_logic_vector(7 downto 0);

Out2 :out std_logic_vector(6 downto0);

Out3: OUT std_logic);

ENDproject;

ARCHITECTUREstruct OF project IS

COMPONENT counter_16 IS

PORT(clk,rst : IN std_logic;

count_out : OUT integer range 0 to 15 );

ENDCOMPONENT;

COMPONENT fenpinqi IS

PORT(clk2,rst : IN std_logic;

clk_12,clk_4,clk_16,clk_8 : OUT std_logic);

END COMPONENT ;

COMPONENT counter_4 IS

PORT(clk,rst :IN std_logic;

count_out :OUT integer range 0 to 3 );

ENDCOMPONENT;

COMPONENT xzq4_1 IS

PORT

(

rst:in std_logic;

inp:in integer range 0 to 3;

in1,in2,in3,in4 : In std_logic;

output2 :OUT std_logic

);

ENDCOMPONENT;

COMPONENT caideng IS

PORT

(

input: IN INTEGER RANGE 0 TO 15;

rst:in std_logic;

output3 :OUT std_logic_vector(7 downto 0);

sm :out std_logic_vector(6 downto 0)

);

ENDCOMPONENT;

SIGNALu: integer range 0 to 15;

SIGNALw: integer range 0 to 3;

SIGNALv1,v2,v3,v4: std_logic;

BEGIN

U1:counter_16PORT MAP(clk1,rst,u);

U2:fenpinqiPORT MAP(clk2,rst, v1,v2,v3,v4);

U3:counter_4PORT MAP(v3,rst,w);

U4:xzq4_1 PORT MAP(rst,w, v1,v2,v3,v4,out3);

U5:caidengPORT MAP(u,rst,out1,out2);

ENDstruct;

2、彩燈控制器仿真結果及數據分析

分析:如上圖,clk1控制的是彩燈模塊,clk2控制的是聲音模塊,當rst為高電平是輸出全為0,ck1每出現四個高電平,花型發生壹次變化,out2分別顯示1、2、3、4,out1顯示不同的花型,out3發出聲音,如圖脈沖數不同表示發出的聲音不同,但是聲音與花型相比有壹定的延遲。

六、硬件實現

1、引腳鎖定圖

2、硬件仿真圖

顯示第壹組花型之壹

顯示第二組花型之壹

顯示第三組花型之壹

顯示的第四組花型之壹

七、總體電路

整個系統就是各個分模塊組成來實現最後的彩燈控制功能,系統又兩個時鐘來控制壹個是控制16進制計數器即控制彩燈控制模塊來實現彩燈的不同輸出,另壹個時鐘為分頻器的輸入來進行分頻處理,最後用來控制揚聲器發出不同的音樂,為了使效果明顯盡量達到要求分頻處理的時鐘的頻率比實現彩燈控制的時鐘頻率要高。

將各個模塊連在壹起采用在課程中學到的元件例化,將各個模塊的引腳連在壹起,使之成為壹個整體。元件例化是VHDL設計實體構自上而下層次化設計的重要途徑。整體電路如圖五—1

圖七—1 整體電路圖

八、心得體會

1、在設計時遇到壹些主要問題如下:怎麽將各個模塊連在壹起、開始硬件仿真時總是出現錯誤,設計方案的選擇。最後我選擇了元件例化將各個模塊連在壹起,仿真時是因為短路帽接錯了,當時沒有註意,在方案的選擇時我們選了實現比較簡單的分模塊方案

2、這次的EDA課程設計我學到得東西很多明白了理論與實踐之間的差距,而且對DEA課程有了更深入的理解,尤其是知道了怎麽去應用所學的知識,怎麽去利用網絡實現自己的要求,具體體會如下:

(1)要想完成編程就要對DEA知識很熟悉,這樣才能加快編程的速度,另外在編程時壹定要小心,稍微有壹點粗心都會有很多的錯誤出現,在出現錯誤後要學會尋找錯誤原因如名稱前後不壹、數據類型不同、符號寫錯等等

(2)拿道題目後要註意分析,要學會總體把握,然後再壹壹壹細化、學會將復雜的問題簡單化,分析時壹定要有壹個明確的目標。

(3)要學會理論聯系實際,在程序導入到實驗箱後,居然不顯示結果,認真的檢查看看操作是否有錯誤、試驗箱中該短路的是否已用短路帽短路、又重新檢查了壹下程序,結果發現是短路帽接錯了,所以看似很簡單的操作自己操作起來可能會有很大的漏洞,所以親自動手是很重要的。

(4)當自己的只是有限時,要註意運用網絡等壹切資源,要學會知識的靈活運用在查閱的過程中學到了很多在書本所沒有學到的知識,通過查閱相關資料進壹步加深了對EDA的了解

總的來說,通過這次課程設計不僅鍛煉了我們的動手和動腦能力,也使我懂得了理論與實際相結合的重要性,只有理論知識是遠遠不夠的,要把所學的理論知識與實踐相結合起來,才能提高自己的實際動手能力和獨立思考的能力。還有最重要的壹點就是要有壹絲不茍的精神和端正認真的態度,遇到困難後要學會積極的面對。

3、在此設計中聲音會有壹定的延遲,可以考慮用花型輸出信號作為4選1的控制信號

九、參考書目:

趙偉軍,《Protel99se教程》,北京,人民郵電出版社,1996年

金西,《VHDL與復雜數字系統設計》,西安,西安電子科技大學出版社,2003

漢澤西,《EDA技術及其應用》,北京,北京航空航天大學出版社,2004

[4] 黃任,《VHDL入門.解惑.經典實例.經驗總結》,北京,北京航空航天大學出版社,2005

[5] 李洋,《EDA技術 使用教程》,北京,機械工業出版社,2009

[6] 網絡資源:EDA課程設計、EDA課程設計—彩燈控制器等

  • 上一篇:c語言程序設計實驗報告內容
  • 下一篇:單片機開發板怎麽用?
  • copyright 2024編程學習大全網