軟件:Quartus
語(yǔ)言:VHDL
代碼功能:
洗衣機(jī)控制電路
設(shè)計(jì)要求:
1、控制洗衣機(jī)實(shí)現(xiàn)正轉(zhuǎn),待機(jī),反轉(zhuǎn)三種狀態(tài)并用三個(gè)LED顯示。
2、正轉(zhuǎn)60秒,待機(jī)5秒,反轉(zhuǎn)60秒,這個(gè)過(guò)程循環(huán)15次,直至循環(huán)次數(shù)為零時(shí),蜂鳴器發(fā)聲。
3、時(shí)間由數(shù)碼管顯示。
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; --洗衣機(jī)控制電路 ENTITY?wash?IS ???PORT?( ??????clk??????:?IN?STD_LOGIC;--時(shí)鐘1Hz ??????rst_p????:?IN?STD_LOGIC;--復(fù)位 ??????start_p??:?IN?STD_LOGIC;--開始 ??????led_Z????:?OUT?STD_LOGIC;--正轉(zhuǎn) ??????led_D????:?OUT?STD_LOGIC;--待機(jī) ??????led_F????:?OUT?STD_LOGIC;--反轉(zhuǎn) ??????beep?????:?OUT?STD_LOGIC;--蜂鳴器 ??????HEX0?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--數(shù)碼管-分鐘十位 ??????HEX1?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)?--數(shù)碼管-分鐘個(gè)位 ???); END?wash; ARCHITECTURE?RTL?OF?wash?IS --定義狀態(tài) ???TYPE??state_type?IS ???( ??????s_idle???, ??????s_start??, ??????s_ledZ???, ??????s_ledD???, ??????s_ledF???, ??????s_end???? ???);??? ???SIGNAL?state????:?state_type; ???SIGNAL?cnt_Z????:?STD_LOGIC_VECTOR(5?DOWNTO?0)?:=?"000000"; ???SIGNAL?cnt_D????:?STD_LOGIC_VECTOR(5?DOWNTO?0)?:=?"000000"; ???SIGNAL?cnt_F????:?STD_LOGIC_VECTOR(5?DOWNTO?0)?:=?"000000"; ???SIGNAL?time_cnt?:?STD_LOGIC_VECTOR(4?DOWNTO?0)?:=?"00000"?; ???SIGNAL?time_ten?:?STD_LOGIC_VECTOR(4?DOWNTO?0)?:=?"00000"?; ???SIGNAL?time_one?:?STD_LOGIC_VECTOR(4?DOWNTO?0)?:=?"00000"?; BEGIN ??? --正轉(zhuǎn)時(shí)間計(jì)數(shù) ???PROCESS?(clk,?rst_p) ???BEGIN ??????IF?(rst_p?=?'1')?THEN ?????????cnt_Z?<=?"000000";--復(fù)位 ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(state?=?s_ledZ)?THEN--正轉(zhuǎn)狀態(tài) ????????????cnt_Z?<=?cnt_Z?+?"000001";--計(jì)數(shù) ?????????ELSE ????????????cnt_Z?<=?"000000";--清零 ?????????END?IF; ??????END?IF; ???END?PROCESS; --待機(jī)時(shí)間計(jì)數(shù)??? ???PROCESS?(clk,?rst_p) ???BEGIN ??????IF?(rst_p?=?'1')?THEN ?????????cnt_D?<=?"000000";--復(fù)位 ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(state?=?s_ledD)?THEN--待機(jī)狀態(tài) ????????????cnt_D?<=?cnt_D?+?"000001";--計(jì)數(shù) ?????????ELSE ????????????cnt_D?<=?"000000";--清零 ?????????END?IF; ??????END?IF; ???END?PROCESS; --反轉(zhuǎn)時(shí)間計(jì)數(shù)??? ???PROCESS?(clk,?rst_p) ???BEGIN ??????IF?(rst_p?=?'1')?THEN ?????????cnt_F?<=?"000000";--復(fù)位 ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(state?=?s_ledF)?THEN--反轉(zhuǎn)狀態(tài) ????????????cnt_F?<=?cnt_F?+?"000001";--計(jì)數(shù) ?????????ELSE ????????????cnt_F?<=?"000000";--清零 ?????????END?IF; ??????END?IF; ???END?PROCESS; --狀態(tài)機(jī)控制模塊??? ???PROCESS?(clk,?rst_p) ???BEGIN ??????IF?(rst_p?=?'1')?THEN ?????????state?<=?s_idle;--復(fù)位 ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????CASE?state?IS ????????????WHEN?s_idle?=>--空閑狀態(tài) ???????????????IF?(start_p?=?'1')?THEN--開始按鍵 ??????????????????state?<=?s_start; ???????????????END?IF; ????????????WHEN?s_start?=>--開始狀態(tài) ???????????????state?<=?s_ledZ; ????????????WHEN?s_ledZ?=>--正轉(zhuǎn)狀態(tài) ???????????????IF?(time_cnt?=?"00000")?THEN--時(shí)間倒計(jì)時(shí)結(jié)束 ??????????????????state?<=?s_end; ???????????????ELSIF?(cnt_Z?=?"111100")?THEN--計(jì)數(shù)到60s ??????????????????state?<=?s_ledD; ???????????????END?IF; ????????????WHEN?s_ledD?=>--待機(jī)狀態(tài) ???????????????IF?(cnt_D?=?"000101")?THEN--計(jì)數(shù)到5s ??????????????????state?<=?s_ledF; ???????????????END?IF; ????????????WHEN?s_ledF?=>--反轉(zhuǎn)狀態(tài) ???????????????IF?(time_cnt?=?"00000")?THEN--時(shí)間倒計(jì)時(shí)結(jié)束 ??????????????????state?<=?s_end; ???????????????ELSIF?(cnt_F?=?"111100")?THEN--計(jì)數(shù)到60s ??????????????????state?<=?s_ledZ; ???????????????END?IF; ????????????WHEN?s_end?=>--結(jié)束狀態(tài) ???????????????IF?(start_p?=?'1')?THEN--開始按鍵 ??????????????????state?<=?s_start; ???????????????END?IF; ????????????WHEN?OTHERS?=> ?????????END?CASE; ??????END?IF; ???END?PROCESS;
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=558