软件:Quartus
语言:VHDL
代码功能:
洗衣机控制电路
设计要求:
1、控制洗衣机实现正转,待机,反转三种状态并用三个LED显示。
2、正转60秒,待机5秒,反转60秒,这个过程循环15次,直至循环次数为零时,蜂鸣器发声。
3、时间由数码管显示。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1.工程文件
2.程序文件
3.程序编译
4.仿真图
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; --洗衣机控制电路 ENTITY?wash?IS ???PORT?( ??????clk??????:?IN?STD_LOGIC;--时钟1Hz ??????rst_p????:?IN?STD_LOGIC;--复位 ??????start_p??:?IN?STD_LOGIC;--开始 ??????led_Z????:?OUT?STD_LOGIC;--正转 ??????led_D????:?OUT?STD_LOGIC;--待机 ??????led_F????:?OUT?STD_LOGIC;--反转 ??????beep?????:?OUT?STD_LOGIC;--蜂鸣器 ??????HEX0?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--数码管-分钟十位 ??????HEX1?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)?--数码管-分钟个位 ???); END?wash; ARCHITECTURE?RTL?OF?wash?IS --定义状态 ???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 ??? --正转时间计数 ???PROCESS?(clk,?rst_p) ???BEGIN ??????IF?(rst_p?=?'1')?THEN ?????????cnt_Z?<=?"000000";--复位 ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(state?=?s_ledZ)?THEN--正转状态 ????????????cnt_Z?<=?cnt_Z?+?"000001";--计数 ?????????ELSE ????????????cnt_Z?<=?"000000";--清零 ?????????END?IF; ??????END?IF; ???END?PROCESS; --待机时间计数??? ???PROCESS?(clk,?rst_p) ???BEGIN ??????IF?(rst_p?=?'1')?THEN ?????????cnt_D?<=?"000000";--复位 ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(state?=?s_ledD)?THEN--待机状态 ????????????cnt_D?<=?cnt_D?+?"000001";--计数 ?????????ELSE ????????????cnt_D?<=?"000000";--清零 ?????????END?IF; ??????END?IF; ???END?PROCESS; --反转时间计数??? ???PROCESS?(clk,?rst_p) ???BEGIN ??????IF?(rst_p?=?'1')?THEN ?????????cnt_F?<=?"000000";--复位 ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(state?=?s_ledF)?THEN--反转状态 ????????????cnt_F?<=?cnt_F?+?"000001";--计数 ?????????ELSE ????????????cnt_F?<=?"000000";--清零 ?????????END?IF; ??????END?IF; ???END?PROCESS; --状态机控制模块??? ???PROCESS?(clk,?rst_p) ???BEGIN ??????IF?(rst_p?=?'1')?THEN ?????????state?<=?s_idle;--复位 ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????CASE?state?IS ????????????WHEN?s_idle?=>--空闲状态 ???????????????IF?(start_p?=?'1')?THEN--开始按键 ??????????????????state?<=?s_start; ???????????????END?IF; ????????????WHEN?s_start?=>--开始状态 ???????????????state?<=?s_ledZ; ????????????WHEN?s_ledZ?=>--正转状态 ???????????????IF?(time_cnt?=?"00000")?THEN--时间倒计时结束 ??????????????????state?<=?s_end; ???????????????ELSIF?(cnt_Z?=?"111100")?THEN--计数到60s ??????????????????state?<=?s_ledD; ???????????????END?IF; ????????????WHEN?s_ledD?=>--待机状态 ???????????????IF?(cnt_D?=?"000101")?THEN--计数到5s ??????????????????state?<=?s_ledF; ???????????????END?IF; ????????????WHEN?s_ledF?=>--反转状态 ???????????????IF?(time_cnt?=?"00000")?THEN--时间倒计时结束 ??????????????????state?<=?s_end; ???????????????ELSIF?(cnt_F?=?"111100")?THEN--计数到60s ??????????????????state?<=?s_ledZ; ???????????????END?IF; ????????????WHEN?s_end?=>--结束状态 ???????????????IF?(start_p?=?'1')?THEN--开始按键 ??????????????????state?<=?s_start; ???????????????END?IF; ????????????WHEN?OTHERS?=> ?????????END?CASE; ??????END?IF; ???END?PROCESS;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=558
阅读全文
540