• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于VHDL語言的洗衣機(jī)控制器設(shè)計(jì)VHDL代碼Quartus仿真

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

2-240116093342437.doc

共1個(gè)文件

名稱:基于VHDL語言的洗衣機(jī)控制器設(shè)計(jì)VHDL代碼Quartus仿真

軟件:Quartus

語言:VHDL

代碼功能:

基于VHDL語言的洗衣機(jī)控制器設(shè)計(jì)

設(shè)計(jì)要求:

設(shè)計(jì)一個(gè)洗衣機(jī)洗滌程序控制器,控制洗衣機(jī)的電動(dòng)機(jī)按下圖所示的規(guī)律運(yùn)轉(zhuǎn)。

QQ圖片20240116093211.png

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

演示視頻:

設(shè)計(jì)文檔:

洗衣機(jī)仿真

1.要求

2.工程文件

3.程序文件

4.程序編譯

5.VWF文件

6.仿真圖

部分代碼展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
???USE?ieee.std_logic_unsigned.all;
--洗衣機(jī)
ENTITY?washing_machine?IS
???PORT?(
??????clk_in?????:?IN?STD_LOGIC;--50Hz
??????start_key??:?IN?STD_LOGIC;--啟動(dòng)按鍵
??????led????????:?OUT?STD_LOGIC_VECTOR(2?DOWNTO?0);--正轉(zhuǎn),反轉(zhuǎn),暫停
??????end_led????:?OUT?STD_LOGIC;--洗衣結(jié)束信號(hào)
??????dig_led1????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--數(shù)碼管1
??????dig_led2???:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--數(shù)碼管2
???);
END?washing_machine;
ARCHITECTURE?RTL?OF?washing_machine?IS
???--定義中間信號(hào)
???SIGNAL?state???????????????:?STD_LOGIC_VECTOR(1?DOWNTO?0)?:=?"01";
???SIGNAL?washing_time????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000";--預(yù)置洗衣時(shí)間12分鐘
???SIGNAL?end_led_buf?????????:?STD_LOGIC?:=?'1';
???SIGNAL?second_cnt??????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000";
???SIGNAL?min_en??????????????:?STD_LOGIC?:=?'0';
???SIGNAL?min_en_buf??????????:?STD_LOGIC?:=?'0';
???SIGNAL?min_en_rise?????????:?STD_LOGIC;
???SIGNAL?second_en_1s????????:?STD_LOGIC?:=?'0';
???SIGNAL?second_en???????????:?STD_LOGIC;
???SIGNAL?second_div_cnt??????:?STD_LOGIC_VECTOR(9?DOWNTO?0)?:=?"0000000000";
???SIGNAL?shang???????????????:?STD_LOGIC_VECTOR(7?DOWNTO?0);
???SIGNAL?yushu???????????????:?STD_LOGIC_VECTOR(3?DOWNTO?0);
???SIGNAL?state_div???????????:?STD_LOGIC_VECTOR(1?DOWNTO?0)?:=?"00";
???SIGNAL?data_buf????????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000";
???SIGNAL?shang_buf???????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000";
???SIGNAL?yushu_buf???????????:?STD_LOGIC_VECTOR(3?DOWNTO?0)?:=?"0000";
???SIGNAL?duanxuan2???????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000";
???SIGNAL?duanxuan1???????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000";
BEGIN
???PROCESS?(clk_in)--狀態(tài)機(jī)
???BEGIN
??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN
?????????CASE?state?IS
????????????WHEN?"00"?=>--狀態(tài)00,等待狀態(tài),若有啟動(dòng)信號(hào)則到狀態(tài)01
???????????????IF?(start_key?=?'1')?THEN
??????????????????state?<=?"01";
???????????????ELSE
??????????????????state?<=?"00";
???????????????END?IF;
????????????WHEN?"01"?=>--狀態(tài)01,倒計(jì)時(shí)狀態(tài),直到計(jì)時(shí)到0,到狀態(tài)01
???????????????IF?(washing_time?>?"00000000")?THEN
??????????????????state?<=?"01";
???????????????ELSE
??????????????????state?<=?"10";
???????????????END?IF;
????????????WHEN?"10"?=>--結(jié)束狀態(tài),返回00
???????????????state?<=?"00";
????????????WHEN?OTHERS?=>
???????????????state?<=?"00";
?????????END?CASE;
??????END?IF;
???END?PROCESS;
???
???PROCESS?(clk_in)
???BEGIN
??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN
?????????IF?(state?=?"00")?THEN
????????????end_led_buf?<=?'1';--狀態(tài)00,提示洗衣結(jié)束
?????????ELSE
????????????end_led_buf?<=?'0';
?????????END?IF;
??????END?IF;
???END?PROCESS;
???
???end_led?<=?end_led_buf;
???
???PROCESS?(clk_in)--設(shè)輸入clk為50Hz,分頻到1Hz
???BEGIN
??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN
?????????IF?(second_div_cnt?>=?"0000110010")?THEN--50
????????????second_div_cnt?<=?"0000000000";
????????????second_en_1s?<=?'1';--1S脈沖信號(hào)
?????????ELSE
????????????second_div_cnt?<=?second_div_cnt?+?"0000000001";
????????????second_en_1s?<=?'0';
?????????END?IF;
??????END?IF;
???END?PROCESS;
???
???PROCESS?(clk_in)
???BEGIN
??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN
?????????IF?(second_cnt?=?"00111011")?THEN--秒計(jì)時(shí)到59,生產(chǎn)分計(jì)時(shí)脈沖
????????????min_en?<=?'1';
?????????ELSE
????????????min_en?<=?'0';
?????????END?IF;
??????END?IF;
???END?PROCESS;
???
???PROCESS?(clk_in)
???BEGIN
??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN
?????????min_en_buf?<=?min_en;
??????END?IF;
???END?PROCESS;
???
???min_en_rise?<=?min_en?AND?(NOT(min_en_buf));
???PROCESS?(clk_in)
???BEGIN
??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN
?????????IF?(start_key?=?'1')?THEN
????????????washing_time?<=?"00001100";--?預(yù)置計(jì)時(shí)時(shí)間12分鐘
?????????ELSIF?(min_en_rise?=?'1')?THEN--分鐘脈沖到了,分鐘時(shí)間減1
????????????IF?(washing_time?>?"00000000")?THEN
???????????????washing_time?<=?washing_time?-?"00000001";
????????????ELSE
???????????????washing_time?<=?"00000000";
????????????END?IF;
?????????ELSE
????????????washing_time?<=?washing_time;
?????????END?IF;
??????END?IF;
???END?PROCESS;
???
???second_en?<=?second_en_1s;
--75秒為一個(gè)周期
PROCESS?(clk_in)
???BEGIN
??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN
?????????IF?(start_key?=?'1')?THEN
????????????second_cnt?<=?"00000000";
?????????ELSIF?(second_en?=?'1')?THEN
????????????IF?(second_cnt?>=?"01001010")?THEN--秒計(jì)時(shí)到74返回0
???????????????second_cnt?<=?"00000000";
????????????ELSE
???????????????second_cnt?<=?second_cnt?+?"00000001";
????????????END?IF;
?????????ELSE
????????????second_cnt?<=?second_cnt;
?????????END?IF;
??????END?IF;
???END?PROCESS;

點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=573

  • 2-240116093342437.doc
    下載

相關(guān)推薦