軟件:Quartus
語言:VHDL
代碼功能:
流水彩燈控制器
1、具有8位彩燈。
2、按鍵切換花樣變化的速度。
3、可以切換彩燈樣式。
4、可以控制讓彩燈循環(huán)變化。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設(shè)計(jì)文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. 程序仿真
部分代碼展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; ENTITY?water_lamp_led?IS ???PORT?( ??????clk????????:?IN?STD_LOGIC;--64Hz ?????? ??????speed_en_out????????:?OUT?STD_LOGIC; ??????led_clk????????:?IN?STD_LOGIC; ?????? ??????key_speed??:?IN?STD_LOGIC;--切換速度,按下高電平 ?????? ??????key_style??:?IN?STD_LOGIC;--切換樣式 ?????? ??????key_cycle??:?IN?STD_LOGIC;--切換循環(huán)顯示 ?????? ??????led????????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--led?低亮 ???); END?water_lamp_led; ARCHITECTURE?ARCH?OF?water_lamp_led?IS ??? ???SIGNAL?led_inverse????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000"; ??? ???SIGNAL?key_speed_stable???:?STD_LOGIC?:=?'0'; ???SIGNAL?key_style_stable???:?STD_LOGIC?:=?'0'; ???SIGNAL?key_cycle_stable???:?STD_LOGIC?:=?'0'; ??? ???SIGNAL?key_speed_stable_0?:?STD_LOGIC?:=?'0'; ???SIGNAL?key_style_stable_0?:?STD_LOGIC?:=?'0'; ???SIGNAL?key_cycle_stable_0?:?STD_LOGIC?:=?'0'; ???SIGNAL?key_speed_stable_1?:?STD_LOGIC?:=?'0'; ???SIGNAL?key_style_stable_1?:?STD_LOGIC?:=?'0'; ???SIGNAL?key_cycle_stable_1?:?STD_LOGIC?:=?'0'; ??? ???SIGNAL?key_speed_pressed??:?STD_LOGIC; ???SIGNAL?key_style_pressed??:?STD_LOGIC; ???SIGNAL?key_cycle_pressed??:?STD_LOGIC; ??? ???SIGNAL?cycle_en???????????:?STD_LOGIC?:=?'0'; ??? ???SIGNAL?speed_en???????????:?STD_LOGIC?:=?'0'; ??? ???SIGNAL?style_num??????????:?STD_LOGIC_VECTOR(1?DOWNTO?0)?:=?"00"; ??? ???--SIGNAL?led_clk????????????:?STD_LOGIC; ??? ???SIGNAL?style_cnt_1????????:?STD_LOGIC_VECTOR(3?DOWNTO?0)?:=?"0000"; ???SIGNAL?style_cnt_2????????:?STD_LOGIC_VECTOR(2?DOWNTO?0)?:=?"000"; ???SIGNAL?style_cnt_3????????:?STD_LOGIC_VECTOR(2?DOWNTO?0)?:=?"000"; ??? ???SIGNAL?led_1??????????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000"; ???SIGNAL?led_2??????????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000"; ???SIGNAL?led_3??????????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000"; ??? ???SIGNAL?cycle_count????????:?STD_LOGIC_VECTOR(4?DOWNTO?0)?:=?"00000"; BEGIN ???led?<=?NOT(led_inverse);--led?低亮 ???speed_en_out<=speed_en; ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????key_speed_stable?<=?key_speed; ?????????key_style_stable?<=?key_style; ?????????key_cycle_stable?<=?key_cycle; ??????END?IF; ???END?PROCESS; ??? ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????key_speed_stable_0?<=?key_speed_stable; ?????????key_style_stable_0?<=?key_style_stable; ?????????key_cycle_stable_0?<=?key_cycle_stable; ??????END?IF; ???END?PROCESS; ??? ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????key_speed_stable_1?<=?key_speed_stable_0; ?????????key_style_stable_1?<=?key_style_stable_0; ?????????key_cycle_stable_1?<=?key_cycle_stable_0; ??????END?IF; ???END?PROCESS; ??? ???key_speed_pressed?<=?key_speed_stable_0?AND?NOT(key_speed_stable_1);--獲取按鍵上升沿 ???key_style_pressed?<=?key_style_stable_0?AND?NOT(key_style_stable_1);--獲取按鍵上升沿 ???key_cycle_pressed?<=?key_cycle_stable_0?AND?NOT(key_cycle_stable_1);--獲取按鍵上升沿 ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(key_cycle_pressed?=?'1')?THEN ????????????cycle_en?<=?NOT(cycle_en);--切換循環(huán)顯示 ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(key_speed_pressed?=?'1')?THEN ????????????speed_en?<=?NOT(speed_en);--切換速度 ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(key_style_pressed?=?'1')?THEN ????????????IF?(style_num?>=?"10")?THEN ???????????????style_num?<=?"00"; ????????????ELSE ???????????????style_num?<=?style_num?+?"01";--切換花型 ????????????END?IF; ?????????END?IF; ??????END?IF; ???END?PROCESS;? ?????????????? ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(key_style_pressed?=?'1')?THEN ????????????style_cnt_1?<=?"0000"; ????????????style_cnt_2?<=?"000"; ????????????style_cnt_3?<=?"000"; ?????????ELSIF?(led_clk?=?'1')?THEN--計(jì)數(shù),用于流水燈的變化 ????????????style_cnt_1?<=?style_cnt_1?+?"0001"; ????????????style_cnt_2?<=?style_cnt_2?+?"001"; ????????????style_cnt_3?<=?style_cnt_3?+?"001"; ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????CASE?style_cnt_1?IS--花型1控制 ????????????WHEN?"0000"?=> ???????????????led_1?<=?"10000000"; ????????????WHEN?"0001"?=> ???????????????led_1?<=?"11000000"; ????????????WHEN?"0010"?=> ???????????????led_1?<=?"11100000"; ????????????WHEN?"0011"?=> ???????????????led_1?<=?"11110000"; ????????????WHEN?"0100"?=> ???????????????led_1?<=?"11111000"; ????????????WHEN?"0101"?=> ???????????????led_1?<=?"11111100"; ????????????WHEN?"0110"?=> ???????????????led_1?<=?"11111110"; ????????????WHEN?"0111"?=> ???????????????led_1?<=?"11111111"; ????????????WHEN?"1000"?=> ???????????????led_1?<=?"11111110"; ????????????WHEN?"1001"?=> ???????????????led_1?<=?"11111100"; ????????????WHEN?"1010"?=> ???????????????led_1?<=?"11111000"; ????????????WHEN?"1011"?=> ???????????????led_1?<=?"11110000"; ????????????WHEN?"1100"?=> ???????????????led_1?<=?"11100000"; ????????????WHEN?"1101"?=> ???????????????led_1?<=?"11000000"; ????????????WHEN?"1110"?=> ???????????????led_1?<=?"10000000"; ????????????WHEN?"1111"?=> ???????????????led_1?<=?"00000000"; ????????????WHEN?OTHERS?=> ?????????END?CASE; ??????END?IF; ???END?PROCESS;
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=586
閱讀全文