题目要求如下:
一、设计任务
洗衣机有注水、洗涤、排水、脱水和漂洗等功能,每个功能均有对应的显示灯,运行在某种工作状态时,其对应显示灯一直亮,直到此功能工作结束。其中,注水功能提供低,中,高三个水位等级供用户选择;洗涤功能有弱洗,普通,强洗三个洗涤等级可供选择。注水,洗涤,排水,脱水,漂洗状态的转变分别由各自的使能端控制。
系统有六个工作模式。其中,模式1=洗涤+漂洗+脱水,模式2=洗涤+漂洗,模式3=漂洗+脱水,模式4=洗涤,模式5=漂洗,模式6=脱水。
二、需求分析
(1)系统所有操作均有统一的时钟信号,统一的复位端。
(2)系统设有暂停端,当处于某一工作状态时,若按下暂停端,则停在此工作状态。
(3)在当前的运行状态时,有数码显示当前剩余时间;
(4)所有操作完成之后,有响铃提示。
三、设计方案
该系统由输入模块、控制模块和输出模块构成。输入模块完成洗涤时间的预置与编码,控制模块完成洗涤时间计时以及对电机运行状态的控制,输出模块完成电机运行状态的指示。
四、必须用状态机实现(为后续课程组原做准备),经典状态机代码如下:
1. Moore型状态机:
library ieee;
use ieee.std_logic_1164.all;
entity Moore is
port(
Reset:in std_logic;
Clock:in std_logic;
DIN:in std_logic;
DOUT:out std_logic_vector(2 downto 0)
);
end Moore;
architecture Mooremachine of Moore is
type State_type is(S0,S1,S2,S3);
signal PresenState:State_type;
signal NextnState:State_type;
begin
State_Reg:
process(Reset,Clock)
begin
if Reset='1'then
PresenState<=S0;
elsif rising_edge(Clock)then
PresenState<=NextnState;
end if;
end process;
Change_State:
process(PresenState,DIN)
begin
case PresenState is
when S0=>
if DIN='1'then
NextnState<=S1;
else
NextnState<=S0;
end if;
DOUT<="001";
when S1=>
if DIN='1'then
NextnState<=S2;
else
NextnState<=S1;
end if;
DOUT<="011";
when S2=>
if DIN='1'then
NextnState<=S3;
else
NextnState<=S2;
end if;
DOUT<="101";
when S3=>
if DIN='1'then
NextnState<=S0;
else
NextnState<=S1;
end if;
DOUT<="111";
end case;
end process;
end Mooremachine;
2. Mealy型状态机:
library ieee;
use ieee.std_logic_1164.all;
entity Mealy is
port(
Reset:in std_logic;
Clock:in std_logic;
DIN:in std_logic;
DOUT:out std_logic_vector(2 downto 0)
);
end Mealy;
architecture Statemachine of Mealy is
type State_type is(S0,S1,S2,S3);
signal State:State_type;
begin
Change_State:
process(State,DIN)
begin
if Reset='1'then
State<=S0;
elsif rising_edge(Clock)then
case State is
when S0=>
if DIN='1' then
State<=S1;
end if;
when S1=>
if