Moore型和Mealy型状态机实例对比

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

下图为某一状态机对应的状态图,试用VHDL语言描述这一状态机。(18分)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY FSM1 IS

PORT ( clk,reset,in1 : IN STD_LOGIC;

out1 : OUT STD_LOGIC_VECTOR(3 downto 0));

END ;

ARCHITECTURE bhv OF FSM1 IS

TYPE state_type IS (s0, s1, s2, s3);

SIGNAL current_state,next_state: state_type;

BEGIN

REG:PROCESS(clk,reset)

BEGIN

IF reset ='1' THEN current_state <= s0; ELSIF clk='1' AND clk'EVENT THEN current_state <=next_state;

END IF;

END PROCESS;

COM1: PROCESS (current_state,in1)

BEGIN

case current_state is

WHEN s0 => IF in1='1'THEN next_state<=s1;ELSE next_state<=s0;END IF;

WHEN s1 => IF in1='0'THEN next_state<=s2;ELSE next_state<=s1;END IF;

WHEN s2 => IF in1='1'THEN next_state<=s3;ELSE next_state<=s2;END IF;

WHEN s3 => IF in1='0'THEN next_state<=s0;ELSE next_state<=s3;END IF;

end case;

END PROCESS;

COM2:PROCESS(current_state)

BEGIN

case current_state is

WHEN s0 => out1<="0000";

WHEN s1 => out1<="1001";

WHEN s2 => out1<="1100";

WHEN s3 => out1<="1111";

end case;

END PROCESS;

end bhv;

上面的是Moore型的,

下面的为Mealy型。

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY YH IS

PORT(CLK,RST,INPUTS:IN STD_LOGIC;

OUTPUTS:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END;

ARCHITECTURE ONE OF YH IS

TYPE STATES IS (S0,S1,S2,S3);

SIGNAL PST:STATES;

BEGIN

REGCOM:PROCESS(CLK,RST,PST,INPUTS)

BEGIN

IF RST='1' THEN PST<=S0;ELSIF RISING_EDGE(CLK) THEN

CASE PST IS

WHEN S0=> PST<=S1;

WHEN S1=> PST<=S2;

WHEN S2=> PST<=S3;

WHEN S3=> PST<=S0;

WHEN OTHERS => PST<=S0;

END CASE;

END IF;

END PROCESS;

COM:PROCESS(PST) BEGIN

CASE PST IS

WHEN S0=> IF INPUTS='1' THEN OUTPUTS<="1001" ;ELSE OUTPUTS<="0000"; END IF; WHEN S1=> IF INPUTS='0' THEN OUTPUTS<="1100" ;ELSE OUTPUTS<="1001"; END IF; WHEN S2=> IF INPUTS='1' THEN OUTPUTS<="1111" ;ELSE OUTPUTS<="1100"; END IF; WHEN S3=> IF INPUTS='0' THEN OUTPUTS<="0000" ;ELSE OUTPUTS<="1111"; END IF; WHEN OTHERS => OUTPUTS<="0000" ;

END CASE;

END PROCESS;

END;

相关文档
最新文档