state_inputs : IN STD_LOGIC_VECTOR (0 TO 1);--ÍⲿÊäÈëÐźŠcomb_outputs :OUT INTEGER RANGE 0 TO 15 ); --¶ÔÍâÊä³öÐźŠEND s_machine;
ARCHITECTURE behv OF s_machine IS
TYPE FSM_ST IS (s0, s1, s2, s3); --Êý¾ÝÀàÐͶ¨Ò壬״̬·ûºÅ»¯ SIGNAL c_st, next_state: FSM_ST;--½«ÏÖ̬ºÍ´Î̬¶¨ÒåΪеÄÊý¾ÝÀàÐÍ BEGIN
REG: PROCESS (reset,clk) BEGIN
IF reset ='0' THEN c_st <= s0;--¼ì²âÒì²½¸´Î»ÐźŠELSIF clk='1' AND clk'EVENT THEN c_st <= next_state; END IF; END PROCESS;
COM1: PROCESS(c_st, state_Inputs)--Ö÷¿Ø×éºÏ½ø³Ì(ÏÖ̬ºÍÍⲿÊäÈëΪÃô¸ÐÐźÅ) BEGIN
CASE c_st IS
WHEN s0 => IF state_inputs = \ÊäÈëΪ¡°00¡±£¬ÔÚs0̤²½ ELSE next_state<=s1;END IF;--·ñÔò½øÈës1 WHEN s1 => IF state_inputs = \ÊäÈëΪ¡°00¡±£¬ÔÚs1̤²½ ELSE next_state<=s2;END IF; --·ñÔò½øÈës2 WHEN s2 => IF state_inputs = \ÊäÈëΪ¡°11¡±£¬½øÈës0 ELSE next_state<=s3;END IF; --·ñÔò½øÈës3 WHEN s3 => IF state_inputs = \ÊäÈëΪ¡°11¡±£¬ÔÚs3̤²½ ELSE next_state<=s0;END IF; --·ñÔò·µ»Øs0 END case; END PROCESS;
COM2: PROCESS(c_st, state_Inputs)--Ö÷¿Ø×éºÏ½ø³Ì(ÏÖ̬ºÍÍⲿÊäÈëΪÃô¸ÐÐźÅ) BEGIN
CASE c_st IS
WHEN s0 => comb_outputs<= 5; --ÏÖ̬Ϊs0ʱ£¬¶ÔÍâÊä³öÃüÁîÐźÅ5±àÂë WHEN s1 => comb_outputs<= 8; --ÏÖ̬Ϊs1ʱ£¬¶ÔÍâÊä³öÃüÁîÐźÅ8±àÂë WHEN s2 => comb_outputs<= 12; --ÏÖ̬Ϊs2ʱ£¬¶ÔÍâÊä³öÃüÁîÐźÅ12±àÂë WHEN s3 => comb_outputs<= 14; --ÏÖ̬Ϊs3ʱ£¬¶ÔÍâÊä³öÃüÁîÐźÅ14±àÂë END case; END PROCESS; END behv;
10-3 ¸ÄдÀý10-1£¬Óú궨ÒåÓï¾ä¶¨Òå״̬±äÁ¿£¬¸ø³ö·ÂÕæ²¨ÐÎ(º¬×´Ì¬±äÁ¿)£¬Óëͼ10-3×÷±È½Ï¡£×¢ÒâÉèÖÃÊʵ±µÄ״̬»úÔ¼ÊøÌõ¼þ¡£
--10-3 ¸ÄдÀý10-1£¬Óú궨ÒåÓï¾ä¶¨Òå״̬±äÁ¿£¬¸ø³ö·ÂÕæ²¨ÐÎ(º¬×´Ì¬±äÁ¿)£¬Óëͼ10-3×÷±È½Ï¡£×¢ÒâÉèÖÃÊʵ±µÄ״̬»úÔ¼ÊøÌõ¼þ¡£ LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY s_machine IS
PORT(clk,reset : IN STD_LOGIC;--Ö÷¿ØÊ±Ðò½ø³ÌʱÖÓÇý¶¯ºÍ¸´Î»ÐźŠstate_inputs : IN STD_LOGIC_VECTOR (0 TO 1);--ÍⲿÊäÈëÐźŠcomb_outputs :OUT INTEGER RANGE 0 TO 15 ); --¶ÔÍâÊä³öÐźŠEND s_machine;
ARCHITECTURE behv OF s_machine IS
-- TYPE FSM_ST IS (s0, s1, s2, s3); --Êý¾ÝÀàÐͶ¨Ò壬״̬·ûºÅ»¯ -- attribute syn_encoding
: string;
-- attribute syn_encoding of FSM_ST : type is \
SIGNAL c_st, next_state: STD_LOGIC_VECTOR(1 DOWNTO 0);--FSM_ST;--½«ÏÖ̬ºÍ´Î̬¶¨ÒåΪеÄÊý¾ÝÀàÐÍ
CONSTANT s0: STD_LOGIC_VECTOR(1 DOWNTO 0):=\״̬·ûºÅ±àÂ붨Òå CONSTANT s1: STD_LOGIC_VECTOR(1 DOWNTO 0):=\ CONSTANT s2: STD_LOGIC_VECTOR(1 DOWNTO 0):=\ CONSTANT s3: STD_LOGIC_VECTOR(1 DOWNTO 0):=\BEGIN
REG: PROCESS (reset,clk) BEGIN
IF reset ='0' THEN c_st <= s0;--¼ì²âÒì²½¸´Î»ÐźŠELSIF clk='1' AND clk'EVENT THEN c_st <= next_state; END IF; END PROCESS;
COM:PROCESS(c_st, state_Inputs)--Ö÷¿Ø×éºÏ½ø³Ì(ÏÖ̬ºÍÍⲿÊäÈëΪÃô¸ÐÐźÅ) BEGIN
CASE c_st IS
WHEN s0 => comb_outputs<= 5; --ÏÖ̬Ϊs0ʱ£¬¶ÔÍâÊä³öÃüÁîÐźÅ5±àÂë IF state_inputs = \ÊäÈëΪ¡°00¡±£¬ÔÚs0̤²½ ELSE next_state<=s1;END IF; --·ñÔò½øÈës1 WHEN s1 => comb_outputs<= 8; --ÏÖ̬Ϊs1ʱ£¬¶ÔÍâÊä³öÃüÁîÐźÅ8±àÂë IF state_inputs = \ÊäÈëΪ¡°00¡±£¬ÔÚs1̤²½ ELSE next_state<=s2;END IF; --·ñÔò½øÈës2 WHEN s2 => comb_outputs<= 12; --ÏÖ̬Ϊs2ʱ£¬¶ÔÍâÊä³öÃüÁîÐźÅ12±àÂë IF state_inputs = \ÊäÈëΪ¡°11¡±£¬½øÈës0 ELSE next_state<=s3;END IF; --·ñÔò½øÈës3 WHEN s3 => comb_outputs<= 14; --ÏÖ̬Ϊs3ʱ£¬¶ÔÍâÊä³öÃüÁîÐźÅ14±àÂë IF state_inputs = \ÊäÈëΪ¡°11¡±£¬ÔÚs3̤²½ ELSE next_state<=s0;END IF; --·ñÔò·µ»Øs0 END case; END PROCESS; END behv;
10-4 ΪÀý10-2µÄLOCKÐźÅÔö¼ÓkeepÊôÐÔ£¬ÔÙ¸ø³ö´ËÉè¼ÆµÄ·ÂÕæ²¨ÐÎ(×¢ÒâɾȥLOCK_T)¡£
--10-4 ΪÀý10-2(MooreÐÍADC0809²ÉÑù)µÄLOCKÐźÅÔö¼ÓkeepÊôÐÔ¡£
Ïà¹ØÍÆ¼ö£º