軟件:Quartus
語言:VHDL
代碼功能:
多路彩燈控制器
一、綜合訓練內容要求
設計一臺基于FPGA的多路彩燈控制器的設計,要求如下:
1.彩燈從左到右逐次閃亮,然后從右到左逐次熄滅。
2.彩燈兩邊同時亮兩個,然后逐次向中間點亮。
3.彩燈從左到右兩個兩個點亮,然后從右到左兩個兩個逐次點亮。
4.彩燈中間兩個點亮,然后同時向兩邊散開。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設計文檔:
1. 工程文件
2. 程序文件
代碼
3. 程序編譯
4. RTL圖
5. 仿真圖
整體仿真圖
花樣1,從左到右亮,再從右到左滅
花樣2,兩邊向中間點亮
花樣3,從左到右兩個兩個點亮,再從右到左點亮
花樣4,中間兩個點亮,再向兩邊散開
分頻模塊仿真圖
控制模塊仿真圖
部分代碼展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; --彩燈控制模塊 ENTITY?control?IS ???PORT?( ??????clk_1????:?IN?STD_LOGIC;--輸出時鐘1,對應變化節(jié)奏1 ??clk_2:IN?STD_LOGIC;--輸出時鐘2,對應變化節(jié)奏2 ??button:IN?STD_LOGIC;--節(jié)拍選擇按鍵,通過切換clk_1和clk_2控制節(jié)奏 ??????rst??????:?IN?STD_LOGIC;--高電平復位 ??????led??????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--輸出彩燈 ???); END?control; ARCHITECTURE?behave?OF?control?IS ???--中間信號 ???SIGNAL?clk????:?STD_LOGIC; ???SIGNAL?cnt?:?integer?:=?0;--計數器 BEGIN ??? ???clk<=clk_1?when?(button='1')?else?clk_2;----節(jié)拍選擇按鍵,通過切換clk_1和clk_2控制節(jié)奏 ???PROCESS?(clk,?rst) ???BEGIN ??????IF?(rst?=?'1')?THEN--復位清零 ?????????cnt?<=?0; ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(cnt?=?35)?THEN ????????????cnt?<=?0;--運行結束后循環(huán) ?????????ELSE ????????????cnt?<=?cnt?+?1;--計數 ?????????END?IF; ??????END?IF; ???END?PROCESS; ???PROCESS?(clk,?rst) ???BEGIN ??????IF?(rst?=?'1')?THEN--復位清零 ?????????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,兩邊向中間點亮 WHEN?15?=>led?<=?"10000001"; WHEN?16?=>led?<=?"11000011"; WHEN?17?=>led?<=?"11100111"; WHEN?18?=>led?<=?"11111111"; --花樣3,從左到右兩個兩個點亮,再從右到左點亮 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,中間兩個點亮,再向兩邊散開
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=551
閱讀全文