軟件:Quartus
語言:VHDL
代碼功能:
多路彩燈控制器
一、綜合訓(xùn)練內(nèi)容要求
設(shè)計(jì)一臺(tái)基于FPGA的多路彩燈控制器的設(shè)計(jì),要求如下:
1.彩燈從左到右逐次閃亮,然后從右到左逐次熄滅。
2.彩燈兩邊同時(shí)亮兩個(gè),然后逐次向中間點(diǎn)亮。
3.彩燈從左到右兩個(gè)兩個(gè)點(diǎn)亮,然后從右到左兩個(gè)兩個(gè)逐次點(diǎn)亮。
4.彩燈中間兩個(gè)點(diǎn)亮,然后同時(shí)向兩邊散開。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設(shè)計(jì)文檔:
1. 工程文件
2. 程序文件
代碼
3. 程序編譯
4. RTL圖
5. 仿真圖
整體仿真圖
花樣1,從左到右亮,再從右到左滅
花樣2,兩邊向中間點(diǎn)亮
花樣3,從左到右兩個(gè)兩個(gè)點(diǎn)亮,再從右到左點(diǎn)亮
花樣4,中間兩個(gè)點(diǎn)亮,再向兩邊散開
分頻模塊仿真圖
控制模塊仿真圖
部分代碼展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; --彩燈控制模塊 ENTITY?control?IS ???PORT?( ??????clk_1????:?IN?STD_LOGIC;--輸出時(shí)鐘1,對(duì)應(yīng)變化節(jié)奏1 ??clk_2:IN?STD_LOGIC;--輸出時(shí)鐘2,對(duì)應(yīng)變化節(jié)奏2 ??button:IN?STD_LOGIC;--節(jié)拍選擇按鍵,通過切換clk_1和clk_2控制節(jié)奏 ??????rst??????:?IN?STD_LOGIC;--高電平復(fù)位 ??????led??????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--輸出彩燈 ???); END?control; ARCHITECTURE?behave?OF?control?IS ???--中間信號(hào) ???SIGNAL?clk????:?STD_LOGIC; ???SIGNAL?cnt?:?integer?:=?0;--計(jì)數(shù)器 BEGIN ??? ???clk<=clk_1?when?(button='1')?else?clk_2;----節(jié)拍選擇按鍵,通過切換clk_1和clk_2控制節(jié)奏 ???PROCESS?(clk,?rst) ???BEGIN ??????IF?(rst?=?'1')?THEN--復(fù)位清零 ?????????cnt?<=?0; ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(cnt?=?35)?THEN ????????????cnt?<=?0;--運(yùn)行結(jié)束后循環(huán) ?????????ELSE ????????????cnt?<=?cnt?+?1;--計(jì)數(shù) ?????????END?IF; ??????END?IF; ???END?PROCESS; ???PROCESS?(clk,?rst) ???BEGIN ??????IF?(rst?=?'1')?THEN--復(fù)位清零 ?????????led?<=?"00000000"; ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????CASE?cnt?IS ????--花樣1,從左到右亮,再從右到左滅 ????????????WHEN??0?=>led?<=?"10000000"; ????????????WHEN??1?=>led?<=?"11000000"; WHEN??2?=>led?<=?"11100000"; WHEN??3?=>led?<=?"11110000"; WHEN??4?=>led?<=?"11111000"; WHEN??5?=>led?<=?"11111100"; WHEN??6?=>led?<=?"11111110"; WHEN??7?=>led?<=?"11111111"; WHEN??8?=>led?<=?"11111110"; WHEN??9?=>led?<=?"11111100"; WHEN?10?=>led?<=?"11111000"; WHEN?11?=>led?<=?"11110000"; WHEN?12?=>led?<=?"11100000"; WHEN?13?=>led?<=?"11000000"; WHEN?14?=>led?<=?"10000000"; --花樣2,兩邊向中間點(diǎn)亮 WHEN?15?=>led?<=?"10000001"; WHEN?16?=>led?<=?"11000011"; WHEN?17?=>led?<=?"11100111"; WHEN?18?=>led?<=?"11111111"; --花樣3,從左到右兩個(gè)兩個(gè)點(diǎn)亮,再從右到左點(diǎn)亮 WHEN?19?=>led?<=?"11000000"; WHEN?20?=>led?<=?"01100000"; WHEN?21?=>led?<=?"00110000"; WHEN?22?=>led?<=?"00011000"; WHEN?23?=>led?<=?"00001100"; WHEN?24?=>led?<=?"00000110"; WHEN?25?=>led?<=?"00000011"; WHEN?26?=>led?<=?"00000110"; WHEN?27?=>led?<=?"00001100"; WHEN?28?=>led?<=?"00011000"; WHEN?29?=>led?<=?"00110000"; WHEN?30?=>led?<=?"01100000"; WHEN?31?=>led?<=?"11000000"; --花樣4,中間兩個(gè)點(diǎn)亮,再向兩邊散開
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=551